private static async Task Mix(int i, IService request)
        {
            switch (i % 3)
            {
            case 0:
            {
                var result = await request.GetProductAsync(42);

                result.Should().NotBeNull();
                result.Id.Should().Be(42);
                result.Category.Should().Be("Nothing");
                result.Name.Should().Be("Product");
                result.Price.Should().Be(1.99M);
                break;
            }

            case 1:
            {
                var result = await request.PostProductAsync(new Product
                    {
                        Id       = i,
                        Category = "Hello",
                        Name     = "World",
                        Price    = 9.49M
                    });

                result.Should().NotBeNull();
                result.Id.Should().Be(i);
                result.Category.Should().Be("Hello");
                result.Name.Should().Be("World");
                result.Price.Should().Be(9.49M);
                break;
            }

            case 2:
            {
                var data = LargeDataProvider.Next();

                var result = await request.PostLargeDataAsync(new MemoryStream(data));

                result.Should().NotBeNull();
                (await LargeDataProvider.Compare(data, result)).Should().BeTrue();
                break;
            }
            }
        }
        private static async Task IndividualMix(int i)
        {
            switch (i % 8)
            {
            case 0:
            {
                var request = ClientFactory.CreateRequest();

                var result = await request.GetProductAsync(42);

                result.Should().NotBeNull();
                result.Id.Should().Be(42);
                result.Category.Should().Be("Nothing");
                result.Name.Should().Be("Product");
                result.Price.Should().Be(1.99M);
                break;
            }

            case 3:
            {
                var request = ClientFactory.CreateRequestWithClientCertificate();

                var result = await request.GetProductAsync(42);

                result.Should().NotBeNull();
                result.Id.Should().Be(42);
                result.Category.Should().Be("Nothing");
                result.Name.Should().Be("Product");
                result.Price.Should().Be(1.99M);
                break;
            }

            case 1:
            {
                var request = ClientFactory.CreateRequest();

                var result = await request.PostProductAsync(new Product
                    {
                        Id       = i,
                        Category = "Hello",
                        Name     = "World",
                        Price    = 9.49M
                    });

                result.Should().NotBeNull();
                result.Id.Should().Be(i);
                result.Category.Should().Be("Hello");
                result.Name.Should().Be("World");
                result.Price.Should().Be(9.49M);
                break;
            }

            case 4:
            {
                var request = ClientFactory.CreateRequestWithClientCertificate();

                var result = await request.PostProductAsync(new Product
                    {
                        Id       = i,
                        Category = "Hello",
                        Name     = "World",
                        Price    = 9.49M
                    });

                result.Should().NotBeNull();
                result.Id.Should().Be(i);
                result.Category.Should().Be("Hello");
                result.Name.Should().Be("World");
                result.Price.Should().Be(9.49M);
                break;
            }

            case 2:
            {
                var request = ClientFactory.CreateRequest();

                var data = LargeDataProvider.Next();

                var result = await request.PostLargeDataAsync(new MemoryStream(data));

                result.Should().NotBeNull();
                (await LargeDataProvider.Compare(data, result)).Should().BeTrue();
                break;
            }

            case 5:
            {
                var request = ClientFactory.CreateRequestWithClientCertificate();

                var data = LargeDataProvider.Next();

                var result = await request.PostLargeDataAsync(new MemoryStream(data));

                result.Should().NotBeNull();
                (await LargeDataProvider.Compare(data, result)).Should().BeTrue();
                break;
            }

            case 6:
            {
                var request = ClientFactory.CreateRequestWithClientCertificate(TestEnvironmentSetup.ServerCertificate, TestEnvironmentSetup.ServerCertificatePassword);
                Assert.ThrowsAsync <HttpRequestException>(async() => await request.GetProductAsync(42));
                break;
            }
            }
        }