@@ -39,6 +39,7 @@ import {Instance, Spanner} from '../src';
3939import * as pfy from '@google-cloud/promisify' ;
4040import { grpc } from 'google-gax' ;
4141import { MockError } from '../test/mockserver/mockspanner' ;
42+ const { generateWithAllSpansHaveDBName} = require ( './helper' ) ;
4243
4344const fakePfy = extend ( { } , pfy , {
4445 promisifyAll ( klass , options ) {
@@ -235,16 +236,20 @@ describe('Database', () => {
235236 DatabaseCached = Object . assign ( { } , Database ) ;
236237 } ) ;
237238
239+ const withAllSpansHaveDBName = generateWithAllSpansHaveDBName (
240+ INSTANCE . formattedName_ + '/databases/' + NAME
241+ ) ;
242+
238243 beforeEach ( ( ) => {
239244 fakeCodec . encode = util . noop ;
240245 extend ( Database , DatabaseCached ) ;
241- database = new Database ( INSTANCE , NAME , POOL_OPTIONS ) ;
242- database . parent = INSTANCE ;
243- database . databaseRole = 'parent_role' ;
244- database . observabilityConfig = {
246+ INSTANCE . _observabilityOptions = {
245247 tracerProvider : provider ,
246248 enableExtendedTracing : false ,
247249 } ;
250+ database = new Database ( INSTANCE , NAME , POOL_OPTIONS ) ;
251+ database . parent = INSTANCE ;
252+ database . databaseRole = 'parent_role' ;
248253 const gaxOpts = { } ;
249254 const options : {
250255 a : string ;
@@ -285,6 +290,8 @@ describe('Database', () => {
285290 const spans = traceExporter . getFinishedSpans ( ) ;
286291 assert . strictEqual ( spans . length , 1 , 'Exactly 1 span expected' ) ;
287292
293+ withAllSpansHaveDBName ( spans ) ;
294+
288295 const actualSpanNames : string [ ] = [ ] ;
289296 const actualEventNames : string [ ] = [ ] ;
290297 spans . forEach ( span => {
@@ -333,6 +340,7 @@ describe('Database', () => {
333340 traceExporter . forceFlush ( ) ;
334341 const spans = traceExporter . getFinishedSpans ( ) ;
335342 assert . strictEqual ( spans . length , 1 , 'Exactly 1 span expected' ) ;
343+ withAllSpansHaveDBName ( spans ) ;
336344
337345 const actualSpanNames : string [ ] = [ ] ;
338346 const actualEventNames : string [ ] = [ ] ;
@@ -375,6 +383,115 @@ describe('Database', () => {
375383 } ) ;
376384 } ) ;
377385
386+ describe ( 'batchCreateSessions' , ( ) => {
387+ it ( 'without error' , done => {
388+ const ARGS = [ null , [ { } ] ] ;
389+ database . request = ( config , callback ) => {
390+ callback ( ...ARGS ) ;
391+ } ;
392+
393+ database . batchCreateSessions ( 10 , ( err , sessions ) => {
394+ assert . ifError ( err ) ;
395+ assert . ok ( sessions ) ;
396+
397+ traceExporter . forceFlush ( ) ;
398+ const spans = traceExporter . getFinishedSpans ( ) ;
399+
400+ const actualSpanNames : string [ ] = [ ] ;
401+ const actualEventNames : string [ ] = [ ] ;
402+ spans . forEach ( span => {
403+ actualSpanNames . push ( span . name ) ;
404+ span . events . forEach ( event => {
405+ actualEventNames . push ( event . name ) ;
406+ } ) ;
407+ } ) ;
408+
409+ const expectedSpanNames = [ 'CloudSpanner.Database.batchCreateSessions' ] ;
410+ assert . deepStrictEqual (
411+ actualSpanNames ,
412+ expectedSpanNames ,
413+ `span names mismatch:\n\tGot: ${ actualSpanNames } \n\tWant: ${ expectedSpanNames } `
414+ ) ;
415+
416+ // Ensure that the span didn't encounter an error.
417+ const firstSpan = spans [ 0 ] ;
418+ assert . strictEqual (
419+ SpanStatusCode . UNSET ,
420+ firstSpan . status . code ,
421+ 'Unexpected span status code'
422+ ) ;
423+ assert . strictEqual (
424+ undefined ,
425+ firstSpan . status . message ,
426+ 'Mismatched span status message'
427+ ) ;
428+
429+ // We don't expect events.
430+ const expectedEventNames = [ ] ;
431+ assert . deepStrictEqual (
432+ actualEventNames ,
433+ expectedEventNames ,
434+ `Unexpected events:\n\tGot: ${ actualEventNames } \n\tWant: ${ expectedEventNames } `
435+ ) ;
436+
437+ done ( ) ;
438+ } ) ;
439+ } ) ;
440+
441+ it ( 'with error' , done => {
442+ const ARGS = [ new Error ( 'batchCreateSessions.error' ) , null ] ;
443+ database . request = ( config , callback ) => {
444+ callback ( ...ARGS ) ;
445+ } ;
446+
447+ database . batchCreateSessions ( 10 , ( err , sessions ) => {
448+ assert . ok ( err ) ;
449+ assert . ok ( ! sessions ) ;
450+ traceExporter . forceFlush ( ) ;
451+ const spans = traceExporter . getFinishedSpans ( ) ;
452+
453+ const actualSpanNames : string [ ] = [ ] ;
454+ const actualEventNames : string [ ] = [ ] ;
455+ spans . forEach ( span => {
456+ actualSpanNames . push ( span . name ) ;
457+ span . events . forEach ( event => {
458+ actualEventNames . push ( event . name ) ;
459+ } ) ;
460+ } ) ;
461+
462+ const expectedSpanNames = [ 'CloudSpanner.Database.batchCreateSessions' ] ;
463+ assert . deepStrictEqual (
464+ actualSpanNames ,
465+ expectedSpanNames ,
466+ `span names mismatch:\n\tGot: ${ actualSpanNames } \n\tWant: ${ expectedSpanNames } `
467+ ) ;
468+
469+ // Ensure that the span actually produced an error that was recorded.
470+ const firstSpan = spans [ 0 ] ;
471+ assert . strictEqual (
472+ SpanStatusCode . ERROR ,
473+ firstSpan . status . code ,
474+ 'Expected an ERROR span status'
475+ ) ;
476+ assert . strictEqual (
477+ 'batchCreateSessions.error' ,
478+ firstSpan . status . message ,
479+ 'Mismatched span status message'
480+ ) ;
481+
482+ // We don't expect events.
483+ const expectedEventNames = [ ] ;
484+ assert . deepStrictEqual (
485+ actualEventNames ,
486+ expectedEventNames ,
487+ `Unexpected events:\n\tGot: ${ actualEventNames } \n\tWant: ${ expectedEventNames } `
488+ ) ;
489+
490+ done ( ) ;
491+ } ) ;
492+ } ) ;
493+ } ) ;
494+
378495 describe ( 'getSnapshot' , ( ) => {
379496 let fakePool : FakeSessionPool ;
380497 let fakeSession : FakeSession ;
@@ -409,11 +526,12 @@ describe('Database', () => {
409526
410527 getSessionStub . callsFake ( callback => callback ( fakeError , null ) ) ;
411528
412- database . getSnapshot ( ( err , snapshot ) => {
529+ database . getSnapshot ( err => {
413530 assert . strictEqual ( err , fakeError ) ;
414531 traceExporter . forceFlush ( ) ;
415532 const spans = traceExporter . getFinishedSpans ( ) ;
416533 assert . strictEqual ( spans . length , 1 , 'Exactly 1 span expected' ) ;
534+ withAllSpansHaveDBName ( spans ) ;
417535
418536 const actualSpanNames : string [ ] = [ ] ;
419537 const actualEventNames : string [ ] = [ ] ;
@@ -495,6 +613,7 @@ describe('Database', () => {
495613
496614 const spans = traceExporter . getFinishedSpans ( ) ;
497615 assert . strictEqual ( spans . length , 2 , 'Exactly 2 spans expected' ) ;
616+ withAllSpansHaveDBName ( spans ) ;
498617
499618 const actualSpanNames : string [ ] = [ ] ;
500619 const actualEventNames : string [ ] = [ ] ;
@@ -597,6 +716,8 @@ describe('Database', () => {
597716
598717 const spans = traceExporter . getFinishedSpans ( ) ;
599718 assert . strictEqual ( spans . length , 1 , 'Exactly 1 span expected' ) ;
719+ withAllSpansHaveDBName ( spans ) ;
720+
600721 const actualEventNames : string [ ] = [ ] ;
601722 const actualSpanNames : string [ ] = [ ] ;
602723 spans . forEach ( span => {
@@ -662,6 +783,7 @@ describe('Database', () => {
662783 assert . strictEqual ( resp , RESPONSE ) ;
663784 const spans = traceExporter . getFinishedSpans ( ) ;
664785 assert . strictEqual ( spans . length , 1 , 'Exactly 1 span expected' ) ;
786+ withAllSpansHaveDBName ( spans ) ;
665787
666788 const actualEventNames : string [ ] = [ ] ;
667789 const actualSpanNames : string [ ] = [ ] ;
@@ -727,6 +849,8 @@ describe('Database', () => {
727849
728850 const spans = traceExporter . getFinishedSpans ( ) ;
729851 assert . strictEqual ( spans . length , 1 , 'Exactly 1 span expected' ) ;
852+ withAllSpansHaveDBName ( spans ) ;
853+
730854 const actualSpanNames : string [ ] = [ ] ;
731855 const actualEventNames : string [ ] = [ ] ;
732856 spans . forEach ( span => {
@@ -802,6 +926,8 @@ describe('Database', () => {
802926
803927 const spans = traceExporter . getFinishedSpans ( ) ;
804928 assert . strictEqual ( spans . length , 1 , 'Exactly 1 span expected' ) ;
929+ withAllSpansHaveDBName ( spans ) ;
930+
805931 const actualEventNames : string [ ] = [ ] ;
806932 const actualSpanNames : string [ ] = [ ] ;
807933 spans . forEach ( span => {
@@ -849,6 +975,8 @@ describe('Database', () => {
849975 assert . strictEqual ( transaction , fakeTransaction ) ;
850976
851977 const spans = traceExporter . getFinishedSpans ( ) ;
978+ withAllSpansHaveDBName ( spans ) ;
979+
852980 assert . strictEqual ( spans . length , 1 , 'Exactly 1 span expected' ) ;
853981 const actualEventNames : string [ ] = [ ] ;
854982 const actualSpanNames : string [ ] = [ ] ;
@@ -928,6 +1056,7 @@ describe('Database', () => {
9281056
9291057 const spans = traceExporter . getFinishedSpans ( ) ;
9301058 assert . strictEqual ( spans . length , 1 , 'Exactly 1 span expected' ) ;
1059+ withAllSpansHaveDBName ( spans ) ;
9311060
9321061 const actualEventNames : string [ ] = [ ] ;
9331062 const actualSpanNames : string [ ] = [ ] ;
@@ -982,6 +1111,7 @@ describe('Database', () => {
9821111
9831112 const spans = traceExporter . getFinishedSpans ( ) ;
9841113 assert . strictEqual ( spans . length , 1 , 'Exactly 1 span expected' ) ;
1114+ withAllSpansHaveDBName ( spans ) ;
9851115
9861116 const actualEventNames : string [ ] = [ ] ;
9871117 const actualSpanNames : string [ ] = [ ] ;
@@ -1027,7 +1157,6 @@ describe('Database', () => {
10271157 } ) ;
10281158
10291159 it ( 'with error on null mutation should catch thrown error' , done => {
1030- const fakeError = new Error ( 'err' ) ;
10311160 try {
10321161 database . writeAtLeastOnce ( null , ( err , res ) => { } ) ;
10331162 } catch ( err ) {
@@ -1040,6 +1169,8 @@ describe('Database', () => {
10401169
10411170 const spans = traceExporter . getFinishedSpans ( ) ;
10421171 assert . strictEqual ( spans . length , 1 , 'Exactly 1 span expected' ) ;
1172+ withAllSpansHaveDBName ( spans ) ;
1173+
10431174 const actualSpanNames : string [ ] = [ ] ;
10441175 const actualEventNames : string [ ] = [ ] ;
10451176 spans . forEach ( span => {
@@ -1114,6 +1245,8 @@ describe('Database', () => {
11141245
11151246 const spans = traceExporter . getFinishedSpans ( ) ;
11161247 assert . strictEqual ( spans . length , 1 , 'Exactly 1 span expected' ) ;
1248+ withAllSpansHaveDBName ( spans ) ;
1249+
11171250 const actualSpanNames : string [ ] = [ ] ;
11181251 const actualEventNames : string [ ] = [ ] ;
11191252 spans . forEach ( span => {
@@ -1165,6 +1298,8 @@ describe('Database', () => {
11651298
11661299 const spans = traceExporter . getFinishedSpans ( ) ;
11671300 assert . strictEqual ( spans . length , 1 , 'Exactly 1 span expected' ) ;
1301+ withAllSpansHaveDBName ( spans ) ;
1302+
11681303 const actualSpanNames : string [ ] = [ ] ;
11691304 const actualEventNames : string [ ] = [ ] ;
11701305 spans . forEach ( span => {
@@ -1268,6 +1403,8 @@ describe('Database', () => {
12681403
12691404 const spans = traceExporter . getFinishedSpans ( ) ;
12701405 assert . strictEqual ( spans . length , 1 , 'Exactly 1 span expected' ) ;
1406+ withAllSpansHaveDBName ( spans ) ;
1407+
12711408 const actualEventNames : string [ ] = [ ] ;
12721409 const actualSpanNames : string [ ] = [ ] ;
12731410 spans . forEach ( span => {
@@ -1319,6 +1456,8 @@ describe('Database', () => {
13191456
13201457 const spans = traceExporter . getFinishedSpans ( ) ;
13211458 assert . strictEqual ( spans . length , 1 , 'Exactly 1 span expected' ) ;
1459+ withAllSpansHaveDBName ( spans ) ;
1460+
13221461 const actualEventNames : string [ ] = [ ] ;
13231462 const actualSpanNames : string [ ] = [ ] ;
13241463 spans . forEach ( span => {
@@ -1383,6 +1522,8 @@ describe('Database', () => {
13831522
13841523 const spans = traceExporter . getFinishedSpans ( ) ;
13851524 assert . strictEqual ( spans . length , 2 , 'Exactly 1 span expected' ) ;
1525+ withAllSpansHaveDBName ( spans ) ;
1526+
13861527 const actualSpanNames : string [ ] = [ ] ;
13871528 const actualEventNames : string [ ] = [ ] ;
13881529 spans . forEach ( span => {
0 commit comments