From 949383f126349d512fd6434d6cb0e7018117c289 Mon Sep 17 00:00:00 2001 From: Eugene Grebenschikov Date: Fri, 9 Jun 2023 10:58:43 -0700 Subject: [PATCH] fix: add log validation --- tests/h2_otel.t | 27 +++++++++++++++++++++++---- tests/h2_otel_collector.t | 13 +++++++++++-- tests/otel.t | 32 +++++++++++++++++++++++++------- tests/otel_collector.t | 13 +++++++++++-- 4 files changed, 70 insertions(+), 15 deletions(-) diff --git a/tests/h2_otel.t b/tests/h2_otel.t index 0008e85..7b49016 100644 --- a/tests/h2_otel.t +++ b/tests/h2_otel.t @@ -159,7 +159,7 @@ foreach my $name ('localhost') { or die "Can't create certificate for $name: $!\n"; } -$t->try_run('no OTEL module')->plan(64); +$t->try_run('no OTEL module')->plan(66); ############################################################################### @@ -363,6 +363,19 @@ is($tp_headers_propagate->{'x-otel-tracestate'}, 'congo=ucfJifl5GOE,rojo=00f067aa0ba902b7', 'tracestate - trace context propagate (trace headers)'); +SKIP: { +skip "relies on error log contents", 2 unless $ENV{TEST_NGINX_UNSAFE}; + +$t->stop(); +my $log = $t->read_file("error.log"); + +like($log, qr/OTel\/grpc: Error parsing metadata: error=invalid value/, + 'log: error parsing metadata'); + +like($log, qr/OTel export failure: No status received/, 'log: export failure'); + +} + ############################################################################### sub http2_get { @@ -420,10 +433,14 @@ sub get_attr { $_ =~ /^attribute\d+/ && $$obj{$_}{key} eq '"' . $attr . '"' } keys %{$obj}; - $$obj{$res}{value}{$type} =~ s/(^\")|(\"$)//g - if $res && $type eq 'string_value'; + if (defined $res) { + $$obj{$res}{value}{$type} =~ s/(^\")|(\"$)//g + if $type eq 'string_value'; - return $$obj{$res}{value}{$type}; + return $$obj{$res}{value}{$type}; + } + + return undef; } sub decode_protobuf { @@ -538,6 +555,8 @@ sub grpc { reused: my $frames = $c->read(all => [{ fin => 1 }]); + $client->close(); + return $frames; }; diff --git a/tests/h2_otel_collector.t b/tests/h2_otel_collector.t index 25b3d0c..73ec157 100644 --- a/tests/h2_otel_collector.t +++ b/tests/h2_otel_collector.t @@ -167,7 +167,7 @@ open STDERR, ">&", \*OLDERR; $t->waitforsocket('127.0.0.1:' . port(4317)) or die 'No otel collector open socket'; -$t->try_run('no OTEL module')->plan(65); +$t->try_run('no OTEL module')->plan(67); ############################################################################### @@ -369,6 +369,15 @@ is($tp_headers_propagate->{'x-otel-tracestate'}, 'congo=ucfJifl5GOE,rojo=00f067aa0ba902b7', 'tracestate - trace context propagate (trace headers)'); +$t->stop(); +my $log = $t->read_file("error.log"); + +unlike($log, qr/OTel\/grpc: Error parsing metadata: error=invalid value/, + 'log: error parsing metadata'); + +unlike($log, qr/OTel export failure: No status received/, + 'log: export failure'); + ############################################################################### sub http2_get { @@ -424,7 +433,7 @@ sub get_attr { my ($res) = grep { $$_{"key"} eq $attr } @{$$obj{"attributes"}}; - return $res->{"value"}{$type}; + return defined $res ? $res->{"value"}{$type} : undef; } ############################################################################### diff --git a/tests/otel.t b/tests/otel.t index 76a579f..08bfa1f 100644 --- a/tests/otel.t +++ b/tests/otel.t @@ -125,10 +125,9 @@ http { } server { - otel_trace off; - - listen 127.0.0.1:8082 http2; + listen 127.0.0.1:8083 http2; server_name localhost; + otel_trace off; location / { return 200; @@ -157,7 +156,7 @@ foreach my $name ('localhost') { or die "Can't create certificate for $name: $!\n"; } -$t->try_run('no OTEL module')->plan(65); +$t->try_run('no OTEL module')->plan(67); ############################################################################### @@ -356,6 +355,19 @@ like($tp_resp_propagate, qr/Tracestate: congo=ucfJifl5GOE,rojo=00f067aa0ba902b7/, 'tracestate - trace context propagate (trace headers)'); +SKIP: { +skip "relies on error log contents", 2 unless $ENV{TEST_NGINX_UNSAFE}; + +$t->stop(); +my $log = $t->read_file("error.log"); + +like($log, qr/OTel\/grpc: Error parsing metadata: error=invalid value/, + 'log: error parsing metadata'); + +like($log, qr/OTel export failure: No status received/, 'log: export failure'); + +} + ############################################################################### sub http1_get { @@ -392,10 +404,14 @@ sub get_attr { $_ =~ /^attribute\d+/ && $$obj{$_}{key} eq '"' . $attr . '"' } keys %{$obj}; - $$obj{$res}{value}{$type} =~ s/(^\")|(\"$)//g - if $res && $type eq 'string_value'; + if (defined $res) { + $$obj{$res}{value}{$type} =~ s/(^\")|(\"$)//g + if $type eq 'string_value'; - return $$obj{$res}{value}{$type}; + return $$obj{$res}{value}{$type}; + } + + return undef; } sub decode_protobuf { @@ -510,6 +526,8 @@ sub grpc { reused: my $frames = $c->read(all => [{ fin => 1 }]); + $client->close(); + return $frames; }; diff --git a/tests/otel_collector.t b/tests/otel_collector.t index d323e25..b5d4ce2 100644 --- a/tests/otel_collector.t +++ b/tests/otel_collector.t @@ -165,7 +165,7 @@ open STDERR, ">&", \*OLDERR; $t->waitforsocket('127.0.0.1:' . port(4317)) or die 'No otel collector open socket'; -$t->try_run('no OTEL module')->plan(65); +$t->try_run('no OTEL module')->plan(67); ############################################################################### @@ -360,6 +360,15 @@ like($tp_resp_propagate, qr/Tracestate: congo=ucfJifl5GOE,rojo=00f067aa0ba902b7/, 'tracestate - trace context propagate (trace headers)'); +$t->stop(); +my $log = $t->read_file("error.log"); + +unlike($log, qr/OTel\/grpc: Error parsing metadata: error=invalid value/, + 'log: error parsing metadata'); + +unlike($log, qr/OTel export failure: No status received/, + 'log: export failure'); + ############################################################################### sub http1_get { @@ -394,7 +403,7 @@ sub get_attr { my ($res) = grep { $$_{"key"} eq $attr } @{$$obj{"attributes"}}; - return $res->{"value"}{$type}; + return defined $res ? $res->{"value"}{$type} : undef; } ###############################################################################