@@ -27,6 +27,7 @@ import * as mockDatabaseAdmin from '../test/mockserver/mockdatabaseadmin';
27
27
import * as sinon from 'sinon' ;
28
28
import { Row } from '../src/partial-result-stream' ;
29
29
import { END_TO_END_TRACING_HEADER } from '../src/common' ;
30
+ import { MetricsTracerFactory } from '../src/metrics/metrics-tracer-factory' ;
30
31
const {
31
32
AlwaysOnSampler,
32
33
NodeTracerProvider,
@@ -52,6 +53,23 @@ const {ObservabilityOptions} = require('../src/instrument');
52
53
const selectSql = 'SELECT 1' ;
53
54
const updateSql = 'UPDATE FOO SET BAR=1 WHERE BAZ=2' ;
54
55
56
+ async function disableMetrics ( sandbox ?: sinon . SinonSandbox ) {
57
+ if ( sandbox ) {
58
+ if (
59
+ Object . prototype . hasOwnProperty . call (
60
+ process . env ,
61
+ 'SPANNER_DISABLE_BUILTIN_METRICS' ,
62
+ )
63
+ ) {
64
+ sandbox . replace ( process . env , 'SPANNER_DISABLE_BUILTIN_METRICS' , 'true' ) ;
65
+ } else {
66
+ sandbox . define ( process . env , 'SPANNER_DISABLE_BUILTIN_METRICS' , 'true' ) ;
67
+ }
68
+ }
69
+ await MetricsTracerFactory . resetInstance ( ) ;
70
+ MetricsTracerFactory . enabled = false ;
71
+ }
72
+
55
73
/** A simple result set for SELECT 1. */
56
74
function createSelect1ResultSet ( ) : protobuf . ResultSet {
57
75
const fields = [
@@ -79,6 +97,7 @@ interface setupResults {
79
97
80
98
async function setup (
81
99
observabilityOptions ?: typeof ObservabilityOptions ,
100
+ sandbox ?: sinon . SinonSandbox ,
82
101
) : Promise < setupResults > {
83
102
const server = new grpc . Server ( ) ;
84
103
@@ -109,6 +128,7 @@ async function setup(
109
128
mock . StatementResult . updateCount ( 1 ) ,
110
129
) ;
111
130
131
+ await disableMetrics ( sandbox ) ;
112
132
const spanner = new Spanner ( {
113
133
projectId : 'observability-project-id' ,
114
134
servicePath : 'localhost' ,
@@ -125,6 +145,7 @@ async function setup(
125
145
}
126
146
127
147
describe ( 'EndToEnd' , async ( ) => {
148
+ const sandbox = sinon . createSandbox ( ) ;
128
149
const contextManager = new AsyncHooksContextManager ( ) ;
129
150
setGlobalContextManager ( contextManager ) ;
130
151
afterEach ( ( ) => {
@@ -139,10 +160,13 @@ describe('EndToEnd', async () => {
139
160
spanProcessors : [ new SimpleSpanProcessor ( traceExporter ) ] ,
140
161
} ) ;
141
162
142
- const setupResult = await setup ( {
143
- tracerProvider : tracerProvider ,
144
- enableExtendedTracing : false ,
145
- } ) ;
163
+ const setupResult = await setup (
164
+ {
165
+ tracerProvider : tracerProvider ,
166
+ enableExtendedTracing : false ,
167
+ } ,
168
+ sandbox ,
169
+ ) ;
146
170
147
171
const server = setupResult . server ;
148
172
const spannerMock = setupResult . spannerMock ;
@@ -152,6 +176,7 @@ describe('EndToEnd', async () => {
152
176
after ( async ( ) => {
153
177
spanner . close ( ) ;
154
178
await server . tryShutdown ( ( ) => { } ) ;
179
+ sandbox . restore ( ) ;
155
180
} ) ;
156
181
157
182
afterEach ( async ( ) => {
@@ -397,6 +422,16 @@ describe('EndToEnd', async () => {
397
422
} ) ;
398
423
399
424
describe ( 'ObservabilityOptions injection and propagation' , async ( ) => {
425
+ let sandbox ;
426
+
427
+ beforeEach ( ( ) => {
428
+ sandbox = sinon . createSandbox ( ) ;
429
+ } ) ;
430
+
431
+ afterEach ( ( ) => {
432
+ sandbox . restore ( ) ;
433
+ } ) ;
434
+
400
435
it ( 'Passed into Spanner, Instance and Database' , async ( ) => {
401
436
const traceExporter = new InMemorySpanExporter ( ) ;
402
437
const tracerProvider = new NodeTracerProvider ( {
@@ -410,7 +445,7 @@ describe('ObservabilityOptions injection and propagation', async () => {
410
445
enableExtendedTracing : true ,
411
446
} ;
412
447
413
- const setupResult = await setup ( observabilityOptions ) ;
448
+ const setupResult = await setup ( observabilityOptions , sandbox ) ;
414
449
const spanner = setupResult . spanner ;
415
450
const server = setupResult . server ;
416
451
const spannerMock = setupResult . spannerMock ;
@@ -421,6 +456,7 @@ describe('ObservabilityOptions injection and propagation', async () => {
421
456
spannerMock . resetRequests ( ) ;
422
457
spanner . close ( ) ;
423
458
server . tryShutdown ( ( ) => { } ) ;
459
+ sandbox . restore ( ) ;
424
460
} ) ;
425
461
426
462
// Ensure that the same observability configuration is set on the Spanner client.
@@ -470,7 +506,7 @@ describe('ObservabilityOptions injection and propagation', async () => {
470
506
tracerProvider : tracerProvider ,
471
507
enableExtendedTracing : true ,
472
508
} ;
473
- const setupResult = await setup ( observabilityOptions ) ;
509
+ const setupResult = await setup ( observabilityOptions , sandbox ) ;
474
510
const spanner = setupResult . spanner ;
475
511
const server = setupResult . server ;
476
512
const spannerMock = setupResult . spannerMock ;
@@ -746,7 +782,7 @@ describe('ObservabilityOptions injection and propagation', async () => {
746
782
tracerProvider : injectedTracerProvider ,
747
783
enableExtendedTracing : true ,
748
784
} ;
749
- const setupResult = await setup ( observabilityOptions ) ;
785
+ const setupResult = await setup ( observabilityOptions , sandbox ) ;
750
786
const spanner = setupResult . spanner ;
751
787
const server = setupResult . server ;
752
788
const spannerMock = setupResult . spannerMock ;
@@ -832,8 +868,10 @@ describe('E2E traces with async/await', async () => {
832
868
let traceExporter : typeof InMemorySpanExporter ;
833
869
let provider : typeof NodeTracerProvider ;
834
870
let observabilityOptions : typeof ObservabilityOptions ;
871
+ let sandbox ;
835
872
836
873
beforeEach ( async ( ) => {
874
+ sandbox = sinon . createSandbox ( ) ;
837
875
traceExporter = new InMemorySpanExporter ( ) ;
838
876
provider = new NodeTracerProvider ( {
839
877
sampler : new AlwaysOnSampler ( ) ,
@@ -845,7 +883,7 @@ describe('E2E traces with async/await', async () => {
845
883
tracerProvider : provider ,
846
884
enableExtendedTracing : true ,
847
885
} ;
848
- const setupResult = await setup ( observabilityOptions ) ;
886
+ const setupResult = await setup ( observabilityOptions , sandbox ) ;
849
887
spanner = setupResult . spanner ;
850
888
server = setupResult . server ;
851
889
spannerMock = setupResult . spannerMock ;
@@ -857,6 +895,7 @@ describe('E2E traces with async/await', async () => {
857
895
spannerMock . resetRequests ( ) ;
858
896
spanner . close ( ) ;
859
897
server . tryShutdown ( ( ) => { } ) ;
898
+ sandbox . restore ( ) ;
860
899
} ) ;
861
900
862
901
function assertAsyncAwaitExpectations ( ) {
@@ -1021,6 +1060,7 @@ describe('Negative cases', async () => {
1021
1060
let traceExporter : typeof InMemorySpanExporter ;
1022
1061
let provider : typeof NodeTracerProvider ;
1023
1062
let observabilityOptions : typeof ObservabilityOptions ;
1063
+ let sandbox ;
1024
1064
1025
1065
const selectSql1p = 'SELECT 1p' ;
1026
1066
const messageBadSelect1p = `Missing whitespace between literal and alias [at 1:9]
@@ -1032,6 +1072,7 @@ SELECT 1p
1032
1072
'Failed to insert row with primary key ({pk#SingerId:1}) due to previously existing row' ;
1033
1073
1034
1074
beforeEach ( async ( ) => {
1075
+ sandbox = sinon . createSandbox ( ) ;
1035
1076
traceExporter = new InMemorySpanExporter ( ) ;
1036
1077
provider = new NodeTracerProvider ( {
1037
1078
sampler : new AlwaysOnSampler ( ) ,
@@ -1043,7 +1084,7 @@ SELECT 1p
1043
1084
tracerProvider : provider ,
1044
1085
enableExtendedTracing : true ,
1045
1086
} ;
1046
- const setupResult = await setup ( observabilityOptions ) ;
1087
+ const setupResult = await setup ( observabilityOptions , sandbox ) ;
1047
1088
spanner = setupResult . spanner ;
1048
1089
server = setupResult . server ;
1049
1090
spannerMock = setupResult . spannerMock ;
@@ -1073,6 +1114,7 @@ SELECT 1p
1073
1114
spannerMock . resetRequests ( ) ;
1074
1115
spanner . close ( ) ;
1075
1116
server . tryShutdown ( ( ) => { } ) ;
1117
+ sandbox . restore ( ) ;
1076
1118
} ) ;
1077
1119
1078
1120
function assertRunBadSyntaxExpectations ( ) {
@@ -1930,17 +1972,19 @@ describe('Traces for ExecuteStream broken stream retries', () => {
1930
1972
} ) ;
1931
1973
1932
1974
describe ( 'End to end tracing headers' , ( ) => {
1975
+ let sandbox ;
1933
1976
let server : grpc . Server ;
1934
1977
let spanner : Spanner ;
1935
1978
let spannerMock : mock . MockSpanner ;
1936
1979
let observabilityOptions : typeof ObservabilityOptions ;
1937
1980
1938
1981
beforeEach ( async ( ) => {
1982
+ sandbox = sinon . createSandbox ( ) ;
1939
1983
observabilityOptions = {
1940
1984
enableEndToEndTracing : true ,
1941
1985
} ;
1942
1986
1943
- const setupResult = await setup ( observabilityOptions ) ;
1987
+ const setupResult = await setup ( observabilityOptions , sandbox ) ;
1944
1988
spanner = setupResult . spanner ;
1945
1989
server = setupResult . server ;
1946
1990
spannerMock = setupResult . spannerMock ;
@@ -1950,6 +1994,7 @@ describe('End to end tracing headers', () => {
1950
1994
spannerMock . resetRequests ( ) ;
1951
1995
spanner . close ( ) ;
1952
1996
server . tryShutdown ( ( ) => { } ) ;
1997
+ sandbox . restore ( ) ;
1953
1998
} ) ;
1954
1999
1955
2000
it ( 'run' , done => {
0 commit comments