1919var assert = require ( 'assert' ) ;
2020var extend = require ( 'extend' ) ;
2121var proxyquire = require ( 'proxyquire' ) ;
22+ var util = require ( 'util' ) ;
2223
2324describe ( 'logging-winston' , function ( ) {
24- var fakeLogInstance = { } ;
25+ var fakeLogEntry_ ;
26+ var fakeLogLevel_ ;
27+
28+ var loggingFunction = function ( entry , cb ) {
29+ lastLogEntry = entry ;
30+ if ( cb ) { cb ( null ) ; }
31+ } ;
32+
33+ var fakeLogInstance = {
34+ entry : function ( metadata , message ) {
35+ return { metadata : metadata , message : message }
36+ } ,
37+ } ;
38+
39+ [ 'emergency' , 'alert' , 'critical' , 'error' , 'warning' , 'notice' , 'info' ,
40+ 'debug' ]
41+ . forEach ( function ( level ) {
42+ fakeLogInstance [ level ] = function ( entry , cb ) {
43+ fakeLogLevel_ = level ;
44+ fakeLogEntry_ = entry ;
45+ setImmediate ( cb ) ;
46+ }
47+ } ) ;
2548
2649 var fakeLoggingOptions_ ;
2750 var fakeLogName_ ;
@@ -49,8 +72,8 @@ describe('logging-winston', function() {
4972 var loggingWinston ;
5073
5174 var OPTIONS = {
52- level : 'level ' ,
53- levels : [ 1 , 2 , 3 ] ,
75+ level : 'levelThree ' ,
76+ levels : { levelOne : 1 , levelTwo : 2 , levelThree : 3 , levelFour : 4 } ,
5477 logName : 'log-name' ,
5578 resource : { }
5679 } ;
@@ -63,6 +86,8 @@ describe('logging-winston', function() {
6386 } ) ;
6487
6588 beforeEach ( function ( ) {
89+ fakeLogEntry_ = null ;
90+ fakeLogLevel_ = null ;
6691 fakeLoggingOptions_ = null ;
6792 fakeLogName_ = null ;
6893 loggingWinston = new LoggingWinston ( OPTIONS ) ;
@@ -96,6 +121,7 @@ describe('logging-winston', function() {
96121 it ( 'should default to npm levels' , function ( ) {
97122 var optionsWithoutLevels = extend ( { } , OPTIONS ) ;
98123 delete optionsWithoutLevels . levels ;
124+ delete optionsWithoutLevels . level ;
99125
100126 var loggingWinston = new LoggingWinston ( optionsWithoutLevels ) ;
101127 assert . deepEqual ( loggingWinston . levels_ , {
@@ -128,7 +154,81 @@ describe('logging-winston', function() {
128154 it ( 'should localize the provided resource' , function ( ) {
129155 assert . strictEqual ( loggingWinston . resource_ , OPTIONS . resource ) ;
130156 } ) ;
157+
158+ it ( 'should throw on invalid options.level' , function ( ) {
159+ var optionsWithoutLevels = extend ( { } , OPTIONS ) ;
160+ delete optionsWithoutLevels . levels ;
161+
162+ assert . throws ( function ( ) {
163+ new LoggingWinston ( optionsWithoutLevels ) ;
164+ } , / i n v a l i d o p t i o n s \. l e v e l : l e v e l T h r e e / ) ;
165+
166+ assert . throws ( function ( ) {
167+ new LoggingWinston ( extend ( { } , OPTIONS , { level : 'err' } ) ) ;
168+ } , / i n v a l i d o p t i o n s \. l e v e l : e r r / ) ;
169+
170+ } ) ;
171+
172+ it ( 'should throw on invalid options.levels' , function ( ) {
173+ assert . throws ( function ( ) {
174+ new LoggingWinston (
175+ extend ( { } , OPTIONS , { levels : { a : 0 , b : 1 , c : 3 , d : 6 , e : 9 } } ) ) ;
176+ } , / i n v a l i d o p t i o n s \. l e v e l s : e : 9 / ) ;
177+ assert . throws ( function ( ) {
178+ new LoggingWinston (
179+ extend ( { } , OPTIONS , { levels : { 9 : 0 , 7 : 1 , 8 : 3 , 1 : 'foo' , 0 : 6 } } ) ) ;
180+ } , / i n v a l i d o p t i o n s \. l e v e l s : 1 : f o o / ) ;
181+ } ) ;
131182 } ) ;
132183
133- describe ( 'log' , function ( ) { } ) ;
184+ describe ( 'log' , function ( ) {
185+ it ( 'should throw on a bad log level' , function ( ) {
186+ assert . throws ( function ( ) {
187+ loggingWinston . log ( 'non-existent-level' , 'test log message' ) ;
188+ } , / U n k n o w n l o g l e v e l / ) ;
189+ } ) ;
190+
191+ it ( 'should call back once completed' , function ( done ) {
192+ loggingWinston . log ( 'levelOne' , 'level one message' , function ( err ) {
193+ assert . ifError ( err ) ;
194+ done ( ) ;
195+ } ) ;
196+ } ) ;
197+
198+ it ( 'should call into stackdriver logging properly formatted entry' ,
199+ function ( done ) {
200+ var message = 'a message to be logged' ;
201+ loggingWinston . log ( 'levelOne' , message , function ( err ) {
202+ assert . strictEqual ( fakeLogLevel_ , 'alert' ) ;
203+ assert . deepEqual ( fakeLogEntry_ , {
204+ message : message ,
205+ metadata : { resource : OPTIONS . resource , labels : { } }
206+ } ) ;
207+ done ( ) ;
208+ } ) ;
209+ } ) ;
210+
211+ it ( 'should convert metadata values using util.inspect' , function ( done ) {
212+ var message = 'test message with labels' ;
213+ var metadata = {
214+ testDate : new Date ( 1 ) ,
215+ testFunction : function foo ( ) { return 'some value' ; } ,
216+ deepObject : { a : { b : { c : { d : { e : 1 } } } } } ,
217+ testNumber : 5
218+ } ;
219+ loggingWinston . log ( 'levelTwo' , message , metadata , function ( err ) {
220+ assert . strictEqual ( fakeLogLevel_ , 'critical' ) ;
221+ var expectedLabels = { } ;
222+ for ( var key in metadata ) {
223+ expectedLabels [ key ] = util . inspect ( metadata [ key ] ) ;
224+ }
225+ assert . deepEqual ( fakeLogEntry_ , {
226+ message : message ,
227+ metadata : { resource : OPTIONS . resource , labels : expectedLabels }
228+ } ) ;
229+ done ( ) ;
230+ } ) ;
231+ } ) ;
232+
233+ } ) ;
134234} ) ;
0 commit comments