@@ -27,6 +27,7 @@ import * as mockDatabaseAdmin from '../test/mockserver/mockdatabaseadmin';
2727import  *  as  sinon  from  'sinon' ; 
2828import  { Row }  from  '../src/partial-result-stream' ; 
2929import  { END_TO_END_TRACING_HEADER }  from  '../src/common' ; 
30+ import  { MetricsTracerFactory }  from  '../src/metrics/metrics-tracer-factory' ; 
3031const  { 
3132 AlwaysOnSampler, 
3233 NodeTracerProvider, 
@@ -52,6 +53,23 @@ const {ObservabilityOptions} = require('../src/instrument');
5253const  selectSql  =  'SELECT 1' ; 
5354const  updateSql  =  'UPDATE FOO SET BAR=1 WHERE BAZ=2' ; 
5455
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+ 
5573/** A simple result set for SELECT 1. */ 
5674function  createSelect1ResultSet ( ) : protobuf . ResultSet  { 
5775 const  fields  =  [ 
@@ -79,6 +97,7 @@ interface setupResults {
7997
8098async  function  setup ( 
8199 observabilityOptions ?: typeof  ObservabilityOptions , 
100+  sandbox ?: sinon . SinonSandbox , 
82101) : Promise < setupResults >  { 
83102 const  server  =  new  grpc . Server ( ) ; 
84103
@@ -109,6 +128,7 @@ async function setup(
109128 mock . StatementResult . updateCount ( 1 ) , 
110129 ) ; 
111130
131+  await  disableMetrics ( sandbox ) ; 
112132 const  spanner  =  new  Spanner ( { 
113133 projectId : 'observability-project-id' , 
114134 servicePath : 'localhost' , 
@@ -125,6 +145,7 @@ async function setup(
125145} 
126146
127147describe ( 'EndToEnd' ,  async  ( )  =>  { 
148+  const  sandbox  =  sinon . createSandbox ( ) ; 
128149 const  contextManager  =  new  AsyncHooksContextManager ( ) ; 
129150 setGlobalContextManager ( contextManager ) ; 
130151 afterEach ( ( )  =>  { 
@@ -139,10 +160,13 @@ describe('EndToEnd', async () => {
139160 spanProcessors : [ new  SimpleSpanProcessor ( traceExporter ) ] , 
140161 } ) ; 
141162
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+  ) ; 
146170
147171 const  server  =  setupResult . server ; 
148172 const  spannerMock  =  setupResult . spannerMock ; 
@@ -152,6 +176,7 @@ describe('EndToEnd', async () => {
152176 after ( async  ( )  =>  { 
153177 spanner . close ( ) ; 
154178 await  server . tryShutdown ( ( )  =>  { } ) ; 
179+  sandbox . restore ( ) ; 
155180 } ) ; 
156181
157182 afterEach ( async  ( )  =>  { 
@@ -397,6 +422,16 @@ describe('EndToEnd', async () => {
397422} ) ; 
398423
399424describe ( 'ObservabilityOptions injection and propagation' ,  async  ( )  =>  { 
425+  let  sandbox ; 
426+ 
427+  beforeEach ( ( )  =>  { 
428+  sandbox  =  sinon . createSandbox ( ) ; 
429+  } ) ; 
430+ 
431+  afterEach ( ( )  =>  { 
432+  sandbox . restore ( ) ; 
433+  } ) ; 
434+ 
400435 it ( 'Passed into Spanner, Instance and Database' ,  async  ( )  =>  { 
401436 const  traceExporter  =  new  InMemorySpanExporter ( ) ; 
402437 const  tracerProvider  =  new  NodeTracerProvider ( { 
@@ -410,7 +445,7 @@ describe('ObservabilityOptions injection and propagation', async () => {
410445 enableExtendedTracing : true , 
411446 } ; 
412447
413-  const  setupResult  =  await  setup ( observabilityOptions ) ; 
448+  const  setupResult  =  await  setup ( observabilityOptions ,   sandbox ) ; 
414449 const  spanner  =  setupResult . spanner ; 
415450 const  server  =  setupResult . server ; 
416451 const  spannerMock  =  setupResult . spannerMock ; 
@@ -421,6 +456,7 @@ describe('ObservabilityOptions injection and propagation', async () => {
421456 spannerMock . resetRequests ( ) ; 
422457 spanner . close ( ) ; 
423458 server . tryShutdown ( ( )  =>  { } ) ; 
459+  sandbox . restore ( ) ; 
424460 } ) ; 
425461
426462 // Ensure that the same observability configuration is set on the Spanner client. 
@@ -470,7 +506,7 @@ describe('ObservabilityOptions injection and propagation', async () => {
470506 tracerProvider : tracerProvider , 
471507 enableExtendedTracing : true , 
472508 } ; 
473-  const  setupResult  =  await  setup ( observabilityOptions ) ; 
509+  const  setupResult  =  await  setup ( observabilityOptions ,   sandbox ) ; 
474510 const  spanner  =  setupResult . spanner ; 
475511 const  server  =  setupResult . server ; 
476512 const  spannerMock  =  setupResult . spannerMock ; 
@@ -746,7 +782,7 @@ describe('ObservabilityOptions injection and propagation', async () => {
746782 tracerProvider : injectedTracerProvider , 
747783 enableExtendedTracing : true , 
748784 } ; 
749-  const  setupResult  =  await  setup ( observabilityOptions ) ; 
785+  const  setupResult  =  await  setup ( observabilityOptions ,   sandbox ) ; 
750786 const  spanner  =  setupResult . spanner ; 
751787 const  server  =  setupResult . server ; 
752788 const  spannerMock  =  setupResult . spannerMock ; 
@@ -832,8 +868,10 @@ describe('E2E traces with async/await', async () => {
832868 let  traceExporter : typeof  InMemorySpanExporter ; 
833869 let  provider : typeof  NodeTracerProvider ; 
834870 let  observabilityOptions : typeof  ObservabilityOptions ; 
871+  let  sandbox ; 
835872
836873 beforeEach ( async  ( )  =>  { 
874+  sandbox  =  sinon . createSandbox ( ) ; 
837875 traceExporter  =  new  InMemorySpanExporter ( ) ; 
838876 provider  =  new  NodeTracerProvider ( { 
839877 sampler : new  AlwaysOnSampler ( ) , 
@@ -845,7 +883,7 @@ describe('E2E traces with async/await', async () => {
845883 tracerProvider : provider , 
846884 enableExtendedTracing : true , 
847885 } ; 
848-  const  setupResult  =  await  setup ( observabilityOptions ) ; 
886+  const  setupResult  =  await  setup ( observabilityOptions ,   sandbox ) ; 
849887 spanner  =  setupResult . spanner ; 
850888 server  =  setupResult . server ; 
851889 spannerMock  =  setupResult . spannerMock ; 
@@ -857,6 +895,7 @@ describe('E2E traces with async/await', async () => {
857895 spannerMock . resetRequests ( ) ; 
858896 spanner . close ( ) ; 
859897 server . tryShutdown ( ( )  =>  { } ) ; 
898+  sandbox . restore ( ) ; 
860899 } ) ; 
861900
862901 function  assertAsyncAwaitExpectations ( )  { 
@@ -1021,6 +1060,7 @@ describe('Negative cases', async () => {
10211060 let  traceExporter : typeof  InMemorySpanExporter ; 
10221061 let  provider : typeof  NodeTracerProvider ; 
10231062 let  observabilityOptions : typeof  ObservabilityOptions ; 
1063+  let  sandbox ; 
10241064
10251065 const  selectSql1p  =  'SELECT 1p' ; 
10261066 const  messageBadSelect1p  =  `Missing whitespace between literal and alias [at 1:9] 
@@ -1032,6 +1072,7 @@ SELECT 1p
10321072 'Failed to insert row with primary key ({pk#SingerId:1}) due to previously existing row' ; 
10331073
10341074 beforeEach ( async  ( )  =>  { 
1075+  sandbox  =  sinon . createSandbox ( ) ; 
10351076 traceExporter  =  new  InMemorySpanExporter ( ) ; 
10361077 provider  =  new  NodeTracerProvider ( { 
10371078 sampler : new  AlwaysOnSampler ( ) , 
@@ -1043,7 +1084,7 @@ SELECT 1p
10431084 tracerProvider : provider , 
10441085 enableExtendedTracing : true , 
10451086 } ; 
1046-  const  setupResult  =  await  setup ( observabilityOptions ) ; 
1087+  const  setupResult  =  await  setup ( observabilityOptions ,   sandbox ) ; 
10471088 spanner  =  setupResult . spanner ; 
10481089 server  =  setupResult . server ; 
10491090 spannerMock  =  setupResult . spannerMock ; 
@@ -1073,6 +1114,7 @@ SELECT 1p
10731114 spannerMock . resetRequests ( ) ; 
10741115 spanner . close ( ) ; 
10751116 server . tryShutdown ( ( )  =>  { } ) ; 
1117+  sandbox . restore ( ) ; 
10761118 } ) ; 
10771119
10781120 function  assertRunBadSyntaxExpectations ( )  { 
@@ -1930,17 +1972,19 @@ describe('Traces for ExecuteStream broken stream retries', () => {
19301972} ) ; 
19311973
19321974describe ( 'End to end tracing headers' ,  ( )  =>  { 
1975+  let  sandbox ; 
19331976 let  server : grpc . Server ; 
19341977 let  spanner : Spanner ; 
19351978 let  spannerMock : mock . MockSpanner ; 
19361979 let  observabilityOptions : typeof  ObservabilityOptions ; 
19371980
19381981 beforeEach ( async  ( )  =>  { 
1982+  sandbox  =  sinon . createSandbox ( ) ; 
19391983 observabilityOptions  =  { 
19401984 enableEndToEndTracing : true , 
19411985 } ; 
19421986
1943-  const  setupResult  =  await  setup ( observabilityOptions ) ; 
1987+  const  setupResult  =  await  setup ( observabilityOptions ,   sandbox ) ; 
19441988 spanner  =  setupResult . spanner ; 
19451989 server  =  setupResult . server ; 
19461990 spannerMock  =  setupResult . spannerMock ; 
@@ -1950,6 +1994,7 @@ describe('End to end tracing headers', () => {
19501994 spannerMock . resetRequests ( ) ; 
19511995 spanner . close ( ) ; 
19521996 server . tryShutdown ( ( )  =>  { } ) ; 
1997+  sandbox . restore ( ) ; 
19531998 } ) ; 
19541999
19552000 it ( 'run' ,  done  =>  { 
0 commit comments