public async Task WillMarkPackageRegistrationVerifiedFlagCorrectly(bool shouldMarkIdVerified)
            {
                var id             = "Microsoft.Aspnet.Mvc";
                var testNamespaces = ReservedNamespaceServiceTestData.GetTestNamespaces();
                var prefixes       = new List <string> {
                    "microsoft.", "microsoft.aspnet."
                };
                var testUsers          = ReservedNamespaceServiceTestData.GetTestUsers();
                var firstUser          = testUsers.First();
                var matchingNamepsaces = testNamespaces
                                         .Where(rn => prefixes.Any(pr => id.StartsWith(pr, StringComparison.OrdinalIgnoreCase)))
                                         .ToList();

                prefixes.ForEach(p => {
                    var existingNamespace = testNamespaces.FirstOrDefault(rn => rn.Value.Equals(p, StringComparison.OrdinalIgnoreCase));
                    existingNamespace.Owners.Add(firstUser);
                });

                var reservedNamespaceService = new Mock <IReservedNamespaceService>();
                IReadOnlyCollection <ReservedNamespace> userOwnedMatchingNamespaces = matchingNamepsaces;

                reservedNamespaceService.Setup(s => s.IsPushAllowed(It.IsAny <string>(), It.IsAny <User>(), out userOwnedMatchingNamespaces))
                .Returns(shouldMarkIdVerified);

                var packageUploadService = CreateService(reservedNamespaceService: reservedNamespaceService);
                var nugetPackage         = PackageServiceUtility.CreateNuGetPackage(id: id);

                var package = await packageUploadService.GeneratePackageAsync(id, nugetPackage.Object, new PackageStreamMetadata(), firstUser);

                Assert.Equal(shouldMarkIdVerified, package.PackageRegistration.IsVerified);
            }
Ejemplo n.º 2
0
            public async Task SavesLicenseFile(string licenseFilenName)
            {
                var fileStorageSvc = new Mock <ICoreFileStorageService>();
                var service        = CreateService(fileStorageSvc);
                var packageStream  = GeneratePackageAsync(licenseFilenName);
                var package        = PackageServiceUtility.CreateTestPackage();

                package.EmbeddedLicenseType = EmbeddedLicenseFileType.PlainText;
                var savedLicenseBytes = new byte[LicenseFileContents.Length];
                var expectedFileName  = BuildLicenseFileName(package.Id, package.Version);

                fileStorageSvc.Setup(x => x.SaveFileAsync(
                                         CoreConstants.Folders.PackagesContentFolderName,
                                         expectedFileName,
                                         "text/plain",
                                         It.IsAny <Stream>(),
                                         true))
                .Completes()
                .Callback <string, string, string, Stream, bool>((_, __, ___, s, ____) => s.Read(savedLicenseBytes, 0, savedLicenseBytes.Length))
                .Verifiable();

                await service.ExtractAndSaveLicenseFileAsync(package, packageStream);

                fileStorageSvc
                .VerifyAll();
                Assert.Equal(LicenseFileContents, savedLicenseBytes);
            }
Ejemplo n.º 3
0
 protected static Mock <TestPackageReader> GeneratePackage(string version = "1.2.3-alpha.0", bool isSigned = true)
 {
     return(PackageServiceUtility.CreateNuGetPackage(
                id: "theId",
                version: version,
                isSigned: isSigned));
 }
 protected static MemoryStream GeneratePackageStream(
     string version = "1.2.3-alpha.0",
     RepositoryMetadata repositoryMetadata = null,
     bool isSigned = true,
     int?desiredTotalEntryCount         = null,
     Func <string> getCustomNuspecNodes = null,
     Uri iconUrl                       = null,
     Uri licenseUrl                    = null,
     string licenseExpression          = null,
     string licenseFilename            = null,
     string licenseFileContents        = null,
     byte[] licenseFileBinaryContents  = null,
     string iconFilename               = null,
     byte[] iconFileBinaryContents     = null,
     IReadOnlyList <string> entryNames = null)
 {
     return(PackageServiceUtility.CreateNuGetPackageStream(
                id: PackageId,
                version: version,
                repositoryMetadata: repositoryMetadata,
                isSigned: isSigned,
                desiredTotalEntryCount: desiredTotalEntryCount,
                getCustomNuspecNodes: getCustomNuspecNodes,
                licenseUrl: licenseUrl,
                iconUrl: iconUrl,
                licenseExpression: licenseExpression,
                licenseFilename: licenseFilename,
                licenseFileContents: GetBinaryLicenseFileContents(licenseFileBinaryContents, licenseFileContents),
                iconFilename: iconFilename,
                iconFileBinaryContents: iconFileBinaryContents,
                entryNames: entryNames));
 }
Ejemplo n.º 5
0
 private static MemoryStream GeneratePackageAsync(string licenseFileName = null, string licenseExpression = null, bool saveLicenseFile = true)
 {
     return(PackageServiceUtility.CreateNuGetPackageStream(
                licenseExpression: licenseExpression,
                licenseFilename: licenseFileName,
                licenseFileContents: licenseFileName != null && saveLicenseFile ? LicenseFileContents : null));
 }
Ejemplo n.º 6
0
            public async Task SavesReadmeFile(String readmeFileName)
            {
                var fileServiceMock = new Mock <ICoreFileStorageService>();
                var service         = CreateService(fileServiceMock);
                var packageStream   = GeneratePackageWithReadmeFile(readmeFileName);
                var package         = PackageServiceUtility.CreateTestPackage();

                package.HasReadMe          = true;
                package.EmbeddedReadmeType = EmbeddedReadmeFileType.Markdown;
                var savedReadmeBytes = new byte[ReadmeFileContents.Length];
                var expectedFileName = BuildReadmeFileName(package.Id, package.Version);

                fileServiceMock.Setup(x => x.SaveFileAsync(
                                          CoreConstants.Folders.PackagesContentFolderName,
                                          It.IsAny <string>(),
                                          It.IsAny <Stream>(),
                                          true))
                .Completes()
                .Callback <string, string, Stream, bool>((_, __, s, ___) => s.Read(savedReadmeBytes, 0, savedReadmeBytes.Length))
                .Verifiable();

                // Act.
                await service.ExtractAndSaveReadmeFileAsync(package, packageStream);

                // Assert.
                fileServiceMock.VerifyAll();
                Assert.Equal(ReadmeFileContents, savedReadmeBytes);
            }
            public async Task WillMarkPackageRegistrationNotVerifiedIfIdMatchesNonOwnedSharedNamespace()
            {
                var id             = "Microsoft.Aspnet.Mvc";
                var testNamespaces = ReservedNamespaceServiceTestData.GetTestNamespaces();
                var prefixes       = new List <string> {
                    "microsoft.", "microsoft.aspnet."
                };
                var testUsers = ReservedNamespaceServiceTestData.GetTestUsers();
                var firstUser = testUsers.First();
                var lastUser  = testUsers.Last();

                prefixes.ForEach(p => {
                    var existingNamespace = testNamespaces.FirstOrDefault(rn => rn.Value.Equals(p, StringComparison.OrdinalIgnoreCase));
                    existingNamespace.IsSharedNamespace = true;
                    existingNamespace.Owners.Add(firstUser);
                });

                var reservedNamespaceService = new Mock <IReservedNamespaceService>();
                IReadOnlyCollection <ReservedNamespace> userOwnedMatchingNamespaces = new List <ReservedNamespace>();

                reservedNamespaceService.Setup(s => s.IsPushAllowed(It.IsAny <string>(), It.IsAny <User>(), out userOwnedMatchingNamespaces))
                .Returns(true);

                var packageUploadService = CreateService(reservedNamespaceService: reservedNamespaceService);
                var nugetPackage         = PackageServiceUtility.CreateNuGetPackage(id: id);

                var package = await packageUploadService.GeneratePackageAsync(id, nugetPackage.Object, new PackageStreamMetadata(), lastUser);

                Assert.False(package.PackageRegistration.IsVerified);
            }
            public async Task RemovesOriginalChildEntities()
            {
                // Arrange
                var package = PackageServiceUtility.CreateTestPackage();

                package.PackageTypes = new List <PackageType> {
                    new PackageType {
                        Name = "Dependency", Version = "0.0"
                    }
                };

                var packageService     = SetupPackageService(package);
                var entitiesContext    = SetupEntitiesContext();
                var packageFileService = SetupPackageFileService(package);

                var service = CreateService(
                    packageService: packageService,
                    entitiesContext: entitiesContext,
                    packageFileService: packageFileService);

                // Act
                await service.ReflowAsync("test", "1.0.0");

                // Assert
                entitiesContext.Verify();
            }
Ejemplo n.º 9
0
            public async Task WillThrowForMissingSymbolsPackageType()
            {
                var service = CreateService();
                var invalidSymbolPackageStream = TestPackage.CreateTestPackageStream("theId", "1.0.42");
                var packageArchiveReader       = PackageServiceUtility.CreateArchiveReader(invalidSymbolPackageStream);

                await Assert.ThrowsAsync <InvalidPackageException>(async() => await service.EnsureValidAsync(packageArchiveReader));
            }
Ejemplo n.º 10
0
            public async Task WillNotThrowForValidSnupkgFile(string extension)
            {
                var service = CreateService();
                var action  = CreatePopulatePackageAction(extension);

                var validSymbolPackageStream = TestPackage.CreateTestSymbolPackageStream("theId", "1.0.42", populatePackage: action);
                var packageArchiveReader     = PackageServiceUtility.CreateArchiveReader(validSymbolPackageStream);

                await service.EnsureValidAsync(packageArchiveReader);
            }
Ejemplo n.º 11
0
            public async Task WillThrowForOwnersMetadataInNuspec()
            {
                var service      = CreateService();
                var packageTypes = CreateSymbolPackageTypesObject();

                var invalidSymbolPackageStream = TestPackage.CreateTestPackageStream("theId", "1.0.42", owners: "Random owners", packageTypes: packageTypes);
                var packageArchiveReader       = PackageServiceUtility.CreateArchiveReader(invalidSymbolPackageStream);

                await Assert.ThrowsAsync <InvalidDataException>(async() => await service.EnsureValidAsync(packageArchiveReader));
            }
Ejemplo n.º 12
0
            public async Task WillThrowForInvalidFilesInSnupkg(string extension)
            {
                var service = CreateService();
                var action  = CreatePopulatePackageAction(extension);

                var invalidSymbolPackageStream = TestPackage.CreateTestSymbolPackageStream("theId", "1.0.42", populatePackage: action);
                var packageArchiveReader       = PackageServiceUtility.CreateArchiveReader(invalidSymbolPackageStream);

                await Assert.ThrowsAsync <InvalidDataException>(async() => await service.EnsureValidAsync(packageArchiveReader));
            }
Ejemplo n.º 13
0
            private MemoryStream CreateSymbolPackageStreamWithEntries(string[] entryNames)
            {
                var packageType  = new NuGet.Packaging.Core.PackageType(name: "SymbolsPackage", version: NuGet.Packaging.Core.PackageType.EmptyVersion);
                var packageTypes = new List <NuGet.Packaging.Core.PackageType>()
                {
                    packageType
                };

                return(PackageServiceUtility.CreateNuGetPackageStream(packageTypes: packageTypes, entryNames: entryNames));
            }
            public async Task WillThrowForSnupkgFileWithoutSymbols()
            {
                var service = CreateService();
                var action  = CreatePopulatePackageAction(".p7s");

                var validSymbolPackageStream = TestPackage.CreateTestSymbolPackageStream("theId", "1.0.42", populatePackage: action);
                var packageArchiveReader     = PackageServiceUtility.CreateArchiveReader(validSymbolPackageStream);

                await Assert.ThrowsAsync <InvalidDataException>(async() => await service.EnsureValidAsync(packageArchiveReader));
            }
            public async Task ThrowsOnMissingReadmeFile()
            {
                var          service        = CreateService();
                const string readmeFileName = "readme.md";
                var          packageStream  = GeneratePackageWithReadmeFile(readmeFileName, false);
                var          pacakge        = PackageServiceUtility.CreateTestPackage();

                var ex = await Assert.ThrowsAsync <FileNotFoundException>(() => service.ExtractAndSaveReadmeFileAsync(pacakge, packageStream));

                Assert.Contains(readmeFileName, ex.Message);
            }
            public async Task UpdatesPackageMetadata()
            {
                // Arrange
                var package = PackageServiceUtility.CreateTestPackage();

                var packageService     = SetupPackageService(package);
                var entitiesContext    = SetupEntitiesContext();
                var packageFileService = SetupPackageFileService(package);

                var service = CreateService(
                    packageService: packageService,
                    entitiesContext: entitiesContext,
                    packageFileService: packageFileService);

                // Act
                var result = await service.ReflowAsync("test", "1.0.0");

                // Assert
                Assert.Equal("test", result.PackageRegistration.Id);
                Assert.Equal("1.0.0", result.Version);
                Assert.Equal("1.0.0", result.NormalizedVersion);
                Assert.Equal("Test package", result.Title);

#pragma warning disable 0618
                Assert.Equal(2, result.Authors.Count);
                Assert.True(result.Authors.Any(a => a.Name == "authora"));
                Assert.True(result.Authors.Any(a => a.Name == "authorb"));
#pragma warning restore 0618
                Assert.Equal("authora, authorb", result.FlattenedAuthors);

                Assert.Equal(false, result.RequiresLicenseAcceptance);
                Assert.Equal("package A description.", result.Description);
                Assert.Equal("en-US", result.Language);

                Assert.Equal("WebActivator:[1.1.0, ):net40|PackageC:[1.1.0, 2.0.1):net40|jQuery:[1.0.0, ):net451", result.FlattenedDependencies);
                Assert.Equal(3, result.Dependencies.Count);

                Assert.True(result.Dependencies.Any(d =>
                                                    d.Id == "WebActivator" &&
                                                    d.VersionSpec == "[1.1.0, )" &&
                                                    d.TargetFramework == "net40"));

                Assert.True(result.Dependencies.Any(d =>
                                                    d.Id == "PackageC" &&
                                                    d.VersionSpec == "[1.1.0, 2.0.1)" &&
                                                    d.TargetFramework == "net40"));

                Assert.True(result.Dependencies.Any(d =>
                                                    d.Id == "jQuery" &&
                                                    d.VersionSpec == "[1.0.0, )" &&
                                                    d.TargetFramework == "net451"));

                Assert.Equal(0, result.SupportedFrameworks.Count);
            }
Ejemplo n.º 17
0
            public async Task ThrowsOnMissingLicenseFile()
            {
                var          service         = CreateService();
                const string LicenseFileName = "license.txt";
                var          packageStream   = GeneratePackageAsync(LicenseFileName, null, false);
                var          package         = PackageServiceUtility.CreateTestPackage();

                var ex = await Assert.ThrowsAsync <FileNotFoundException>(() => service.ExtractAndSaveLicenseFileAsync(package, packageStream));

                Assert.Contains(LicenseFileName, ex.Message); // current implementation of the client does not properly set the FileName property
            }
Ejemplo n.º 18
0
            public async Task WillThrowForMultiplePackageTypesInNuspec()
            {
                var service      = CreateService();
                var packageTypes = CreateSymbolPackageTypesObject();

                packageTypes.Add(new ClientPackageType("RandomPackageType", ClientPackageType.EmptyVersion));

                var invalidSymbolPackageStream = TestPackage.CreateTestPackageStream("theId", "1.0.42", packageTypes: packageTypes);
                var packageArchiveReader       = PackageServiceUtility.CreateArchiveReader(invalidSymbolPackageStream);

                await Assert.ThrowsAsync <InvalidPackageException>(async() => await service.EnsureValidAsync(packageArchiveReader));
            }
Ejemplo n.º 19
0
            [InlineData(null, "MIT")] // should also throw for license expression
            public async Task ThrowsWhenNoLicenseFileSpecified(string licenseFileName, string licenseExpression)
            {
                var service       = CreateService();
                var packageStream = GeneratePackageAsync(licenseFileName, licenseExpression);
                var package       = PackageServiceUtility.CreateTestPackage();

                package.EmbeddedLicenseType = EmbeddedLicenseFileType.PlainText; // tested method should ignore the package settings and check .nuspec

                var ex = await Assert.ThrowsAsync <InvalidOperationException>(() => service.ExtractAndSaveLicenseFileAsync(package, packageStream));

                Assert.Contains("No license file", ex.Message);
            }
Ejemplo n.º 20
0
            public async Task WillThrowForIncorrectSymbolsPackageTypeVersion()
            {
                var service      = CreateService();
                var packageTypes = new List <ClientPackageType>()
                {
                    new ClientPackageType("SymbolsPackage", new Version("1.1"))
                };
                var invalidSymbolPackageStream = TestPackage.CreateTestPackageStream("theId", "1.0.42", packageTypes: packageTypes);
                var packageArchiveReader       = PackageServiceUtility.CreateArchiveReader(invalidSymbolPackageStream);

                await Assert.ThrowsAsync <InvalidPackageException>(async() => await service.EnsureValidAsync(packageArchiveReader));
            }
Ejemplo n.º 21
0
            public async Task ThrowsWhenNoReadmeFileSpecified(string readmeFileName)
            {
                var service       = CreateService();
                var packageStream = GeneratePackageWithReadmeFile(readmeFileName);
                var package       = PackageServiceUtility.CreateTestPackage();

                package.EmbeddedReadmeType = EmbeddedReadmeFileType.Markdown; // tested method should ignore the package settings and check .nuspec

                var ex = await Assert.ThrowsAsync <InvalidOperationException>(() => service.ExtractAndSaveReadmeFileAsync(package, packageStream));

                Assert.Contains("No readme file", ex.Message);
            }
Ejemplo n.º 22
0
 protected static Mock <TestPackageReader> GeneratePackage(
     string version = "1.2.3-alpha.0",
     RepositoryMetadata repositoryMetadata = null,
     bool isSigned = true,
     int?desiredTotalEntryCount = null)
 {
     return(PackageServiceUtility.CreateNuGetPackage(
                id: "theId",
                version: version,
                repositoryMetadata: repositoryMetadata,
                isSigned: isSigned,
                desiredTotalEntryCount: desiredTotalEntryCount));
 }
            public async Task WillCallCreatePackageAsyncCorrectly()
            {
                var packageService = new Mock <IPackageService>();

                packageService.Setup(x => x.FindPackageRegistrationById(It.IsAny <string>())).Returns((PackageRegistration)null);

                var id = "Microsoft.Aspnet.Mvc";
                var packageUploadService = CreateService(packageService);
                var nugetPackage         = PackageServiceUtility.CreateNuGetPackage(id: id);
                var currentUser          = new User();

                var package = await packageUploadService.GeneratePackageAsync(id, nugetPackage.Object, new PackageStreamMetadata(), currentUser);

                packageService.Verify(x => x.CreatePackageAsync(It.IsAny <PackageArchiveReader>(), It.IsAny <PackageStreamMetadata>(), It.IsAny <User>(), It.IsAny <bool>()), Times.Once);
                Assert.False(package.PackageRegistration.IsVerified);
            }
            public async Task WillStartAsynchronousValidation()
            {
                var validationService = new Mock <IValidationService>();

                var id = "Microsoft.Aspnet.Mvc";
                var packageUploadService = CreateService(validationService: validationService);
                var nugetPackage         = PackageServiceUtility.CreateNuGetPackage(id: id);
                var currentUser          = new User();

                var package = await packageUploadService.GeneratePackageAsync(
                    id,
                    nugetPackage.Object,
                    new PackageStreamMetadata(),
                    currentUser);

                validationService.Verify(
                    x => x.StartValidationAsync(package),
                    Times.Once);
            }
            public async Task RetrievesOriginalPackageMetadata()
            {
                // Arrange
                var package = PackageServiceUtility.CreateTestPackage();

                var packageService     = SetupPackageService(package);
                var entitiesContext    = SetupEntitiesContext();
                var packageFileService = SetupPackageFileService(package);

                var service = CreateService(
                    packageService: packageService,
                    entitiesContext: entitiesContext,
                    packageFileService: packageFileService);

                // Act
                await service.ReflowAsync("test", "1.0.0");

                // Assert
                packageService.Verify();
            }
            public async Task ReturnsNullWhenPackageNotFound()
            {
                // Arrange
                var package = PackageServiceUtility.CreateTestPackage();

                var packageService     = SetupPackageService(package);
                var entitiesContext    = SetupEntitiesContext();
                var packageFileService = SetupPackageFileService(package);

                var service = CreateService(
                    packageService: packageService,
                    entitiesContext: entitiesContext,
                    packageFileService: packageFileService);

                // Act
                var result = await service.ReflowAsync("unknownpackage", "1.0.0");

                // Assert
                Assert.Null(result);
            }
            public async Task CallsUpdateIsLatestAsync()
            {
                // Arrange
                var package = PackageServiceUtility.CreateTestPackage();

                var packageService     = SetupPackageService(package);
                var entitiesContext    = SetupEntitiesContext();
                var packageFileService = SetupPackageFileService(package);

                var service = CreateService(
                    packageService: packageService,
                    entitiesContext: entitiesContext,
                    packageFileService: packageFileService);

                // Act
                var result = await service.ReflowAsync("test", "1.0.0");

                // Assert
                packageService.Verify(s => s.UpdateIsLatestAsync(package.PackageRegistration, false), Times.Once);
            }
            public async Task RemovesOriginalFrameworks_Authors_Dependencies()
            {
                // Arrange
                var package = PackageServiceUtility.CreateTestPackage();

                var packageService     = SetupPackageService(package);
                var entitiesContext    = SetupEntitiesContext();
                var packageFileService = SetupPackageFileService(package);

                var service = CreateService(
                    packageService: packageService,
                    entitiesContext: entitiesContext,
                    packageFileService: packageFileService);

                // Act
                await service.ReflowAsync("test", "1.0.0");

                // Assert
                entitiesContext.Verify();
            }
            public async Task UpdatesPackageLastEdited()
            {
                // Arrange
                var package    = PackageServiceUtility.CreateTestPackage();
                var lastEdited = package.LastEdited;

                var packageService     = SetupPackageService(package);
                var entitiesContext    = SetupEntitiesContext();
                var packageFileService = SetupPackageFileService(package);

                var service = CreateService(
                    packageService: packageService,
                    entitiesContext: entitiesContext,
                    packageFileService: packageFileService);

                // Act
                var result = await service.ReflowAsync("test", "1.0.0");

                // Assert
                Assert.NotEqual(lastEdited, result.LastEdited);
            }
            protected static Mock <TestPackageReader> GeneratePackageWithUserContent(
                string version = "1.2.3-alpha.0",
                RepositoryMetadata repositoryMetadata = null,
                bool isSigned = true,
                int?desiredTotalEntryCount         = null,
                Func <string> getCustomNuspecNodes = null,
                Uri iconUrl                       = null,
                Uri licenseUrl                    = null,
                string licenseExpression          = null,
                string licenseFilename            = null,
                string licenseFileContents        = null,
                byte[] licenseFileBinaryContents  = null,
                string iconFilename               = null,
                byte[] iconFileBinaryContents     = null,
                string readmeFilename             = null,
                string readmeFileContents         = null,
                byte[] readmeFileBinaryContents   = null,
                IReadOnlyList <string> entryNames = null)
            {
                var packageStream = GeneratePackageStream(
                    version: version,
                    repositoryMetadata: repositoryMetadata,
                    isSigned: isSigned,
                    desiredTotalEntryCount: desiredTotalEntryCount,
                    getCustomNuspecNodes: getCustomNuspecNodes,
                    iconUrl: iconUrl,
                    licenseUrl: licenseUrl,
                    licenseExpression: licenseExpression,
                    licenseFilename: licenseFilename,
                    licenseFileContents: licenseFileContents,
                    licenseFileBinaryContents: licenseFileBinaryContents,
                    iconFilename: iconFilename,
                    iconFileBinaryContents: iconFileBinaryContents,
                    readmeFilename: readmeFilename,
                    readmeFileContents: readmeFileContents,
                    readmeFileBinaryContents: readmeFileBinaryContents,
                    entryNames: entryNames);

                return(PackageServiceUtility.CreateNuGetPackage(packageStream));
            }