@@ -6,79 +6,94 @@ import { mapStatus } from '../../src/utils/mapStatus';
6
6
import { createSpan } from '../helpers/createSpan' ;
7
7
8
8
describe ( 'mapStatus' , ( ) => {
9
- const statusTestTable : [ number , undefined | number | string , undefined | string , SpanStatus ] [ ] = [
10
- [ - 1 , undefined , undefined , { code : SPAN_STATUS_ERROR , message : 'unknown_error' } ] ,
11
- [ 3 , undefined , undefined , { code : SPAN_STATUS_ERROR , message : 'unknown_error' } ] ,
12
- [ 0 , undefined , undefined , { code : SPAN_STATUS_OK } ] ,
13
- [ 1 , undefined , undefined , { code : SPAN_STATUS_OK } ] ,
14
- [ 2 , undefined , undefined , { code : SPAN_STATUS_ERROR , message : 'unknown_error' } ] ,
15
-
9
+ const statusTestTable : [ undefined | number | string , undefined | string , SpanStatus ] [ ] = [
16
10
// http codes
17
- [ 2 , 400 , undefined , { code : SPAN_STATUS_ERROR , message : 'failed_precondition ' } ] ,
18
- [ 2 , 401 , undefined , { code : SPAN_STATUS_ERROR , message : 'unauthenticated' } ] ,
19
- [ 2 , 403 , undefined , { code : SPAN_STATUS_ERROR , message : 'permission_denied' } ] ,
20
- [ 2 , 404 , undefined , { code : SPAN_STATUS_ERROR , message : 'not_found' } ] ,
21
- [ 2 , 409 , undefined , { code : SPAN_STATUS_ERROR , message : 'aborted ' } ] ,
22
- [ 2 , 429 , undefined , { code : SPAN_STATUS_ERROR , message : 'resource_exhausted' } ] ,
23
- [ 2 , 499 , undefined , { code : SPAN_STATUS_ERROR , message : 'cancelled' } ] ,
24
- [ 2 , 500 , undefined , { code : SPAN_STATUS_ERROR , message : 'internal_error' } ] ,
25
- [ 2 , 501 , undefined , { code : SPAN_STATUS_ERROR , message : 'unimplemented' } ] ,
26
- [ 2 , 503 , undefined , { code : SPAN_STATUS_ERROR , message : 'unavailable' } ] ,
27
- [ 2 , 504 , undefined , { code : SPAN_STATUS_ERROR , message : 'deadline_exceeded' } ] ,
28
- [ 2 , 999 , undefined , { code : SPAN_STATUS_ERROR , message : 'unknown_error' } ] ,
11
+ [ 400 , undefined , { code : SPAN_STATUS_ERROR , message : 'invalid_argument ' } ] ,
12
+ [ 401 , undefined , { code : SPAN_STATUS_ERROR , message : 'unauthenticated' } ] ,
13
+ [ 403 , undefined , { code : SPAN_STATUS_ERROR , message : 'permission_denied' } ] ,
14
+ [ 404 , undefined , { code : SPAN_STATUS_ERROR , message : 'not_found' } ] ,
15
+ [ 409 , undefined , { code : SPAN_STATUS_ERROR , message : 'already_exists ' } ] ,
16
+ [ 429 , undefined , { code : SPAN_STATUS_ERROR , message : 'resource_exhausted' } ] ,
<
F438
tr class="diff-line-row">
17
+ [ 499 , undefined , { code : SPAN_STATUS_ERROR , message : 'cancelled' } ] ,
18
+ [ 500 , undefined , { code : SPAN_STATUS_ERROR , message : 'internal_error' } ] ,
19
+ [ 501 , undefined , { code : SPAN_STATUS_ERROR , message : 'unimplemented' } ] ,
20
+ [ 503 , undefined , { code : SPAN_STATUS_ERROR , message : 'unavailable' } ] ,
21
+ [ 504 , undefined , { code : SPAN_STATUS_ERROR , message : 'deadline_exceeded' } ] ,
22
+ [ 999 , undefined , { code : SPAN_STATUS_ERROR , message : 'unknown_error' } ] ,
29
23
30
- [ 2 , '400' , undefined , { code : SPAN_STATUS_ERROR , message : 'failed_precondition ' } ] ,
31
- [ 2 , '401' , undefined , { code : SPAN_STATUS_ERROR , message : 'unauthenticated' } ] ,
32
- [ 2 , '403' , undefined , { code : SPAN_STATUS_ERROR , message : 'permission_denied' } ] ,
33
- [ 2 , '404' , undefined , { code : SPAN_STATUS_ERROR , message : 'not_found' } ] ,
34
- [ 2 , '409' , undefined , { code : SPAN_STATUS_ERROR , message : 'aborted ' } ] ,
35
- [ 2 , '429' , undefined , { code : SPAN_STATUS_ERROR , message : 'resource_exhausted' } ] ,
36
- [ 2 , '499' , undefined , { code : SPAN_STATUS_ERROR , message : 'cancelled' } ] ,
37
- [ 2 , '500' , undefined , { code : SPAN_STATUS_ERROR , message : 'internal_error' } ] ,
38
- [ 2 , '501' , undefined , { code : SPAN_STATUS_ERROR , message : 'unimplemented' } ] ,
39
- [ 2 , '503' , undefined , { code : SPAN_STATUS_ERROR , message : 'unavailable' } ] ,
40
- [ 2 , '504' , undefined , { code : SPAN_STATUS_ERROR , message : 'deadline_exceeded' } ] ,
41
- [ 2 , '999' , undefined , { code : SPAN_STATUS_ERROR , message : 'unknown_error' } ] ,
24
+ [ '400' , undefined , { code : SPAN_STATUS_ERROR , message : 'invalid_argument ' } ] ,
25
+ [ '401' , undefined , { code : SPAN_STATUS_ERROR , message : 'unauthenticated' } ] ,
26
+ [ '403' , undefined , { code : SPAN_STATUS_ERROR , message : 'permission_denied' } ] ,
27
+ [ '404' , undefined , { code : SPAN_STATUS_ERROR , message : 'not_found' } ] ,
28
+ [ '409' , undefined , { code : SPAN_STATUS_ERROR , message : 'already_exists ' } ] ,
29
+ [ '429' , undefined , { code : SPAN_STATUS_ERROR , message : 'resource_exhausted' } ] ,
30
+ [ '499' , undefined , { code : SPAN_STATUS_ERROR , message : 'cancelled' } ] ,
31
+ [ '500' , undefined , { code : SPAN_STATUS_ERROR , message : 'internal_error' } ] ,
32
+ [ '501' , undefined , { code : SPAN_STATUS_ERROR , message : 'unimplemented' } ] ,
33
+ [ '503' , undefined , { code : SPAN_STATUS_ERROR , message : 'unavailable' } ] ,
34
+ [ '504' , undefined , { code : SPAN_STATUS_ERROR , message : 'deadline_exceeded' } ] ,
35
+ [ '999' , undefined , { code : SPAN_STATUS_ERROR , message : 'unknown_error' } ] ,
42
36
43
37
// grpc codes
44
- [ 2 , undefined , '1' , { code : SPAN_STATUS_ERROR , message : 'cancelled' } ] ,
45
- [ 2 , undefined , '2' , { code : SPAN_STATUS_ERROR , message : 'unknown_error' } ] ,
46
- [ 2 , undefined , '3' , { code : SPAN_STATUS_ERROR , message : 'invalid_argument' } ] ,
47
- [ 2 , undefined , '4' , { code : SPAN_STATUS_ERROR , message : 'deadline_exceeded' } ] ,
48
- [ 2 , undefined , '5' , { code : SPAN_STATUS_ERROR , message : 'not_found' } ] ,
49
- [ 2 , undefined , '6' , { code : SPAN_STATUS_ERROR , message : 'already_exists' } ] ,
50
- [ 2 , undefined , '7' , { code : SPAN_STATUS_ERROR , message : 'permission_denied' } ] ,
51
- [ 2 , undefined , '8' , { code : SPAN_STATUS_ERROR , message : 'resource_exhausted' } ] ,
52
- [ 2 , undefined , '9' , { code : SPAN_STATUS_ERROR , message : 'failed_precondition' } ] ,
53
- [ 2 , undefined , '10' , { code : SPAN_STATUS_ERROR , message : 'aborted' } ] ,
54
- [ 2 , undefined , '11' , { code : SPAN_STATUS_ERROR , message : 'out_of_range' } ] ,
55
- [ 2 , undefined , '12' , { code : SPAN_STATUS_ERROR , message : 'unimplemented' } ] ,
56
- [ 2 , undefined , '13' , { code : SPAN_STATUS_ERROR , message : 'internal_error' } ] ,
57
- [ 2 , undefined , '14' , { code : SPAN_STATUS_ERROR , message : 'unavailable' } ] ,
58
- [ 2 , undefined , '15' , { code : SPAN_STATUS_ERROR , message : 'data_loss' } ] ,
59
- [ 2 , undefined , '16' , { code : SPAN_STATUS_ERROR , message : 'unauthenticated' } ] ,
60
- [ 2 , undefined , '999' , { code : SPAN_STATUS_ERROR , message : 'unknown_error' } ] ,
38
+ [ undefined , '1' , { code : SPAN_STATUS_ERROR , message : 'cancelled' } ] ,
39
+ [ undefined , '2' , { code : SPAN_STATUS_ERROR , message : 'unknown_error' } ] ,
40
+ [ undefined , '3' , { code : SPAN_STATUS_ERROR , message : 'invalid_argument' } ] ,
41
+ [ undefined , '4' , { code : SPAN_STATUS_ERROR , message : 'deadline_exceeded' } ] ,
42
+ [ undefined , '5' , { code : SPAN_STATUS_ERROR , message : 'not_found' } ] ,
43
+ [ undefined , '6' , { code : SPAN_STATUS_ERROR , message : 'already_exists' } ] ,
44
+ [ undefined , '7' , { code : SPAN_STATUS_ERROR , message : 'permission_denied' } ] ,
45
+ [ undefined , '8' , { code : SPAN_STATUS_ERROR , message : 'resource_exhausted' } ] ,
46
+ [ undefined , '9' , { code : SPAN_STATUS_ERROR , message : 'failed_precondition' } ] ,
47
+ [ undefined , '10' , { code : SPAN_STATUS_ERROR , message : 'aborted' } ] ,
48
+ [ undefined , '11' , { code : SPAN_STATUS_ERROR , message : 'out_of_range' } ] ,
49
+ [ undefined , '12' , { code : SPAN_STATUS_ERROR , message : 'unimplemented' } ] ,
50
+ [ undefined , '13' , { code : SPAN_STATUS_ERROR , message : 'internal_error' } ] ,
51
+ [ undefined , '14' , { code : SPAN_STATUS_ERROR , message : 'unavailable' } ] ,
52
+ [ undefined , '15' , { code : SPAN_STATUS_ERROR , message : 'data_loss' } ] ,
53
+ [ undefined , '16' , { code : SPAN_STATUS_ERROR , message : 'unauthenticated' } ] ,
54
+ [ undefined , '999' , { code : SPAN_STATUS_ERROR , message : 'unknown_error' } ] ,
61
55
62
56
// http takes precedence over grpc
63
- [ 2 , '400' , '2' , { code : SPAN_STATUS_ERROR , message : 'failed_precondition ' } ] ,
57
+ [ '400' , '2' , { code : SPAN_STATUS_ERROR , message : 'invalid_argument ' } ] ,
64
58
] ;
65
59
66
- it . each ( statusTestTable ) (
67
- 'works with otelStatus=%i, httpCode=%s, grpcCode=%s' ,
68
- ( otelStatus , httpCode , grpcCode , expected ) => {
69
- const span = createSpan ( ) ;
70
- span . setStatus ( { code : otelStatus } ) ;
60
+ it . each ( statusTestTable ) ( 'works with httpCode=%s, grpcCode=%s' , ( httpCode , grpcCode , expected ) => {
61
+ const span = createSpan ( ) ;
62
+ span . setStatus ( { code : 0 } ) ; // UNSET
63
+
64
+ if ( httpCode ) {
65
+ span . setAttribute ( SemanticAttributes . HTTP_STATUS_CODE , httpCode ) ;
66
+ }
67
+
68
+ if ( grpcCode ) {
69
+ span . setAttribute ( SemanticAttributes . RPC_GRPC_STATUS_CODE , grpcCode ) ;
70
+ }
71
+
72
+ const actual = mapStatus ( span ) ;
73
+ expect ( actual ) . toEqual ( expected ) ;
74
+ } ) ;
75
+
76
+ it ( 'returns ok span status when is UNSET present on span' , ( ) => {
77
+ const span = createSpan ( ) ;
78
+ span . setStatus ( { code : 0 } ) ; // UNSET
79
+ expect ( mapStatus ( span ) ) . toEqual ( { code : SPAN_STATUS_OK } ) ;
80
+ } ) ;
71
81
72
- if ( httpCode ) {
73
- span . setAttribute ( SemanticAttributes . HTTP_STATUS_CODE , httpCode ) ;
74
- }
82
+ it ( 'returns ok span status when already present on span' , ( ) => {
83
+ const span = createSpan ( ) ;
84
+ span . setStatus ( { code : 1 } ) ; // OK
85
+ expect ( mapStatus ( span ) ) . toEqual ( { code : SPAN_STATUS_OK } ) ;
86
+ } ) ;
75
87
76
- if ( grpcCode ) {
77
- span . setA
10000
ttribute ( SemanticAttributes . RPC_GRPC_STATUS_CODE , grpcCode ) ;
78
- }
88
+ it ( 'returns error status when span already has error status' , ( ) => {
89
+ const span = createSpan ( ) ;
90
+ span . setStatus ( { code : 2 , message : 'invalid_argument' } ) ; // ERROR
91
+ expect ( mapStatus ( span ) ) . toEqual ( { code : SPAN_STATUS_ERROR , message : 'invalid_argument' } ) ;
92
+ } ) ;
79
93
80
- const actual = mapStatus ( span ) ;
81
- expect ( actual ) . toEqual ( expected ) ;
82
- } ,
83
- ) ;
94
+ it ( 'returns unknown error status when code is unknown' , ( ) => {
95
+ const span = createSpan ( ) ;
96
+ span . setStatus ( { code : - 1 as 0 } ) ;
97
+ expect ( mapStatus ( span ) ) . toEqual ( { code : SPAN_STATUS_ERROR , message : 'unknown_error' } ) ;
98
+ } ) ;
84
99
} ) ;
0 commit comments