public void EnsurePackageDownloadsUsesMachineCacheIfAvailable()
        {
            // Arrange
            var hashBytes  = new byte[] { 1, 2, 3, 4 };
            var hash       = Convert.ToBase64String(hashBytes);
            var zipPackage = PackageUtility.CreatePackage("A", "1.2");

            var hashProvider = new Mock <IHashProvider>(MockBehavior.Strict);

            hashProvider.Setup(h => h.CalculateHash(It.IsAny <Stream>())).Returns(hashBytes);

            var mockRepository = new MockPackageCacheRepository();

            mockRepository.Add(zipPackage);

            var servicePackage = new DataServicePackage
            {
                Id           = "A",
                Version      = "1.2",
                PackageHash  = hash,
                HashProvider = hashProvider.Object,
            };

            // Act
            servicePackage.EnsurePackage(mockRepository);

            // Assert
            Assert.Equal(zipPackage, servicePackage._package);
        }
        public void EnsurePackageDownloadUpdatesIdAndVersion()
        {
            // Arrange
            var zipPackage     = PackageUtility.CreatePackage("Abc", "1.0");
            var uri            = new Uri("http://nuget.org");
            var mockRepository = new MockPackageCacheRepository(true);

            var packageDownloader = new Mock <PackageDownloader>();

            packageDownloader.Setup(d => d.DownloadPackage(uri, It.IsAny <IPackageMetadata>(), It.IsAny <Stream>()))
            .Callback(() => mockRepository.AddPackage(zipPackage))
            .Verifiable();
            var hashProvider = new Mock <IHashProvider>(MockBehavior.Strict);

            hashProvider.Setup(h => h.CalculateHash(It.IsAny <Stream>())).Returns <Stream>((stream) => new byte[] { 1, 2, 3, 4 });

            var servicePackage = new DataServicePackage
            {
                Id           = "abc",
                Version      = "1.0.0",
                PackageHash  = Convert.ToBase64String(new byte[] { 1, 2, 3, 4 }),
                Downloader   = packageDownloader.Object,
                HashProvider = hashProvider.Object,
                DownloadUrl  = uri
            };

            // Act
            servicePackage.EnsurePackage(mockRepository);

            // Assert
            // servicePackage should have been updated to match zipPackage
            Assert.Equal("Abc", servicePackage.Id);
            Assert.Equal("1.0", servicePackage.Version);
        }
        public void EnsurePackageDownloadsThePackageIfItIsNotCachedInMemoryOnInMachineCache()
        {
            // Arrange
            var zipPackage        = PackageUtility.CreatePackage("A", "1.2");
            var uri               = new Uri("http://nuget.org");
            var mockRepository    = new MockPackageCacheRepository();
            var packageDownloader = new Mock <PackageDownloader>();

            packageDownloader.Setup(d => d.DownloadPackage(uri, It.IsAny <IPackageMetadata>(), It.IsAny <Stream>()))
            .Callback(() => mockRepository.AddPackage(zipPackage))
            .Verifiable();
            var hashProvider = new Mock <IHashProvider>(MockBehavior.Strict);

            var context = new Mock <IDataServiceContext>();

            context.Setup(c => c.GetReadStreamUri(It.IsAny <object>())).Returns(uri).Verifiable();

            var servicePackage = new DataServicePackage
            {
                Id           = "A",
                Version      = "1.2",
                PackageHash  = "NEWHASH",
                Downloader   = packageDownloader.Object,
                HashProvider = hashProvider.Object,
                Context      = context.Object
            };

            // Act
            servicePackage.EnsurePackage(mockRepository);

            // Assert
            context.Verify();
            packageDownloader.Verify();
            Assert.True(mockRepository.Exists(zipPackage));
        }
        public void EnsurePackageDownloadsUsesInMemoryCachedInstanceOnceDownloaded()
        {
            // Arrange
            var zipPackage        = PackageUtility.CreatePackage("A", "1.2");
            var uri               = new Uri("http://nuget.org");
            var mockRepository    = new MockPackageCacheRepository(true);
            var packageDownloader = new Mock <PackageDownloader>();

            packageDownloader.Setup(d => d.DownloadPackage(uri, It.IsAny <IPackageMetadata>(), It.IsAny <Stream>()))
            .Callback(() => mockRepository.AddPackage(zipPackage))
            .Verifiable();
            var hashProvider = new Mock <IHashProvider>(MockBehavior.Strict);

            hashProvider.Setup(h => h.CalculateHash(It.IsAny <Stream>())).Returns <Stream>((stream) => new byte[] { 1, 2, 3, 4 });

            var servicePackage = new DataServicePackage
            {
                Id           = "A",
                Version      = "1.2",
                PackageHash  = Convert.ToBase64String(new byte[] { 1, 2, 3, 4 }),
                Downloader   = packageDownloader.Object,
                HashProvider = hashProvider.Object,
                DownloadUrl  = uri
            };

            // Act
            servicePackage.EnsurePackage(mockRepository);
            servicePackage.EnsurePackage(mockRepository);
            servicePackage.EnsurePackage(mockRepository);

            // Assert
            Assert.Equal(zipPackage, servicePackage._package);
            packageDownloader.Verify(d => d.DownloadPackage(uri, It.IsAny <IPackageMetadata>(), It.IsAny <Stream>()), Times.Once());
            Assert.True(mockRepository.Exists(zipPackage));
        }