private async Task ClientCertTest(TestVariant variant, bool sendClientCert)
        {
            var port = TestPortHelper.GetNextSSLPort();
            var deploymentParameters = _fixture.GetBaseDeploymentParameters(variant);

            deploymentParameters.ApplicationBaseUriHint = $"https://localhost:{port}/";
            deploymentParameters.AddHttpsToServerConfig();

            var handler = new HttpClientHandler
            {
                ServerCertificateCustomValidationCallback = (a, b, c, d) => true,
                ClientCertificateOptions = ClientCertificateOption.Manual,
            };

            X509Certificate2 cert = null;

            if (sendClientCert)
            {
                cert = _certFixture.GetOrCreateCertificate();
                handler.ClientCertificates.Add(cert);
            }

            var deploymentResult = await DeployAsync(deploymentParameters);

            var client   = deploymentResult.CreateClient(handler);
            var response = await client.GetAsync("GetClientCert");

            var responseText = await response.Content.ReadAsStringAsync();

            try
            {
                if (sendClientCert)
                {
                    Assert.Equal($"Enabled;{cert.GetCertHashString()}", responseText);
                }
                else
                {
                    Assert.Equal("Disabled", responseText);
                }
            }
            catch (Exception ex)
            {
                Logger.LogError($"Certificate is invalid. Issuer name: {cert.Issuer}");
                using (var store = new X509Store(StoreName.Root, StoreLocation.LocalMachine))
                {
                    Logger.LogError($"List of current certificates in root store:");
                    store.Open(OpenFlags.ReadWrite);
                    foreach (var otherCert in store.Certificates)
                    {
                        Logger.LogError(otherCert.Issuer);
                    }
                    store.Close();
                }
                throw ex;
            }
        }
Beispiel #2
0
        public async Task AppOfflineDroppedWhileSiteFailedToStartInShim_AppOfflineServed(HostingModel hostingModel, int statusCode, string content)
        {
            var deploymentParameters = _fixture.GetBaseDeploymentParameters(hostingModel: hostingModel);

            deploymentParameters.WebConfigActionList.Add(WebConfigHelpers.AddOrModifyAspNetCoreSection("processPath", "nonexistent"));

            var deploymentResult = await DeployAsync(deploymentParameters);

            var result = await deploymentResult.HttpClient.GetAsync("/");

            Assert.Equal(statusCode, (int)result.StatusCode);
            Assert.Contains(content, await result.Content.ReadAsStringAsync());

            AddAppOffline(deploymentResult.ContentRoot);

            await AssertAppOffline(deploymentResult);

            DeletePublishOutput(deploymentResult);
        }
Beispiel #3
0
        public async Task ClientDisconnectStress(HostingModel hostingModel)
        {
            var site = await StartAsync(_fixture.GetBaseDeploymentParameters(hostingModel));

            var maxRequestSize = 1000;
            var blockSize      = 40;
            var random         = new Random();

            async Task RunRequests()
            {
                using (var connection = new TestConnection(site.HttpClient.BaseAddress.Port))
                {
                    await connection.Send(
                        "POST /ReadAndFlushEcho HTTP/1.1",
                        $"Content-Length: {maxRequestSize}",
                        "Host: localhost",
                        "Connection: close",
                        "",
                        "");

                    var disconnectAfter = random.Next(maxRequestSize);
                    var data            = new byte[blockSize];
                    for (int i = 0; i < disconnectAfter / blockSize; i++)
                    {
                        await connection.Stream.WriteAsync(data);
                    }
                }
            }

            List <Task> tasks = new List <Task>();

            for (int i = 0; i < 100; i++)
            {
                tasks.Add(Task.Run(RunRequests));
            }

            await Task.WhenAll(tasks);

            StopServer();
        }