diff --git a/tests/h2_otel.t b/tests/h2_otel.t index 3f3123f..0008e85 100644 --- a/tests/h2_otel.t +++ b/tests/h2_otel.t @@ -175,17 +175,18 @@ my ($t_headers_ignore, $tp_headers_ignore, $t_headers_extract, $tp_headers_extract, $t_headers_inject, $tp_headers_inject, $t_headers_propagate, $tp_headers_propagate); -my ($tp_headers, $tp_resp) = http2_get_traceparent('/trace-on'); -my ($t_headers, $t_resp) = http2_get_ssl('/trace-on'); +my ($tp_headers, $tp_resp) = http2_get('/trace-on', trace_headers => 1); +my ($t_headers, $t_resp) = http2_get('/trace-on', ssl => 1); ($t_headers_ignore, $_) = http2_get('/context-ignore'); -($tp_headers_ignore, $_) = http2_get_traceparent('/context-ignore'); +($tp_headers_ignore, $_) = http2_get('/context-ignore', trace_headers => 1); ($t_headers_extract, $_) = http2_get('/context-extract'); -($tp_headers_extract, $_) = http2_get_traceparent('/context-extract'); +($tp_headers_extract, $_) = http2_get('/context-extract', trace_headers => 1); ($t_headers_inject, $_) = http2_get('/context-inject'); -($tp_headers_inject, $_) = http2_get_traceparent('/context-inject'); +($tp_headers_inject, $_) = http2_get('/context-inject', trace_headers => 1); ($t_headers_propagate, $_) = http2_get('/context-propagate'); -($tp_headers_propagate, $_) = http2_get_traceparent('/context-propagate'); +($tp_headers_propagate, $_) = + http2_get('/context-propagate', trace_headers => 1); my $frames = $f->{http_start}(); my ($frame) = grep { $_->{type} eq "DATA" } @$frames; @@ -365,59 +366,31 @@ is($tp_headers_propagate->{'x-otel-tracestate'}, ############################################################################### sub http2_get { - my ($path) = @_; + my ($path, %extra) = @_; my ($frames, $frame); - my $s = Test::Nginx::HTTP2->new(); + my $s = $extra{ssl} + ? Test::Nginx::HTTP2->new( + undef, socket => get_ssl_socket(8082, ['h2'])) + : Test::Nginx::HTTP2->new(); - my $sid = $s->new_stream({ path => $path }); - $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); - - ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; - my $headers = $frame->{headers}; - - ($frame) = grep { $_->{type} eq "DATA" } @$frames; - my $data = $frame->{data}; - - return $headers, $data; -} - -sub http2_get_traceparent { - my ($path) = @_; - my ($frames, $frame); - - my $s = Test::Nginx::HTTP2->new(); - - my $sid = $s->new_stream({ headers => [ - { name => ':method', value => 'GET' }, - { name => ':scheme', value => 'http' }, - { name => ':path', value => $path }, - { name => ':authority', value => 'localhost' }, - { name => 'user-agent', value => 'nginx-tests', mode => 2 }, - { name => 'traceparent', - value => '00-0af7651916cd43dd8448eb211c80319c-b9c7c989f97918e1-01', - mode => 2 }, - { name => 'tracestate', - value => 'congo=ucfJifl5GOE,rojo=00f067aa0ba902b7', mode => 2 }]}); - $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); - - ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; - my $headers = $frame->{headers}; - - ($frame) = grep { $_->{type} eq "DATA" } @$frames; - my $data = $frame->{data}; - - return $headers, $data; -} - -sub http2_get_ssl { - my ($path) = @_; - my ($frames, $frame); - - my $s = Test::Nginx::HTTP2->new(undef, - socket => get_ssl_socket(8082, ['h2'])); - - my $sid = $s->new_stream({ path => $path }); + my $sid = $extra{trace_headers} + ? $s->new_stream({ headers => [ + { name => ':method', value => 'GET' }, + { name => ':scheme', value => 'http' }, + { name => ':path', value => $path }, + { name => ':authority', value => 'localhost' }, + { name => 'user-agent', value => 'nginx-tests', mode => 2 }, + { name => 'traceparent', + value => '00-0af7651916cd43dd8448eb211c80319c-' . + 'b9c7c989f97918e1-01', + mode => 2 + }, + { name => 'tracestate', + value => 'congo=ucfJifl5GOE,rojo=00f067aa0ba902b7', + mode => 2 + }]}) + : $s->new_stream({ path => $path }); $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; diff --git a/tests/h2_otel_collector.t b/tests/h2_otel_collector.t index 8e6d8dc..25b3d0c 100644 --- a/tests/h2_otel_collector.t +++ b/tests/h2_otel_collector.t @@ -180,17 +180,18 @@ my ($t_headers_ignore, $tp_headers_ignore, $t_headers_extract, $tp_headers_extract, $t_headers_inject, $tp_headers_inject, $t_headers_propagate, $tp_headers_propagate); -my ($tp_headers, $tp_resp) = http2_get_traceparent('/trace-on'); -my ($t_headers, $t_resp) = http2_get_ssl('/trace-on'); +my ($tp_headers, $tp_resp) = http2_get('/trace-on', trace_headers => 1); +my ($t_headers, $t_resp) = http2_get('/trace-on', ssl => 1); ($t_headers_ignore, $_) = http2_get('/context-ignore'); -($tp_headers_ignore, $_) = http2_get_traceparent('/context-ignore'); +($tp_headers_ignore, $_) = http2_get('/context-ignore', trace_headers => 1); ($t_headers_extract, $_) = http2_get('/context-extract'); -($tp_headers_extract, $_) = http2_get_traceparent('/context-extract'); +($tp_headers_extract, $_) = http2_get('/context-extract', trace_headers => 1); ($t_headers_inject, $_) = http2_get('/context-inject'); -($tp_headers_inject, $_) = http2_get_traceparent('/context-inject'); +($tp_headers_inject, $_) = http2_get('/context-inject', trace_headers => 1); ($t_headers_propagate, $_) = http2_get('/context-propagate'); -($tp_headers_propagate, $_) = http2_get_traceparent('/context-propagate'); +($tp_headers_propagate, $_) = + http2_get('/context-propagate', trace_headers => 1); #batch1 (5 reqeusts) http2_get('/trace-on') for (1..5); @@ -371,59 +372,31 @@ is($tp_headers_propagate->{'x-otel-tracestate'}, ############################################################################### sub http2_get { - my ($path) = @_; + my ($path, %extra) = @_; my ($frames, $frame); - my $s = Test::Nginx::HTTP2->new(); + my $s = $extra{ssl} + ? Test::Nginx::HTTP2->new( + undef, socket => get_ssl_socket(8082, ['h2'])) + : Test::Nginx::HTTP2->new(); - my $sid = $s->new_stream({ path => $path }); - $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); - - ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; - my $headers = $frame->{headers}; - - ($frame) = grep { $_->{type} eq "DATA" } @$frames; - my $data = $frame->{data}; - - return $headers, $data; -} - -sub http2_get_traceparent { - my ($path) = @_; - my ($frames, $frame); - - my $s = Test::Nginx::HTTP2->new(); - - my $sid = $s->new_stream({ headers => [ - { name => ':method', value => 'GET' }, - { name => ':scheme', value => 'http' }, - { name => ':path', value => $path }, - { name => ':authority', value => 'localhost' }, - { name => 'user-agent', value => 'nginx-tests', mode => 2 }, - { name => 'traceparent', - value => '00-0af7651916cd43dd8448eb211c80319c-b9c7c989f97918e1-01', - mode => 2 }, - { name => 'tracestate', - value => 'congo=ucfJifl5GOE,rojo=00f067aa0ba902b7', mode => 2 }]}); - $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); - - ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; - my $headers = $frame->{headers}; - - ($frame) = grep { $_->{type} eq "DATA" } @$frames; - my $data = $frame->{data}; - - return $headers, $data; -} - -sub http2_get_ssl { - my ($path) = @_; - my ($frames, $frame); - - my $s = Test::Nginx::HTTP2->new(undef, - socket => get_ssl_socket(8082, ['h2'])); - - my $sid = $s->new_stream({ path => $path }); + my $sid = $extra{trace_headers} + ? $s->new_stream({ headers => [ + { name => ':method', value => 'GET' }, + { name => ':scheme', value => 'http' }, + { name => ':path', value => $path }, + { name => ':authority', value => 'localhost' }, + { name => 'user-agent', value => 'nginx-tests', mode => 2 }, + { name => 'traceparent', + value => '00-0af7651916cd43dd8448eb211c80319c-' . + 'b9c7c989f97918e1-01', + mode => 2 + }, + { name => 'tracestate', + value => 'congo=ucfJifl5GOE,rojo=00f067aa0ba902b7', + mode => 2 + }]}) + : $s->new_stream({ path => $path }); $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; diff --git a/tests/otel.t b/tests/otel.t index 0acc3f8..76a579f 100644 --- a/tests/otel.t +++ b/tests/otel.t @@ -165,20 +165,20 @@ my $p = port(4317); my $f = grpc(); #do requests -my $t_off_resp = http_get('/trace-off'); +my $t_off_resp = http1_get('/trace-off'); #batch0 (10 requests) -my $tp_resp = http_get_traceparent('/trace-on'); -my $t_resp = http_get_ssl('/trace-on'); +my $tp_resp = http1_get('/trace-on', trace_headers => 1); +my $t_resp = http1_get('/trace-on', ssl => 1); -my $t_resp_ignore = http_get('/context-ignore'); -my $tp_resp_ignore = http_get_traceparent('/context-ignore'); -my $t_resp_extract = http_get('/context-extract'); -my $tp_resp_extract = http_get_traceparent('/context-extract'); -my $t_resp_inject = http_get('/context-inject'); -my $tp_resp_inject = http_get_traceparent('/context-inject'); -my $t_resp_propagate = http_get('/context-propagate'); -my $tp_resp_propagate = http_get_traceparent('/context-propagate'); +my $t_resp_ignore = http1_get('/context-ignore'); +my $tp_resp_ignore = http1_get('/context-ignore', trace_headers => 1); +my $t_resp_extract = http1_get('/context-extract'); +my $tp_resp_extract = http1_get('/context-extract', trace_headers => 1); +my $t_resp_inject = http1_get('/context-inject'); +my $tp_resp_inject = http1_get('/context-inject', trace_headers => 1); +my $t_resp_propagate = http1_get('/context-propagate'); +my $tp_resp_propagate = http1_get('/context-propagate', trace_headers => 1); my $frames = $f->{http_start}(); my ($frame) = grep { $_->{type} eq "DATA" } @$frames; @@ -187,7 +187,7 @@ my $batch0 = to_hash(decode_protobuf(substr($frame->{data}, 8))); my $spans = $$batch0{scope_spans}; #batch1 (5 reqeusts) -http_get('/trace-on') for (1..5); +http1_get('/trace-on') for (1..5); $frames = $f->{http_start}(); ($frame) = grep { $_->{type} eq "DATA" } @$frames; @@ -246,7 +246,7 @@ is(get_attr("http.scheme", "string_value", $$spans{span1}), 'https', 'http.scheme metric - trace on (https)'); is(get_attr("http.flavor", "string_value", $$spans{span1}), '1.0', 'http.flavor metric - trace on (https)'); -isnt(get_attr("http.user_agent", "string_value", $$spans{span1}), +is(get_attr("http.user_agent", "string_value", $$spans{span1}), 'nginx-tests', 'http.user_agent metric - trace on (https)'); is(get_attr("http.request_content_length", "int_value", $$spans{span1}), 0, 'http.request_content_length metric - trace on (https)'); @@ -358,25 +358,23 @@ like($tp_resp_propagate, ############################################################################### -sub http_get_traceparent { - my ($path) = @_; +sub http1_get { + my ($path, %extra) = @_; - return http(< $s); + return http($r . "\n", socket => $s); } sub get_ssl_socket { diff --git a/tests/otel_collector.t b/tests/otel_collector.t index c5ac2a8..d323e25 100644 --- a/tests/otel_collector.t +++ b/tests/otel_collector.t @@ -170,23 +170,23 @@ $t->try_run('no OTEL module')->plan(65); ############################################################################### #do requests -my $t_off_resp = http_get('/trace-off'); +my $t_off_resp = http1_get('/trace-off'); #batch0 (10 requests) -my $tp_resp = http_get_traceparent('/trace-on'); -my $t_resp = http_get_ssl('/trace-on'); +my $tp_resp = http1_get('/trace-on', trace_headers => 1); +my $t_resp = http1_get('/trace-on', ssl => 1); -my $t_resp_ignore = http_get('/context-ignore'); -my $tp_resp_ignore = http_get_traceparent('/context-ignore'); -my $t_resp_extract = http_get('/context-extract'); -my $tp_resp_extract = http_get_traceparent('/context-extract'); -my $t_resp_inject = http_get('/context-inject'); -my $tp_resp_inject = http_get_traceparent('/context-inject'); -my $t_resp_propagate = http_get('/context-propagate'); -my $tp_resp_propagate = http_get_traceparent('/context-propagate'); +my $t_resp_ignore = http1_get('/context-ignore'); +my $tp_resp_ignore = http1_get('/context-ignore', trace_headers => 1); +my $t_resp_extract = http1_get('/context-extract'); +my $tp_resp_extract = http1_get('/context-extract', trace_headers => 1); +my $t_resp_inject = http1_get('/context-inject'); +my $tp_resp_inject = http1_get('/context-inject', trace_headers => 1); +my $t_resp_propagate = http1_get('/context-propagate'); +my $tp_resp_propagate = http1_get('/context-propagate', trace_headers => 1); #batch1 (5 reqeusts) -http_get('/trace-on') for (1..5); +http1_get('/trace-on') for (1..5); #waiting batch1 is sent to collector for 1s select undef, undef, undef, 1; @@ -263,7 +263,7 @@ is(get_attr("http.scheme", "stringValue", $$spans[1]), 'https', 'http.scheme metric - trace on (https)'); is(get_attr("http.flavor", "stringValue", $$spans[1]), '1.0', 'http.flavor metric - trace on (https)'); -isnt(get_attr("http.user_agent", "stringValue", $$spans[1]), 'nginx-tests', +is(get_attr("http.user_agent", "stringValue", $$spans[1]), 'nginx-tests', 'http.user_agent metric - trace on (https)'); is(get_attr("http.request_content_length", "intValue", $$spans[1]), 0, 'http.request_content_length metric - trace on (https)'); @@ -362,25 +362,23 @@ like($tp_resp_propagate, ############################################################################### -sub http_get_traceparent { - my ($path) = @_; +sub http1_get { + my ($path, %extra) = @_; - return http(< $s); + return http($r . "\n", socket => $s); } sub get_ssl_socket {