public async Task OurOwnReleaseShouldBeCached()
        {
            var input     = @"https://github.com/akavache/Akavache/releases/download/3.2.0/Akavache.3.2.0.zip";
            var blobCache = new TestBlobCache();
            var fixture   = new CachingHttpScheduler(new HttpScheduler(), blobCache);

            fixture.Client = new HttpClient(new HttpClientHandler()
            {
                AllowAutoRedirect           = true,
                MaxRequestContentBufferSize = 1048576 * 64,
            });

            Assert.Equal(0, blobCache.GetAllKeys().First().Count());

            var result = await fixture.Schedule(new HttpRequestMessage(HttpMethod.Get, new Uri(input)), 5);

            Assert.True(result.Item1.IsSuccessStatusCode);
            Assert.Equal(8089690, result.Item2.Length);
            Assert.Equal(1, blobCache.GetAllKeys().First().Count());

            var result2 = await fixture.Schedule(new HttpRequestMessage(HttpMethod.Get, new Uri(input)), 3);

            Assert.True(result2.Item1.IsSuccessStatusCode);
            Assert.Equal(8089690, result2.Item2.Length);
        }
示例#2
0
        public void SuccessfulLoginIntegrationTest()
        {
            var kernel = new MoqMockingKernel();

            kernel.Bind <IWelcomeViewModel>().To <WelcomeViewModel>();

            var cache = new TestBlobCache(null, (IEnumerable <KeyValuePair <string, byte[]> >)null);

            kernel.Bind <ISecureBlobCache>().ToConstant(cache);

            var mock         = kernel.GetMock <IScreen>();
            var routingState = new RoutingState();

            mock.Setup(x => x.Router).Returns(routingState);

            var initialPage = kernel.Get <IRoutableViewModel>();

            kernel.Get <IScreen>().Router.NavigateAndReset.Execute(initialPage);

            var fixture = kernel.Get <IWelcomeViewModel>();

            kernel.Get <IScreen>().Router.Navigate.Execute(fixture);

            fixture.BaseUrl = IntegrationTestUrl.Current;
            fixture.Token   = IntegrationTestUrl.Token;
            fixture.OkButton.Execute(null);

            kernel.Get <IScreen>().Router.ViewModelObservable().Skip(1)
            .Timeout(TimeSpan.FromSeconds(10.0), RxApp.TaskpoolScheduler)
            .First();

            fixture.ErrorMessage.Should().BeNull();
            kernel.Get <IScreen>().Router.GetCurrentViewModel().Should().Be(initialPage);
        }
        IKernel createDefaultKernel()
        {
            var ret = new StandardKernel();

            ret.Bind <IScreen>().ToConstant(this);
            ret.Bind <ILoginMethods>().ToConstant(this);
            ret.Bind <IWelcomeViewModel>().To <WelcomeViewModel>();
            ret.Bind <IPlayViewModel>().To <PlayViewModel>();
            ret.Bind <ISearchViewModel>().To <SearchViewModel>();
            ret.Bind <IViewForViewModel <WelcomeViewModel> >().To <WelcomeView>();
            ret.Bind <IViewForViewModel <PlayViewModel> >().To <PlayView>();
            ret.Bind <IViewForViewModel <SearchViewModel> >().To <SearchView>();
            ret.Bind <IViewForViewModel <SongTileViewModel> >().To <SongTileView>().InTransientScope();

#if DEBUG
            var testBlobCache = new TestBlobCache();
            ret.Bind <IBlobCache>().ToConstant(testBlobCache).Named("LocalMachine");
            ret.Bind <IBlobCache>().ToConstant(testBlobCache).Named("UserAccount");
            ret.Bind <ISecureBlobCache>().ToConstant(testBlobCache);
#else
            ret.Bind <ISecureBlobCache>().ToConstant(BlobCache.Secure);
            ret.Bind <IBlobCache>().ToConstant(BlobCache.LocalMachine).Named("LocalMachine");
            ret.Bind <IBlobCache>().ToConstant(BlobCache.UserAccount).Named("UserAccount");
#endif

            return(ret);
        }
示例#4
0
        public void SucceededLoginSetsTheCurrentAuthenticatedClient()
        {
            var kernel = new MoqMockingKernel();

            kernel.Bind <IWelcomeViewModel>().To <WelcomeViewModel>();

            string expectedUser = "******";
            string expectedUrl  = "http://bar";

            kernel.Bind <Func <string, string, IObservable <Unit> > >()
            .ToConstant <Func <string, string, IObservable <Unit> > >((url, user) => Observable.Return <Unit>(Unit.Default))
            .Named("connectToServer");

            var mock         = kernel.GetMock <IScreen>();
            var routingState = new RoutingState();

            mock.Setup(x => x.Router).Returns(routingState);

            kernel.Bind <IScreen>().ToConstant(mock.Object);

            var initialPage = kernel.Get <IRoutableViewModel>();

            kernel.Get <IScreen>().Router.NavigateAndReset.Execute(initialPage);

            var cache = new TestBlobCache(null, (IEnumerable <KeyValuePair <string, byte[]> >)null);

            kernel.Bind <ISecureBlobCache>().ToConstant(cache);

            var fixture = kernel.Get <IWelcomeViewModel>();

            kernel.Get <IScreen>().Router.Navigate.Execute(fixture);

            bool errorThrown = false;

            using (UserError.OverrideHandlersForTesting(ex => { errorThrown = true; return(Observable.Return(RecoveryOptionResult.CancelOperation)); })) {
                fixture.Token   = expectedUser;
                fixture.BaseUrl = expectedUrl;
                fixture.OkButton.Execute(null);
            }

            errorThrown.Should().BeFalse();

            kernel.Get <IScreen>().Router.GetCurrentViewModel().Should().Be(initialPage);
            kernel.GetMock <ILoginMethods>().Verify(x => x.SaveCredentials(expectedUrl, expectedUser), Times.Once());
        }
        public async Task PostsShouldntBeCached()
        {
            var input = @"https://httpbin.org/post";
            var blobCache = new TestBlobCache();
            var fixture = new CachingHttpScheduler(new HttpScheduler(), blobCache);

            fixture.Client = new HttpClient(new HttpClientHandler() {
                AllowAutoRedirect = true,
                MaxRequestContentBufferSize = 1048576 * 64,
            });

            Assert.Equal(0, blobCache.GetAllKeys().First().Count());

            var result = await fixture.Schedule(new HttpRequestMessage(HttpMethod.Post, new Uri(input)), 5);

            Assert.Equal(0, blobCache.GetAllKeys().First().Count());
            Assert.True(result.Item1.IsSuccessStatusCode);
        }
        public async Task PostsShouldntBeCached()
        {
            var input     = @"https://httpbin.org/post";
            var blobCache = new TestBlobCache();
            var fixture   = new CachingHttpScheduler(new HttpScheduler(), blobCache);

            fixture.Client = new HttpClient(new HttpClientHandler()
            {
                AllowAutoRedirect           = true,
                MaxRequestContentBufferSize = 1048576 * 64,
            });

            Assert.Equal(0, blobCache.GetAllKeys().First().Count());

            var result = await fixture.Schedule(new HttpRequestMessage(HttpMethod.Post, new Uri(input)), 5);

            Assert.Equal(0, blobCache.GetAllKeys().First().Count());
            Assert.True(result.Item1.IsSuccessStatusCode);
        }
        public async Task PostsWithETagsShouldBeCached()
        {
            var input        = @"https://httpbin.org/post";
            var blobCache    = new TestBlobCache();
            var fixture      = new CachingHttpScheduler(new HttpScheduler(), blobCache);
            var requestCount = 0;

            fixture.Client = new HttpClient(new TestHttpMessageHandler(_ => {
                var response = IntegrationTestHelper.GetResponse("Http", "fixtures", "ResponseWithETag");
                requestCount++;

                if (requestCount > 1)
                {
                    // Rig the data to be zero - if we see this, we know we didn't
                    // use the cached version
                    var newData = new ByteArrayContent(new byte[0]);
                    foreach (var kvp in response.Content.Headers)
                    {
                        newData.Headers.Add(kvp.Key, kvp.Value);
                    }
                    response.Content = newData;
                }

                return(Observable.Return(response));
            }));

            Assert.Equal(0, blobCache.GetAllKeys().First().Count());
            Assert.Equal(0, requestCount);

            var result = await fixture.Schedule(new HttpRequestMessage(HttpMethod.Get, new Uri(input)), 5);

            Assert.Equal(1, blobCache.GetAllKeys().First().Count());
            Assert.Equal(1, requestCount);
            Assert.True(result.Item2.Length > 0);

            var result2 = await fixture.Schedule(new HttpRequestMessage(HttpMethod.Get, new Uri(input)), 5);

            Assert.Equal(1, blobCache.GetAllKeys().First().Count());
            Assert.Equal(2, requestCount);
            Assert.True(result2.Item2.Length > 0);
        }
示例#8
0
        public void NavigatingToPlayWithoutAPasswordShouldNavigateToLogin()
        {
            var kernel = new MoqMockingKernel();

            kernel.Bind <IPlayViewModel>().To <PlayViewModel>();

            var cache = new TestBlobCache(null, (IEnumerable <KeyValuePair <string, byte[]> >)null);

            kernel.Bind <ISecureBlobCache>().ToConstant(cache);

            kernel.GetMock <ILoginMethods>()
            .Setup(x => x.EraseCredentialsAndNavigateToLogin()).Verifiable();

            var router = new RoutingState();

            kernel.GetMock <IScreen>().Setup(x => x.Router).Returns(router);

            var fixture = kernel.Get <IPlayViewModel>();

            router.Navigate.Execute(fixture);
            kernel.GetMock <ILoginMethods>().Verify(x => x.EraseCredentialsAndNavigateToLogin(), Times.Once());
        }
        public async Task OurOwnReleaseShouldBeCached()
        {
            var input = @"https://github.com/akavache/Akavache/releases/download/3.2.0/Akavache.3.2.0.zip";
            var blobCache = new TestBlobCache();
            var fixture = new CachingHttpScheduler(new HttpScheduler(), blobCache);

            fixture.Client = new HttpClient(new HttpClientHandler() {
                AllowAutoRedirect = true,
                MaxRequestContentBufferSize = 1048576 * 64,
            });

            Assert.Equal(0, blobCache.GetAllKeys().First().Count());
                        
            var result = await fixture.Schedule(new HttpRequestMessage(HttpMethod.Get, new Uri(input)), 5);

            Assert.True(result.Item1.IsSuccessStatusCode);
            Assert.Equal(8089690, result.Item2.Length);
            Assert.Equal(1, blobCache.GetAllKeys().First().Count());

            var result2 = await fixture.Schedule(new HttpRequestMessage(HttpMethod.Get, new Uri(input)), 3);

            Assert.True(result2.Item1.IsSuccessStatusCode);
            Assert.Equal(8089690, result2.Item2.Length);
        }
        public async Task PostsWithETagsShouldBeCached()
        {
            var input = @"https://httpbin.org/post";
            var blobCache = new TestBlobCache();
            var fixture = new CachingHttpScheduler(new HttpScheduler(), blobCache);
            var requestCount = 0;

            fixture.Client = new HttpClient(new TestHttpMessageHandler(_ => {
                var response = IntegrationTestHelper.GetResponse("Http", "fixtures", "ResponseWithETag");
                requestCount++;

                if (requestCount > 1)
                {
                    // Rig the data to be zero - if we see this, we know we didn't
                    // use the cached version
                    var newData = new ByteArrayContent(new byte[0]);
                    foreach (var kvp in response.Content.Headers) newData.Headers.Add(kvp.Key, kvp.Value);
                    response.Content = newData;
                }

                return Observable.Return(response);
            }));

            Assert.Equal(0, blobCache.GetAllKeys().First().Count());
            Assert.Equal(0, requestCount);

            var result = await fixture.Schedule(new HttpRequestMessage(HttpMethod.Get, new Uri(input)), 5);

            Assert.Equal(1, blobCache.GetAllKeys().First().Count());
            Assert.Equal(1, requestCount);
            Assert.True(result.Item2.Length > 0);

            var result2 = await fixture.Schedule(new HttpRequestMessage(HttpMethod.Get, new Uri(input)), 5);

            Assert.Equal(1, blobCache.GetAllKeys().First().Count());
            Assert.Equal(2, requestCount);
            Assert.True(result2.Item2.Length > 0);
        }