@@ -23,6 +23,8 @@ chai.use(require('chai-things'));
2323const sinon = require ( 'sinon' ) ;
2424
2525const mockery = require ( 'mockery' ) ;
26+ const Logger = require ( '../../../lib/logger.js' ) ;
27+
2628
2729// standard utility fns
2830const path = require ( 'path' ) ;
@@ -61,6 +63,22 @@ function log(...e) {
6163 console . log ( ...e ) ;
6264}
6365
66+ const certWithoutAttrs = '-----BEGIN CERTIFICATE-----' +
67+ 'MIICXTCCAgSgAwIBAgIUeLy6uQnq8wwyElU/jCKRYz3tJiQwCgYIKoZIzj0EAwIw' +
68+ 'eTELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNh' +
69+ 'biBGcmFuY2lzY28xGTAXBgNVBAoTEEludGVybmV0IFdpZGdldHMxDDAKBgNVBAsT' +
70+ 'A1dXVzEUMBIGA1UEAxMLZXhhbXBsZS5jb20wHhcNMTcwOTA4MDAxNTAwWhcNMTgw' +
71+ 'OTA4MDAxNTAwWjBdMQswCQYDVQQGEwJVUzEXMBUGA1UECBMOTm9ydGggQ2Fyb2xp' +
72+ 'bmExFDASBgNVBAoTC0h5cGVybGVkZ2VyMQ8wDQYDVQQLEwZGYWJyaWMxDjAMBgNV' +
73+ 'BAMTBWFkbWluMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEFq/90YMuH4tWugHa' +
74+ 'oyZtt4Mbwgv6CkBSDfYulVO1CVInw1i/k16DocQ/KSDTeTfgJxrX1Ree1tjpaodG' +
75+ '1wWyM6OBhTCBgjAOBgNVHQ8BAf8EBAMCB4AwDAYDVR0TAQH/BAIwADAdBgNVHQ4E' +
76+ 'FgQUhKs/VJ9IWJd+wer6sgsgtZmxZNwwHwYDVR0jBBgwFoAUIUd4i/sLTwYWvpVr' +
77+ 'TApzcT8zv/kwIgYDVR0RBBswGYIXQW5pbHMtTWFjQm9vay1Qcm8ubG9jYWwwCgYI' +
78+ 'KoZIzj0EAwIDRwAwRAIgCoXaCdU8ZiRKkai0QiXJM/GL5fysLnmG2oZ6XOIdwtsC' +
79+ 'IEmCsI8Mhrvx1doTbEOm7kmIrhQwUVDBNXCWX1t3kJVN' +
80+ '-----END CERTIFICATE-----' ;
81+
6482describe ( 'chaincodefromcontract' , ( ) => {
6583
6684 class MockDataMarhsall {
@@ -356,11 +374,11 @@ describe('chaincodefromcontract', () => {
356374
357375 beforeEach ( ( ) => {
358376 fakeSuccess = sinon . fake ( ( e ) => {
359- sinon . assert . fail ( e ) ;
377+ log ( e ) ;
360378 } ) ;
361379
362380 fakeError = sinon . fake ( ( e ) => {
363- log ( e ) ;
381+ sinon . assert . fail ( e ) ;
364382 } ) ;
365383
366384 sandbox . replace ( shim , 'success' , fakeSuccess ) ;
@@ -384,7 +402,7 @@ describe('chaincodefromcontract', () => {
384402
385403 const mockStub = { getBufferArgs : sandbox . stub ( ) . returns ( [ ] ) } ;
386404 cc . invokeFunctionality = sandbox . stub ( ) ;
387- cc . Init ( mockStub ) ;
405+ return cc . Init ( mockStub ) ;
388406
389407 } ) ;
390408 it ( 'should handle a single class being passed as a contract' , ( ) => {
@@ -405,7 +423,7 @@ describe('chaincodefromcontract', () => {
405423
406424 const mockStub = { getBufferArgs : sandbox . stub ( ) . returns ( [ Buffer . from ( 'Hello' ) ] ) } ;
407425 cc . invokeFunctionality = sandbox . stub ( ) ;
408- cc . Init ( mockStub ) ;
426+ return cc . Init ( mockStub ) ;
409427
410428 } ) ;
411429 } ) ;
@@ -427,9 +445,88 @@ describe('chaincodefromcontract', () => {
427445 sinon . assert . calledOnce ( _checkSuppliedStub ) ;
428446
429447
430- const mockStub = { getBufferArgs : sandbox . stub ( ) . returns ( [ Buffer . from ( 'arg1' ) , Buffer . from ( 'args2' ) ] ) } ;
448+ const mockStub = { getBufferArgs : sandbox . stub ( ) . returns ( [ Buffer . from ( 'arg1' ) , Buffer . from ( 'args2' ) ] ) ,
449+ getTxID : sandbox . stub ( ) . returns ( 12345 ) } ;
431450 cc . invokeFunctionality = sandbox . stub ( ) ;
432- cc . Invoke ( mockStub ) ;
451+ return cc . Invoke ( mockStub ) ;
452+
453+ } ) ;
454+
455+ it ( 'should pass the logging object to contracts' , async ( ) => {
456+ const idBytes = {
457+ toBuffer : ( ) => {
458+ return new Buffer ( certWithoutAttrs ) ;
459+ }
460+ } ;
461+ const tempClass = class extends Contract {
462+ constructor ( ) {
463+ super ( 'logging' ) ;
464+ }
465+ /**
466+ * @param {object } api api
467+ * @param {String } arg1 arg1
468+ * @param {String } arg2 arg2
469+ */
470+ async alpha ( ctx , arg1 , arg2 ) {
471+ return alphaStub ( ctx , arg1 , arg2 ) ;
472+ }
473+ } ;
474+ const systemContract = new SystemContract ( ) ;
475+ const appClass = new tempClass ( ) ;
476+ sandbox . stub ( ChaincodeFromContract . prototype , '_resolveContractImplementations' )
477+ . returns ( {
478+ 'org.hyperledger.fabric' : {
479+ contractInstance : systemContract
480+ } ,
481+ 'logging' :{
482+ contractInstance : appClass ,
483+ transactions : [
484+ {
485+ name :'alpha'
486+ }
487+ ] ,
488+ dataMarshall :{
489+ handleParameters : sandbox . stub ( ) . returns ( [ ] ) ,
490+ toWireBuffer : sandbox . stub ( )
491+ }
492+ }
493+ } ) ;
494+ sandbox . stub ( ChaincodeFromContract . prototype , '_checkAgainstSuppliedMetadata' ) . returns ( [ ] ) ;
495+ sandbox . stub ( ChaincodeFromContract . prototype , '_compileSchemas' ) ;
496+
497+ const mockSigningId = {
498+ getMspid : sinon . stub ( ) ,
499+ getIdBytes : sinon . stub ( ) . returns ( idBytes )
500+ } ;
501+ const cc = new ChaincodeFromContract ( [ tempClass ] , defaultSerialization ) ;
502+ const mockStub = { getBufferArgs : sandbox . stub ( ) . returns ( [ 'logging:alpha' ] ) ,
503+ getTxID : sandbox . stub ( ) . returns ( '12345897asd7a7a77v7b77' ) ,
504+ getChannelID : sandbox . stub ( ) . returns ( 'channel-id-fake' ) ,
505+ getCreator : sandbox . stub ( ) . returns ( mockSigningId )
506+ } ;
507+ //
508+ const levelSpy = sinon . spy ( Logger , 'setLevel' ) ;
509+ await cc . Invoke ( mockStub ) ;
510+ const ctx = alphaStub . getCall ( 0 ) . args [ 0 ] ;
511+ ctx . logging . setLevel ( 'DEBUG' ) ;
512+ sinon . assert . called ( levelSpy ) ;
513+ sinon . assert . calledWith ( levelSpy , 'DEBUG' ) ;
514+ const cclogger = ctx . logging . getLogger ( ) ;
515+ const logger = Logger . getLogger ( 'logging' ) ;
516+ const infospy = sinon . spy ( logger , 'info' ) ;
517+ cclogger . info ( 'info' ) ;
518+ sinon . assert . calledWith ( infospy , 'info' ) ;
519+
520+ ctx . logging . setLevel ( 'INFO' ) ;
521+ sinon . assert . called ( levelSpy ) ;
522+ sinon . assert . calledWith ( levelSpy , 'INFO' ) ;
523+
524+
525+ const ccloggerNamed = ctx . logging . getLogger ( 'wibble' ) ;
526+ const debugSpy = sinon . spy ( Logger . getLogger ( 'logging:wibble' ) , 'debug' ) ;
527+ ccloggerNamed . debug ( 'Named logger' ) ;
528+ sinon . assert . calledWith ( debugSpy , 'Named logger' ) ;
529+
433530
434531 } ) ;
435532 } ) ;
@@ -474,21 +571,7 @@ describe('chaincodefromcontract', () => {
474571 let fakeSuccess ;
475572 let fakeError ;
476573
477- const certWithoutAttrs = '-----BEGIN CERTIFICATE-----' +
478- 'MIICXTCCAgSgAwIBAgIUeLy6uQnq8wwyElU/jCKRYz3tJiQwCgYIKoZIzj0EAwIw' +
479- 'eTELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNh' +
480- 'biBGcmFuY2lzY28xGTAXBgNVBAoTEEludGVybmV0IFdpZGdldHMxDDAKBgNVBAsT' +
481- 'A1dXVzEUMBIGA1UEAxMLZXhhbXBsZS5jb20wHhcNMTcwOTA4MDAxNTAwWhcNMTgw' +
482- 'OTA4MDAxNTAwWjBdMQswCQYDVQQGEwJVUzEXMBUGA1UECBMOTm9ydGggQ2Fyb2xp' +
483- 'bmExFDASBgNVBAoTC0h5cGVybGVkZ2VyMQ8wDQYDVQQLEwZGYWJyaWMxDjAMBgNV' +
484- 'BAMTBWFkbWluMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEFq/90YMuH4tWugHa' +
485- 'oyZtt4Mbwgv6CkBSDfYulVO1CVInw1i/k16DocQ/KSDTeTfgJxrX1Ree1tjpaodG' +
486- '1wWyM6OBhTCBgjAOBgNVHQ8BAf8EBAMCB4AwDAYDVR0TAQH/BAIwADAdBgNVHQ4E' +
487- 'FgQUhKs/VJ9IWJd+wer6sgsgtZmxZNwwHwYDVR0jBBgwFoAUIUd4i/sLTwYWvpVr' +
488- 'TApzcT8zv/kwIgYDVR0RBBswGYIXQW5pbHMtTWFjQm9vay1Qcm8ubG9jYWwwCgYI' +
489- 'KoZIzj0EAwIDRwAwRAIgCoXaCdU8ZiRKkai0QiXJM/GL5fysLnmG2oZ6XOIdwtsC' +
490- 'IEmCsI8Mhrvx1doTbEOm7kmIrhQwUVDBNXCWX1t3kJVN' +
491- '-----END CERTIFICATE-----' ;
574+
492575
493576 beforeEach ( ( ) => {
494577 fakeSuccess = sinon . fake ( ( e ) => {
0 commit comments