public RoamingNetworkInfo(Tracker_Id TrackerId, String IncomingURI, DateTime ExpiredAfter, RoamingNetwork_Id RoamingNetworkId, Byte priority, Byte weight, String hostname, IPPort port, TransportTypes transport, String uriPrefix, HTTPContentType contentType, ProtocolTypes protocolType, IEnumerable <String> PublicKeys) { this.TrackerId = TrackerId; this.IncomingURI = IncomingURI; this.ExpiredAfter = ExpiredAfter; this.RoamingNetworkId = RoamingNetworkId; this.priority = priority; this.weight = weight; this.hostname = hostname; this.port = port; this.transport = transport; this.uriPrefix = uriPrefix; this.contentType = contentType; this.protocolType = protocolType; this.publicKeys = PublicKeys; this.AnnouncedURI = String.Concat(transport, "://", hostname, ":", port, uriPrefix, "_", contentType); }
public void Test0() { var _rn = new RoamingNetwork(RoamingNetwork_Id.Parse("Test1")); var _op = _rn.CreateChargingStationOperator(ChargingStationOperator_Id.Parse("DE*822")); var _cp = _op.CreateChargingPool(); _cp.StatusAggregationDelegate = report => { var max = report.Max(v => v.Value); var max_n = report.Where(o => o.Value == max); return((ChargingPoolStatusTypes)max_n.OrderBy(o => o.Key).First().Key); }; _cp.OnStatusChanged += async(ts, EventTrackingId, pool, os, ns) => { Console.WriteLine("New pool state: " + ns.Value); }; var s1 = _cp.CreateChargingStation(ChargingStation_Id.Random(_op.Id)); s1.StatusAggregationDelegate = report => { var max = report.Max(v => v.Value); var max_n = report.Where(o => o.Value == max); return((ChargingStationStatusTypes)max_n.OrderBy(o => o.Key).First().Key); }; s1.OnStatusChanged += async(ts, EventTrackingId, sta, os, ns) => { Console.WriteLine("New station #1 state: " + ns.Value); }; var e1 = s1.CreateEVSE(EVSE_Id.Parse("DE*822*E1111*1")); var e2 = s1.CreateEVSE(EVSE_Id.Parse("DE*822*E1111*2")); var e3 = s1.CreateEVSE(EVSE_Id.Parse("DE*822*E1111*3")); var s2 = _cp.CreateChargingStation(ChargingStation_Id.Random(_op.Id)); s2.StatusAggregationDelegate = report => { var max = report.Max(v => v.Value); var max_n = report.Where(o => o.Value == max); return((ChargingStationStatusTypes)max_n.OrderBy(o => o.Key).First().Key); }; s2.OnStatusChanged += async(ts, EventTrackingId, sta, os, ns) => { Console.WriteLine("New station #2 state: " + ns.Value); }; var f1 = s2.CreateEVSE(EVSE_Id.Parse("DE*822*E2222*1")); var f2 = s2.CreateEVSE(EVSE_Id.Parse("DE*822*E2222*2")); var f3 = s2.CreateEVSE(EVSE_Id.Parse("DE*822*E2222*3")); e1.Status = EVSEStatusTypes.Available; e2.Status = EVSEStatusTypes.Available; e3.Status = EVSEStatusTypes.Available; f1.Status = EVSEStatusTypes.Available; f2.Status = EVSEStatusTypes.Available; f3.Status = EVSEStatusTypes.Available; e2.Status = EVSEStatusTypes.Charging; e3.Status = EVSEStatusTypes.Charging; }
public void SendOnForwardingChanged(DateTime Timestamp, ImporterForwardingInfo ForwardingInfo, RoamingNetwork_Id OldRN, RoamingNetwork_Id NewRN) { SaveForwardingDataToFile(); var OnForwardingChangedLocal = OnForwardingChanged; if (OnForwardingChangedLocal != null) { OnForwardingChangedLocal(Timestamp, this, ForwardingInfo, OldRN, NewRN); } }
public Tracker RemoveRoamingNetwork(RoamingNetwork_Id RoamingNetworkId) { #region Initial checks if (RoamingNetworkId == null) { throw new ArgumentNullException(nameof(RoamingNetworkId), "The given roaming network identification must not be null!"); } #endregion //RoamingNetwork _RoamingNetwork = null; //if (!_LocalRoamingNetworks.TryRemove(RoamingNetworkId, out _RoamingNetwork)) // throw new ArgumentException("The given roaming network could not be removed!"); return(this); }
public void GET_and_COUNT() { #region Verify GET /RNs var URI = HTTPPath.Parse("/RNs"); using (var HTTPTask = _HTTPClient.Execute(client => client.GET(URI, requestbuilder => { requestbuilder.Host = HTTPHostname.Localhost; requestbuilder.ContentType = HTTPContentType.JSON_UTF8; requestbuilder.Accept.Add(HTTPContentType.JSON_UTF8); }), RequestTimeout: Timeout, CancellationToken: new CancellationTokenSource().Token)) { HTTPTask.Wait(Timeout); using (var HTTPResult = HTTPTask.Result) { Assert.AreEqual(HTTPStatusCode.OK, HTTPResult.HTTPStatusCode, "'GET " + URI + "' failed! " + HTTPResult.HTTPBody.ToUTF8String()); Assert.AreEqual(new JArray().ToString(), JArray.Parse(HTTPResult.HTTPBody.ToUTF8String()).ToString(), "Invalid response for 'GET " + URI + "'!"); } } #endregion #region Verify COUNT /RNs using (var HTTPTask = _HTTPClient.Execute(client => client.COUNT(URI, requestbuilder => { requestbuilder.Host = HTTPHostname.Localhost; requestbuilder.ContentType = HTTPContentType.JSON_UTF8; requestbuilder.Accept.Add(HTTPContentType.JSON_UTF8); }), RequestTimeout: Timeout, CancellationToken: new CancellationTokenSource().Token)) { HTTPTask.Wait(Timeout); using (var HTTPResult = HTTPTask.Result) { Assert.AreEqual(HTTPStatusCode.OK, HTTPResult.HTTPStatusCode, "'GET " + URI + "' failed! " + HTTPResult.HTTPBody.ToUTF8String()); Assert.AreEqual(new JObject(new JProperty("count", 0)).ToString(), JObject.Parse(HTTPResult.HTTPBody.ToUTF8String()).ToString(), "Invalid response for 'COUNT " + URI + "'!"); } } #endregion var RN_1 = WWCPAPI.CreateNewRoamingNetwork(Id: RoamingNetwork_Id.Parse("TEST_RN1"), Name: I18NString.Create(Languages.deu, "Test Roaming Netz 1"). Add(Languages.eng, "Test roaming network 1")); var RN_2 = WWCPAPI.CreateNewRoamingNetwork(Id: RoamingNetwork_Id.Parse("TEST_RN2"), Name: I18NString.Create(Languages.deu, "Test Roaming Netz 2"). Add(Languages.eng, "Test roaming network 2")); var RN_3 = WWCPAPI.CreateNewRoamingNetwork(Id: RoamingNetwork_Id.Parse("TEST_RN3"), Name: I18NString.Create(Languages.deu, "Test Roaming Netz 3"). Add(Languages.eng, "Test roaming network 3")); var RN_4 = WWCPAPI.CreateNewRoamingNetwork(Id: RoamingNetwork_Id.Parse("TEST_RN4"), Name: I18NString.Create(Languages.deu, "Test Roaming Netz 4"). Add(Languages.eng, "Test roaming network 4")); #region Verify GET /RNs URI = HTTPPath.Parse("/RNs"); using (var HTTPTask = _HTTPClient.Execute(client => client.GET(URI, requestbuilder => { requestbuilder.Host = HTTPHostname.Localhost; requestbuilder.ContentType = HTTPContentType.JSON_UTF8; requestbuilder.Accept.Add(HTTPContentType.JSON_UTF8); }), RequestTimeout: Timeout, CancellationToken: new CancellationTokenSource().Token)) { HTTPTask.Wait(Timeout); using (var HTTPResult = HTTPTask.Result) { Assert.AreEqual(HTTPStatusCode.OK, HTTPResult.HTTPStatusCode, "'GET " + URI + "' failed! " + HTTPResult.HTTPBody.ToUTF8String()); Assert.AreEqual(new JArray( new JObject(new JProperty("RoamingNetworkId", "TEST_RN1"), new JProperty("description", new JObject(new JProperty("de", "Test Roaming Netz 1"), new JProperty("en", "Test roaming network 1")))), new JObject(new JProperty("RoamingNetworkId", "TEST_RN2"), new JProperty("description", new JObject(new JProperty("de", "Test Roaming Netz 2"), new JProperty("en", "Test roaming network 2")))), new JObject(new JProperty("RoamingNetworkId", "TEST_RN3"), new JProperty("description", new JObject(new JProperty("de", "Test Roaming Netz 3"), new JProperty("en", "Test roaming network 3")))), new JObject(new JProperty("RoamingNetworkId", "TEST_RN4"), new JProperty("description", new JObject(new JProperty("de", "Test Roaming Netz 4"), new JProperty("en", "Test roaming network 4")))) ).ToString(), JArray.Parse(HTTPResult.HTTPBody.ToUTF8String()).ToString(), "Invalid response for 'GET " + URI + "'!"); } } #endregion #region Verify COUNT /RNs using (var HTTPTask = _HTTPClient.Execute(client => client.COUNT(URI, requestbuilder => { requestbuilder.Host = HTTPHostname.Localhost; requestbuilder.ContentType = HTTPContentType.JSON_UTF8; requestbuilder.Accept.Add(HTTPContentType.JSON_UTF8); }), RequestTimeout: Timeout, CancellationToken: new CancellationTokenSource().Token)) { HTTPTask.Wait(Timeout); using (var HTTPResult = HTTPTask.Result) { Assert.AreEqual(HTTPStatusCode.OK, HTTPResult.HTTPStatusCode, "'GET " + URI + "' failed! " + HTTPResult.HTTPBody.ToUTF8String()); Assert.AreEqual(new JObject(new JProperty("count", 4)).ToString(), JObject.Parse(HTTPResult.HTTPBody.ToUTF8String()).ToString(), "Invalid response for 'COUNT " + URI + "'!"); } } #endregion #region Verify GET /RNs?skip=2 URI = HTTPPath.Parse("/RNs?skip=2"); using (var HTTPTask = _HTTPClient.Execute(client => client.GET(URI, requestbuilder => { requestbuilder.Host = HTTPHostname.Localhost; requestbuilder.ContentType = HTTPContentType.JSON_UTF8; requestbuilder.Accept.Add(HTTPContentType.JSON_UTF8); }), RequestTimeout: Timeout, CancellationToken: new CancellationTokenSource().Token)) { HTTPTask.Wait(Timeout); using (var HTTPResult = HTTPTask.Result) { Assert.AreEqual(HTTPStatusCode.OK, HTTPResult.HTTPStatusCode, "'GET " + URI + "' failed! " + HTTPResult.HTTPBody.ToUTF8String()); Assert.AreEqual(new JArray( new JObject(new JProperty("RoamingNetworkId", "TEST_RN3"), new JProperty("description", new JObject(new JProperty("de", "Test Roaming Netz 3"), new JProperty("en", "Test roaming network 3")))), new JObject(new JProperty("RoamingNetworkId", "TEST_RN4"), new JProperty("description", new JObject(new JProperty("de", "Test Roaming Netz 4"), new JProperty("en", "Test roaming network 4")))) ).ToString(), JArray.Parse(HTTPResult.HTTPBody.ToUTF8String()).ToString(), "Invalid response for 'GET " + URI + "'!"); } } #endregion #region Verify GET /RNs?take=2 URI = HTTPPath.Parse("/RNs?take=2"); using (var HTTPTask = _HTTPClient.Execute(client => client.GET(URI, requestbuilder => { requestbuilder.Host = HTTPHostname.Localhost; requestbuilder.ContentType = HTTPContentType.JSON_UTF8; requestbuilder.Accept.Add(HTTPContentType.JSON_UTF8); }), RequestTimeout: Timeout, CancellationToken: new CancellationTokenSource().Token)) { HTTPTask.Wait(Timeout); using (var HTTPResult = HTTPTask.Result) { Assert.AreEqual(HTTPStatusCode.OK, HTTPResult.HTTPStatusCode, "'GET " + URI + "' failed! " + HTTPResult.HTTPBody.ToUTF8String()); Assert.AreEqual(new JArray( new JObject(new JProperty("RoamingNetworkId", "TEST_RN1"), new JProperty("description", new JObject(new JProperty("de", "Test Roaming Netz 1"), new JProperty("en", "Test roaming network 1")))), new JObject(new JProperty("RoamingNetworkId", "TEST_RN2"), new JProperty("description", new JObject(new JProperty("de", "Test Roaming Netz 2"), new JProperty("en", "Test roaming network 2")))) ).ToString(), JArray.Parse(HTTPResult.HTTPBody.ToUTF8String()).ToString(), "Invalid response for 'GET " + URI + "'!"); } } #endregion #region Verify GET /RNs?skip=1&take=2 URI = HTTPPath.Parse("/RNs?skip=1&take=2"); using (var HTTPTask = _HTTPClient.Execute(client => client.GET(URI, requestbuilder => { requestbuilder.Host = HTTPHostname.Localhost; requestbuilder.ContentType = HTTPContentType.JSON_UTF8; requestbuilder.Accept.Add(HTTPContentType.JSON_UTF8); }), RequestTimeout: Timeout, CancellationToken: new CancellationTokenSource().Token)) { HTTPTask.Wait(Timeout); using (var HTTPResult = HTTPTask.Result) { Assert.AreEqual(HTTPStatusCode.OK, HTTPResult.HTTPStatusCode, "'GET " + URI + "' failed! " + HTTPResult.HTTPBody.ToUTF8String()); Assert.AreEqual(new JArray( new JObject(new JProperty("RoamingNetworkId", "TEST_RN2"), new JProperty("description", new JObject(new JProperty("de", "Test Roaming Netz 2"), new JProperty("en", "Test roaming network 2")))), new JObject(new JProperty("RoamingNetworkId", "TEST_RN3"), new JProperty("description", new JObject(new JProperty("de", "Test Roaming Netz 3"), new JProperty("en", "Test roaming network 3")))) ).ToString(), JArray.Parse(HTTPResult.HTTPBody.ToUTF8String()).ToString(), "Invalid response for 'GET " + URI + "'!"); } } #endregion #region Verify GET /RNs?skip=8 URI = HTTPPath.Parse("/RNs?skip=8"); using (var HTTPTask = _HTTPClient.Execute(client => client.GET(URI, requestbuilder => { requestbuilder.Host = HTTPHostname.Localhost; requestbuilder.ContentType = HTTPContentType.JSON_UTF8; requestbuilder.Accept.Add(HTTPContentType.JSON_UTF8); }), RequestTimeout: Timeout, CancellationToken: new CancellationTokenSource().Token)) { HTTPTask.Wait(Timeout); using (var HTTPResult = HTTPTask.Result) { Assert.AreEqual(HTTPStatusCode.OK, HTTPResult.HTTPStatusCode, "'GET " + URI + "' failed! " + HTTPResult.HTTPBody.ToUTF8String()); Assert.AreEqual(new JArray().ToString(), JArray.Parse(HTTPResult.HTTPBody.ToUTF8String()).ToString(), "Invalid response for 'GET " + URI + "'!"); } } #endregion #region Verify GET /RNs/TEST_RN1 URI = HTTPPath.Parse("/RNs/TEST_RN1"); using (var HTTPTask = _HTTPClient.Execute(client => client.GET(URI, requestbuilder => { requestbuilder.Host = HTTPHostname.Localhost; requestbuilder.ContentType = HTTPContentType.JSON_UTF8; requestbuilder.Accept.Add(HTTPContentType.JSON_UTF8); }), RequestTimeout: Timeout, CancellationToken: new CancellationTokenSource().Token)) { HTTPTask.Wait(Timeout); using (var HTTPResult = HTTPTask.Result) { Assert.AreEqual(HTTPStatusCode.OK, HTTPResult.HTTPStatusCode, "'GET " + URI + "' failed! " + HTTPResult.HTTPBody.ToUTF8String()); Assert.AreEqual(new JObject(new JProperty("RoamingNetworkId", "TEST_RN1"), new JProperty("description", new JObject(new JProperty("de", "Test Roaming Netz 1"), new JProperty("en", "Test roaming network 1"))) ).ToString(), JObject.Parse(HTTPResult.HTTPBody.ToUTF8String()).ToString(), "Invalid response for 'GET " + URI + "'!"); } } #endregion }
public WWCPImporter <T> LoadForwardingDataFromFile() { lock (ImporterRunLock) { var CurrentDirectory = Directory.GetCurrentDirectory(); var ConfigFilename = Directory.EnumerateFiles(CurrentDirectory). Select(file => file.Remove(0, CurrentDirectory.Length + 1)). Where(file => file.StartsWith(ForwardingFilenamePrefix, StringComparison.Ordinal)). OrderByDescending(file => file). FirstOrDefault(); var InputFile = ConfigFilename.IsNotNullOrEmpty() ? ConfigFilename : ForwardingFilenamePrefix + ".json"; if (File.Exists(InputFile)) { #region Try to read JSON from file... JObject JSONConfig; try { JSONConfig = JObject.Parse(File.ReadAllText(InputFile)); } catch (Exception) { throw new ApplicationException("Could not read '" + InputFile + "'!"); } #endregion try { foreach (var CurrentRoamingNetwork in JSONConfig) { var CurrentRoamingNetworkId = RoamingNetwork_Id.Parse(CurrentRoamingNetwork.Key); //var CurrentEVSEOperator = ChargingStationOperators.FirstOrDefault(evseoperator => evseoperator.RoamingNetwork.Id == CurrentRoamingNetworkId); //if (CurrentEVSEOperator == null) // throw new ApplicationException("Could not find any charging station operator for roaming network '" + CurrentRoamingNetworkId + "'!"); var CurrentRoamingNetworkJObject = CurrentRoamingNetwork.Value as JObject; if (CurrentRoamingNetworkJObject != null) { foreach (var ChargingStationGroups in CurrentRoamingNetworkJObject) { switch (ChargingStationGroups.Key.ToLower()) { #region ValidChargingStations case "validchargingstations": (ChargingStationGroups.Value as JObject).GetEnumerator(). ConsumeAll(). OrderBy(KVP => KVP.Key). ForEach(StationConfig => { ChargingStation_Id ChargingStationId; if (ChargingStation_Id.TryParse(StationConfig.Key, out ChargingStationId)) { var CurrentEVSEOperator = GetChargingStationOperators(ChargingStationId)?. FirstOrDefault(cso => cso != null && cso.RoamingNetwork.Id == CurrentRoamingNetworkId); if (CurrentEVSEOperator != null) { JToken JSONToken2; String PhoneNumber = null; var CurrentSettings = StationConfig.Value as JObject; #region PhoneNumber //if (CurrentSettings.TryGetValue("PhoneNumber", out JSONToken2)) //{ // PhoneNumber = JSONToken2.Value<String>(); //} #endregion #region AdminStatus var AdminStatus = ChargingStationAdminStatusTypes.Operational; if (CurrentSettings.TryGetValue("Adminstatus", out JSONToken2) && !Enum.TryParse(JSONToken2.Value <String>(), true, out AdminStatus)) { DebugX.Log("Invalid admin status '" + JSONToken2.Value <String>() + "' for charging station '" + ChargingStationId + "'!"); } #endregion #region Group if (CurrentSettings.TryGetValue("Group", out JSONToken2)) { var JV = JSONToken2 as JValue; var JA = JSONToken2 as JArray; var GroupList = JV != null ? new String[] { JV.Value <String>() } : JA != null ? JA.AsEnumerable().Select(v => v.Value <String>()) : null; if (GroupList != null) { foreach (var GroupId in GroupList) { CurrentEVSEOperator. GetOrCreateChargingStationGroup(GroupId, I18NString.Create(Languages.deu, GroupId)). Add(ChargingStationId); } } } #endregion if (!_AllForwardingInfos.ContainsKey(ChargingStationId)) { _AllForwardingInfos.Add(ChargingStationId, new ImporterForwardingInfo( OnChangedCallback: SendOnForwardingChanged, ChargingStationOperators: GetChargingStationOperators(ChargingStationId), StationId: ChargingStationId, StationName: "", StationServiceTag: "", StationAddress: null, //new Address(), StationGeoCoordinate: null, PhoneNumber: PhoneNumber, AdminStatus: AdminStatus, Created: DateTime.UtcNow, OutOfService: true, ForwardedToOperator: CurrentEVSEOperator) ); } } } }); break; #endregion } } } } } catch (Exception e) { DebugX.Log("LoadForwardingDataFromFile failed: " + e.Message); } } else { throw new ApplicationException("Config file '" + ForwardingFilenamePrefix + "' does not exist!"); } OnLoadForwardingDataFromFileFinished?.Invoke(DateTime.UtcNow, this, InputFile, (UInt64)_AllForwardingInfos.Count); } return(this); }
public void Test_ChargingPools() { var HTTPClient = new HTTPClient(IPv4Address.Localhost, RemotePort: IPPort.Parse(8000), DNSClient: HTTPAPI.DNSClient); var RN = OpenChargingCloudAPI.CreateNewRoamingNetwork(Id: RoamingNetwork_Id.Parse("TEST_RN1"), Name: I18NString.Create(Languages.deu, "Test Roaming Netz 1"). Add(Languages.eng, "Test roaming network 1")); var CPO = RN.CreateChargingStationOperator(ChargingStationOperatorId: ChargingStationOperator_Id.Parse("DE*GEF"), Name: I18NString.Create(Languages.deu, "GraphDefined"), Description: I18NString.Create(Languages.deu, "GraphDefined EVSE Operator"), Configurator: evseoperator => { evseoperator.AddDataLicense(DataLicense.OpenDatabaseLicense); }); #region Verify GET /RNs/TEST_RN1/ChargingPools var URI = HTTPPath.Parse("/RNs/TEST_RN1/ChargingPools"); using (var HTTPTask = HTTPClient.Execute(client => client.GET(URI, requestbuilder => { requestbuilder.Host = HTTPHostname.Localhost; requestbuilder.ContentType = HTTPContentType.JSON_UTF8; requestbuilder.Accept.Add(HTTPContentType.JSON_UTF8); }), RequestTimeout: Timeout, CancellationToken: new CancellationTokenSource().Token)) { HTTPTask.Wait(Timeout); using (var HTTPResult = HTTPTask.Result) { Assert.AreEqual(HTTPStatusCode.OK, HTTPResult.HTTPStatusCode, "'GET " + URI + "' failed!"); Assert.AreEqual(new JArray().ToString(), JArray.Parse(HTTPResult.HTTPBody.ToUTF8String()).ToString(), "Invalid response for 'GET " + URI + "'!"); } } #endregion #region Verify COUNT /RNs/TEST_RN1/ChargingPools using (var HTTPTask = HTTPClient.Execute(client => client.COUNT(URI, requestbuilder => { requestbuilder.Host = HTTPHostname.Localhost; requestbuilder.ContentType = HTTPContentType.JSON_UTF8; requestbuilder.Accept.Add(HTTPContentType.JSON_UTF8); }), RequestTimeout: Timeout, CancellationToken: new CancellationTokenSource().Token)) { HTTPTask.Wait(Timeout); using (var HTTPResult = HTTPTask.Result) { Assert.AreEqual(HTTPStatusCode.OK, HTTPResult.HTTPStatusCode, "'GET " + URI + "' failed!"); Assert.AreEqual(new JObject(new JProperty("count", 0)).ToString(), JObject.Parse(HTTPResult.HTTPBody.ToUTF8String()).ToString(), "Invalid response for 'COUNT " + URI + "'!"); } } #endregion var Pool_1 = CPO.CreateChargingPool(ChargingPool_Id.Parse(CPO.Id, "1111"), pool => { pool.Address = Address.Create(Country.Austria, "07741", I18NString.Create(Languages.deu, "Wien"), "Hofplatz", "17"); }); var Pool_2 = CPO.CreateChargingPool(ChargingPool_Id.Parse(CPO.Id, "2222"), pool => { pool.Address = Address.Create(Country.Germany, "07749", I18NString.Create(Languages.deu, "Jena"), "Biberweg", "18"); }); var Pool_3 = CPO.CreateChargingPool(ChargingPool_Id.Parse(CPO.Id, "3333"), pool => { pool.Address = Address.Create(Country.Belgium, "07758", I18NString.Create(Languages.bgn, "Brussels"), "Avenue", "19"); }); #region Verify GET /RNs/TEST_RN1/ChargingPools URI = HTTPPath.Parse("/RNs/TEST_RN1/ChargingPools"); using (var HTTPTask = HTTPClient.Execute(client => client.GET(URI, requestbuilder => { requestbuilder.Host = HTTPHostname.Localhost; requestbuilder.ContentType = HTTPContentType.JSON_UTF8; requestbuilder.Accept.Add(HTTPContentType.JSON_UTF8); }), RequestTimeout: Timeout, CancellationToken: new CancellationTokenSource().Token)) { HTTPTask.Wait(Timeout); using (var HTTPResult = HTTPTask.Result) { Assert.AreEqual(HTTPStatusCode.OK, HTTPResult.HTTPStatusCode, "'GET " + URI + "' failed!"); Assert.AreEqual(new JArray( new JObject(new JProperty("ChargingPoolId", "DE*GEF*P1111"), new JProperty("OperatorId", "DE*GEF"), new JProperty("Address", new JObject(new JProperty("houseNumber", "17"), new JProperty("street", "Hofplatz"), new JProperty("postalCode", "07741"), new JProperty("city", new JObject(new JProperty("de", "Wien")) ), new JProperty("country", new JObject(new JProperty("en", "Austria")) ) )), new JProperty("ChargingStations", new JArray()) ), new JObject(new JProperty("ChargingPoolId", "DE*GEF*P2222"), new JProperty("OperatorId", "DE*GEF"), new JProperty("Address", new JObject(new JProperty("houseNumber", "18"), new JProperty("street", "Biberweg"), new JProperty("postalCode", "07749"), new JProperty("city", new JObject(new JProperty("de", "Jena") )), new JProperty("country", new JObject( new JProperty("en", "Germany"), new JProperty("de", "Deutschland") ) ) )), new JProperty("ChargingStations", new JArray()) ), new JObject(new JProperty("ChargingPoolId", "DE*GEF*P3333"), new JProperty("OperatorId", "DE*GEF"), new JProperty("Address", new JObject(new JProperty("houseNumber", "19"), new JProperty("street", "Avenue"), new JProperty("postalCode", "07758"), new JProperty("city", new JObject(new JProperty("be", "Brussels")) ), new JProperty("country", new JObject(new JProperty("en", "Belgium")) ) )), new JProperty("ChargingStations", new JArray()) ) ).ToString(), JArray.Parse(HTTPResult.HTTPBody.ToUTF8String()).ToString(), "Invalid response for 'GET " + URI + "'!"); } } #endregion #region Verify COUNT /RNs/TEST_RN1/ChargingPools using (var HTTPTask = HTTPClient.Execute(client => client.COUNT(URI, requestbuilder => { requestbuilder.Host = HTTPHostname.Localhost; requestbuilder.ContentType = HTTPContentType.JSON_UTF8; requestbuilder.Accept.Add(HTTPContentType.JSON_UTF8); }), RequestTimeout: Timeout, CancellationToken: new CancellationTokenSource().Token)) { HTTPTask.Wait(Timeout); using (var HTTPResult = HTTPTask.Result) { Assert.AreEqual(HTTPStatusCode.OK, HTTPResult.HTTPStatusCode, "'GET " + URI + "' failed!"); Assert.AreEqual(new JObject(new JProperty("count", 3)).ToString(), JObject.Parse(HTTPResult.HTTPBody.ToUTF8String()).ToString(), "Invalid response for 'COUNT " + URI + "'!"); } } #endregion }
/// <summary> /// Parse the given HTTP request and return the roaming network /// for the given HTTP hostname and HTTP query parameter /// or an HTTP error response. /// </summary> /// <param name="HTTPRequest">A HTTP request.</param> /// <param name="HTTPServer">A HTTP server.</param> /// <param name="RoamingNetwork">The roaming network.</param> /// <param name="HTTPResponse">A HTTP error response.</param> /// <returns>True, when roaming network was found; false else.</returns> public static Boolean ParseRoamingNetwork(this HTTPRequest HTTPRequest, HTTPServer <RoamingNetworks, RoamingNetwork> HTTPServer, out RoamingNetwork RoamingNetwork, out HTTPResponse HTTPResponse) { if (HTTPServer == null) { Console.WriteLine("HTTPServer == null!"); } #region Initial checks if (HTTPRequest == null) { throw new ArgumentNullException("HTTPRequest", "The given HTTP request must not be null!"); } if (HTTPServer == null) { throw new ArgumentNullException("HTTPServer", "The given HTTP server must not be null!"); } #endregion RoamingNetwork_Id RoamingNetworkId; RoamingNetwork = null; HTTPResponse = null; if (HTTPRequest.ParsedURLParameters.Length < 1) { HTTPResponse = new HTTPResponse.Builder(HTTPRequest) { HTTPStatusCode = HTTPStatusCode.BadRequest, Server = HTTPServer.DefaultServerName, Date = DateTime.Now, }; return(false); } if (!RoamingNetwork_Id.TryParse(HTTPRequest.ParsedURLParameters[0], out RoamingNetworkId)) { HTTPResponse = new HTTPResponse.Builder(HTTPRequest) { HTTPStatusCode = HTTPStatusCode.BadRequest, Server = HTTPServer.DefaultServerName, Date = DateTime.Now, ContentType = HTTPContentType.JSON_UTF8, Content = @"{ ""description"": ""Invalid RoamingNetworkId!"" }".ToUTF8Bytes() }; return(false); } RoamingNetwork = HTTPServer. GetAllTenants(HTTPRequest.Host). FirstOrDefault(roamingnetwork => roamingnetwork.Id == RoamingNetworkId); if (RoamingNetwork == null) { HTTPResponse = new HTTPResponse.Builder(HTTPRequest) { HTTPStatusCode = HTTPStatusCode.NotFound, Server = HTTPServer.DefaultServerName, Date = DateTime.Now, ContentType = HTTPContentType.JSON_UTF8, Content = @"{ ""description"": ""Unknown RoamingNetworkId!"" }".ToUTF8Bytes() }; return(false); } return(true); }