public async Task TestMainImplAsync() { using var cts = new CancellationTokenSource(); var specialFoldersAnyOs = new SnapOsSpecialFoldersUnitTest(_snapFilesystem, _baseFixturePackaging.WorkingDirectory); SetupSnapOsMock(specialFoldersAnyOs); var snapInstallerIoEnvironment = new SnapInstallerIoEnvironment { WorkingDirectory = specialFoldersAnyOs.WorkingDirectory, ThisExeWorkingDirectory = specialFoldersAnyOs.WorkingDirectory, SpecialFolders = specialFoldersAnyOs }; var(exitCode, installerType) = await Program.MainImplAsync(new[] { "--headless" }, LogLevel.Info, cts, _snapOsMock.Object, x => { x.Register <ISnapInstallerIoEnvironment>(_ => snapInstallerIoEnvironment); return((ISnapInstallerEnvironment)x.GetInstance(typeof(ISnapInstallerEnvironment))); }); Assert.Equal(1, exitCode); Assert.Equal(SnapInstallerType.None, installerType); }
public async Task TestInstall_Offline_Using_Local_PackageSource() { await using var specialFoldersAnyOs = new SnapOsSpecialFoldersUnitTest(_snapFilesystem, _baseFixturePackaging.WorkingDirectory); await using var packagesDirectory = new DisposableDirectory(specialFoldersAnyOs.WorkingDirectory, _snapFilesystem); using var cts = new CancellationTokenSource(); SetupSnapOsMock(specialFoldersAnyOs); var snapInstallerIoEnvironment = new SnapInstallerIoEnvironment { WorkingDirectory = specialFoldersAnyOs.WorkingDirectory, ThisExeWorkingDirectory = specialFoldersAnyOs.WorkingDirectory, SpecialFolders = specialFoldersAnyOs, }; var snapAppsReleases = new SnapAppsReleases(); var genesisSnapApp = _baseFixturePackaging.BuildSnapApp(localPackageSourceDirectory: packagesDirectory); Assert.True(genesisSnapApp.Channels.Count >= 2); using var genesisSnapReleaseBuilder = _baseFixturePackaging.WithSnapReleaseBuilder(packagesDirectory, snapAppsReleases, genesisSnapApp, _snapReleaseBuilderContext); var mainAssemblyDefinition = _baseFixturePackaging.BuildSnapExecutable(genesisSnapApp); genesisSnapReleaseBuilder .AddNuspecItem(mainAssemblyDefinition) .AddSnapDll(); using var genesisPackageContext = await _baseFixturePackaging.BuildPackageAsync(genesisSnapReleaseBuilder, cts.Token); var releasesFilename = _snapFilesystem.PathCombine(snapInstallerIoEnvironment.ThisExeWorkingDirectory, genesisPackageContext.FullPackageSnapApp.BuildNugetReleasesFilename()); var snapAppDllFilename = _snapFilesystem.PathCombine(snapInstallerIoEnvironment.ThisExeWorkingDirectory, SnapConstants.SnapAppDllFilename); var setupNupkgFilename = _snapFilesystem.PathCombine(snapInstallerIoEnvironment.ThisExeWorkingDirectory, SnapConstants.SetupNupkgFilename); await using var releasePackageMemoryStream = _snapPack.BuildReleasesPackage(genesisSnapApp, snapAppsReleases); await _snapFilesystem.FileWriteAsync(genesisPackageContext.FullPackageMemoryStream, setupNupkgFilename, cts.Token); await _snapFilesystem.FileWriteAsync(releasePackageMemoryStream, releasesFilename, cts.Token); using var snapAppDllAssemblyDefinition = _snapAppWriter.BuildSnapAppAssembly(genesisSnapApp); snapAppDllAssemblyDefinition.Write(snapAppDllFilename); var(exitCode, installerType) = await Program.MainImplAsync(new[] { "--headless" }, LogLevel.Info, cts, _snapOsMock.Object, x => { x.Register <ISnapInstallerIoEnvironment>(_ => snapInstallerIoEnvironment); return((ISnapInstallerEnvironment)x.GetInstance(typeof(ISnapInstallerEnvironment))); }); Assert.Equal(0, exitCode); Assert.Equal(SnapInstallerType.Offline, installerType); var appInstallDirectory = _snapInstaller.GetApplicationDirectory( _snapFilesystem.PathCombine(specialFoldersAnyOs.LocalApplicationData, genesisSnapApp.Id), genesisSnapApp.Version); var files = _snapFilesystem.DirectoryGetAllFiles(appInstallDirectory).OrderBy(x => x, new OrdinalIgnoreCaseComparer()).ToList(); Assert.Equal(3, files.Count); if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { Assert.EndsWith($"{genesisSnapApp.Id}.exe", files[0]); } else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) { Assert.EndsWith(genesisSnapApp.Id, files[0]); } else { throw new PlatformNotSupportedException(); } Assert.EndsWith(SnapConstants.SnapAppDllFilename, files[1]); Assert.EndsWith(SnapConstants.SnapDllFilename, files[2]); }
static SnapInstallerEnvironment BuildEnvironment(ISnapOs snapOs, CancellationTokenSource globalCts, LogLevel logLevel, ILog logger) { var container = new ServiceContainer(); var thisExeWorkingDirectory = snapOs.Filesystem.PathGetDirectoryName(typeof(Program).Assembly.Location); var workingDirectory = Environment.CurrentDirectory; container.Register(c => snapOs); container.Register(c => snapOs.SpecialFolders); container.Register(c => snapOs.Filesystem); container.Register <ISnapHttpClient>(c => new SnapHttpClient(new HttpClient())); container.Register <ISnapEmbeddedResources>(c => new SnapEmbeddedResources()); container.Register <ISnapInstallerEmbeddedResources>(c => new SnapInstallerEmbeddedResources()); container.Register <INuGetPackageSources>(c => new NuGetMachineWidePackageSources( c.GetInstance <ISnapFilesystem>(), workingDirectory ) ); container.Register <ISnapCryptoProvider>(c => new SnapCryptoProvider()); container.Register <ISnapAppReader>(c => new SnapAppReader()); container.Register <ISnapAppWriter>(c => new SnapAppWriter()); container.Register <ISnapPack>(c => new SnapPack( c.GetInstance <ISnapFilesystem>(), c.GetInstance <ISnapAppReader>(), c.GetInstance <ISnapAppWriter>(), c.GetInstance <ISnapCryptoProvider>(), c.GetInstance <ISnapEmbeddedResources>())); container.Register <ISnapExtractor>(c => new SnapExtractor( c.GetInstance <ISnapFilesystem>(), c.GetInstance <ISnapPack>(), c.GetInstance <ISnapEmbeddedResources>())); container.Register <ISnapInstaller>(c => new SnapInstaller( c.GetInstance <ISnapExtractor>(), c.GetInstance <ISnapPack>(), c.GetInstance <ISnapOs>(), c.GetInstance <ISnapEmbeddedResources>(), c.GetInstance <ISnapAppWriter>() )); container.Register <ISnapNugetLogger>(c => new NugetLogger(logger)); container.Register <INugetService>(c => new NugetService( c.GetInstance <ISnapFilesystem>(), c.GetInstance <ISnapNugetLogger>()) ); container.Register <ISnapPackageManager>(c => new SnapPackageManager( c.GetInstance <ISnapFilesystem>(), c.GetInstance <ISnapOsSpecialFolders>(), c.GetInstance <INugetService>(), c.GetInstance <ISnapHttpClient>(), c.GetInstance <ISnapCryptoProvider>(), c.GetInstance <ISnapExtractor>(), c.GetInstance <ISnapAppReader>(), c.GetInstance <ISnapPack>())); var ioEnvironment = new SnapInstallerIoEnvironment { WorkingDirectory = workingDirectory, ThisExeWorkingDirectory = thisExeWorkingDirectory, SpecialFolders = container.GetInstance <ISnapOsSpecialFolders>() }; var environment = new SnapInstallerEnvironment(logLevel, globalCts, ApplicationName) { Container = container, Io = ioEnvironment }; container.Register <ISnapInstallerEnvironment>(_ => environment); container.Register(_ => environment.Io); return(environment); }