public async Task TestGetSnapReleasesAsync_SnapHttpFeed(bool versionIsNull)
        {
            var snapApp = _baseFixturePackaging.BuildSnapApp();

            if (versionIsNull)
            {
                snapApp.Version = null;
            }

            var snapChannel = snapApp.Channels.First(x => x.UpdateFeed is SnapHttpFeed);

            snapApp.SetCurrentChannel(snapChannel.Name);

            var snapPackageManagerHttpFeed = new SnapPackageManagerNugetHttpFeed
            {
                ApiKey          = "apikey",
                ProtocolVersion = NuGetProtocolVersion.V2,
                Password        = "******",
                Username        = "******",
                Source          = new Uri("https://finter.no")
            };

            const string applicationId = "my-application-id";

            _snapHttpClientMock.Setup(x => x.GetStreamAsync(It.IsAny <Uri>(), It.IsAny <Dictionary <string, string> >())).ReturnsAsync(() =>
            {
                var jsonStr   = JsonConvert.SerializeObject(snapPackageManagerHttpFeed);
                var jsonBytes = Encoding.UTF8.GetBytes(jsonStr);
                return(new MemoryStream(jsonBytes));
            }).Callback((Uri uri, IDictionary <string, string> headers) =>
            {
                Assert.Equal(uri, snapPackageManagerHttpFeed.Source);
                Assert.NotNull(headers);
                Assert.Equal(4, headers.Count);
                Assert.Collection(headers, pair => Assert.Equal("X-Snapx-App-Id", snapApp.Id));
                Assert.Collection(headers, pair => Assert.Equal("X-Snapx-Channel", snapChannel.Name));
                Assert.Collection(headers, pair => Assert.Equal("X-Snapx-Application-Id", applicationId));
                if (versionIsNull)
                {
                    Assert.Collection(headers, pair => Assert.Null("X-Snapx-Application-Version"));
                }
                else
                {
                    Assert.Collection(headers, pair => Assert.Equal("X-Snapx-Application-Version", snapApp.Version.ToNormalizedString()));
                }
            });

            var snapUpdateManager = BuildUpdateManager(_baseFixturePackaging.WorkingDirectory, snapApp, _nugetServiceMock.Object,
                                                       snapHttpClient: _snapHttpClientMock.Object, snapOs: _snapOs, applicationId: applicationId);

            var snapReleases = await snapUpdateManager.GetSnapReleasesAsync(default);
Beispiel #2
0
        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]);
        }