public void DeserializeFromJsonTest() { string json = "{\"name\":\"Milica\",\"age\":26,\"birthDate\":100000000000,\"addresses\":[{\"street\":\"Francuska 29\"},{\"street\":\"Dositejeva 64\"}],\"array\":[1,2,3,4,5],\"date\":\"2009-02-15\"}"; TestData deserializedTestData = jsonService.DeserializeFromJson <TestData>(json); AssertTestData(deserializedTestData); }
protected void StartMockServer <T>(T expectedRequest, int statusCodeToReturn, string responseToReturn) where T : RelyingPartyRequest { server = new HttpServer(MOCK_SERVICE_PORT, async context => { HttpListenerRequest request = context.Request; Encoding encode = Encoding.UTF8; try { using (StreamReader requestStream = new StreamReader(request.InputStream, encode)) { string requestData = requestStream.ReadToEnd(); string[] postParams = requestData.Split(POST_PARAMS_DELIMITER.ToCharArray()); string RequestParam = postParams[0].Split(KEY_VALUE_DELIMITER.ToCharArray(), 2)[1]; if (postParams.Length == 2) { string relyingPartyIdParam = postParams[1].Split(KEY_VALUE_DELIMITER.ToCharArray(), 2)[1]; Assert.AreEqual(RELYING_PARTY_ID, relyingPartyIdParam); } string jsonReceivedRequest = Encoding.UTF8.GetString(Convert.FromBase64String(RequestParam)); string jsonExpectedRequest = jsonService.SerializeToJson(expectedRequest); Assert.AreEqual(jsonExpectedRequest, jsonReceivedRequest); T receivedRequest = jsonService.DeserializeFromJson <T>(jsonReceivedRequest); Assert.AreEqual(expectedRequest, receivedRequest); } } catch (Exception ex) { Assert.Fail(ex.Message); } using (Stream responseStream = context.Response.OutputStream) { context.Response.StatusCode = statusCodeToReturn; context.Response.ContentLength64 = responseToReturn.Length; await responseStream.WriteAsync(Encoding.UTF8.GetBytes(responseToReturn), 0, responseToReturn.Length).ConfigureAwait(false); } }); server.Start(); }
public T Send <T>(Uri methodUrl, string requestTemplate, RelyingPartyRequest relyingPartyRequest, string relyingPartyId) where T : FrejaHttpResponse { HttpWebResponse response = null; HttpWebRequest request = null; Enums.HttpStatusCode httpStatusCode; string responseString = String.Empty; int numberOfTries = 0; while (numberOfTries < DEFAULT_NUMBER_OF_RETRIES) { try { request = (HttpWebRequest)HttpWebRequest.Create(methodUrl); ServicePoint currentServicePoint = request.ServicePoint; currentServicePoint.ConnectionLimit = MAXIMUM_NUMBER_OF_HTTP_CONNECTIONS; string jsonRequest = jsonService.SerializeToJson(relyingPartyRequest); string jsonRequestB64 = Base64Encode(jsonRequest); string requestBody = String.Format(requestTemplate, jsonRequestB64); if (relyingPartyId != null) { string relyingPartyIdRequest = String.Format(RequestTemplate.RELYING_PARTY_ID_TEMPLATE, relyingPartyId); requestBody += POST_PARAMS_DELIMITER + relyingPartyIdRequest; } request.ClientCertificates = new X509Certificate2Collection { clientCertificate }; ServicePointManager.ServerCertificateValidationCallback += (sender, certificate, chain, errors) => { return(errors == SslPolicyErrors.None && serverCertificate.GetCertHashString().Equals(certificate.GetCertHashString())); }; request.Method = HttpMethod.Post.ToString(); byte[] requestBytes = Encoding.UTF8.GetBytes(requestBody); request.ContentLength = requestBytes.Length; request.ContentType = CONTENT_TYPE; request.UserAgent = userAgentHeader; request.Timeout = connectionTimeout; request.ReadWriteTimeout = readTimeout; Stream requestStream = request.GetRequestStream(); requestStream.Write(requestBytes, 0, requestBytes.Length); requestStream.Close(); response = (HttpWebResponse)request.GetResponse(); responseString = ExtractResponseFromStream(response); return(jsonService.DeserializeFromJson <T>(responseString)); } catch (Exception e) { numberOfTries++; if (e is WebException webException) { Console.WriteLine(e.Message); HttpWebResponse exceptionResponse = webException.Response as HttpWebResponse; if (exceptionResponse != null) { httpStatusCode = (Enums.HttpStatusCode)((int)exceptionResponse.StatusCode); switch (httpStatusCode) { case Enums.HttpStatusCode.NO_CONTENT: return((T) new FrejaHttpResponse()); case Enums.HttpStatusCode.BAD_REQUEST: case Enums.HttpStatusCode.UNPROCESSABLE_ENTITY: FrejaHttpErrorResponse errorResponse = jsonService.DeserializeFromJson <FrejaHttpErrorResponse>(ExtractResponseFromStream(exceptionResponse)); throw new FrejaEidException(errorResponse.Message, errorResponse.Code); default: if (numberOfTries >= DEFAULT_NUMBER_OF_RETRIES) { throw new FrejaEidException(message: $"HTTP code {exceptionResponse.StatusCode}."); } break; } } } else { if (numberOfTries >= DEFAULT_NUMBER_OF_RETRIES) { throw new FrejaEidClientInternalException(message: "Failed to send HTTP request.", cause: e); } } } finally { if (response != null) { try { response.Close(); } catch (Exception ex) { throw new FrejaEidClientInternalException(message: "Failed to close HTTP connection.", cause: ex); } } } } throw new FrejaEidClientInternalException(message: "Failed to send HTTP request."); }