示例#1
0
        public void AttemptToGetJsonFromRealButBadUri()
        {
            bool             gotResult = false;
            ManualResetEvent waiter    = new ManualResetEvent(false);

            IApiRequestHandler handler = new ApiRequestHandler(new ApiUriBuilder(), new GzipHandlerWp());

            handler.SendRequestAsync(
                new CountryResolverCommand("test", null)
            {
                BaseApiUri = "http://music.nokia.com/gb/en/badurl"
            },
                new MockMusicClientSettings("test", null, null),
                null,
                new JsonResponseCallback((Response <JObject> result) =>
            {
                Assert.IsNotNull(result, "Expected a result");
                Assert.IsNotNull(result.Error, "Expected an error");
                Assert.IsNull(result.Result, "Expected no result object");
                Assert.IsNotNull(result.StatusCode, "Expected a status code - this test can fail when you run tests with no internet connection!");
                Assert.AreEqual(HttpStatusCode.NotFound, result.StatusCode.Value, "Expected 404");
                gotResult = true;
                waiter.Set();
            }));

            // Wait for the response and parsing...
            waiter.WaitOne(5000);
            Assert.IsTrue(gotResult, "Expected a result flag");
        }
        public void TheEntityIsPlacedOnTheOutgoingStreamInJsonFormatDuringPost()
        {
            // arrange
            var factory = new TestWebRequestFactory();

            factory.RegisterResultForUri("http://localhost", "");
            var request = factory.Create(new Uri("http://localhost"));

            var stream = new MemoryStream();

            request.EndGetRequestStream(Arg.Any <IAsyncResult>()).Returns(c => stream);

            var handler = new ApiRequestHandler(new ApiConfiguration("<<clientid>>", "<<clientsecret>>", "<<redirecturl>>"), null);

            // act
            handler.Post(request, new UserContract()
            {
                Name = "Paul"
            }, (code, location) => { }, (uri, exception) => Assert.Fail(exception.Message));

            // assert
            var reader = new StreamReader(new MemoryStream(stream.ToArray()));
            var data   = reader.ReadToEnd().FromJson <UserContract>();

            Assert.AreEqual("Paul", data.Name);
        }
        public void AttemptToGetJsonFromRealButBadUri()
        {
            bool gotResult = false;
            ManualResetEvent waiter = new ManualResetEvent(false);

            IApiRequestHandler handler = new ApiRequestHandler(new ApiUriBuilder(), new GzipHandlerWp());
            handler.SendRequestAsync(
                new CountryResolverCommand("test", null) { BaseApiUri = "http://music.nokia.com/gb/en/badurl" },
                new MockMusicClientSettings("test", null),
                null,
                new JsonResponseCallback((Response<JObject> result) =>
                {
                    Assert.IsNotNull(result, "Expected a result");
                    Assert.IsNotNull(result.Error, "Expected an error");
                    Assert.IsNull(result.Result, "Expected no result object");
                    Assert.IsNotNull(result.StatusCode, "Expected a status code - this test can fail when you run tests with no internet connection!");
                    Assert.AreEqual(HttpStatusCode.NotFound, result.StatusCode.Value, "Expected 404");
                    gotResult = true;
                    waiter.Set();
                }));

            // Wait for the response and parsing...
            waiter.WaitOne(5000);
            Assert.IsTrue(gotResult, "Expected a result flag");
        }
        /// <exclude/>
        async protected Task MakeApiDeleteRequestAsync(Uri uri, ICompanyFileCredentials credentials, CancellationToken cancellationToken)
        {
            await RenewOAuthTokensAsync(cancellationToken);

            var api = new ApiRequestHandler(Configuration, credentials, _keyService.Maybe(_ => _.OAuthResponse));
            await api.DeleteAsync(this.WebRequestFactory.Create(uri), cancellationToken);
        }
示例#5
0
        public void RequestWithInvalidHeaderCausesException()
        {
            bool             gotResult = false;
            ManualResetEvent waiter    = new ManualResetEvent(false);

            IApiRequestHandler handler = new ApiRequestHandler(new TestHttpUriBuilder(new Uri("http://www.nokia.com")), new GzipHandlerWp());

            handler.SendRequestAsync(
                new ProductCommand(),
                new MockMusicClientSettings("test", null, null),
                null,
                new JsonResponseCallback((Response <JObject> result) =>
            {
                Assert.IsNotNull(result, "Expected a result");
                Assert.IsNotNull(result.Error, "Expected an error");
                Assert.IsNull(result.Result, "Expected no result object");
                Assert.IsNotNull(result.StatusCode, "Expected a status code - this test can fail when you run tests with no internet connection!");
                gotResult = true;
                waiter.Set();
            }),
                new Dictionary <string, string> {
                { "Referer", @"test" }
            });                                                             // this should cause the request to be rejected

            // Wait for the response and parsing...
            waiter.WaitOne(5000);
            Assert.IsTrue(gotResult, "Expected a result flag");
        }
示例#6
0
        public void TimeoutDuringEndRequestStreamGivesNoStatusCode()
        {
            bool             gotResult = false;
            ManualResetEvent waiter    = new ManualResetEvent(false);

            IApiRequestHandler handler = new ApiRequestHandler(new TestHttpUriBuilder(new Uri("http://localhost:8123/")), new GzipHandlerWp());

            handler.SendRequestAsync(
                new MockApiCommand(),
                new MockMusicClientSettings("test", null, null),
                null,
                new JsonResponseCallback((Response <JObject> result) =>
            {
                Assert.IsNotNull(result, "Expected a result");
                Assert.IsNotNull(result.Error, "Expected an error, status code:" + result.StatusCode);
                Assert.IsNull(result.Result, "Expected no result object");
                Assert.IsNull(result.StatusCode, "Expected no status code");
                gotResult = true;
                waiter.Set();
            }));

            // Wait for the response and parsing...
            waiter.WaitOne(5000);
            Assert.IsTrue(gotResult, "Expected a result flag");
        }
示例#7
0
        async public void DuringPostRequest_Async_ExpectedHeadersAreAttached()
        {
            // arrange
            var factory = new TestWebRequestFactory();

            factory.RegisterResultForUri("http://localhost", "");
            var request = factory.Create(new Uri("http://localhost"));

            var handler = new ApiRequestHandler(new ApiConfiguration("<<clientid>>", "<<clientsecret>>", "<<redirecturl>>"), new CompanyFileCredentials("user", "pass"));

            // act
            await handler.PostAsync(request, new UserContract()
            {
                Name = "Paul"
            });

            // assert
            Assert.AreEqual("POST", request.Method);
            Assert.IsTrue(request.Headers[HttpRequestHeader.Authorization].StartsWith("Bearer"));
            Assert.IsTrue(request.Headers[HttpRequestHeader.AcceptEncoding].Split(new[] { ',' }).Contains("gzip"));

            Assert.AreEqual("<<clientid>>", request.Headers["x-myobapi-key"]);
            Assert.AreEqual("v2", request.Headers["x-myobapi-version"]);
            Assert.AreEqual(Convert.ToBase64String(Encoding.UTF8.GetBytes("user:pass")), request.Headers["x-myobapi-cftoken"]);
        }
示例#8
0
        public void AttemptToGetStatusCodeFromRealPost()
        {
            bool             gotResult = false;
            ManualResetEvent waiter    = new ManualResetEvent(false);

            IApiRequestHandler handler = new ApiRequestHandler(new TestHttpUriBuilder(new Uri("http://www.nokia.com")), new GzipHandlerWp());

            handler.SendRequestAsync(
                new MockApiCommand(),
                new MockMusicClientSettings("test", null, null),
                null,
                new JsonResponseCallback((Response <JObject> result) =>
            {
                Assert.IsNotNull(result, "Expected a result");
                Assert.IsNotNull(result.Error, "Expected an error");
                Assert.IsNull(result.Result, "Expected no result object");
                Assert.IsNotNull(result.StatusCode, "Expected a status code - this test can fail when you run tests with no internet connection!");
                gotResult = true;
                waiter.Set();
            }));

            // Wait for the response and parsing...
            waiter.WaitOne(5000);
            Assert.IsTrue(gotResult, "Expected a result flag");
        }
示例#9
0
        public void TimeoutResponseGivesNoStatusCode()
        {
            bool             gotResult = false;
            ManualResetEvent waiter    = new ManualResetEvent(false);

            MusicClient.RequestTimeout = 0;
            IApiRequestHandler handler = new ApiRequestHandler(new TestHttpUriBuilder(new Uri("http://www.nokia.com")), new GzipHandlerWp());

            handler.SendRequestAsync(
                new ProductCommand(),
                new MockMusicClientSettings("test", null, null),
                null,
                new JsonResponseCallback((Response <JObject> result) =>
            {
                Assert.IsNotNull(result, "Expected a result");
                Assert.IsNotNull(result.Error, "Expected an error, status code:" + result.StatusCode);
                Assert.IsNull(result.Result, "Expected no result object");
                Assert.IsNull(result.StatusCode, "Expected no status code");
                gotResult = true;
                waiter.Set();
            }));

            // Wait for the response and parsing...
            waiter.WaitOne(5000);
            Assert.AreEqual(0, MusicClient.RequestTimeout, "Expected timeout to return same value that was set");
            Assert.IsTrue(gotResult, "Expected a result flag");
        }
示例#10
0
        public TulingRobotApiResponseBaseMessage Chat(TulingRobotApiRequestMessage requestMessage)
        {
            requestMessage.Key = GlobalSettingConfig.TulingRobotApiKey;

            return(ApiRequestHandler <TulingRobotApiResponseBaseMessage> .ProcessRequest(
                       GlobalSettingConfig.TulingRobotApiAddress, requestMessage));
        }
        public void TheLocationIsReturnedAfterASuccesfulPut()
        {
            // arrange
            var factory = new TestWebRequestFactory();

            factory.RegisterResultForUri("http://localhost", "", HttpStatusCode.OK, "http://localhost/ABC");
            var request = factory.Create(new Uri("http://localhost"));

            var stream = new MemoryStream();

            request.EndGetRequestStream(Arg.Any <IAsyncResult>()).Returns(c => stream);

            var    handler       = new ApiRequestHandler(new ApiConfiguration("<<clientid>>", "<<clientsecret>>", "<<redirecturl>>"), null);
            string savedLocation = null;

            // act
            handler.Put(request, new UserContract()
            {
                Name = "Paul"
            }, (code, location) =>
                        { savedLocation = location; }, (uri, exception) => Assert.Fail(exception.Message));

            // assert
            Assert.AreEqual("http://localhost/ABC", savedLocation);
        }
 public void RegisterAll_ShouldRegisterTypesWithDefaultName_WhenAssemblyHasValidControllers()
 {
     var handler = new ApiRequestHandler("test");
     var type = typeof(ValidController);
     handler.RegisterAll(Assembly.GetAssembly(type));
     Assert.AreEqual(type.FullName, handler.GetControllerType("Valid").FullName);
 }
        async public Task TheEntityIsPlacedOnTheOutgoingStreamInJsonFormatDuringPostAsync()
        {
            // arrange
            var factory = new TestWebRequestFactory();

            factory.RegisterResultForUri("http://localhost", "");
            var request = factory.Create(new Uri("http://localhost"));

            var stream = new MemoryStream();

#pragma warning disable 1998
            request.GetRequestStreamAsync().Returns(async c => (Stream)stream);
#pragma warning restore 1998

            var handler = new ApiRequestHandler(new ApiConfiguration("<<clientid>>", "<<clientsecret>>", "<<redirecturl>>"), null);

            // act
            await handler.PostAsync(request, new UserContract()
            {
                Name = "Paul"
            });

            // assert
            var reader = new StreamReader(new MemoryStream(stream.ToArray()));
            var data   = reader.ReadToEnd().FromJson <UserContract>();

            Assert.AreEqual("Paul", data.Name);
        }
 public void Register_ShouldRegisterType_WhenTypeIsValid()
 {
     var handler = new ApiRequestHandler("test");
     var type = typeof(ValidController);
     handler.Register("Test", type);
     Assert.AreEqual(type, handler.GetControllerType("Test"));
 }
        public void DuringGetRequestExpectedHeadersAreAttached(bool supplyCredentials, bool supplyOAuth)
        {
            // arrange
            var factory = new TestWebRequestFactory();

            factory.RegisterResultForUri("http://localhost", new UserContract()
            {
                Name = "David"
            }.ToJson());
            var request = factory.Create(new Uri("http://localhost"));

            var handler = new ApiRequestHandler(new ApiConfiguration("<<clientid>>", "<<clientsecret>>", "<<redirecturl>>"),
                                                supplyCredentials ? new CompanyFileCredentials("user", "pass") : null, supplyOAuth ? new OAuthTokens() : null);

            // act
            handler.Get <UserContract>(request, (code, response) => { }, (uri, exception) => Assert.Fail(exception.Message), null);

            // assert
            AssertStandardHeaders(supplyCredentials, supplyOAuth, request);

            var version   = typeof(ApiRequestHandler).Assembly.GetName().Version.ToString(3);
            var userAgent = request.Headers[HttpRequestHeader.UserAgent];

            Assert.IsTrue(userAgent.Contains(string.Format("MYOB-ARL-SDK/{0}", version)));
            Assert.IsNull(request.Headers[HttpRequestHeader.IfNoneMatch]);
        }
 /// <exclude/>
 protected void MakeApiGetRequestDelegate <T>(Uri uri, ICompanyFileCredentials credentials, Action <HttpStatusCode, T> onComplete, Action <Uri, Exception> onError) where T : class
 {
     WrapApiRequestWithOAuthRenew(response =>
     {
         var api = new ApiRequestHandler(Configuration, credentials, response);
         api.Get(WebRequestFactory.Create(uri), onComplete, onError);
     }, onError);
 }
示例#17
0
 protected void MakeApiDeleteRequestAsync(Uri uri, ICompanyFileCredentials credentials, Action <HttpStatusCode> onComplete, Action <Uri, Exception> onError)
 {
     WrapApiRequestWithOAuthRenew(response =>
     {
         var api = new ApiRequestHandler(Configuration, credentials, response);
         api.Delete(WebRequestFactory.Create(uri), onComplete, onError);
     }, onError);
 }
        /// <exclude/>
        async protected Task <T> MakeApiGetRequestAsync <T>(Uri uri, ICompanyFileCredentials credentials, CancellationToken cancellationToken) where T : class
        {
            await RenewOAuthTokensAsync(cancellationToken);

            var api  = new ApiRequestHandler(Configuration, credentials, GetOAuthResponse());
            var data = await api.GetAsync <T>(this.WebRequestFactory.Create(uri), cancellationToken);

            return(data.Item2);
        }
        /// <exclude/>
        async protected Task <string> MakeApiPutRequestAsync <T>(Uri uri, T entity, ICompanyFileCredentials credentials, CancellationToken cancellationToken) where T : class
        {
            await RenewOAuthTokensAsync(cancellationToken);

            var api = new ApiRequestHandler(Configuration, credentials, _keyService.Maybe(_ => _.OAuthResponse));
            var res = await api.PutAsync(WebRequestFactory.Create(uri), entity, cancellationToken);

            return(res);
        }
 /// <exclude/>
 protected void MakeApiPutRequestDelegate <TRequest, TResponse>(Uri uri, TRequest entity, ICompanyFileCredentials credentials, Action <HttpStatusCode, string, TResponse> onComplete, Action <Uri, Exception> onError)
     where TRequest : class
     where TResponse : class
 {
     WrapApiRequestWithOAuthRenew(response =>
     {
         var api = new ApiRequestHandler(Configuration, credentials, response);
         api.Put(WebRequestFactory.Create(uri), entity, onComplete, onError);
     }, onError);
 }
示例#21
0
        public async System.Threading.Tasks.Task <List <Game> > ToGameListAsync(ApiRequestHandler handler)
        {
            List <Game> games = new List <Game>();

            foreach (var id in Id)
            {
                games.Add(await handler.GetGameByIdAsync(id.Idv));
            }
            return(games);
        }
        public ActionResult Sms(string interfacename)
        {
            //Log.Info("接收到请求");
            StreamReader reader = new StreamReader(Request.InputStream, Encoding.UTF8);
            string       data   = reader.ReadToEnd();
            //Log.Info("interfacename=" + interfacename + "; data=" + data);
            ApiRequestHandler api = new ApiRequestHandler();
            var result            = api.Handler(interfacename, data);

            return(Json(result));
        }
示例#23
0
        public async Task ServerTimeOffsetIsSetForMulitpleRequests()
        {
            const int          EPSILON = 25; ////25 hours
            IApiRequestHandler handler = new ApiRequestHandler(new TestHttpUriBuilder(new Uri("http://www.nokia.com")));

            var command = new MockApiCommand(null, HttpMethod.Head);
            await handler.SendRequestAsync(command, new MockMusicClientSettings("test", null, null), null, command.HandleRawData, null, null);

            await handler.SendRequestAsync(command, new MockMusicClientSettings("test", null, null), null, command.HandleRawData, null, null);

            Assert.IsTrue(Math.Abs(handler.ServerTimeUtc.Subtract(DateTime.Now).TotalHours) <= EPSILON);
        }
 public void Register_ShouldThrowException_WhenTypeDoesNotHaveParameterlessConstructor()
 {
     try
     {
         var handler = new ApiRequestHandler("test");
         handler.Register("test", typeof(BadController));
     }
     catch (ApplicationException)
     {
         return;
     }
     Assert.Fail("ApplicationExcpetion was not thrown");
 }
 public void Register_ShouldThrowException_WhenTypeIsNotApiController()
 {
     try
     {
         var handler = new ApiRequestHandler("test");
         handler.Register("test", typeof(int));
     }
     catch (ApplicationException)
     {
         return;
     }
     Assert.Fail("ApplicationExcpetion was not thrown");
 }
        public void DuringGetRequest_IfNoneMatchHeaderAttached_IfSupplyETag()
        {
            // arrange
            var eTag = "123456789";
            var factory = new TestWebRequestFactory();
            factory.RegisterResultForUri("http://localhost", new UserContract() { Name = "David" }.ToJson());
            var request = factory.Create(new Uri("http://localhost"));

            var handler = new ApiRequestHandler(new ApiConfiguration("<<clientid>>", "<<clientsecret>>", "<<redirecturl>>"), new CompanyFileCredentials("user", "pass"));

            // act
            handler.Get<UserContract>(request, (code, response) => { }, (uri, exception) => Assert.Fail(exception.Message), eTag);

            // assert
            Assert.AreEqual(eTag, request.Headers[HttpRequestHeader.IfNoneMatch]);
        }
        async public void DuringGetRequest_Async_ExpectedHeadersAreAttached(bool supplyCredentials, bool supplyOAuth)
        {
            // arrange
            var factory = new TestWebRequestFactory();
            factory.RegisterResultForUri("http://localhost", new UserContract() { Name = "David" }.ToJson());
            var request = factory.Create(new Uri("http://localhost"));

            var handler = new ApiRequestHandler(new ApiConfiguration("<<clientid>>", "<<clientsecret>>", "<<redirecturl>>"),
                supplyCredentials ? new CompanyFileCredentials("user", "pass") : null, supplyOAuth ? new OAuthTokens() : null);

            // act
            var res = await handler.GetAsync<UserContract>(request, null);

            // assert
            AssertStandardHeaders(supplyCredentials, supplyOAuth, request);
            Assert.IsNull(request.Headers[HttpRequestHeader.IfNoneMatch]);
        }
示例#28
0
        public async Task ServerOffsetGotSet(int clientDateOffset, bool expectedResult)
        {
            const int          EPSILON = 25; ////25 hours
            IApiRequestHandler handler = new ApiRequestHandler(new TestHttpUriBuilder(new Uri("http://www.nokia.com")));

            var command = new MockApiCommand(null, HttpMethod.Head);

            await handler.SendRequestAsync(
                command,
                new MockMusicClientSettings("test", null, null),
                null,
                command.HandleRawData,
                null,
                null);

            Assert.AreEqual(expectedResult, Math.Abs(handler.ServerTimeUtc.Subtract(DateTime.Now.AddHours(clientDateOffset)).TotalHours) <= EPSILON);
        }
示例#29
0
        public async Task SslCertFailureResultsInSendFailureException()
        {
            // Arrange
            var mockHttpClientProxy = new MockHttpClientRequestProxy();

            mockHttpClientProxy.SetupException(new WebException("Message", WebExceptionStatus.SendFailure));
            IApiRequestHandler handler = new ApiRequestHandler(new TestHttpUriBuilder(new Uri("http://www.nokia.com")), null, mockHttpClientProxy);
            var rawMessage             = "This is the raw body of the message";
            var command = new MockApiCommand(rawMessage, HttpMethod.Head, true);

            // Act
            var response = await handler.SendRequestAsync(command, new MockMusicClientSettings("test", null, null), null, command.HandleRawData, null, null);

            // Assert
            Assert.IsFalse(response.Succeeded);
            Assert.IsTrue(response.Error is SendFailureException);
        }
示例#30
0
        public async Task AttemptToGetJsonFromBadHttpUrlToEnsureWebExceptionCaught()
        {
            IApiRequestHandler handler = new ApiRequestHandler(new TestHttpUriBuilder(new Uri("http://baduritesting.co")));

            var command = new ProductCommand();

            var result = await handler.SendRequestAsync(
                command,
                new MockMusicClientSettings("test", null, null),
                null,
                command.HandleRawData,
                null,
                null);

            Assert.IsNotNull(result, "Expected a result");
            Assert.IsNotNull(result.Error, "Expected an error");
            Assert.IsNull(result.Result, "Expected no result object");
        }
        public async Task AttemptToGetJsonFromBadHttpUrlToEnsureWebExceptionCaught()
        {
            IApiRequestHandler handler = new ApiRequestHandler(new TestHttpUriBuilder(new Uri("http://baduritesting.co")));

            var command = new ProductCommand();

            var result = await handler.SendRequestAsync(
                command,
                new MockMusicClientSettings("test", null, null),
                null,
                command.HandleRawData,
                null,
                null);

            Assert.IsNotNull(result, "Expected a result");
            Assert.IsNotNull(result.Error, "Expected an error");
            Assert.IsNull(result.Result, "Expected no result object");
        }
        async public Task DuringDeleteRequest_Async_ExpectedHeadersAreAttached(bool supplyCredentials, bool supplyOAuth)
        {
            // arrange
            var factory = new TestWebRequestFactory();

            factory.RegisterResultForUri("http://localhost", "");
            var request = factory.Create(new Uri("http://localhost"));

            var handler = new ApiRequestHandler(new ApiConfiguration("<<clientid>>", "<<clientsecret>>", "<<redirecturl>>"),
                                                supplyCredentials ? new CompanyFileCredentials("user", "pass") : null, supplyOAuth ? new OAuthTokens() : null);

            // act
            await handler.DeleteAsync(request);

            // assert
            Assert.AreEqual("DELETE", request.Method);
            AssertStandardHeaders(supplyCredentials, supplyOAuth, request);
        }
示例#33
0
        public async Task AttemptToGetStatusCodeFromRealPost()
        {
            IApiRequestHandler handler = new ApiRequestHandler(new TestHttpUriBuilder(new Uri("http://www.nokia.com")));

            var command = new MockApiCommand();

            var result = await handler.SendRequestAsync(
                command,
                new MockMusicClientSettings("test", null, null),
                null,
                command.HandleRawData,
                null,
                null);

            Assert.IsNotNull(result, "Expected a result");
            Assert.IsNotNull(result.Error, "Expected an error");
            Assert.IsNull(result.Result, "Expected no result object");
            Assert.IsNotNull(result.StatusCode, "Expected a status code - this test can fail when you run tests with no internet connection!");
        }
示例#34
0
        public async Task TimeoutDuringEndRequestStreamGivesNoStatusCode()
        {
            IApiRequestHandler handler = new ApiRequestHandler(new TestHttpUriBuilder(new Uri("http://localhost:8123/")));

            var command = new MockApiCommand();

            var result = await handler.SendRequestAsync(
                command,
                new MockMusicClientSettings("test", null, null),
                null,
                command.HandleRawData,
                null,
                null);

            Assert.IsNotNull(result, "Expected a result");
            Assert.IsNotNull(result.Error, "Expected an error, status code:" + result.StatusCode);
            Assert.IsNull(result.Result, "Expected no result object");
            Assert.IsNull(result.StatusCode, "Expected no status code");
        }
        public void PutAsyncRequest_Return_Response()
        {
            // arrange
            var expected = new ExpectedResult {
                UID = Guid.NewGuid()
            };
            var factory = new TestWebRequestFactory();

            factory.RegisterResultForUri("http://localhost", expected.ToJson());
            var request = factory.Create(new Uri("http://localhost"));

            var handler = new ApiRequestHandler(new ApiConfiguration("<<clientid>>", "<<clientsecret>>", "<<redirecturl>>"), new CompanyFileCredentials("user", "pass"));

            // act
            var receivedEntity = handler.PutAsync <Parameter, ExpectedResult>(request, new Parameter()).Result;

            // assert
            Assert.AreEqual(expected.UID, receivedEntity.UID);
        }
        async public Task DuringGetRequest_Async_IfNoneMatchHeaderAttached_IfSupplyETag()
        {
            // arrange
            var eTag    = "123456789";
            var factory = new TestWebRequestFactory();

            factory.RegisterResultForUri("http://localhost", new UserContract()
            {
                Name = "David"
            }.ToJson());
            var request = factory.Create(new Uri("http://localhost"));

            var handler = new ApiRequestHandler(new ApiConfiguration("<<clientid>>", "<<clientsecret>>", "<<redirecturl>>"), new CompanyFileCredentials("user", "pass"));

            // act
            var res = await handler.GetAsync <UserContract>(request, eTag);

            // assert
            Assert.AreEqual(eTag, request.Headers[HttpRequestHeader.IfNoneMatch]);
        }
        async public void DuringGetRequest_Async_ExpectedHeadersAreAttached()
        {
            // arrange
            var factory = new TestWebRequestFactory();
            factory.RegisterResultForUri("http://localhost", new UserContract() { Name = "David" }.ToJson());
            var request = factory.Create(new Uri("http://localhost"));

            var handler = new ApiRequestHandler(new ApiConfiguration("<<clientid>>", "<<clientsecret>>", "<<redirecturl>>"), new CompanyFileCredentials("user", "pass"));

            // act
            var res = await handler.GetAsync<UserContract>(request);

            // assert
            Assert.IsTrue(request.Headers[HttpRequestHeader.Authorization].StartsWith("Bearer"));
            Assert.IsTrue(request.Headers[HttpRequestHeader.AcceptEncoding].Split(new[] { ',' }).Contains("gzip"));

            Assert.AreEqual("<<clientid>>", request.Headers["x-myobapi-key"]);
            Assert.AreEqual("v2", request.Headers["x-myobapi-version"]);
            Assert.AreEqual(Convert.ToBase64String(Encoding.UTF8.GetBytes("user:pass")), request.Headers["x-myobapi-cftoken"]);
        }
        public async Task AttemptToGetStringFromRealUri()
        {
            IApiRequestHandler handler = new ApiRequestHandler(new ApiUriBuilder());

            var command = new MockMusicClientCommand() { BaseApiUri = "http://mixrad.io/gb/en/badurl" };

            var result = await handler.SendRequestAsync(
                command,
                new MockMusicClientSettings("test", "us", null),
                null,
                command.HandleRawData,
                null,
                null);

            Assert.IsNotNull(result, "Expected a result");
            Assert.IsNull(result.Error, "Expected no error");
            Assert.IsNotNull(result.Result, "Expected a result object");
            Assert.IsNotNull(result.StatusCode, "Expected a status code - this test can fail when you run tests with no internet connection!");
            Assert.AreEqual(HttpStatusCode.NotFound, result.StatusCode.Value, "Expected 404");
        }
示例#39
0
        public async Task NullResponseWithoutMixRadioHeaderRaisesNetworkLimitedException()
        {
            IApiRequestHandler handler = new ApiRequestHandler(new TestHttpUriBuilder(new Uri("http://www.nokia.com")));

            var command = new MockApiCommand(null, HttpMethod.Head);

            var result = await handler.SendRequestAsync(
                command,
                new MockMusicClientSettings("test", null, null),
                null,
                command.HandleRawData,
                null,
                null);

            Assert.IsNotNull(result, "Expected a result");
            Assert.IsNotNull(result.Error, "Expected an error");
            Assert.IsNull(result.Result, "Expected no result object");
            Assert.IsNotNull(result.StatusCode, "Expected a status code - this test can fail when you run tests with no internet connection!");
            Assert.IsInstanceOf <NetworkLimitedException>(result.Error, "Expected a NetworkLimitedException");
        }
示例#40
0
        public async Task RequestWithValidHeaderIsSuccessful()
        {
            IApiRequestHandler handler = new ApiRequestHandler(new TestHttpUriBuilder(new Uri("http://www.nokia.com")));

            var command = new ProductCommand();

            var result = await handler.SendRequestAsync(
                command,
                new MockMusicClientSettings("test", null, null),
                null,
                command.HandleRawData,
                new Dictionary <string, string> {
                { "Custom", @"test" }
            },
                null);

            Assert.IsNotNull(result, "Expected a result");
            Assert.IsNotNull(result.Error, "Expected an error");
            Assert.IsNull(result.Result, "Expected no result object");
            Assert.IsNotNull(result.StatusCode, "Expected a status code - this test can fail when you run tests with no internet connection!");
        }
        public void DuringDeleteRequestExpectedHeadersAreAttached()
        {
            // arrange
            var factory = new TestWebRequestFactory();
            factory.RegisterResultForUri("http://localhost", "");
            var request = factory.Create(new Uri("http://localhost"));

            var handler = new ApiRequestHandler(new ApiConfiguration("<<clientid>>", "<<clientsecret>>", "<<redirecturl>>"), new CompanyFileCredentials("user", "pass"));

            // act
            handler.Delete(request, (code) => { }, (uri, exception) => Assert.Fail(exception.Message));

            // assert
            Assert.AreEqual("DELETE", request.Method);
            Assert.IsTrue(request.Headers[HttpRequestHeader.Authorization].StartsWith("Bearer"));
            Assert.IsTrue(request.Headers[HttpRequestHeader.AcceptEncoding].Split(new[] { ',' }).Contains("gzip"));

            Assert.AreEqual("<<clientid>>", request.Headers["x-myobapi-key"]);
            Assert.AreEqual("v2", request.Headers["x-myobapi-version"]);
            Assert.AreEqual(Convert.ToBase64String(Encoding.UTF8.GetBytes("user:pass")), request.Headers["x-myobapi-cftoken"]);
        }
        public void DuringGetRequestExpectedHeadersAreAttached(bool supplyCredentials, bool supplyOAuth)
        {
            // arrange
            var factory = new TestWebRequestFactory();
            factory.RegisterResultForUri("http://localhost", new UserContract(){Name = "David"}.ToJson());
            var request = factory.Create(new Uri("http://localhost"));

            var handler = new ApiRequestHandler(new ApiConfiguration("<<clientid>>", "<<clientsecret>>", "<<redirecturl>>"),
                supplyCredentials ? new CompanyFileCredentials("user", "pass") : null, supplyOAuth ? new OAuthTokens() : null);

            // act
            handler.Get<UserContract>(request, (code, response) => { }, (uri, exception) => Assert.Fail(exception.Message), null);

            // assert
            AssertStandardHeaders(supplyCredentials, supplyOAuth, request);

            var version = typeof (ApiRequestHandler).Assembly.GetName().Version.ToString(3);
            var userAgent = request.Headers[HttpRequestHeader.UserAgent];
            Assert.IsTrue(userAgent.Contains(string.Format("MYOB-ARL-SDK/{0}", version)));
            Assert.IsNull(request.Headers[HttpRequestHeader.IfNoneMatch]);
        }
        public void AttemptToGetJsonFromBadHttpUrlToEnsureWebExceptionCaught()
        {
            bool gotResult = false;
            ManualResetEvent waiter = new ManualResetEvent(false);

            IApiRequestHandler handler = new ApiRequestHandler(new TestHttpUriBuilder(new Uri("http://baduritesting.co")), new GzipHandlerWp());
            handler.SendRequestAsync(
                new ProductCommand(),
                new MockMusicClientSettings("test", null),
                null,
                new JsonResponseCallback((Response<JObject> result) =>
                {
                    Assert.IsNotNull(result, "Expected a result");
                    Assert.IsNotNull(result.Error, "Expected an error");
                    Assert.IsNull(result.Result, "Expected no result object");
                    gotResult = true;
                    waiter.Set();
                }));

            // Wait for the response and parsing...
            waiter.WaitOne(5000);
            Assert.IsTrue(gotResult, "Expected a result flag");
        }
        public void GetJsonFromLocalFileToTestSuccessfulRequestAndBadJsonHandling()
        {
            bool gotResult = false;
            ManualResetEvent waiter = new ManualResetEvent(false);

            IApiRequestHandler handler = new ApiRequestHandler(new LocalFileUriBuilder("bad-result.json"), new GzipHandlerWp());
            handler.SendRequestAsync(
                new ProductCommand(),
                new MockMusicClientSettings("test", null, null),
                null,
                new JsonResponseCallback((Response<JObject> result) =>
                {
                    Assert.IsNotNull(result, "Expected a result");
                    Assert.IsNotNull(result.Error, "Expected an error");
                    Assert.IsNull(result.Result, "Expected no result object");
                    gotResult = true;
                    waiter.Set();
                }));

            // Wait for the response and parsing...
            waiter.WaitOne(1000);
            Assert.IsTrue(gotResult, "Expected a result flag");
        }
        public void TheLocationIsReturnedAfterASuccesfulPut()
        {
            // arrange
            var factory = new TestWebRequestFactory();
            factory.RegisterResultForUri("http://localhost", "", HttpStatusCode.OK, "http://localhost/ABC");
            var request = factory.Create(new Uri("http://localhost"));

            var stream = new MemoryStream();
            request.EndGetRequestStream(Arg.Any<IAsyncResult>()).Returns(c => stream);

            var handler = new ApiRequestHandler(new ApiConfiguration("<<clientid>>", "<<clientsecret>>", "<<redirecturl>>"), null);
            string savedLocation = null;

            // act
            handler.Put(request, new UserContract() { Name = "Paul" }, (code, location) =>
            { savedLocation = location; }, (uri, exception) => Assert.Fail(exception.Message));

            // assert
            Assert.AreEqual("http://localhost/ABC", savedLocation);
        }
        async public void TheEntityIsPlacedOnTheOutgoingStreamInJsonFormatDuringPostAsync()
        {
            // arrange
            var factory = new TestWebRequestFactory();
            factory.RegisterResultForUri("http://localhost", "");
            var request = factory.Create(new Uri("http://localhost"));

            var stream = new MemoryStream();
            request.GetRequestStreamAsync().Returns(async c => (Stream)stream);

            var handler = new ApiRequestHandler(new ApiConfiguration("<<clientid>>", "<<clientsecret>>", "<<redirecturl>>"), null);

            // act
            await handler.PostAsync(request, new UserContract() { Name = "Paul" });

            // assert
            var reader = new StreamReader(new MemoryStream(stream.ToArray()));
            var data = reader.ReadToEnd().FromJson<UserContract>();

            Assert.AreEqual("Paul", data.Name);
        }
        public void TheEntityIsPlacedOnTheOutgoingStreamInJsonFormatDuringPost()
        {
            // arrange
            var factory = new TestWebRequestFactory();
            factory.RegisterResultForUri("http://localhost", "");
            var request = factory.Create(new Uri("http://localhost"));

            var stream = new MemoryStream();
            request.EndGetRequestStream(Arg.Any<IAsyncResult>()).Returns(c => stream);

            var handler = new ApiRequestHandler(new ApiConfiguration("<<clientid>>", "<<clientsecret>>", "<<redirecturl>>"), null);

            // act
            handler.Post(request, new UserContract() { Name = "Paul" }, (code, location) => { }, (uri, exception) => Assert.Fail(exception.Message));

            // assert
            var reader = new StreamReader(new MemoryStream(stream.ToArray()));
            var data = reader.ReadToEnd().FromJson<UserContract>();

            Assert.AreEqual("Paul", data.Name);
        }
        public void PutAsyncRequest_Return_Response()
        {
            // arrange
            var expected = new ExpectedResult { UID = Guid.NewGuid() };
            var factory = new TestWebRequestFactory();
            factory.RegisterResultForUri("http://localhost", expected.ToJson());
            var request = factory.Create(new Uri("http://localhost"));

            var handler = new ApiRequestHandler(new ApiConfiguration("<<clientid>>", "<<clientsecret>>", "<<redirecturl>>"), new CompanyFileCredentials("user", "pass"));

            // act
            var receivedEntity = handler.PutAsync<Parameter, ExpectedResult>(request, new Parameter()).Result;

            // assert
            Assert.AreEqual(expected.UID, receivedEntity.UID);
        }
        async public void DuringPostRequest_Async_ExpectedHeadersAreAttached(bool supplyCredentials, bool supplyOAuth)
        {
            // arrange
            var factory = new TestWebRequestFactory();
            factory.RegisterResultForUri("http://localhost", "");
            var request = factory.Create(new Uri("http://localhost"));

            var handler = new ApiRequestHandler(new ApiConfiguration("<<clientid>>", "<<clientsecret>>", "<<redirecturl>>"),
                supplyCredentials ? new CompanyFileCredentials("user", "pass") : null, supplyOAuth ? new OAuthTokens() : null);

            // act
            await handler.PostAsync(request, new UserContract() { Name = "Paul" });

            // assert
            Assert.AreEqual("POST", request.Method);
            AssertStandardHeaders(supplyCredentials, supplyOAuth, request);
        }
        public void PostRequest_Return_Response()
        {
            // arrange
            var expected = new ExpectedResult { UID = Guid.NewGuid() };
            var factory = new TestWebRequestFactory();
            factory.RegisterResultForUri("http://localhost", expected.ToJson());
            var request = factory.Create(new Uri("http://localhost"));

            var handler = new ApiRequestHandler(new ApiConfiguration("<<clientid>>", "<<clientsecret>>", "<<redirecturl>>"), new CompanyFileCredentials("user", "pass"));

            // act
            ExpectedResult receivedEntity = null;
            handler.Post<Parameter, ExpectedResult>(request, new Parameter(), (code, location, response) => { receivedEntity = response; }, (uri, exception) => Assert.Fail(exception.Message));

            // assert
            Assert.AreEqual(expected.UID, receivedEntity.UID);
        }
        public void TimeoutDuringEndRequestStreamGivesNoStatusCode()
        {
            bool gotResult = false;
            ManualResetEvent waiter = new ManualResetEvent(false);

            IApiRequestHandler handler = new ApiRequestHandler(new TestHttpUriBuilder(new Uri("http://localhost:8123/")), new GzipHandlerWp());
            handler.SendRequestAsync(
                new MockApiCommand(),
                new MockMusicClientSettings("test", null),
                null,
                new JsonResponseCallback((Response<JObject> result) =>
                {
                    Assert.IsNotNull(result, "Expected a result");
                    Assert.IsNotNull(result.Error, "Expected an error, status code:" + result.StatusCode);
                    Assert.IsNull(result.Result, "Expected no result object");
                    Assert.IsNull(result.StatusCode, "Expected no status code");
                    gotResult = true;
                    waiter.Set();
                }));

            // Wait for the response and parsing...
            waiter.WaitOne(5000);
            Assert.IsTrue(gotResult, "Expected a result flag");
        }
 public void Ctor_ShouldSetPrefix()
 {
     var handler = new ApiRequestHandler("/test/");
     Assert.AreEqual("/test/", handler.Prefix);
 }
        public void AuthorizationHeaderNotAppliedWhenClientCertificateAttached()
        {
            // arrange
            var factory = new TestWebRequestFactory();
            factory.RegisterResultForUri("http://localhost", new UserContract() { Name = "David" }.ToJson());
            var request = factory.Create(new Uri("http://localhost"));
            (request as HttpWebRequest).ClientCertificates.Add(new X509Certificate());

            var handler = new ApiRequestHandler(new ApiConfiguration("<<clientid>>", "<<clientsecret>>", "<<redirecturl>>"), new CompanyFileCredentials("user", "pass"));

            // act
            handler.Get<UserContract>(request, (code, response) => { }, (uri, exception) => Assert.Fail(exception.Message), null);

            // assert
            Assert.IsNull(request.Headers[HttpRequestHeader.Authorization]);
        }
        public async Task SslCertFailureResultsInSendFailureException()
        {
            // Arrange
            var mockHttpClientProxy = new MockHttpClientRequestProxy();
            mockHttpClientProxy.SetupException(new WebException("Message", WebExceptionStatus.SendFailure));
            IApiRequestHandler handler = new ApiRequestHandler(new TestHttpUriBuilder(new Uri("http://www.nokia.com")), null, mockHttpClientProxy);
            var rawMessage = "This is the raw body of the message";
            var command = new MockApiCommand(rawMessage, HttpMethod.Head, true);

            // Act
            var response = await handler.SendRequestAsync(command, new MockMusicClientSettings("test", null, null), null, command.HandleRawData, null, null);

            // Assert
            Assert.IsFalse(response.Succeeded);
            Assert.IsTrue(response.Error is SendFailureException);
        }
        public void TimeoutResponseGivesNoStatusCode()
        {
            bool gotResult = false;
            ManualResetEvent waiter = new ManualResetEvent(false);

            MusicClient.RequestTimeout = 0;
            IApiRequestHandler handler = new ApiRequestHandler(new TestHttpUriBuilder(new Uri("http://www.nokia.com")), new GzipHandlerWp());
            handler.SendRequestAsync(
                new ProductCommand(),
                new MockMusicClientSettings("test", null),
                null,
                new JsonResponseCallback((Response<JObject> result) =>
                {
                    Assert.IsNotNull(result, "Expected a result");
                    Assert.IsNotNull(result.Error, "Expected an error, status code:" + result.StatusCode);
                    Assert.IsNull(result.Result, "Expected no result object");
                    Assert.IsNull(result.StatusCode, "Expected no status code");
                    gotResult = true;
                    waiter.Set();
                }));

            // Wait for the response and parsing...
            waiter.WaitOne(5000);
            Assert.AreEqual(0, MusicClient.RequestTimeout, "Expected timeout to return same value that was set");
            Assert.IsTrue(gotResult, "Expected a result flag");
        }
        public void AttemptToGetStatusCodeFromRealPost()
        {
            bool gotResult = false;
            ManualResetEvent waiter = new ManualResetEvent(false);

            IApiRequestHandler handler = new ApiRequestHandler(new TestHttpUriBuilder(new Uri("http://www.nokia.com")), new GzipHandlerWp());
            handler.SendRequestAsync(
                new MockApiCommand(),
                new MockMusicClientSettings("test", null),
                null,
                new JsonResponseCallback((Response<JObject> result) =>
                {
                    Assert.IsNotNull(result, "Expected a result");
                    Assert.IsNotNull(result.Error, "Expected an error");
                    Assert.IsNull(result.Result, "Expected no result object");
                    Assert.IsNotNull(result.StatusCode, "Expected a status code - this test can fail when you run tests with no internet connection!");
                    gotResult = true;
                    waiter.Set();
                }));

            // Wait for the response and parsing...
            waiter.WaitOne(5000);
            Assert.IsTrue(gotResult, "Expected a result flag");
        }
        async public void TheLocationIsReturnedAfterASuccesfulPutAsync()
        {
            // arrange
            var factory = new TestWebRequestFactory();
            factory.RegisterResultForUri("http://localhost", "", HttpStatusCode.OK, "http://localhost/ABC");
            var request = factory.Create(new Uri("http://localhost"));

            var stream = new MemoryStream();
            request.EndGetRequestStream(Arg.Any<IAsyncResult>()).Returns(c => stream);

            var handler = new ApiRequestHandler(new ApiConfiguration("<<clientid>>", "<<clientsecret>>", "<<redirecturl>>"), null);

            // act
            var res = await handler.PutAsync(request, new UserContract() { Name = "Paul" });

            // assert
            Assert.AreEqual("http://localhost/ABC", res);
        }
        public void RequestWithInvalidHeaderCausesException()
        {
            bool gotResult = false;
            ManualResetEvent waiter = new ManualResetEvent(false);

            IApiRequestHandler handler = new ApiRequestHandler(new TestHttpUriBuilder(new Uri("http://www.nokia.com")), new GzipHandlerWp());
            handler.SendRequestAsync(
                new ProductCommand(),
                new MockMusicClientSettings("test", null),
                null,
                new JsonResponseCallback((Response<JObject> result) =>
                {
                    Assert.IsNotNull(result, "Expected a result");
                    Assert.IsNotNull(result.Error, "Expected an error");
                    Assert.IsNull(result.Result, "Expected no result object");
                    Assert.IsNotNull(result.StatusCode, "Expected a status code - this test can fail when you run tests with no internet connection!");
                    gotResult = true;
                    waiter.Set();
                }),
                new Dictionary<string, string> { { "Referer", @"test" } }); // this should cause the request to be rejected

            // Wait for the response and parsing...
            waiter.WaitOne(5000);
            Assert.IsTrue(gotResult, "Expected a result flag");
        }
        public void DuringDeleteRequestExpectedHeadersAreAttached(bool supplyCredentials, bool supplyOAuth)
        {
            // arrange
            var factory = new TestWebRequestFactory();
            factory.RegisterResultForUri("http://localhost", "");
            var request = factory.Create(new Uri("http://localhost"));

            var handler = new ApiRequestHandler(new ApiConfiguration("<<clientid>>", "<<clientsecret>>", "<<redirecturl>>"), 
                supplyCredentials ? new CompanyFileCredentials("user", "pass"): null, supplyOAuth ? new OAuthTokens() : null);

            // act
            handler.Delete(request, (code) => { }, (uri, exception) => Assert.Fail(exception.Message));

            // assert
            Assert.AreEqual("DELETE", request.Method);
            AssertStandardHeaders(supplyCredentials, supplyOAuth, request);
        }
 public void Ctor_ShouldAppendSlashToPrefix()
 {
     var handler = new ApiRequestHandler("/test");
     Assert.AreEqual("/test/", handler.Prefix);
 }