def test_multiple_backends_https_h1(multi_https_test_server_fixture): """Test that we can load-test multiple backends on https. Runs the CLI configured to use HTTP/1 with TLS against multiple test servers, and sanity checks statistics from both client and server. """ nighthawk_client_args = [ "--multi-target-use-https", "--multi-target-path", "/", "--duration", "100", "--termination-predicate", "benchmark.http_2xx:24" ] for uri in multi_https_test_server_fixture.getAllTestServerRootUris(): nighthawk_client_args.append("--multi-target-endpoint") nighthawk_client_args.append(uri.replace("https://", "").replace("/", "")) parsed_json, stderr = multi_https_test_server_fixture.runNighthawkClient(nighthawk_client_args) counters = multi_https_test_server_fixture.getNighthawkCounterMapFromJson(parsed_json) asserts.assertCounterEqual(counters, "benchmark.http_2xx", 25) asserts.assertCounterGreater(counters, "upstream_cx_rx_bytes_total", 0) # Assert that we at least have 1 connection per backend. It is possible that # the # of upstream_cx > # of backend connections for H1 as new connections # will spawn if the existing clients cannot keep up with the RPS. asserts.assertCounterGreaterEqual(counters, "upstream_cx_http1_total", 3) asserts.assertCounterGreaterEqual(counters, "upstream_cx_total", 3) asserts.assertCounterGreaterEqual(counters, "upstream_rq_pending_total", 3) asserts.assertCounterGreater(counters, "upstream_cx_tx_bytes_total", 0) asserts.assertCounterEqual(counters, "upstream_rq_total", 25) asserts.assertCounterEqual(counters, "default.total_match_count", 3) for parsed_server_json in multi_https_test_server_fixture.getAllTestServerStatisticsJsons(): single_2xx = multi_https_test_server_fixture.getServerStatFromJson( parsed_server_json, "http.ingress_http.downstream_rq_2xx") # Confirm that each backend receives some traffic asserts.assertGreaterEqual(single_2xx, 1)
def test_multiple_backends_https_h1(multi_https_test_server_fixture): """Test that we can load-test multiple backends on https. Runs the CLI configured to use HTTP/1 with TLS against multiple test servers, and sanity checks statistics from both client and server. """ nighthawk_client_args = [ "--multi-target-use-https", "--multi-target-path", "/", "--duration", "100", "--termination-predicate", "benchmark.http_2xx:24" ] for uri in multi_https_test_server_fixture.getAllTestServerRootUris(): nighthawk_client_args.append("--multi-target-endpoint") nighthawk_client_args.append(uri.replace("https://", "").replace("/", "")) parsed_json, stderr = multi_https_test_server_fixture.runNighthawkClient(nighthawk_client_args) counters = multi_https_test_server_fixture.getNighthawkCounterMapFromJson(parsed_json) asserts.assertCounterEqual(counters, "benchmark.http_2xx", 25) asserts.assertCounterEqual(counters, "upstream_cx_http1_total", 3) asserts.assertCounterGreater(counters, "upstream_cx_rx_bytes_total", 0) asserts.assertCounterEqual(counters, "upstream_cx_total", 3) asserts.assertCounterGreater(counters, "upstream_cx_tx_bytes_total", 0) asserts.assertCounterEqual(counters, "upstream_rq_pending_total", 3) asserts.assertCounterEqual(counters, "upstream_rq_total", 25) asserts.assertCounterEqual(counters, "default.total_match_count", 3) total_2xx = 0 for parsed_server_json in multi_https_test_server_fixture.getAllTestServerStatisticsJsons(): single_2xx = multi_https_test_server_fixture.getServerStatFromJson( parsed_server_json, "http.ingress_http.downstream_rq_2xx") asserts.assertBetweenInclusive(single_2xx, 8, 9) total_2xx += single_2xx asserts.assertBetweenInclusive(total_2xx, 24, 25)
def test_http_h2_mini_stress_test_open_loop(http_test_server_fixture): """Run an H2 open loop stress test. We expect higher overflow counts.""" counters = _mini_stress_test(http_test_server_fixture, [ http_test_server_fixture.getTestServerRootUri(), "--rps", "10000", "--max-pending-requests", "1", "--h2", "--open-loop", "--max-active-requests", "1", "--duration", "100", "--termination-predicate", "benchmark.http_2xx:99", "--simple-warmup" ]) # we expect pool overflows asserts.assertCounterGreater(counters, "benchmark.pool_overflow", 10)