Ejemplo n.º 1
0
        public SnapReleaseBuilder([NotNull] DisposableDirectory disposableDirectory, SnapAppsReleases snapAppsReleases, [NotNull] SnapApp snapApp, [NotNull] SnapReleaseBuilderContext builderContext)
        {
            if (builderContext == null)
            {
                throw new ArgumentNullException(nameof(builderContext));
            }

            _nuspec = new Dictionary <string, IDisposable>();

            SnapFilesystem        = builderContext.SnapFilesystem ?? throw new ArgumentNullException(nameof(builderContext.SnapFilesystem));
            SnapAppsReleases      = snapAppsReleases ?? throw new ArgumentNullException(nameof(snapAppsReleases));
            SnapApp               = snapApp ?? throw new ArgumentNullException(nameof(snapApp));
            CoreRunLib            = builderContext.CoreRunLib ?? throw new ArgumentNullException(nameof(builderContext.CoreRunLib));
            SnapCryptoProvider    = builderContext.SnapCryptoProvider ?? throw new ArgumentNullException(nameof(builderContext.SnapCryptoProvider));
            SnapEmbeddedResources = builderContext.SnapEmbeddedResources ?? throw new ArgumentNullException(nameof(builderContext.SnapEmbeddedResources));
            SnapPack              = builderContext.SnapPack ?? throw new ArgumentNullException(nameof(builderContext.SnapPack));

            BaseDirectory            = disposableDirectory ?? throw new ArgumentNullException(nameof(disposableDirectory));
            NugetPackagingDirectory  = SnapFilesystem.PathCombine(BaseDirectory.WorkingDirectory, "nuget", $"app-{snapApp.Version}");
            SnapAppBaseDirectory     = SnapFilesystem.PathCombine(BaseDirectory.WorkingDirectory, snapApp.Id);
            SnapAppInstallDirectory  = SnapFilesystem.PathCombine(SnapAppBaseDirectory, $"app-{snapApp.Version}");
            SnapAppPackagesDirectory = SnapFilesystem.PathCombine(SnapAppBaseDirectory, "packages");

            SnapFilesystem.DirectoryCreateIfNotExists(NugetPackagingDirectory);
            SnapFilesystem.DirectoryCreateIfNotExists(SnapAppPackagesDirectory);
            SnapFilesystem.DirectoryCreateIfNotExists(SnapAppInstallDirectory);
        }
Ejemplo n.º 2
0
        public SnapOsWindowsTests(BaseFixture baseFixture)
        {
            _baseFixture = baseFixture;
            ISnapFilesystem snapFilesystem = new SnapFilesystem();

            _snapOs = new SnapOs(new SnapOsWindows(snapFilesystem, new SnapOsProcessManager(), new SnapOsSpecialFoldersWindows()));
        }
Ejemplo n.º 3
0
 public CoreRunLibTests(BaseFixture baseFixture)
 {
     _baseFixture           = baseFixture;
     _snapFilesystem        = new SnapFilesystem();
     _snapCryptoProvider    = new SnapCryptoProvider();
     _snapEmbeddedResources = new SnapEmbeddedResources();
     _coreRunLibDirectory   = new DisposableDirectory(_baseFixture.WorkingDirectory, _snapFilesystem);
 }
Ejemplo n.º 4
0
        public SnapReleaseBuilder AddNuspecItem([NotNull] string relativePath, [NotNull] AssemblyDefinition assemblyDefinition)
        {
            if (relativePath == null)
            {
                throw new ArgumentNullException(nameof(relativePath));
            }
            if (assemblyDefinition == null)
            {
                throw new ArgumentNullException(nameof(assemblyDefinition));
            }
            var targetPath = SnapFilesystem.PathCombine(relativePath, assemblyDefinition.BuildRelativeFilename());

            _nuspec.Add(targetPath, assemblyDefinition);
            return(this);
        }
Ejemplo n.º 5
0
        async Task <string> WriteFullPackageAsync([NotNull] MemoryStream memoryStream, [NotNull] SnapRelease snapRelease, CancellationToken cancellationToken = default)
        {
            if (memoryStream == null)
            {
                throw new ArgumentNullException(nameof(memoryStream));
            }
            if (snapRelease == null)
            {
                throw new ArgumentNullException(nameof(snapRelease));
            }
            memoryStream.Seek(0, SeekOrigin.Begin);
            var path = SnapFilesystem.PathCombine(SnapAppPackagesDirectory, snapRelease.BuildNugetFullFilename());
            await SnapFilesystem.FileWriteAsync(memoryStream, path, cancellationToken);

            return(path);
        }
Ejemplo n.º 6
0
            (string targetPath, string nuspecPath, string diskAbsoluteFilename) NormalizePath([NotNull] SnapRelease snapRelease, [NotNull] string relativePath)
        {
            if (snapRelease == null)
            {
                throw new ArgumentNullException(nameof(snapRelease));
            }
            if (relativePath == null)
            {
                throw new ArgumentNullException(nameof(relativePath));
            }

            var snapAppInstallDirectory = SnapFilesystem.PathCombine(SnapAppBaseDirectory, $"app-{snapRelease.Version}");

            string diskAbsoluteFilename;
            string targetPath;

            if (relativePath.StartsWith(SnapConstants.NuspecAssetsTargetPath))
            {
                relativePath = relativePath.Substring(SnapConstants.NuspecAssetsTargetPath.Length + 1);
                targetPath   = SnapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, relativePath);
                var isCoreRunExe = relativePath.EndsWith(CoreRunExe);
                diskAbsoluteFilename = SnapFilesystem.PathCombine(isCoreRunExe ? SnapAppBaseDirectory : snapAppInstallDirectory, relativePath);
            }
            else if (relativePath.StartsWith(SnapConstants.NuspecRootTargetPath))
            {
                relativePath         = relativePath.Substring(SnapConstants.NuspecRootTargetPath.Length + 1);
                targetPath           = SnapFilesystem.PathCombine(SnapConstants.NuspecRootTargetPath, relativePath);
                diskAbsoluteFilename = SnapFilesystem.PathCombine(snapAppInstallDirectory, relativePath);
            }
            else
            {
                throw new Exception($"Unexpected file: {relativePath}");
            }

            return(targetPath, relativePath, diskAbsoluteFilename);
        }
Ejemplo n.º 7
0
        internal void AssertChecksums([NotNull] SnapApp snapApp, [NotNull] SnapRelease snapRelease, [NotNull] List <string> extractedFiles)
        {
            if (snapApp == null)
            {
                throw new ArgumentNullException(nameof(snapApp));
            }
            if (snapRelease == null)
            {
                throw new ArgumentNullException(nameof(snapRelease));
            }
            if (extractedFiles == null)
            {
                throw new ArgumentNullException(nameof(extractedFiles));
            }

            var nupkgAbsoluteFilename = SnapFilesystem.PathCombine(SnapAppPackagesDirectory, snapRelease.Filename);

            Assert.True(SnapFilesystem.FileExists(nupkgAbsoluteFilename));

            using var packageArchiveReader = new PackageArchiveReader(nupkgAbsoluteFilename);
            Assert.Equal(snapApp.ReleaseNotes, snapRelease.ReleaseNotes);

            foreach (var releaseChecksum in snapRelease.Files)
            {
                var(_, _, checksumFileAbsolutePath) = NormalizePath(snapRelease, releaseChecksum.NuspecTargetPath);
                Assert.NotNull(checksumFileAbsolutePath);

                if (snapRelease.IsDelta)
                {
                    var deletedChecksum = snapRelease.Deleted.SingleOrDefault(x => x == releaseChecksum.NuspecTargetPath);
                    if (deletedChecksum != null)
                    {
                        Assert.False(SnapFilesystem.FileExists(checksumFileAbsolutePath));
                        continue;
                    }

                    var unmodifiedChecksum = snapRelease.Unmodified.SingleOrDefault(x => x == releaseChecksum.NuspecTargetPath);
                    if (unmodifiedChecksum != null)
                    {
                        Assert.False(SnapFilesystem.FileExists(checksumFileAbsolutePath));
                        continue;
                    }
                }

                Assert.True(SnapFilesystem.FileExists(checksumFileAbsolutePath));

                using var fileStream = SnapFilesystem.FileRead(checksumFileAbsolutePath);
                var diskSha256Checksum = SnapCryptoProvider.Sha256(fileStream);
                var diskFilesize       = SnapFilesystem.FileStat(checksumFileAbsolutePath).Length;

                SnapReleaseChecksum targetChecksum;
                bool useFullChecksum;
                if (snapRelease.IsFull)
                {
                    targetChecksum  = releaseChecksum;
                    useFullChecksum = true;
                    goto checksum;
                }

                if (SnapPack.NeverGenerateBsDiffsTheseAssemblies.Any(x => x == releaseChecksum.NuspecTargetPath))
                {
                    targetChecksum  = releaseChecksum;
                    useFullChecksum = true;
                    goto checksum;
                }

                targetChecksum = snapRelease.New.SingleOrDefault(x => x.NuspecTargetPath == releaseChecksum.NuspecTargetPath);
                if (targetChecksum != null)
                {
                    useFullChecksum = true;
                }
                else
                {
                    targetChecksum  = snapRelease.Modified.SingleOrDefault(x => x.NuspecTargetPath == releaseChecksum.NuspecTargetPath);
                    useFullChecksum = false;
                }

checksum:
                Assert.NotNull(targetChecksum);

                var expectedChecksum = useFullChecksum ? targetChecksum.FullSha256Checksum : targetChecksum.DeltaSha256Checksum;
                var expectedFilesize = useFullChecksum ? targetChecksum.FullFilesize : targetChecksum.DeltaFilesize;

                Assert.NotNull(expectedChecksum);
                if (expectedChecksum == SnapConstants.Sha256EmptyFileChecksum)
                {
                    Assert.Equal(0, expectedFilesize);
                }
                else
                {
                    Assert.True(expectedFilesize > 0);
                }

                Assert.Equal(expectedChecksum, diskSha256Checksum);
                Assert.Equal(expectedFilesize, diskFilesize);
            }

            var snapReleaseChecksum = SnapCryptoProvider.Sha256(snapRelease, packageArchiveReader, SnapPack);
            var snapReleaseFilesize = SnapFilesystem.FileStat(nupkgAbsoluteFilename)?.Length;

            var expectedReleaseChecksum = snapRelease.IsFull ? snapRelease.FullSha256Checksum : snapRelease.DeltaSha256Checksum;
            var expectedReleaseFilesize = snapRelease.IsFull ? snapRelease.FullFilesize : snapRelease.DeltaFilesize;

            Assert.Equal(expectedReleaseChecksum, snapReleaseChecksum);
            Assert.Equal(expectedReleaseFilesize, snapReleaseFilesize);
        }