Пример #1
0
        private async Task OnExecuteAsync()
        {
            var args = new ToolArguments
            {
                LatestPreview = LatestPreview,
                Headless      = bool.TryParse(Headless, out var headless) && headless,
                Latest        = Latest
            };

            var writer = new ConsoleTextWriter();

            if (args.Headless)
            {
                writer.WriteLine("Running in headless mode");
            }

            Acquirable acquirable = new GlobalJsonVersion(writer);

            if (args.LatestPreview)
            {
                acquirable = new LatestPreviewVersion(writer);
            }
            if (args.Latest)
            {
                acquirable = new LatestNonPreviewVersion(writer);
            }

            await InstallSdkTool.RunAsync(acquirable, writer, args);
        }
    }
        public void AcquireSdk()
        {
            using var sw = new StringWriter();
            Console.SetOut(sw);

            var textWriter         = new ConsoleTextWriter();
            var installerLauncher  = new TestInstallerLauncher();
            var platformIdentifier = new TestPlatformIdentifier();
            var dotnetInfo         = new TestDotnetInfo();

            var options = new HttpClientInterceptorOptions();

            _ = new HttpRequestInterceptionBuilder()
                .Requests()
                .ForHttps()
                .ForGet()
                .ForHost("raw.githubusercontent.com")
                .ForPath("/dotnet/core/master/release-notes/releases-index.json")
                .Responds()
                .WithContentStream(() => File.OpenRead("./TestReleaseData/releases-index.json"))
                .RegisterWith(options);

            _ = new HttpRequestInterceptionBuilder()
                .Requests()
                .ForHttps()
                .ForHost("dotnetcli.blob.core.windows.net")
                .ForGet()
                .ForPath("/dotnet/release-metadata/2.2/releases.json")
                .Responds()
                .WithContentStream(() => File.OpenRead("./TestReleaseData/2.2-releases.json"))
                .RegisterWith(options);

            _ = new HttpRequestInterceptionBuilder()
                .Requests()
                .ForHttps()
                .ForHost("download.visualstudio.microsoft.com")
                .ForGet()
                .ForPath("/download/pr/29457b8f-6262-4c4b-8a54-eef308346842/3c7ec575796a2ef0e826a07ca4d13084/dotnet-sdk-2.2.100-osx-x64.pkg")
                .Responds()
                .WithContentStream(() => new MemoryStream(Encoding.UTF8.GetBytes("install me")))
                .RegisterWith(options);

            using var httpClient = options.ThrowsOnMissingRegistration().CreateHttpClient();

            var a = new GlobalJsonVersion(textWriter);

            new SdkAcquirer(httpClient, textWriter, installerLauncher, platformIdentifier, dotnetInfo)
            .Acquire(a).Wait();

            var installerPath = installerLauncher.LastLaunchedInstaller;

            installerPath.ShouldNotBeNullOrEmpty();
            File.ReadAllLines(installerPath).ShouldHaveSingleItem().ShouldBe("install me");
        }