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); }
public SnapOsWindowsTests(BaseFixture baseFixture) { _baseFixture = baseFixture; ISnapFilesystem snapFilesystem = new SnapFilesystem(); _snapOs = new SnapOs(new SnapOsWindows(snapFilesystem, new SnapOsProcessManager(), new SnapOsSpecialFoldersWindows())); }
public CoreRunLibTests(BaseFixture baseFixture) { _baseFixture = baseFixture; _snapFilesystem = new SnapFilesystem(); _snapCryptoProvider = new SnapCryptoProvider(); _snapEmbeddedResources = new SnapEmbeddedResources(); _coreRunLibDirectory = new DisposableDirectory(_baseFixture.WorkingDirectory, _snapFilesystem); }
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); }
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); }
(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); }
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); }