fix: add log validation

This commit is contained in:
Eugene Grebenschikov 2023-06-09 10:58:43 -07:00
parent 3d172545d1
commit 949383f126
4 changed files with 70 additions and 15 deletions

View file

@ -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;
};

View file

@ -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;
}
###############################################################################

View file

@ -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;
};

View file

@ -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;
}
###############################################################################