Skip to content

Commit

Permalink
[FAB-14440] Port of gRPC loader fix
Browse files Browse the repository at this point in the history
Change-Id: Ib20b663777e57d2e1bf4dac14869c0306d34d470
Signed-off-by: Matthew B. White <[email protected]>
  • Loading branch information
mbwhite committed Mar 11, 2019
1 parent 0368edb commit c655d22
Show file tree
Hide file tree
Showing 9 changed files with 61 additions and 27 deletions.
8 changes: 4 additions & 4 deletions fabric-shim/lib/chaincode.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
/* eslint-disable no-useless-escape */
'use strict';

const grpc = require('grpc');
const ProtoLoader = require('./protoloader');
const path = require('path');
const util = require('util');
const X509 = require('@ampretia/x509');
Expand All @@ -26,17 +26,17 @@ const StartCommand = require('./cmds/startCommand.js');

const yargs = require('yargs');

const _chaincodeProto = grpc.load({
const _chaincodeProto = ProtoLoader.load({
root: path.join(__dirname, './protos'),
file: 'peer/chaincode.proto'
}).protos;

const _serviceProto = grpc.load({
const _serviceProto = ProtoLoader.load({
root: path.join(__dirname, './protos'),
file: 'peer/chaincode_shim.proto'
}).protos;

const _responseProto = grpc.load({
const _responseProto = ProtoLoader.load({
root: path.join(__dirname, './protos'),
file: 'peer/proposal_response.proto'
}).protos;
Expand Down
7 changes: 4 additions & 3 deletions fabric-shim/lib/handler.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
process.env.GRPC_SSL_CIPHER_SUITES = 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384';

const grpc = require('grpc');
const ProtoLoader = require('./protoloader');
const {URL} = require('url');
const path = require('path');
const util = require('util');
Expand All @@ -20,17 +21,17 @@ const Stub = require('./stub.js');

const utils = require('./utils/utils');

const _serviceProto = grpc.load({
const _serviceProto = ProtoLoader.load({
root: path.join(__dirname, './protos'),
file: 'peer/chaincode_shim.proto'
}).protos;

const _chaincodeProto = grpc.load({
const _chaincodeProto = ProtoLoader.load({
root: path.join(__dirname, './protos'),
file: 'peer/chaincode.proto'
}).protos;

const _responseProto = grpc.load({
const _responseProto = ProtoLoader.load({
root: path.join(__dirname, './protos'),
file: 'peer/proposal_response.proto'
}).protos;
Expand Down
4 changes: 2 additions & 2 deletions fabric-shim/lib/iterators.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
'use strict';
const grpc = require('grpc');
const ProtoLoader = require('./protoloader');
const path = require('path');
const EventEmitter = require('events');

const _queryresultProto = grpc.load({
const _queryresultProto = ProtoLoader.load({
root: path.join(__dirname, './protos'),
file: 'ledger/queryresult/kv_query_result.proto'
}).queryresult;
Expand Down
32 changes: 32 additions & 0 deletions fabric-shim/lib/protoloader.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
/**
* Copyright 2018 IBM All Rights Reserved.
*
* SPDX-License-Identifier: Apache-2.0
*/

'use strict';

const grpc = require('grpc');
const protobuf = require('protobufjs');

/**
* @ignore
* A class for easily loading service descriptors and client stub definitions from
* .proto files at runtime.
*/
class ProtoLoader {

/**
* Load service descriptors and client stub definitions from a .proto file.
* @param {string} filename The filename of the .proto file.
* @param {Object} [options] The options used to load the .proto file.
* @returns {*} The loaded service descriptors and client stub definitions.
*/
static load (filename) {
const builder = protobuf.loadProtoFile(filename);
return grpc.loadObject(builder, {protobufjsVersion: 5});
}

}

module.exports = ProtoLoader;
12 changes: 6 additions & 6 deletions fabric-shim/lib/stub.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,32 +7,32 @@
// TODO: Need to add parameter validation to all calls.
'use strict';

const grpc = require('grpc');
const ProtoLoader = require('./protoloader');
const path = require('path');
const util = require('util');
const crypto = require('crypto');

const _commonProto = grpc.load({
const _commonProto = ProtoLoader.load({
root: path.join(__dirname, './protos'),
file: 'common/common.proto'
}).common;

const _proposalProto = grpc.load({
const _proposalProto = ProtoLoader.load({
root: path.join(__dirname, './protos'),
file: 'peer/proposal.proto'
}).protos;

const _eventProto = grpc.load({
const _eventProto = ProtoLoader.load({
root: path.join(__dirname, './protos'),
file: 'peer/chaincode_event.proto'
}).protos;

const _idProto = grpc.load({
const _idProto = ProtoLoader.load({
root: path.join(__dirname, './protos'),
file: 'msp/identities.proto'
}).msp;

const _serviceProto = grpc.load({
const _serviceProto = ProtoLoader.load({
root: path.join(__dirname, './protos'),
file: 'peer/chaincode_shim.proto'
}).protos;
Expand Down
6 changes: 3 additions & 3 deletions fabric-shim/lib/utils/statebased.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,15 @@
# SPDX-License-Identifier: Apache-2.0
*/

const grpc = require('grpc');
const ProtoLoader = require('../protoloader');
const path = require('path');

const _policiesProto = grpc.load({
const _policiesProto = ProtoLoader.load({
root: path.join(__dirname, '../protos'),
file: 'common/policies.proto'
}).common;

const _principalProto = grpc.load({
const _principalProto = ProtoLoader.load({
root: path.join(__dirname, '../protos'),
file: 'msp/msp_principal.proto'
}).common;
Expand Down
3 changes: 2 additions & 1 deletion fabric-shim/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,8 @@
"reflect-metadata": "^0.1.12",
"winston": "^2.4.1",
"yargs": "^10.0.2",
"yargs-parser": "^11.0.0"
"yargs-parser": "^11.0.0",
"protobufjs": "5.0.3"
},
"devDependencies": {
"mocha": "5.2.0",
Expand Down
10 changes: 5 additions & 5 deletions fabric-shim/test/unit/chaincode.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,16 @@ const sinon = require('sinon');
const chai = require('chai');
const expect = chai.expect;
const rewire = require('rewire');
const grpc = require('grpc');
const ProtoLoader = require('../../lib/protoloader');
const path = require('path');

const Logger = require('../../../fabric-shim/lib/logger');
const Logger = require('../../lib/logger');

const chaincodePath = '../../../fabric-shim/lib/chaincode.js';
const chaincodePath = '../../lib/chaincode.js';
const StartCommand = require('../../lib/cmds/startCommand.js');

const _serviceProto = grpc.load({
root: path.join(__dirname, '../../../fabric-shim/lib/protos'),
const _serviceProto = ProtoLoader.load({
root: path.join(__dirname, '../../lib/protos'),
file: 'peer/chaincode_shim.proto'
}).protos;

Expand Down
6 changes: 3 additions & 3 deletions fabric-shim/test/unit/stub.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,15 @@ const chai = require('chai');
chai.use(require('chai-as-promised'));
const expect = chai.expect;
const rewire = require('rewire');
const grpc = require('grpc');
const ProtoLoader = require('../../lib/protoloader');
const path = require('path');

const _serviceProto = grpc.load({
const _serviceProto = ProtoLoader.load({
root: path.join(__dirname, '../../lib/protos'),
file: 'peer/chaincode_shim.proto'
}).protos;

const Stub = rewire('../../../fabric-shim/lib/stub.js');
const Stub = rewire('../../lib/stub.js');

describe('Stub', () => {
describe('validateCompositeKeyAttribute', () => {
Expand Down

0 comments on commit c655d22

Please sign in to comment.