From 3afcb0aee1826f21c000f5226e74ef309f73be73 Mon Sep 17 00:00:00 2001 From: Jim Zhang Date: Tue, 14 Mar 2017 16:29:47 -0400 Subject: [PATCH] Add tls support to node SDK FAB-2722 The network set up is such that: - signing keys and certs were from the cryptogen two-org - tls keys and certs were taken from CR 7141 because the certs have special CN names to use in TLS Now the entire test suite work fine, with all 495 tests passing Note that fabric-ca-client still only supports http. It's being worked on with FAB-1552. Rebased on latest in master. Change-Id: I2ea2b35f3a5b07fb10f88a16c0d35c4d3b097c0c Signed-off-by: Jim Zhang --- README.md | 12 +- fabric-ca-client/package.json | 2 +- fabric-client/config/default.json | 3 +- fabric-client/lib/Chain.js | 2 +- fabric-client/lib/Client.js | 4 +- fabric-client/lib/EventHub.js | 21 +- fabric-client/lib/Remote.js | 98 ++-- fabric-client/lib/utils.js | 30 -- fabric-client/package.json | 2 +- peer1.pem | 5 + test/fixtures/channel/configtx.yaml | 12 +- .../ordererOrg1/msp/cacerts/ordererOrg0.pem | 10 + .../ordererOrg1/msp/cacerts/peerOrg0.pem | 10 + .../ordererOrg1/msp/cacerts/peerOrg1.pem | 10 + .../ordererOrg1/msp/cacerts/peerOrg2.pem | 10 + .../peerOrg1/msp/cacerts/peerOrg0.pem | 10 + .../peerOrg2/msp/cacerts/peerOrg1.pem | 10 + test/fixtures/channel/docker-compose.yaml | 154 ------ test/fixtures/channel/mychannel.tx | Bin 6470 -> 9805 bytes test/fixtures/channel/twoorgs.orderer.block | Bin 6451 -> 9786 bytes test/fixtures/config/overrides.json | 3 - test/fixtures/docker-compose.yaml | 196 ++++++++ test/fixtures/foo.tx | Bin 4915 -> 0 bytes test/fixtures/tls/orderer/ca-cert.pem | 10 + test/fixtures/tls/orderer/cert.pem | 10 + test/fixtures/tls/orderer/key.pem | 5 + test/fixtures/tls/peers/peer0/ca-cert.pem | 10 + test/fixtures/tls/peers/peer0/cert.pem | 10 + test/fixtures/tls/peers/peer0/key.pem | 5 + test/fixtures/tls/peers/peer1/ca-cert.pem | 10 + test/fixtures/tls/peers/peer1/cert.pem | 10 + test/fixtures/tls/peers/peer1/key.pem | 5 + test/fixtures/tls/peers/peer2/ca-cert.pem | 10 + test/fixtures/tls/peers/peer2/cert.pem | 10 + test/fixtures/tls/peers/peer2/key.pem | 5 + test/fixtures/tls/peers/peer3/ca-cert.pem | 10 + test/fixtures/tls/peers/peer3/cert.pem | 10 + test/fixtures/tls/peers/peer3/key.pem | 5 + test/fixtures/tlsca.cert | 12 - test/integration/e2e/config.json | 30 +- test/integration/e2e/create-channel.js | 42 +- test/integration/e2e/install-chaincode.js | 26 +- test/integration/e2e/instantiate-chaincode.js | 35 +- test/integration/e2e/invoke-transaction.js | 35 +- test/integration/e2e/join-channel.js | 45 +- test/integration/e2e/query.js | 9 +- test/integration/events.js | 36 +- test/integration/get-config.js | 28 +- test/integration/install.js | 24 +- test/integration/new-chain.js | 24 +- test/integration/orderer-chain-tests.js | 34 +- test/integration/query.js | 456 ++++++++++-------- test/unit/remote.js | 18 +- 53 files changed, 1064 insertions(+), 519 deletions(-) create mode 100755 peer1.pem create mode 100644 test/fixtures/channel/crypto-config/ordererOrganizations/ordererOrg1/msp/cacerts/ordererOrg0.pem create mode 100644 test/fixtures/channel/crypto-config/ordererOrganizations/ordererOrg1/msp/cacerts/peerOrg0.pem create mode 100644 test/fixtures/channel/crypto-config/ordererOrganizations/ordererOrg1/msp/cacerts/peerOrg1.pem create mode 100644 test/fixtures/channel/crypto-config/ordererOrganizations/ordererOrg1/msp/cacerts/peerOrg2.pem create mode 100644 test/fixtures/channel/crypto-config/peerOrganizations/peerOrg1/msp/cacerts/peerOrg0.pem create mode 100644 test/fixtures/channel/crypto-config/peerOrganizations/peerOrg2/msp/cacerts/peerOrg1.pem delete mode 100644 test/fixtures/channel/docker-compose.yaml delete mode 100644 test/fixtures/config/overrides.json create mode 100644 test/fixtures/docker-compose.yaml delete mode 100644 test/fixtures/foo.tx create mode 100644 test/fixtures/tls/orderer/ca-cert.pem create mode 100644 test/fixtures/tls/orderer/cert.pem create mode 100644 test/fixtures/tls/orderer/key.pem create mode 100644 test/fixtures/tls/peers/peer0/ca-cert.pem create mode 100644 test/fixtures/tls/peers/peer0/cert.pem create mode 100644 test/fixtures/tls/peers/peer0/key.pem create mode 100644 test/fixtures/tls/peers/peer1/ca-cert.pem create mode 100644 test/fixtures/tls/peers/peer1/cert.pem create mode 100644 test/fixtures/tls/peers/peer1/key.pem create mode 100644 test/fixtures/tls/peers/peer2/ca-cert.pem create mode 100644 test/fixtures/tls/peers/peer2/cert.pem create mode 100644 test/fixtures/tls/peers/peer2/key.pem create mode 100644 test/fixtures/tls/peers/peer3/ca-cert.pem create mode 100644 test/fixtures/tls/peers/peer3/cert.pem create mode 100644 test/fixtures/tls/peers/peer3/key.pem delete mode 100644 test/fixtures/tlsca.cert diff --git a/README.md b/README.md index 4f80f37e0e..8beb84480b 100644 --- a/README.md +++ b/README.md @@ -45,16 +45,24 @@ You can build the docker images in your native host (Mac, Ubuntu, Windows, etc.) * run `make docker`. For more build instructions see [fabric-ca README](https://github.com/hyperledger/fabric-ca) * build fabric peer and orderer docker images and other ancillary images * `cd $GOPATH/src/github.com/hyperledger/fabric` - * run `make docker` to build the docker images -* go to fabric-sdk-node/test/fixtures/channel + * run `make docker` to build the docker images (you may need to run `make docker-clean` first if you've built before) +* go to fabric-sdk-node/test/fixtures * run `docker-compose up --force-recreate` to launch the network * Now you are ready to run the tests: * Clear out your previous key value stores that may have cached user enrollment certificates (`rm -rf /tmp/hfc-*`, `rm -rf ~/.hfc-key-store`) + * run 'gulp test' to execute the entire test suite (495+ test cases), or you can run them individually * Test user management by member services with the following tests that exercise the fabric-ca-client package with a KeyValueStore implementations for a file-based KeyValueStore as well as a CouchDB KeyValueStore. To successfully run this test, you must first set up a CouchDB database instance on your local machine. Please see the instructions below. * `test/integration/fabric-ca-services-tests.js` * `test/integration/couchdb-fabricca-tests.js` * `test/integration/cloudant-fabricca-tests.js` * Test happy path from end to end, run `node test/integration/e2e.js` + * Test end to end one step at a time, make sure to follow this sequence: + * `node test/integration/e2e/create-channel.js` + * `node test/integration/e2e/join-channel.js` + * `node test/integration/e2e/install-chaincode.js` + * `node test/integration/e2e/instantiate-chaincode.js` + * `node test/integration/e2e/invoke-transaction.js` + * `node test/integration/e2e/query.js` ### Set Up CouchDB Database for couchdb-fabricca-tests.js diff --git a/fabric-ca-client/package.json b/fabric-ca-client/package.json index fad324e774..b79211dbbc 100644 --- a/fabric-ca-client/package.json +++ b/fabric-ca-client/package.json @@ -1,6 +1,6 @@ { "name": "fabric-ca-client", - "version": "0.1.2", + "version": "0.2.1", "main": "index.js", "repository": { "type": "gerrit", diff --git a/fabric-client/config/default.json b/fabric-client/config/default.json index d0202ba69d..6628bb5cb0 100644 --- a/fabric-client/config/default.json +++ b/fabric-client/config/default.json @@ -11,5 +11,6 @@ "EC": "fabric-client/lib/impl/bccsp_pkcs11.js" }, "key-value-store": "fabric-client/lib/impl/FileKeyValueStore.js", - "nonce-size" : 24 + "nonce-size" : 24, + "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" } diff --git a/fabric-client/lib/Chain.js b/fabric-client/lib/Chain.js index aee662d855..17fb3577cd 100644 --- a/fabric-client/lib/Chain.js +++ b/fabric-client/lib/Chain.js @@ -1394,7 +1394,7 @@ var Chain = class { } ).catch( function(err) { - logger.error('Failed Channels Query. Error: %s', err.stack ? err.stack : err); + logger.error(util.format('Failed Channels Query. Error: %j', err.stack ? {error: err.stack} : err)); return Promise.reject(err); } ); diff --git a/fabric-client/lib/Client.js b/fabric-client/lib/Client.js index b4b104e90c..9008725fbc 100644 --- a/fabric-client/lib/Client.js +++ b/fabric-client/lib/Client.js @@ -16,8 +16,10 @@ 'use strict'; -var Chain = require('./Chain.js'); var sdkUtils = require('./utils.js'); +process.env.GRPC_SSL_CIPHER_SUITES = sdkUtils.getConfigSetting('grpc-ssl-cipher-suites'); + +var Chain = require('./Chain.js'); var logger = sdkUtils.getLogger('Client.js'); var api = require('./api.js'); var User = require('./User.js'); diff --git a/fabric-client/lib/EventHub.js b/fabric-client/lib/EventHub.js index d6ef008dc0..15cad8d989 100644 --- a/fabric-client/lib/EventHub.js +++ b/fabric-client/lib/EventHub.js @@ -17,6 +17,7 @@ 'use strict'; var utils = require('./utils.js'); +var Remote = require('./Remote.js'); var grpc = require('grpc'); var HashTable = require('hashtable'); var logger = utils.getLogger('EventHub.js'); @@ -77,10 +78,8 @@ var EventHub = class { this.blockRegistrants = new Set(); // hashtable of clients registered for transactional events this.txRegistrants = new HashTable(); - // peer addr to connect to + // peer node to connect to this.ep = null; - // grpc options - this.opts = null; // grpc event client interface this._client = null; // grpc chat streaming interface @@ -95,11 +94,19 @@ var EventHub = class { * class creates a default eventHub that most Node clients can * use (see eventHubConnect, eventHubDisconnect and getEventHub). * @param {string} peeraddr peer url - * @param {object} opts grpc options for peer + * @param {object} opts An Object that may contain options to pass to grpcs calls + *
- pem {string} The certificate file, in PEM format, + * to use with the gRPC protocol (that is, with TransportCredentials). + * Required when using the grpcs protocol. + *
- ssl-target-name-override {string} Used in test environment only, when the server certificate's + * hostname (in the 'CN' field) does not match the actual host endpoint that the server process runs + * at, the application can work around the client TLS verify failure by setting this property to the + * value of the server certificate's hostname + *
- any other standard grpc call options will be passed to the grpc service calls directly */ - setPeerAddr(peerUrl) { - this.ep = new utils.Endpoint(peerUrl, null); + setPeerAddr(peerUrl, opts) { + this.ep = new Remote(peerUrl, opts); } /** @@ -119,7 +126,7 @@ var EventHub = class { connect() { if (this.connected) return; if (!this.ep) throw Error('Must set peer address before connecting.'); - this._client = new _events.Events(this.ep.addr, this.ep.creds, this.opts); + this._client = new _events.Events(this.ep._endpoint.addr, this.ep._endpoint.creds, this.ep._options); this.call = this._client.chat(); this.connected = true; // register txCallback to process txid callbacks diff --git a/fabric-client/lib/Remote.js b/fabric-client/lib/Remote.js index 2f55b09113..cb978b456d 100644 --- a/fabric-client/lib/Remote.js +++ b/fabric-client/lib/Remote.js @@ -16,10 +16,10 @@ 'use strict'; -var api = require('./api.js'); -var utils = require('./utils.js'); - var grpc = require('grpc'); +var urlParser = require('url'); + +var utils = require('./utils.js'); var logger = utils.getLogger('Remote.js'); @@ -31,45 +31,54 @@ var logger = utils.getLogger('Remote.js'); var Remote = class { /** - * Constructs a Node with the endpoint configuration settings. + * Constructs an object with the endpoint configuration settings. * - * @param {string} url The orderer URL with format of 'grpcs://host:port'. - * @param {opts} An Object that may contain options to override the global settings - * pem The certificate file, in PEM format, - * to use with the gRPC protocol (that is, with TransportCredentials). - * Required when using the grpcs protocol. + * @param {string} url The orderer URL with format of 'grpc(s)://host:port'. + * @param {object} opts An Object that may contain options to pass to grpcs calls + *
- pem {string} The certificate file, in PEM format, + * to use with the gRPC protocol (that is, with TransportCredentials). + * Required when using the grpcs protocol. + *
- ssl-target-name-override {string} Used in test environment only, when the server certificate's + * hostname (in the 'CN' field) does not match the actual host endpoint that the server process runs + * at, the application can work around the client TLS verify failure by setting this property to the + * value of the server certificate's hostname + *
- any other standard grpc call options will be passed to the grpc service calls directly */ constructor(url, opts) { var pem = null; - if(opts) { - if(opts.pem) { - pem = opts.pem; - } + var ssl_target_name_override = ''; + var default_authority = ''; + + if (opts && opts.pem) { + pem = opts.pem; } - var ssl_target_name_override = 'tlsca'; - var default_authority = 'tlsca'; - if(opts && opts['ssl-target-name-override']) { + if (opts && opts['ssl-target-name-override']) { ssl_target_name_override = opts['ssl-target-name-override']; - } - else { - ssl_target_name_override = utils.getConfigSetting('ssl-target-name-override','tlsca'); - } - if(opts && opts['default-authority']) { - default_authority = opts['default-authority']; - } - else { - default_authority = utils.getConfigSetting('default-authority','tlsca'); + default_authority = opts['ssl-target-name-override']; } // connection options this._options = {}; - if(ssl_target_name_override) this._options['grpc.ssl_target_name_override'] = ssl_target_name_override; - if(default_authority) this._options['grpc.default_authority'] = default_authority; + if (ssl_target_name_override !== '') { + this._options['grpc.ssl_target_name_override'] = ssl_target_name_override; + } + + if (default_authority !== '') { + this._options['grpc.default_authority'] = default_authority; + } + + for (let key in opts ? opts : {}) { + if (opts.hasOwnProperty(key)) { + if (key !== 'pem' && key !== 'ssl-target-name-override') { + this._options[key] = opts[key]; + } + } + } // service connection this._url = url; - this._endpoint = new utils.Endpoint(url, pem); + this._endpoint = new Endpoint(url, pem); } /** @@ -92,3 +101,36 @@ var Remote = class { }; module.exports = Remote; + +// +// The Endpoint class represents a remote grpc or grpcs target +// +var Endpoint = class { + constructor(url /*string*/ , pem /*string*/ ) { + var fs = require('fs'), + path = require('path'); + + var purl = urlParser.parse(url, true); + var protocol; + if (purl.protocol) { + protocol = purl.protocol.toLowerCase().slice(0, -1); + } + if (protocol === 'grpc') { + this.addr = purl.host; + this.creds = grpc.credentials.createInsecure(); + } else if (protocol === 'grpcs') { + if(!(typeof pem === 'string')) { + throw new Error('PEM encoded certificate is required.'); + } + this.addr = purl.host; + this.creds = grpc.credentials.createSsl(new Buffer(pem)); + } else { + var error = new Error(); + error.name = 'InvalidProtocol'; + error.message = 'Invalid protocol: ' + protocol + '. URLs must begin with grpc:// or grpcs://'; + throw error; + } + } +}; + +module.exports.Endpoint = Endpoint; diff --git a/fabric-client/lib/utils.js b/fabric-client/lib/utils.js index 4ef4ab3617..7ffdd90ca9 100644 --- a/fabric-client/lib/utils.js +++ b/fabric-client/lib/utils.js @@ -16,8 +16,6 @@ 'use strict'; -var grpc = require('grpc'); -var urlParser = require('url'); var util = require('util'); var winston = require('winston'); var fs = require('fs-extra'); @@ -334,34 +332,6 @@ module.exports.removeMSPManager = function(chainId) { delete mspManagers[chainId]; }; -// -// The Endpoint class represents a remote grpc or grpcs target -// -module.exports.Endpoint = class { - constructor(url /*string*/ , pem /*string*/ ) { - var purl = urlParser.parse(url, true); - var protocol; - if (purl.protocol) { - protocol = purl.protocol.toLowerCase().slice(0, -1); - } - if (protocol === 'grpc') { - this.addr = purl.host; - this.creds = grpc.credentials.createInsecure(); - } else if (protocol === 'grpcs') { - if(!(typeof pem === 'string')) { - throw new Error('PEM encoded certificate is required.'); - } - this.addr = purl.host; - this.creds = grpc.credentials.createSsl(new Buffer(pem)); - } else { - var error = new Error(); - error.name = 'InvalidProtocol'; - error.message = 'Invalid protocol: ' + protocol + '. URLs must begin with grpc:// or grpcs://'; - throw error; - } - } -}; - // // Other miscellaneous methods // diff --git a/fabric-client/package.json b/fabric-client/package.json index 061bfcec2d..00d7d86a51 100644 --- a/fabric-client/package.json +++ b/fabric-client/package.json @@ -1,6 +1,6 @@ { "name": "fabric-client", - "version": "0.1.3", + "version": "0.2.1", "main": "index.js", "repository": { "type": "gerrit", diff --git a/peer1.pem b/peer1.pem new file mode 100755 index 0000000000..6659ac490c --- /dev/null +++ b/peer1.pem @@ -0,0 +1,5 @@ +-----BEGIN ECDSA PRIVATE KEY----- +MHcCAQEEII0oxsh+lV49AVCyYfqXr3QfvQ19rJl7VN/8g6nLCiCroAoGCCqGSM49 +AwEHoUQDQgAEZibYpTur7h/LIkZkV1yr11mP0M4Hts+ARrky3r97WihvF0+TgxUI +UrFjEe4Yv+SIlz5+IE6BlNemaF67nUeD+Q== +-----END ECDSA PRIVATE KEY----- diff --git a/test/fixtures/channel/configtx.yaml b/test/fixtures/channel/configtx.yaml index dcec8416e8..a6c723da5c 100644 --- a/test/fixtures/channel/configtx.yaml +++ b/test/fixtures/channel/configtx.yaml @@ -90,9 +90,9 @@ Organizations: # AnchorPeers defines the location of peers which can be used # for cross org gossip communication. Note, this value is only # encoded in the genesis block in the Application section context - - Host: localhost + - Host: peer0 Port: 7051 - - Host: localhost + - Host: peer1 Port: 7056 - &Org1 @@ -126,9 +126,9 @@ Organizations: # AnchorPeers defines the location of peers which can be used # for cross org gossip communication. Note, this value is only # encoded in the genesis block in the Application section context - - Host: localhost + - Host: peer2 Port: 8051 - - Host: localhost + - Host: peer3 Port: 8056 ################################################################################ @@ -146,7 +146,7 @@ Orderer: &OrdererDefaults OrdererType: solo Addresses: - - orderer:7050 + - orderer0:7050 # Batch Timeout: The amount of time to wait before creating a batch BatchTimeout: 10s @@ -170,7 +170,7 @@ Orderer: &OrdererDefaults # Brokers: A list of Kafka brokers to which the orderer connects # NOTE: Use IP:port notation Brokers: - - orderer:9092 + - orderer0:9092 # Organizations is the list of orgs which are defined as participants on # the orderer side of the network diff --git a/test/fixtures/channel/crypto-config/ordererOrganizations/ordererOrg1/msp/cacerts/ordererOrg0.pem b/test/fixtures/channel/crypto-config/ordererOrganizations/ordererOrg1/msp/cacerts/ordererOrg0.pem new file mode 100644 index 0000000000..604c9c35d4 --- /dev/null +++ b/test/fixtures/channel/crypto-config/ordererOrganizations/ordererOrg1/msp/cacerts/ordererOrg0.pem @@ -0,0 +1,10 @@ +-----BEGIN CERTIFICATE----- +MIIBcjCCARigAwIBAwICA+gwCgYIKoZIzj0EAwIwFjEUMBIGA1UEAwwLb3JkZXJl +ck9yZzAwHhcNMTcwMjIwMTkwNjEwWhcNMTgwMjIwMTkwNjEwWjAWMRQwEgYDVQQD +DAtvcmRlcmVyT3JnMDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABK8Sv0EA9h06 +fmBkUCO+D/b/2INZ2huy+W/HCxSF22c7WGoJbRzQcWtQmW1KqZowUk86RcxVfFqv +jEMFVXzV38SjVjBUMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFCVakuvq +xEcK8pYMf/Hw8hsexRMTMB8GA1UdIwQYMBaAFCVakuvqxEcK8pYMf/Hw8hsexRMT +MAoGCCqGSM49BAMCA0gAMEUCIQCmXgDSRTyxpSk+PXg0FNlYZ4ijTVwKgLkYVhod +zZPfngIgO4y0p3Fs/gNsJYrroKaaVDe955KrPp/O55jYDKAD/oY= +-----END CERTIFICATE----- diff --git a/test/fixtures/channel/crypto-config/ordererOrganizations/ordererOrg1/msp/cacerts/peerOrg0.pem b/test/fixtures/channel/crypto-config/ordererOrganizations/ordererOrg1/msp/cacerts/peerOrg0.pem new file mode 100644 index 0000000000..ac4f5af8d4 --- /dev/null +++ b/test/fixtures/channel/crypto-config/ordererOrganizations/ordererOrg1/msp/cacerts/peerOrg0.pem @@ -0,0 +1,10 @@ +-----BEGIN CERTIFICATE----- +MIIBbDCCARKgAwIBAwICA+gwCgYIKoZIzj0EAwIwEzERMA8GA1UEAwwIcGVlck9y +ZzAwHhcNMTcwMjIwMTkwNjEwWhcNMTgwMjIwMTkwNjEwWjATMREwDwYDVQQDDAhw +ZWVyT3JnMDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABKJfDc/CcaiHRipTG2AB +K5fA0LO9SOlbtC9bZcjLo/xsL157p+3QB3UVF3gt7nkwgMs/ul3FhSEFTk2EVNlF +1QCjVjBUMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFFQzuQR1RZP/Qn/B +NDtGSa8n4eN/MB8GA1UdIwQYMBaAFFQzuQR1RZP/Qn/BNDtGSa8n4eN/MAoGCCqG +SM49BAMCA0gAMEUCIAuG+/Fy3x9JXAD1/rFsu3ZpCKbXiXZLGF7P6Gma8is5AiEA +pSQpRcdukxe4zvcfRmNBjMbNLWCoWlHSQA2jD678QGE= +-----END CERTIFICATE----- diff --git a/test/fixtures/channel/crypto-config/ordererOrganizations/ordererOrg1/msp/cacerts/peerOrg1.pem b/test/fixtures/channel/crypto-config/ordererOrganizations/ordererOrg1/msp/cacerts/peerOrg1.pem new file mode 100644 index 0000000000..d02884fa17 --- /dev/null +++ b/test/fixtures/channel/crypto-config/ordererOrganizations/ordererOrg1/msp/cacerts/peerOrg1.pem @@ -0,0 +1,10 @@ +-----BEGIN CERTIFICATE----- +MIIBbDCCARKgAwIBAwICA+gwCgYIKoZIzj0EAwIwEzERMA8GA1UEAwwIcGVlck9y +ZzEwHhcNMTcwMjIwMTkwNjEwWhcNMTgwMjIwMTkwNjEwWjATMREwDwYDVQQDDAhw +ZWVyT3JnMTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJ2S+UvyFgFZYL6qcrKo +zy72Nkc/RQVzg1VfwC3X7QcnHEVBuCzba1nxdDVE8XPnhmKBWLKh0adn6GKUZpyf +mbKjVjBUMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFAQlMVsXlKGMEWPf +KMMM6QVASnlPMB8GA1UdIwQYMBaAFAQlMVsXlKGMEWPfKMMM6QVASnlPMAoGCCqG +SM49BAMCA0gAMEUCIHr4AD6Xx3R6zFCsveIMnWao9Us88/0uGHoT4ELmMhA1AiEA +yzfXU5qHp3xBJ1BrKOGi71UmQZVwWfO26INhxcfpCAg= +-----END CERTIFICATE----- diff --git a/test/fixtures/channel/crypto-config/ordererOrganizations/ordererOrg1/msp/cacerts/peerOrg2.pem b/test/fixtures/channel/crypto-config/ordererOrganizations/ordererOrg1/msp/cacerts/peerOrg2.pem new file mode 100644 index 0000000000..813cbe94ec --- /dev/null +++ b/test/fixtures/channel/crypto-config/ordererOrganizations/ordererOrg1/msp/cacerts/peerOrg2.pem @@ -0,0 +1,10 @@ +-----BEGIN CERTIFICATE----- +MIIBbDCCARKgAwIBAwICA+gwCgYIKoZIzj0EAwIwEzERMA8GA1UEAwwIcGVlck9y +ZzIwHhcNMTcwMjIwMTkwNjExWhcNMTgwMjIwMTkwNjExWjATMREwDwYDVQQDDAhw +ZWVyT3JnMjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABH3IweQK1AJdcV3FF27a +gNKhy13Nz2OguzsmUbW85/7pReenAWzs89rEApHXoJqUtNzdZfaLkcq32E1Ilk3N +oN2jVjBUMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFEhOilIyGA53r9Zo +O5GQP0RSZcQ1MB8GA1UdIwQYMBaAFEhOilIyGA53r9ZoO5GQP0RSZcQ1MAoGCCqG +SM49BAMCA0gAMEUCIQD+/5z68ewJarixMgYrg/MwyTMwX7ikCaCgU5TN2MU1PQIg +Qe+klrq6COxsmrctClV64Wj4zhGTOhaZG1yN24OXukQ= +-----END CERTIFICATE----- diff --git a/test/fixtures/channel/crypto-config/peerOrganizations/peerOrg1/msp/cacerts/peerOrg0.pem b/test/fixtures/channel/crypto-config/peerOrganizations/peerOrg1/msp/cacerts/peerOrg0.pem new file mode 100644 index 0000000000..ac4f5af8d4 --- /dev/null +++ b/test/fixtures/channel/crypto-config/peerOrganizations/peerOrg1/msp/cacerts/peerOrg0.pem @@ -0,0 +1,10 @@ +-----BEGIN CERTIFICATE----- +MIIBbDCCARKgAwIBAwICA+gwCgYIKoZIzj0EAwIwEzERMA8GA1UEAwwIcGVlck9y +ZzAwHhcNMTcwMjIwMTkwNjEwWhcNMTgwMjIwMTkwNjEwWjATMREwDwYDVQQDDAhw +ZWVyT3JnMDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABKJfDc/CcaiHRipTG2AB +K5fA0LO9SOlbtC9bZcjLo/xsL157p+3QB3UVF3gt7nkwgMs/ul3FhSEFTk2EVNlF +1QCjVjBUMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFFQzuQR1RZP/Qn/B +NDtGSa8n4eN/MB8GA1UdIwQYMBaAFFQzuQR1RZP/Qn/BNDtGSa8n4eN/MAoGCCqG +SM49BAMCA0gAMEUCIAuG+/Fy3x9JXAD1/rFsu3ZpCKbXiXZLGF7P6Gma8is5AiEA +pSQpRcdukxe4zvcfRmNBjMbNLWCoWlHSQA2jD678QGE= +-----END CERTIFICATE----- diff --git a/test/fixtures/channel/crypto-config/peerOrganizations/peerOrg2/msp/cacerts/peerOrg1.pem b/test/fixtures/channel/crypto-config/peerOrganizations/peerOrg2/msp/cacerts/peerOrg1.pem new file mode 100644 index 0000000000..d02884fa17 --- /dev/null +++ b/test/fixtures/channel/crypto-config/peerOrganizations/peerOrg2/msp/cacerts/peerOrg1.pem @@ -0,0 +1,10 @@ +-----BEGIN CERTIFICATE----- +MIIBbDCCARKgAwIBAwICA+gwCgYIKoZIzj0EAwIwEzERMA8GA1UEAwwIcGVlck9y +ZzEwHhcNMTcwMjIwMTkwNjEwWhcNMTgwMjIwMTkwNjEwWjATMREwDwYDVQQDDAhw +ZWVyT3JnMTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJ2S+UvyFgFZYL6qcrKo +zy72Nkc/RQVzg1VfwC3X7QcnHEVBuCzba1nxdDVE8XPnhmKBWLKh0adn6GKUZpyf +mbKjVjBUMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFAQlMVsXlKGMEWPf +KMMM6QVASnlPMB8GA1UdIwQYMBaAFAQlMVsXlKGMEWPfKMMM6QVASnlPMAoGCCqG +SM49BAMCA0gAMEUCIHr4AD6Xx3R6zFCsveIMnWao9Us88/0uGHoT4ELmMhA1AiEA +yzfXU5qHp3xBJ1BrKOGi71UmQZVwWfO26INhxcfpCAg= +-----END CERTIFICATE----- diff --git a/test/fixtures/channel/docker-compose.yaml b/test/fixtures/channel/docker-compose.yaml deleted file mode 100644 index 3f62754e97..0000000000 --- a/test/fixtures/channel/docker-compose.yaml +++ /dev/null @@ -1,154 +0,0 @@ -version: '2' - -services: - ca0: - image: hyperledger/fabric-ca - environment: - - FABRIC_CA_HOME=/etc/hyperledger/fabric-ca-server - ports: - - "7054:7054" - command: sh -c 'fabric-ca-server start --ca.certfile /etc/hyperledger/fabric-ca-server-config/peerOrg1-cert.pem --ca.keyfile /etc/hyperledger/fabric-ca-server-config/d8a5b3cac1b821f6e4b487ceaf1fd239cdcfc310894150908b90f05e9179556a_sk -b admin:adminpw' -d - volumes: - - ./crypto-config/peerOrganizations/peerOrg1/ca/:/etc/hyperledger/fabric-ca-server-config - container_name: ca_peerOrg1 - - ca1: - image: hyperledger/fabric-ca - environment: - - FABRIC_CA_HOME=/etc/hyperledger/fabric-ca-server - ports: - - "8054:7054" - command: sh -c 'fabric-ca-server start --ca.certfile /etc/hyperledger/fabric-ca-server-config/peerOrg2-cert.pem --ca.keyfile /etc/hyperledger/fabric-ca-server-config/96bdb57f4efbdcf201a269899eb47e2a73fbb728ae14d47d0d5afb75ddea71de_sk -b admin:adminpw' -d - volumes: - - ./crypto-config/peerOrganizations/peerOrg2/ca/:/etc/hyperledger/fabric-ca-server-config - container_name: ca_peerOrg2 - - orderer: - container_name: orderer - image: hyperledger/fabric-orderer - environment: - - ORDERER_GENERAL_LOGLEVEL=debug - - ORDERER_GENERAL_LISTENADDRESS=0.0.0.0 - - ORDERER_GENERAL_GENESISMETHOD=file - - ORDERER_GENERAL_GENESISFILE=/etc/hyperledger/configtx/twoorgs.orderer.block - - ORDERER_GENERAL_LOCALMSPID=OrdererMSP - - ORDERER_GENERAL_LOCALMSPDIR=/etc/hyperledger/configtx/crypto-config/ordererOrganizations/ordererOrg1/orderers/ordererOrg1orderer1/ - working_dir: /opt/gopath/src/github.com/hyperledger/fabric/orderer - command: orderer - ports: - - 7050:7050 - volumes: - - ./:/etc/hyperledger/configtx - - peer0: - container_name: peer0 - image: hyperledger/fabric-peer - environment: - - CORE_PEER_ADDRESSAUTODETECT=true - - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock - - CORE_PEER_NETWORKID=peer0 - - CORE_PEER_GOSSIP_ORGLEADER=true - - CORE_NEXT=true - - CORE_PEER_ENDORSER_ENABLED=true - - CORE_PEER_ID=peer0 - - CORE_PEER_PROFILE_ENABLED=true - - CORE_PEER_LOCALMSPID=Org1MSP - - CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/configtx/crypto-config/peerOrganizations/peerOrg1/peers/peerOrg1Peer1/ - working_dir: /opt/gopath/src/github.com/hyperledger/fabric - command: peer node start --peer-defaultchain=false - ports: - - 7051:7051 - - 7053:7053 - volumes: - - /var/run/:/host/var/run/ - - ./:/etc/hyperledger/configtx - depends_on: - - orderer - - peer1: - container_name: peer1 - image: hyperledger/fabric-peer - environment: - - CORE_PEER_ADDRESSAUTODETECT=true - - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock - - CORE_PEER_GOSSIP_ORGLEADER=false - - CORE_PEER_NETWORKID=peer1 - - CORE_NEXT=true - - CORE_PEER_ENDORSER_ENABLED=true - - CORE_PEER_ID=peer1 - - CORE_PEER_PROFILE_ENABLED=true - - CORE_PEER_LOCALMSPID=Org1MSP - - CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/configtx/crypto-config/peerOrganizations/peerOrg1/peers/peerOrg1Peer2/ - working_dir: /opt/gopath/src/github.com/hyperledger/fabric - command: peer node start --peer-defaultchain=false - ports: - - 7056:7051 - - 7058:7053 - volumes: - - /var/run/:/host/var/run/ - - ./:/etc/hyperledger/configtx - depends_on: - - orderer - - peer0 - - peer2: - container_name: peer2 - image: hyperledger/fabric-peer - environment: - - CORE_PEER_ADDRESSAUTODETECT=true - - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock - - CORE_PEER_GOSSIP_ORGLEADER=true - - CORE_PEER_NETWORKID=peer2 - - CORE_NEXT=true - - CORE_PEER_ENDORSER_ENABLED=true - - CORE_PEER_ID=peer2 - - CORE_PEER_PROFILE_ENABLED=true - - CORE_PEER_LOCALMSPID=Org2MSP - - CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/configtx/crypto-config/peerOrganizations/peerOrg2/peers/peerOrg2Peer1/ - working_dir: /opt/gopath/src/github.com/hyperledger/fabric - command: peer node start --peer-defaultchain=false - ports: - - 8051:7051 - - 8053:7053 - volumes: - - /var/run/:/host/var/run/ - - ./:/etc/hyperledger/configtx - depends_on: - - orderer - - peer3: - container_name: peer3 - image: hyperledger/fabric-peer - environment: - - CORE_PEER_ADDRESSAUTODETECT=true - - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock - - CORE_PEER_GOSSIP_ORGLEADER=false - - CORE_PEER_NETWORKID=peer3 - - CORE_NEXT=true - - CORE_PEER_ENDORSER_ENABLED=true - - CORE_PEER_ID=peer3 - - CORE_PEER_PROFILE_ENABLED=true - - CORE_PEER_LOCALMSPID=Org2MSP - - CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/configtx/crypto-config/peerOrganizations/peerOrg2/peers/peerOrg2Peer2/ - working_dir: /opt/gopath/src/github.com/hyperledger/fabric - command: peer node start --peer-defaultchain=false - ports: - - 8056:7051 - - 8058:7053 - volumes: - - /var/run/:/host/var/run/ - - ./:/etc/hyperledger/configtx - depends_on: - - orderer - - peer2 - - couchdb: - container_name: couchdb - image: couchdb - ports: - - 5984:5984 - environment: - COUCHDB_USER: admin - COUCHDB_PASSWORD: password - DB_URL: http://localhost:5984/member_db - diff --git a/test/fixtures/channel/mychannel.tx b/test/fixtures/channel/mychannel.tx index 5a34ede3d457e814bcfce9b47ef48b2b828ba9b5..9384402e3526688e24ff7b020aa1d9a0e0a96e21 100644 GIT binary patch literal 9805 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 delta 625 zcmX@>bIhooYljh6HCH$XlN1}r%nuF6Sd}<)E0Z%4^YT)2v>c3#(+pCL3=Az&OiTjLb|@Q_L+ajLZ`aQcMyJ%#F;`(kxPq%`7b~QjJW~OiavD4a|iU zxLA@?i%NtfjG}XMi#3X!l9Kfo7+zz^EH(({-rYMZv|DJ0Ay=Cr7s6Jl9|l5C1i0A! zi&9dHQj3Ic2nem?MV>JRKIaxtO zbMtChDK;ZQ4*YC~>cAg%llM#MO%71uo%~BmWwMNlwdW9}*Q-<_4w)lRv4%Po6BO0u04!y@=XuW3Cla#fu!*ta$qHk-O#H XhKee)b1p)h#hK}Oi6x~)sYpx!TY<%J diff --git a/test/fixtures/channel/twoorgs.orderer.block b/test/fixtures/channel/twoorgs.orderer.block index eb10915564598281c8205d29b539bd4f2f1ef882..c800a059fb8ec016dd0fc9e9a3b1c591a1c09be7 100644 GIT binary patch literal 9786 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 WZy>KBuN+9X delta 546 zcmdnxv)QPgOG!#$?&6r*9K+JvYOhyIIqIhP~{qX4568%O7dhGVQs+$E{SCCM3ynR%HhLQ+B!k@`9hRFc+c{VSe0r!qpP zN^nNl?ssR5{e=z~a_uz~+GQxzCdkF^UzCzslv*V8OF+nA8y^=JlJJYW zGl= zBXo>M=r9jla0~Lk`UtK;>m|Zh?Tj4slnups^!4I KQ<D($%UURRT25 zA@=wE-skUo&%e(bIB^J#UuEg`uJ4w31ph zjt#>sX~r>q%oub&pVyg_vT2l$hq_Uw6Gwhn$dyb@qlcPVpbhE)xT%}7IrZ|Nz5u?# z=#M}A>5tyt|K*z>w$wMb{@VR^`yTa^hv09ofbE^@>sx02@(T5b18^G#fjiRG`Do%( z?;lW4_Q7sj^#a#y%q;59`r2`s9)?+@9cqX4p(63RHmNXdLum$=EeF07Pn-vBC=4%Ybzk4$o3tUg_dW*NJP*Q zJ1Eb}T%%Js2|H}DRv7zPR-O8GE?4MBtkoB5lYtmJG*0jl7{>UNz%dVV9gJ+kDhgTR z7`BjASCVKlJFeRr?|NFkx=_1#S#e-zW z7Y47aG*6+$iV+NW!!-mFir8KBSA`|V!5Y|rLmB3bo)Y5@LE<_axFn~8o^5MA6b{-& zM`P$nu=P5T`%A*%6_Lj=kzoY7snNlyad~0vIw(t|Fk+=Xr$`cyqpH%0u}qSAOiN`E zsYy&FRJ(&SpnJujFXJvj(qTGuS5GcDG0mdez0C zCs{yY-0^@>Xnhq~iNiT{Fd=ZV0VjDWNok}dMc7(r!{KP|ntWxh^Go;CtDgZ)MgxKf zk5*H@O$udbVV-5r&m$~AT7;-33Pp{ns%>vNl6t~w${y+7*cVy70!Bq>7>W~0qnJ~U z7lXptad_11j;gD82(vSJPR{zUInAz2ECi^7at>Y0drLnc3#T6=8xUAX(>1sVqiiIl z4+laHY^JLtv+LRl1 zO1Mx)lZtA?E)o^)DjZOF^RLYc|>Udx-;j#llO6A0~D z=bK)+V)0$oPAYSML- zV8B>QK8AyheInzrUDVTt!Ye7^Rv@9M-S?|OKmIu5B)Tk-$~eMNUpVh~ER-&LU-B61 zoMb@^1hlAyuu;g{VWG+gmEnjdW0YNn;;9@q&b&I)^`anb3WNITaa0nzW`4;wrMbap zd)4aM035L=#p4-5*Dd264I{JqFsdg5vaf< zt*D<6sUyHB<$cIQsZ&7_VF`@Zti&5uCfApP8_8f?X;fHX=$%2q4D;@M#9C0{Cacq- z5;R4EO6$R5B=t#h+X^y#$zi7cM9eNp$MAD!oM-Sk;A2Z7?0R_&EJ-FoE0*)-QvumH}c`0f4<$2oT(k=zkmW7hqAZmVQ1i;HX~n zMlLD4J*F}(INboMEd`ZN8lHm96&zs*n4-!xC4uLs3_P=I3180UbV={!c$sHKZRjmd z0}|B|qL-da+1J2!%T$f@EqkB3w{x9(iQ1uVCI2^eu4QghyO*!k!vxu#jpm;M`8v1- z4R7R!)R(FINvOLY33-RQeHrrL`eEi0dO+>%Y*FCi`rt<5yG(7Lx|2AQWX^LMe@;?Z?E$Z}zX0!(OzskM*=+T4BOW<>BpFHx+$zo1zQ!jw6935s} z2bAbrGcydElVk&8RaZSTq&`o*2=<|_o538q?#7dO4ZMgy9r7XAV`t`iGh;LM*#Yl@ zJM6>{O+Q?O@+vS>Q3P&=6L<2TDxK%5r$exh+=)I`RCi=-c3S>bDPCR>Yrp&8@85gt Z9{0oVgg<{=pO>iJaAf)Fy5^^+{{#*U!`=V@ diff --git a/test/fixtures/tls/orderer/ca-cert.pem b/test/fixtures/tls/orderer/ca-cert.pem new file mode 100644 index 0000000000..604c9c35d4 --- /dev/null +++ b/test/fixtures/tls/orderer/ca-cert.pem @@ -0,0 +1,10 @@ +-----BEGIN CERTIFICATE----- +MIIBcjCCARigAwIBAwICA+gwCgYIKoZIzj0EAwIwFjEUMBIGA1UEAwwLb3JkZXJl +ck9yZzAwHhcNMTcwMjIwMTkwNjEwWhcNMTgwMjIwMTkwNjEwWjAWMRQwEgYDVQQD +DAtvcmRlcmVyT3JnMDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABK8Sv0EA9h06 +fmBkUCO+D/b/2INZ2huy+W/HCxSF22c7WGoJbRzQcWtQmW1KqZowUk86RcxVfFqv +jEMFVXzV38SjVjBUMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFCVakuvq +xEcK8pYMf/Hw8hsexRMTMB8GA1UdIwQYMBaAFCVakuvqxEcK8pYMf/Hw8hsexRMT +MAoGCCqGSM49BAMCA0gAMEUCIQCmXgDSRTyxpSk+PXg0FNlYZ4ijTVwKgLkYVhod +zZPfngIgO4y0p3Fs/gNsJYrroKaaVDe955KrPp/O55jYDKAD/oY= +-----END CERTIFICATE----- diff --git a/test/fixtures/tls/orderer/cert.pem b/test/fixtures/tls/orderer/cert.pem new file mode 100644 index 0000000000..171bc88a11 --- /dev/null +++ b/test/fixtures/tls/orderer/cert.pem @@ -0,0 +1,10 @@ +-----BEGIN CERTIFICATE----- +MIIBajCCAQ+gAwIBAwICA+gwCgYIKoZIzj0EAwIwFjEUMBIGA1UEAwwLb3JkZXJl +ck9yZzAwHhcNMTcwMjIwMTkwNjEwWhcNMTgwMjIwMTkwNjEwWjATMREwDwYDVQQD +DAhvcmRlcmVyMDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABH1h6WeFWnBDgPN5 +biXbyzqShGrAZ9ztOu4j03xcrqUIenBQASJ/rmAErmq4kilNyRVnwdZwDcGTrAwP +QfAXkVCjUDBOMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFK01/Qm7YoTpXLXjq18D ++X2pExanMB8GA1UdIwQYMBaAFCVakuvqxEcK8pYMf/Hw8hsexRMTMAoGCCqGSM49 +BAMCA0kAMEYCIQDXdRYqrZdTAM6F2JBl/eN3nIHoBa7N3gIQDqdUAris8wIhAP6i +f0CgyBN4nWmw2mT+XtxaB0xxWrhYj/j4agiuQzrd +-----END CERTIFICATE----- diff --git a/test/fixtures/tls/orderer/key.pem b/test/fixtures/tls/orderer/key.pem new file mode 100644 index 0000000000..e3d29310bf --- /dev/null +++ b/test/fixtures/tls/orderer/key.pem @@ -0,0 +1,5 @@ +-----BEGIN EC PRIVATE KEY----- +MHcCAQEEIJPtBtNKlilpgVZ5FGUBWB2KH3zBtzkBnkrFMmi6W/80oAoGCCqGSM49 +AwEHoUQDQgAEfWHpZ4VacEOA83luJdvLOpKEasBn3O067iPTfFyupQh6cFABIn+u +YASuariSKU3JFWfB1nANwZOsDA9B8BeRUA== +-----END EC PRIVATE KEY----- diff --git a/test/fixtures/tls/peers/peer0/ca-cert.pem b/test/fixtures/tls/peers/peer0/ca-cert.pem new file mode 100644 index 0000000000..ac4f5af8d4 --- /dev/null +++ b/test/fixtures/tls/peers/peer0/ca-cert.pem @@ -0,0 +1,10 @@ +-----BEGIN CERTIFICATE----- +MIIBbDCCARKgAwIBAwICA+gwCgYIKoZIzj0EAwIwEzERMA8GA1UEAwwIcGVlck9y +ZzAwHhcNMTcwMjIwMTkwNjEwWhcNMTgwMjIwMTkwNjEwWjATMREwDwYDVQQDDAhw +ZWVyT3JnMDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABKJfDc/CcaiHRipTG2AB +K5fA0LO9SOlbtC9bZcjLo/xsL157p+3QB3UVF3gt7nkwgMs/ul3FhSEFTk2EVNlF +1QCjVjBUMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFFQzuQR1RZP/Qn/B +NDtGSa8n4eN/MB8GA1UdIwQYMBaAFFQzuQR1RZP/Qn/BNDtGSa8n4eN/MAoGCCqG +SM49BAMCA0gAMEUCIAuG+/Fy3x9JXAD1/rFsu3ZpCKbXiXZLGF7P6Gma8is5AiEA +pSQpRcdukxe4zvcfRmNBjMbNLWCoWlHSQA2jD678QGE= +-----END CERTIFICATE----- diff --git a/test/fixtures/tls/peers/peer0/cert.pem b/test/fixtures/tls/peers/peer0/cert.pem new file mode 100644 index 0000000000..52b6db4aef --- /dev/null +++ b/test/fixtures/tls/peers/peer0/cert.pem @@ -0,0 +1,10 @@ +-----BEGIN CERTIFICATE----- +MIIBYzCCAQmgAwIBAwICA+gwCgYIKoZIzj0EAwIwEzERMA8GA1UEAwwIcGVlck9y +ZzAwHhcNMTcwMjIwMTkwNjExWhcNMTgwMjIwMTkwNjExWjAQMQ4wDAYDVQQDDAVw +ZWVyMDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABEF6dfqjqfbIgZuOR+dgoJMl +/FaUlGI70A/ixmVUY83Yp4YtV3FDBSOPiO5O+s8pHnpbwB1LqhrxAx1Plr0M/UWj +UDBOMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFBY2bc84vLEwkX1fSAER2p48jJXw +MB8GA1UdIwQYMBaAFFQzuQR1RZP/Qn/BNDtGSa8n4eN/MAoGCCqGSM49BAMCA0gA +MEUCIQDeDZ71L+OTYcbbqiDNRf0L8OExO59mH1O3xpdwMAM0MgIgXySG4sv9yV31 +WcWRFfRFyu7o3T72kqiLZ1nkDuJ8jWI= +-----END CERTIFICATE----- diff --git a/test/fixtures/tls/peers/peer0/key.pem b/test/fixtures/tls/peers/peer0/key.pem new file mode 100644 index 0000000000..811fd382dd --- /dev/null +++ b/test/fixtures/tls/peers/peer0/key.pem @@ -0,0 +1,5 @@ +-----BEGIN EC PRIVATE KEY----- +MHcCAQEEIKyhczWGQa7NbV1tq9LkZkvqslzoQ1HaEVwA6FCLOfvioAoGCCqGSM49 +AwEHoUQDQgAEQXp1+qOp9siBm45H52CgkyX8VpSUYjvQD+LGZVRjzdinhi1XcUMF +I4+I7k76zykeelvAHUuqGvEDHU+WvQz9RQ== +-----END EC PRIVATE KEY----- diff --git a/test/fixtures/tls/peers/peer1/ca-cert.pem b/test/fixtures/tls/peers/peer1/ca-cert.pem new file mode 100644 index 0000000000..ac4f5af8d4 --- /dev/null +++ b/test/fixtures/tls/peers/peer1/ca-cert.pem @@ -0,0 +1,10 @@ +-----BEGIN CERTIFICATE----- +MIIBbDCCARKgAwIBAwICA+gwCgYIKoZIzj0EAwIwEzERMA8GA1UEAwwIcGVlck9y +ZzAwHhcNMTcwMjIwMTkwNjEwWhcNMTgwMjIwMTkwNjEwWjATMREwDwYDVQQDDAhw +ZWVyT3JnMDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABKJfDc/CcaiHRipTG2AB +K5fA0LO9SOlbtC9bZcjLo/xsL157p+3QB3UVF3gt7nkwgMs/ul3FhSEFTk2EVNlF +1QCjVjBUMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFFQzuQR1RZP/Qn/B +NDtGSa8n4eN/MB8GA1UdIwQYMBaAFFQzuQR1RZP/Qn/BNDtGSa8n4eN/MAoGCCqG +SM49BAMCA0gAMEUCIAuG+/Fy3x9JXAD1/rFsu3ZpCKbXiXZLGF7P6Gma8is5AiEA +pSQpRcdukxe4zvcfRmNBjMbNLWCoWlHSQA2jD678QGE= +-----END CERTIFICATE----- diff --git a/test/fixtures/tls/peers/peer1/cert.pem b/test/fixtures/tls/peers/peer1/cert.pem new file mode 100644 index 0000000000..3040662bf7 --- /dev/null +++ b/test/fixtures/tls/peers/peer1/cert.pem @@ -0,0 +1,10 @@ +-----BEGIN CERTIFICATE----- +MIIBYzCCAQmgAwIBAwICA+gwCgYIKoZIzj0EAwIwEzERMA8GA1UEAwwIcGVlck9y +ZzAwHhcNMTcwMjIwMTkwNjExWhcNMTgwMjIwMTkwNjExWjAQMQ4wDAYDVQQDDAVw +ZWVyMTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABI9/7z3nMORUeS3rZ+F93ymD +R2jiB6Wm+QSoSz/uQuRavnoksgU6peF5rBMfebk/PfNoVjdR4egCqAHBHIpp7Iuj +UDBOMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFJpxVAXpMAEOHtbNCwvL1m/ku9gt +MB8GA1UdIwQYMBaAFFQzuQR1RZP/Qn/BNDtGSa8n4eN/MAoGCCqGSM49BAMCA0gA +MEUCIQDsQ6lmuLdKmMgnN5+9YjlpCRQEJCoaG3uxRHhrAecZngIgQZlwnvwka+TM +gF/yC3r2MeELK9ocw8c22DAe6x71RT4= +-----END CERTIFICATE----- diff --git a/test/fixtures/tls/peers/peer1/key.pem b/test/fixtures/tls/peers/peer1/key.pem new file mode 100644 index 0000000000..ed6814c8eb --- /dev/null +++ b/test/fixtures/tls/peers/peer1/key.pem @@ -0,0 +1,5 @@ +-----BEGIN EC PRIVATE KEY----- +MHcCAQEEIGke7eS6obPUxqqTr3k4svyI+7H2K8vtauJslox/rNjooAoGCCqGSM49 +AwEHoUQDQgAEj3/vPecw5FR5Letn4X3fKYNHaOIHpab5BKhLP+5C5Fq+eiSyBTql +4XmsEx95uT8982hWN1Hh6AKoAcEcimnsiw== +-----END EC PRIVATE KEY----- diff --git a/test/fixtures/tls/peers/peer2/ca-cert.pem b/test/fixtures/tls/peers/peer2/ca-cert.pem new file mode 100644 index 0000000000..d02884fa17 --- /dev/null +++ b/test/fixtures/tls/peers/peer2/ca-cert.pem @@ -0,0 +1,10 @@ +-----BEGIN CERTIFICATE----- +MIIBbDCCARKgAwIBAwICA+gwCgYIKoZIzj0EAwIwEzERMA8GA1UEAwwIcGVlck9y +ZzEwHhcNMTcwMjIwMTkwNjEwWhcNMTgwMjIwMTkwNjEwWjATMREwDwYDVQQDDAhw +ZWVyT3JnMTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJ2S+UvyFgFZYL6qcrKo +zy72Nkc/RQVzg1VfwC3X7QcnHEVBuCzba1nxdDVE8XPnhmKBWLKh0adn6GKUZpyf +mbKjVjBUMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFAQlMVsXlKGMEWPf +KMMM6QVASnlPMB8GA1UdIwQYMBaAFAQlMVsXlKGMEWPfKMMM6QVASnlPMAoGCCqG +SM49BAMCA0gAMEUCIHr4AD6Xx3R6zFCsveIMnWao9Us88/0uGHoT4ELmMhA1AiEA +yzfXU5qHp3xBJ1BrKOGi71UmQZVwWfO26INhxcfpCAg= +-----END CERTIFICATE----- diff --git a/test/fixtures/tls/peers/peer2/cert.pem b/test/fixtures/tls/peers/peer2/cert.pem new file mode 100644 index 0000000000..e6c7ec260f --- /dev/null +++ b/test/fixtures/tls/peers/peer2/cert.pem @@ -0,0 +1,10 @@ +-----BEGIN CERTIFICATE----- +MIIBYzCCAQmgAwIBAwICA+gwCgYIKoZIzj0EAwIwEzERMA8GA1UEAwwIcGVlck9y +ZzEwHhcNMTcwMjIwMTkwNjExWhcNMTgwMjIwMTkwNjExWjAQMQ4wDAYDVQQDDAVw +ZWVyMjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABLZyoiEc/0aTctk8THKHtQ8W +F2BAG1vgB6kxT+cUaLnEH2El9NTvRYjHmjq8ozM9+/R2JVucEGZelAIQxKD5pXuj +UDBOMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFDdoFJ6jiClMPOVsNx5akist91so +MB8GA1UdIwQYMBaAFAQlMVsXlKGMEWPfKMMM6QVASnlPMAoGCCqGSM49BAMCA0gA +MEUCIQC7wATZy+O/7UIPzSiMSXNgBKCaT2U55+Y/e0FcHQFSoQIgCyKExrm3gtW0 +SAN1VofiAZkr3gYndu9goHZe4wVh9eQ= +-----END CERTIFICATE----- diff --git a/test/fixtures/tls/peers/peer2/key.pem b/test/fixtures/tls/peers/peer2/key.pem new file mode 100644 index 0000000000..56fe97734b --- /dev/null +++ b/test/fixtures/tls/peers/peer2/key.pem @@ -0,0 +1,5 @@ +-----BEGIN EC PRIVATE KEY----- +MHcCAQEEICO7+w9YD/MdNiZHXusiWGhHTOOAXks10aJGuITmZ0wkoAoGCCqGSM49 +AwEHoUQDQgAEtnKiIRz/RpNy2TxMcoe1DxYXYEAbW+AHqTFP5xRoucQfYSX01O9F +iMeaOryjMz379HYlW5wQZl6UAhDEoPmlew== +-----END EC PRIVATE KEY----- diff --git a/test/fixtures/tls/peers/peer3/ca-cert.pem b/test/fixtures/tls/peers/peer3/ca-cert.pem new file mode 100644 index 0000000000..d02884fa17 --- /dev/null +++ b/test/fixtures/tls/peers/peer3/ca-cert.pem @@ -0,0 +1,10 @@ +-----BEGIN CERTIFICATE----- +MIIBbDCCARKgAwIBAwICA+gwCgYIKoZIzj0EAwIwEzERMA8GA1UEAwwIcGVlck9y +ZzEwHhcNMTcwMjIwMTkwNjEwWhcNMTgwMjIwMTkwNjEwWjATMREwDwYDVQQDDAhw +ZWVyT3JnMTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJ2S+UvyFgFZYL6qcrKo +zy72Nkc/RQVzg1VfwC3X7QcnHEVBuCzba1nxdDVE8XPnhmKBWLKh0adn6GKUZpyf +mbKjVjBUMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFAQlMVsXlKGMEWPf +KMMM6QVASnlPMB8GA1UdIwQYMBaAFAQlMVsXlKGMEWPfKMMM6QVASnlPMAoGCCqG +SM49BAMCA0gAMEUCIHr4AD6Xx3R6zFCsveIMnWao9Us88/0uGHoT4ELmMhA1AiEA +yzfXU5qHp3xBJ1BrKOGi71UmQZVwWfO26INhxcfpCAg= +-----END CERTIFICATE----- diff --git a/test/fixtures/tls/peers/peer3/cert.pem b/test/fixtures/tls/peers/peer3/cert.pem new file mode 100644 index 0000000000..275533ba95 --- /dev/null +++ b/test/fixtures/tls/peers/peer3/cert.pem @@ -0,0 +1,10 @@ +-----BEGIN CERTIFICATE----- +MIIBYzCCAQmgAwIBAwICA+gwCgYIKoZIzj0EAwIwEzERMA8GA1UEAwwIcGVlck9y +ZzEwHhcNMTcwMjIwMTkwNjExWhcNMTgwMjIwMTkwNjExWjAQMQ4wDAYDVQQDDAVw +ZWVyMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABMvgApKCXYIEY4YgPTgQKrLM +GMdK/1j8WEl2hijED+onVUF/w/oleiSljNOCxdda3u3X0yXqXz/ozQPJL/d4YL+j +UDBOMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFOzMeVZK5xYzjaeO2uGvz8B7CQS7 +MB8GA1UdIwQYMBaAFAQlMVsXlKGMEWPfKMMM6QVASnlPMAoGCCqGSM49BAMCA0gA +MEUCIQCgKtFodSdXcz2yf9MZB90t1nXYytpGUPMAl0/Gy2/yfQIgAcC1KRtaiclr +9C9tshhXdYdbpvDruVZrwqjJ4drPHik= +-----END CERTIFICATE----- diff --git a/test/fixtures/tls/peers/peer3/key.pem b/test/fixtures/tls/peers/peer3/key.pem new file mode 100644 index 0000000000..73e4569018 --- /dev/null +++ b/test/fixtures/tls/peers/peer3/key.pem @@ -0,0 +1,5 @@ +-----BEGIN EC PRIVATE KEY----- +MHcCAQEEIPK7O2ZBw9tXDiVd2OM+riCIHT+uQPynGd0z9fjLSUltoAoGCCqGSM49 +AwEHoUQDQgAEy+ACkoJdggRjhiA9OBAqsswYx0r/WPxYSXaGKMQP6idVQX/D+iV6 +JKWM04LF11re7dfTJepfP+jNA8kv93hgvw== +-----END EC PRIVATE KEY----- diff --git a/test/fixtures/tlsca.cert b/test/fixtures/tlsca.cert deleted file mode 100644 index 990911284d..0000000000 --- a/test/fixtures/tlsca.cert +++ /dev/null @@ -1,12 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIBwTCCAUegAwIBAgIBATAKBggqhkjOPQQDAzApMQswCQYDVQQGEwJVUzEMMAoG -A1UEChMDSUJNMQwwCgYDVQQDEwNPQkMwHhcNMTYwMTIxMjI0OTUxWhcNMTYwNDIw -MjI0OTUxWjApMQswCQYDVQQGEwJVUzEMMAoGA1UEChMDSUJNMQwwCgYDVQQDEwNP -QkMwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAR6YAoPOwMzIVi+P83V79I6BeIyJeaM -meqWbmwQsTRlKD6g0L0YvczQO2vp+DbxRN11okGq3O/ctcPzvPXvm7Mcbb3whgXW -RjbsX6wn25tF2/hU6fQsyQLPiJuNj/yxknSjQzBBMA4GA1UdDwEB/wQEAwIChDAP -BgNVHRMBAf8EBTADAQH/MA0GA1UdDgQGBAQBAgMEMA8GA1UdIwQIMAaABAECAwQw -CgYIKoZIzj0EAwMDaAAwZQIxAITGmq+x5N7Q1jrLt3QFRtTKsuNIosnlV4LR54l3 -yyDo17Ts0YLyC0pZQFd+GURSOQIwP/XAwoMcbJJtOVeW/UL2EOqmKA2ygmWX5kte -9Lngf550S6gPEWuDQOcY95B+x3eH ------END CERTIFICATE----- diff --git a/test/integration/e2e/config.json b/test/integration/e2e/config.json index 2698462571..9a63020ab5 100644 --- a/test/integration/e2e/config.json +++ b/test/integration/e2e/config.json @@ -1,17 +1,25 @@ { "test-network": { - "orderer": "grpc://localhost:7050", + "orderer": { + "url": "grpcs://localhost:7050", + "server-hostname": "orderer0", + "tls_cacerts": "../../fixtures/tls/orderer/ca-cert.pem" + }, "org1": { "name": "peerOrg1", "mspid": "Org1MSP", "ca": "http://localhost:7054", "peer1": { - "requests": "grpc://localhost:7051", - "events": "grpc://localhost:7053" + "requests": "grpcs://localhost:7051", + "events": "grpcs://localhost:7053", + "server-hostname": "peer0", + "tls_cacerts": "../../fixtures/tls/peers/peer0/ca-cert.pem" }, "peer2": { - "requests": "grpc://localhost:7056", - "events": "grpc://localhost:7058" + "requests": "grpcs://localhost:7056", + "events": "grpcs://localhost:7058", + "server-hostname": "peer1", + "tls_cacerts": "../../fixtures/tls/peers/peer1/ca-cert.pem" } }, "org2": { @@ -19,12 +27,16 @@ "mspid": "Org2MSP", "ca": "http://localhost:8054", "peer1": { - "requests": "grpc://localhost:8051", - "events": "grpc://localhost:8053" + "requests": "grpcs://localhost:8051", + "events": "grpcs://localhost:8053", + "server-hostname": "peer2", + "tls_cacerts": "../../fixtures/tls/peers/peer2/ca-cert.pem" }, "peer2": { - "requests": "grpc://localhost:8056", - "events": "grpc://localhost:8058" + "requests": "grpcs://localhost:8056", + "events": "grpcs://localhost:8058", + "server-hostname": "peer3", + "tls_cacerts": "../../fixtures/tls/peers/peer3/ca-cert.pem" } } } diff --git a/test/integration/e2e/create-channel.js b/test/integration/e2e/create-channel.js index aa0a310154..219b34d111 100644 --- a/test/integration/e2e/create-channel.js +++ b/test/integration/e2e/create-channel.js @@ -43,15 +43,27 @@ test('\n\n***** End-to-end flow: create channel *****\n\n', function(t) { // var client = new hfc(); var chain = client.newChain('mychannel'); - chain.addOrderer(new Orderer(ORGS.orderer)); + + var caRootsPath = ORGS.orderer.tls_cacerts; + let data = fs.readFileSync(path.join(__dirname, caRootsPath)); + let caroots = Buffer.from(data).toString(); + + chain.addOrderer( + new Orderer( + ORGS.orderer.url, + { + 'pem': caroots, + 'ssl-target-name-override': ORGS.orderer['server-hostname'] + } + ) + ); // Acting as a client in org1 when creating the channel var org = ORGS.org1.name; - hfc.newDefaultKeyValueStore({ + return hfc.newDefaultKeyValueStore({ path: testUtil.storePathForOrg(org) - }) - .then((store) => { + }).then((store) => { client.setStateStore(store); return testUtil.getSubmitter(client, t, 'org1'); }) @@ -60,20 +72,14 @@ test('\n\n***** End-to-end flow: create channel *****\n\n', function(t) { the_user = admin; // readin the envelope to send to the orderer - return readFile('./test/fixtures/channel/mychannel.tx'); - }, (err) => { - t.fail('Failed to enroll user \'admin\'. ' + err); - t.end(); - }) - .then((data) => { - t.pass('Successfully read file'); + data = fs.readFileSync('./test/fixtures/channel/mychannel.tx'); var request = { envelope : data }; // send to orderer return chain.createChannel(request); }, (err) => { - t.fail('Failed to read file for channel template: ' + err); + t.fail('Failed to enroll user \'admin\'. ' + err); t.end(); }) .then((response) => { @@ -99,18 +105,6 @@ test('\n\n***** End-to-end flow: create channel *****\n\n', function(t) { }); }); -function readFile(path) { - return new Promise(function(resolve, reject) { - fs.readFile(path, function(err, data) { - if (err) { - reject(err); - } else { - resolve(data); - } - }); - }); -} - function sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms)); } diff --git a/test/integration/e2e/install-chaincode.js b/test/integration/e2e/install-chaincode.js index 690b6dab49..1ae6106657 100644 --- a/test/integration/e2e/install-chaincode.js +++ b/test/integration/e2e/install-chaincode.js @@ -23,6 +23,7 @@ var _test = require('tape-promise'); var test = _test(tape); var path = require('path'); +var fs = require('fs'); var util = require('util'); var hfc = require('fabric-client'); @@ -66,7 +67,20 @@ test('\n\n***** End-to-end flow: chaincode install *****\n\n', (t) => { function installChaincode(org, t) { var client = new hfc(); var chain = client.newChain(testUtil.END2END.channel); - chain.addOrderer(new Orderer(ORGS.orderer)); + + var caRootsPath = ORGS.orderer.tls_cacerts; + let data = fs.readFileSync(path.join(__dirname, caRootsPath)); + let caroots = Buffer.from(data).toString(); + + chain.addOrderer( + new Orderer( + ORGS.orderer.url, + { + 'pem': caroots, + 'ssl-target-name-override': ORGS.orderer['server-hostname'] + } + ) + ); var orgName = ORGS[org].name; @@ -74,7 +88,15 @@ function installChaincode(org, t) { for (let key in ORGS[org]) { if (ORGS[org].hasOwnProperty(key)) { if (key.indexOf('peer') === 0) { - let peer = new Peer(ORGS[org][key].requests); + let data = fs.readFileSync(path.join(__dirname, ORGS[org][key]['tls_cacerts'])); + let peer = new Peer( + ORGS[org][key].requests, + { + pem: Buffer.from(data).toString(), + 'ssl-target-name-override': ORGS[org][key]['server-hostname'] + } + ); + targets.push(peer); chain.addPeer(peer); } diff --git a/test/integration/e2e/instantiate-chaincode.js b/test/integration/e2e/instantiate-chaincode.js index f01f5f57de..d2c7e0fd6b 100644 --- a/test/integration/e2e/instantiate-chaincode.js +++ b/test/integration/e2e/instantiate-chaincode.js @@ -23,6 +23,7 @@ var _test = require('tape-promise'); var test = _test(tape); var path = require('path'); +var fs = require('fs'); var util = require('util'); var hfc = require('fabric-client'); @@ -64,7 +65,20 @@ test('\n\n***** End-to-end flow: instantiate chaincode *****', (t) => { var org = 'org1'; var client = new hfc(); var chain = client.newChain(e2e.channel); - chain.addOrderer(new Orderer(ORGS.orderer)); + + var caRootsPath = ORGS.orderer.tls_cacerts; + let data = fs.readFileSync(path.join(__dirname, caRootsPath)); + let caroots = Buffer.from(data).toString(); + + chain.addOrderer( + new Orderer( + ORGS.orderer.url, + { + 'pem': caroots, + 'ssl-target-name-override': ORGS.orderer['server-hostname'] + } + ) + ); var orgName = ORGS[org].name; @@ -74,11 +88,24 @@ test('\n\n***** End-to-end flow: instantiate chaincode *****', (t) => { // both requests and events for (let key in ORGS) { if (ORGS.hasOwnProperty(key) && typeof ORGS[key].peer1 !== 'undefined') { - let peer = new Peer(ORGS[key].peer1.requests); + let data = fs.readFileSync(path.join(__dirname, ORGS[key].peer1['tls_cacerts'])); + let peer = new Peer( + ORGS[key].peer1.requests, + { + pem: Buffer.from(data).toString(), + 'ssl-target-name-override': ORGS[key].peer1['server-hostname'] + } + ); chain.addPeer(peer); let eh = new EventHub(); - eh.setPeerAddr(ORGS[key].peer1.events); + eh.setPeerAddr( + ORGS[key].peer1.events, + { + pem: Buffer.from(data).toString(), + 'ssl-target-name-override': ORGS[key].peer1['server-hostname'] + } + ); eh.connect(); eventhubs.push(eh); allEventhubs.push(eh); @@ -166,7 +193,7 @@ test('\n\n***** End-to-end flow: instantiate chaincode *****', (t) => { let handle = setTimeout(reject, 30000); eh.registerTxEvent(deployId.toString(), (tx, code) => { - t.pass('The chaincode instantiate transaction has been committed on peer '+ eh.ep.addr); + t.pass('The chaincode instantiate transaction has been committed on peer '+ eh.ep._endpoint.addr); clearTimeout(handle); eh.unregisterTxEvent(deployId); diff --git a/test/integration/e2e/invoke-transaction.js b/test/integration/e2e/invoke-transaction.js index 3099c2524d..f36144f979 100644 --- a/test/integration/e2e/invoke-transaction.js +++ b/test/integration/e2e/invoke-transaction.js @@ -23,6 +23,7 @@ var _test = require('tape-promise'); var test = _test(tape); var path = require('path'); +var fs = require('fs'); var util = require('util'); var hfc = require('fabric-client'); @@ -66,7 +67,20 @@ test('\n\n***** End-to-end flow: invoke transaction to move money *****', (t) => var org = 'org2'; var client = new hfc(); var chain = client.newChain(e2e.channel); - chain.addOrderer(new Orderer(ORGS.orderer)); + + var caRootsPath = ORGS.orderer.tls_cacerts; + let data = fs.readFileSync(path.join(__dirname, caRootsPath)); + let caroots = Buffer.from(data).toString(); + + chain.addOrderer( + new Orderer( + ORGS.orderer.url, + { + 'pem': caroots, + 'ssl-target-name-override': ORGS.orderer['server-hostname'] + } + ) + ); var orgName = ORGS[org].name; @@ -76,11 +90,24 @@ test('\n\n***** End-to-end flow: invoke transaction to move money *****', (t) => // both requests and events for (let key in ORGS) { if (ORGS.hasOwnProperty(key) && typeof ORGS[key].peer1 !== 'undefined') { - let peer = new Peer(ORGS[key].peer1.requests); + let data = fs.readFileSync(path.join(__dirname, ORGS[key].peer1['tls_cacerts'])); + let peer = new Peer( + ORGS[key].peer1.requests, + { + pem: Buffer.from(data).toString(), + 'ssl-target-name-override': ORGS[key].peer1['server-hostname'] + } + ); chain.addPeer(peer); let eh = new EventHub(); - eh.setPeerAddr(ORGS[key].peer1.events); + eh.setPeerAddr( + ORGS[key].peer1.events, + { + pem: Buffer.from(data).toString(), + 'ssl-target-name-override': ORGS[key].peer1['server-hostname'] + } + ); eh.connect(); eventhubs.push(eh); allEventhubs.push(eh); @@ -165,7 +192,7 @@ test('\n\n***** End-to-end flow: invoke transaction to move money *****', (t) => t.fail('The balance transfer transaction was invalid, code = ' + code); reject(); } else { - t.pass('The balance transfer transaction has been committed on peer '+ eh.ep.addr); + t.pass('The balance transfer transaction has been committed on peer '+ eh.ep._endpoint.addr); resolve(); } }); diff --git a/test/integration/e2e/join-channel.js b/test/integration/e2e/join-channel.js index 91d023803b..c908957f12 100644 --- a/test/integration/e2e/join-channel.js +++ b/test/integration/e2e/join-channel.js @@ -20,6 +20,7 @@ var test = _test(tape); var util = require('util'); var path = require('path'); +var fs = require('fs'); var grpc = require('grpc'); var hfc = require('fabric-client'); @@ -65,14 +66,14 @@ test('\n\n***** End-to-end flow: join channel *****\n\n', function(t) { t.pass(util.format('Successfully joined peers in organization "%s" to the channel', ORGS['org1'].name)); return joinChannel('org2', t); }, (err) => { - t.fail(util.format('Failed to join peers in organization "%s" to the channel', ORGS['org1'].name)); + t.fail(util.format('Failed to join peers in organization "%s" to the channel. %s', ORGS['org1'].name, err.stack ? err.stack : err)); t.end(); }) .then(() => { t.pass(util.format('Successfully joined peers in organization "%s" to the channel', ORGS['org2'].name)); t.end(); }, (err) => { - t.fail(util.format('Failed to join peers in organization "%s" to the channel', ORGS['org2'].name)); + t.fail(util.format('Failed to join peers in organization "%s" to the channel. %s', ORGS['org2'].name), err.stack ? err.stack : err); t.end(); }) .catch(function(err) { @@ -89,19 +90,48 @@ function joinChannel(org, t) { // var client = new hfc(); var chain = client.newChain(testUtil.END2END.channel); - chain.addOrderer(new Orderer(ORGS.orderer)); var orgName = ORGS[org].name; var targets = [], eventhubs = []; + + var caRootsPath = ORGS.orderer.tls_cacerts; + let data = fs.readFileSync(path.join(__dirname, caRootsPath)); + let caroots = Buffer.from(data).toString(); + + chain.addOrderer( + new Orderer( + ORGS.orderer.url, + { + 'pem': caroots, + 'ssl-target-name-override': ORGS.orderer['server-hostname'] + } + ) + ); + for (let key in ORGS[org]) { if (ORGS[org].hasOwnProperty(key)) { if (key.indexOf('peer') === 0) { - targets.push(new Peer(ORGS[org][key].requests)); + data = fs.readFileSync(path.join(__dirname, ORGS[org][key]['tls_cacerts'])); + targets.push( + new Peer( + ORGS[org][key].requests, + { + pem: Buffer.from(data).toString(), + 'ssl-target-name-override': ORGS[org][key]['server-hostname'] + } + ) + ); let eh = new EventHub(); - eh.setPeerAddr(ORGS[org][key].events); + eh.setPeerAddr( + ORGS[org][key].events, + { + pem: Buffer.from(data).toString(), + 'ssl-target-name-override': ORGS[org][key]['server-hostname'] + } + ); eh.connect(); eventhubs.push(eh); allEventhubs.push(eh); @@ -111,8 +141,7 @@ function joinChannel(org, t) { return hfc.newDefaultKeyValueStore({ path: testUtil.storePathForOrg(orgName) - }) - .then((store) => { + }).then((store) => { client.setStateStore(store); return testUtil.getSubmitter(client, t, org); }) @@ -145,7 +174,7 @@ function joinChannel(org, t) { var channel_header = _commonProto.ChannelHeader.decode(payload.header.channel_header); if (channel_header.channel_id === testUtil.END2END.channel) { - t.pass('The new channel has been successfully joined on peer '+ eh.ep.addr); + t.pass('The new channel has been successfully joined on peer '+ eh.ep._endpoint.addr); resolve(); } } diff --git a/test/integration/e2e/query.js b/test/integration/e2e/query.js index 1c8f60a40d..26716980e6 100644 --- a/test/integration/e2e/query.js +++ b/test/integration/e2e/query.js @@ -23,6 +23,7 @@ var _test = require('tape-promise'); var test = _test(tape); var path = require('path'); +var fs = require('fs'); var util = require('util'); var hfc = require('fabric-client'); @@ -58,7 +59,13 @@ test('\n\n***** End-to-end flow: query chaincode *****', (t) => { // both requests and events for (let key in ORGS) { if (ORGS.hasOwnProperty(key) && typeof ORGS[key].peer1 !== 'undefined') { - let peer = new Peer(ORGS[key].peer1.requests); + let data = fs.readFileSync(path.join(__dirname, ORGS[key].peer1['tls_cacerts'])); + let peer = new Peer( + ORGS[key].peer1.requests, + { + pem: Buffer.from(data).toString(), + 'ssl-target-name-override': ORGS[key].peer1['server-hostname'] + }); chain.addPeer(peer); } } diff --git a/test/integration/events.js b/test/integration/events.js index 2a1e3c61ba..32b8246935 100644 --- a/test/integration/events.js +++ b/test/integration/events.js @@ -21,8 +21,10 @@ var _test = require('tape-promise'); var test = _test(tape); var path = require('path'); -var hfc = require('fabric-client'); var util = require('util'); +var fs = require('fs'); + +var hfc = require('fabric-client'); var testUtil = require('../unit/util.js'); var utils = require('fabric-client/lib/utils.js'); var Peer = require('fabric-client/lib/Peer.js'); @@ -37,13 +39,33 @@ var client = new hfc(); var chain = client.newChain(testUtil.END2END.channel); hfc.addConfigFile(path.join(__dirname, './config.json')); var ORGS = hfc.getConfigSetting('test-network'); -chain.addOrderer(new Orderer(ORGS.orderer)); + +var caRootsPath = ORGS.orderer.tls_cacerts; +let data = fs.readFileSync(path.join(__dirname, 'e2e', caRootsPath)); +let caroots = Buffer.from(data).toString(); + +chain.addOrderer( + new Orderer( + ORGS.orderer.url, + { + 'pem': caroots, + 'ssl-target-name-override': ORGS.orderer['server-hostname'] + } + ) +); + var org = 'org1'; var orgName = ORGS[org].name; for (let key in ORGS[org]) { if (ORGS[org].hasOwnProperty(key)) { if (key.indexOf('peer') === 0) { - let peer = new Peer(ORGS[org][key].requests); + let data = fs.readFileSync(path.join(__dirname, 'e2e', ORGS[org][key]['tls_cacerts'])); + let peer = new Peer( + ORGS[org][key].requests, + { + pem: Buffer.from(data).toString(), + 'ssl-target-name-override': ORGS[org][key]['server-hostname'] + }); chain.addPeer(peer); } } @@ -76,8 +98,14 @@ test('Test chaincode instantiate with event, transaction invocation with chainco var promise = testUtil.getSubmitter(client, t, org); // setup event hub to get notified when transactions are committed + let data = fs.readFileSync(path.join(__dirname, 'e2e', ORGS[org].peer1['tls_cacerts'])); var eh = new EventHub(); - eh.setPeerAddr(ORGS[org].peer1.events); + eh.setPeerAddr( + ORGS[org].peer1.events, + { + pem: Buffer.from(data).toString(), + 'ssl-target-name-override': ORGS[org].peer1['server-hostname'] + }); eh.connect(); // override t.end function so it'll always disconnect the event hub diff --git a/test/integration/get-config.js b/test/integration/get-config.js index bd4f5c4310..2a37860ad8 100644 --- a/test/integration/get-config.js +++ b/test/integration/get-config.js @@ -23,8 +23,10 @@ var _test = require('tape-promise'); var test = _test(tape); var path = require('path'); -var hfc = require('fabric-client'); +var fs = require('fs'); var util = require('util'); + +var hfc = require('fabric-client'); var testUtil = require('../unit/util.js'); var utils = require('fabric-client/lib/utils.js'); var Peer = require('fabric-client/lib/Peer.js'); @@ -50,13 +52,33 @@ var client = new hfc(); var chain = client.newChain(testUtil.END2END.channel); hfc.addConfigFile(path.join(__dirname, './config.json')); var ORGS = hfc.getConfigSetting('test-network'); -chain.addOrderer(new Orderer(ORGS.orderer)); + +var caRootsPath = ORGS.orderer.tls_cacerts; +let data = fs.readFileSync(path.join(__dirname, 'e2e', caRootsPath)); +let caroots = Buffer.from(data).toString(); + +chain.addOrderer( + new Orderer( + ORGS.orderer.url, + { + 'pem': caroots, + 'ssl-target-name-override': ORGS.orderer['server-hostname'] + } + ) +); + var org = 'org1'; var orgName = ORGS[org].name; for (let key in ORGS[org]) { if (ORGS[org].hasOwnProperty(key)) { if (key.indexOf('peer') === 0) { - let peer = new Peer(ORGS[org][key].requests); + let data = fs.readFileSync(path.join(__dirname, 'e2e', ORGS[org][key]['tls_cacerts'])); + let peer = new Peer( + ORGS[org][key].requests, + { + pem: Buffer.from(data).toString(), + 'ssl-target-name-override': ORGS[org][key]['server-hostname'] + }); chain.addPeer(peer); } } diff --git a/test/integration/install.js b/test/integration/install.js index 4313025a88..74295db286 100644 --- a/test/integration/install.js +++ b/test/integration/install.js @@ -23,6 +23,7 @@ var _test = require('tape-promise'); var test = _test(tape); var path = require('path'); +var fs = require('fs'); var util = require('util'); var hfc = require('fabric-client'); @@ -167,7 +168,20 @@ function installChaincode(params, t) { var org = params.org; var client = new hfc(); var chain = client.newChain(params.chainName); - chain.addOrderer(new Orderer(ORGS.orderer)); + + var caRootsPath = ORGS.orderer.tls_cacerts; + let data = fs.readFileSync(path.join(__dirname, 'e2e', caRootsPath)); + let caroots = Buffer.from(data).toString(); + + chain.addOrderer( + new Orderer( + ORGS.orderer.url, + { + 'pem': caroots, + 'ssl-target-name-override': ORGS.orderer['server-hostname'] + } + ) + ); var orgName = ORGS[org].name; @@ -175,7 +189,13 @@ function installChaincode(params, t) { for (let key in ORGS[org]) { if (ORGS[org].hasOwnProperty(key)) { if (key.indexOf('peer') === 0) { - let peer = new Peer(ORGS[org][key].requests); + let data = fs.readFileSync(path.join(__dirname, 'e2e', ORGS[org][key]['tls_cacerts'])); + let peer = new Peer( + ORGS[org][key].requests, + { + pem: Buffer.from(data).toString(), + 'ssl-target-name-override': ORGS[org][key]['server-hostname'] + }); targets.push(peer); chain.addPeer(peer); } diff --git a/test/integration/new-chain.js b/test/integration/new-chain.js index a3c7d5b922..bb320301e0 100644 --- a/test/integration/new-chain.js +++ b/test/integration/new-chain.js @@ -31,13 +31,33 @@ var client = new hfc(); var chain = client.newChain(testUtil.END2END.channel); hfc.addConfigFile(path.join(__dirname, './config.json')); var ORGS = hfc.getConfigSetting('test-network'); -chain.addOrderer(new Orderer(ORGS.orderer)); + +var caRootsPath = ORGS.orderer.tls_cacerts; +let data = fs.readFileSync(path.join(__dirname, 'e2e', caRootsPath)); +let caroots = Buffer.from(data).toString(); + +chain.addOrderer( + new Orderer( + ORGS.orderer.url, + { + 'pem': caroots, + 'ssl-target-name-override': ORGS.orderer['server-hostname'] + } + ) +); + var org = 'org1'; var orgName = ORGS[org].name; for (let key in ORGS[org]) { if (ORGS[org].hasOwnProperty(key)) { if (key.indexOf('peer') === 0) { - let peer = new Peer(ORGS[org][key].requests); + let data = fs.readFileSync(path.join(__dirname, 'e2e', ORGS[org][key]['tls_cacerts'])); + let peer = new Peer( + ORGS[org][key].requests, + { + pem: Buffer.from(data).toString(), + 'ssl-target-name-override': ORGS[org][key]['server-hostname'] + }); chain.addPeer(peer); } } diff --git a/test/integration/orderer-chain-tests.js b/test/integration/orderer-chain-tests.js index c4cbd39e0a..874e7141f5 100644 --- a/test/integration/orderer-chain-tests.js +++ b/test/integration/orderer-chain-tests.js @@ -18,15 +18,18 @@ var tape = require('tape'); var _test = require('tape-promise'); var test = _test(tape); -var hfc = require('fabric-client'); var util = require('util'); var fs = require('fs'); +var path = require('path'); + var testUtil = require('../unit/util.js'); +var hfc = require('fabric-client'); var Orderer = require('fabric-client/lib/Orderer.js'); var Chain = require('fabric-client/lib/Chain.js'); var keyValStorePath = testUtil.KVS; +var ORGS = hfc.getConfigSetting('test-network'); var client = new hfc(); @@ -94,8 +97,19 @@ test('\n\n** TEST ** orderer via member null data', function(t) { // Create and configure the test chain // var chain = client.newChain('testChain-orderer-member3'); - - chain.addOrderer(new Orderer('grpc://localhost:7050')); + var caRootsPath = ORGS.orderer.tls_cacerts; + let data = fs.readFileSync(path.join(__dirname, 'e2e', caRootsPath)); + let caroots = Buffer.from(data).toString(); + + chain.addOrderer( + new Orderer( + ORGS.orderer.url, + { + 'pem': caroots, + 'ssl-target-name-override': ORGS.orderer['server-hostname'] + } + ) + ); testUtil.getSubmitter(client, t) .then( @@ -158,7 +172,19 @@ test('\n\n** TEST ** orderer via member bad request', function(t) { var chain = client.newChain('testChain-orderer-member4'); // Set bad orderer address here - chain.addOrderer(new Orderer('grpc://localhost:5199')); + var caRootsPath = ORGS.orderer.tls_cacerts; + let data = fs.readFileSync(path.join(__dirname, 'e2e', caRootsPath)); + let caroots = Buffer.from(data).toString(); + + chain.addOrderer( + new Orderer( + 'grpcs://localhost:5199', + { + 'pem': caroots, + 'ssl-target-name-override': ORGS.orderer['server-hostname'] + } + ) + ); testUtil.getSubmitter(client, t) .then( diff --git a/test/integration/query.js b/test/integration/query.js index b06f1d7fb1..e9b205fc62 100644 --- a/test/integration/query.js +++ b/test/integration/query.js @@ -28,9 +28,11 @@ var _test = require('tape-promise'); var test = _test(tape); var path = require('path'); -var hfc = require('fabric-client'); var util = require('util'); +var fs = require('fs'); + var testUtil = require('../unit/util.js'); +var hfc = require('fabric-client'); var utils = require('fabric-client/lib/utils.js'); var Peer = require('fabric-client/lib/Peer.js'); var Orderer = require('fabric-client/lib/Orderer.js'); @@ -53,8 +55,6 @@ var the_user = null; var tx_id = null; var nonce = null; -var peer0 = new Peer(ORGS[org]['peer1'].requests), - peer1 = new Peer(ORGS[org]['peer2'].requests); var querys = []; if (process.argv.length > 2) { @@ -81,87 +81,111 @@ if (querys.length > 0 ) { testUtil.setupChaincodeDeploy(); -chain.addOrderer(new Orderer(ORGS.orderer)); +var caRootsPath = ORGS.orderer.tls_cacerts; +let data = fs.readFileSync(path.join(__dirname, 'e2e', caRootsPath)); +let caroots = Buffer.from(data).toString(); + +chain.addOrderer( + new Orderer( + ORGS.orderer.url, + { + 'pem': caroots, + 'ssl-target-name-override': ORGS.orderer['server-hostname'] + } + ) +); +data = fs.readFileSync(path.join(__dirname, 'e2e', ORGS[org].peer1['tls_cacerts'])); +var peer0 = new Peer( + ORGS[org].peer1.requests, + { + pem: Buffer.from(data).toString(), + 'ssl-target-name-override': ORGS[org].peer1['server-hostname'] + }); +var peer1 = new Peer( + ORGS[org].peer2.requests, + { + pem: Buffer.from(data).toString(), + 'ssl-target-name-override': ORGS[org].peer2['server-hostname'] + }); + chain.addPeer(peer0); chain.addPeer(peer1); test(' ---->>>>> Query chain working <<<<<-----', function(t) { - hfc.newDefaultKeyValueStore({ + return hfc.newDefaultKeyValueStore({ path: testUtil.storePathForOrg(orgName) }).then( function (store) { client.setStateStore(store); - testUtil.getSubmitter(client, t, org) - .then((admin) => { - t.pass('Successfully enrolled user \'admin\''); - the_user = admin; - // read the config block from the orderer for the chain - // and initialize the verify MSPs based on the participating - // organizations - return chain.initialize(); - }).then((success) => { - t.pass('Successfully initialized chain'); - // use default primary peer - // send query - return chain.queryBlock(0); - }).then((block) => { - logger.info(' Chain getBlock() returned block number=%s',block.header.number); - t.equal(block.header.number.toString(),'0','checking query results are correct that we got zero block back'); - chain.setPrimaryPeer(peer0); - - tx_id = utils.getConfigSetting('E2E_TX_ID', 'notfound'); - logger.info('getConfigSetting("E2E_TX_ID") = %s', tx_id); - if (tx_id === 'notfound') { - t.comment(' Did you set the E2E_TX_ID environment variable after running invoke-transaction.js ?'); - throw new Error('Could not get tx_id from ConfigSetting "E2E_TX_ID"'); - } else { - t.pass('Got tx_id from ConfigSetting "E2E_TX_ID"'); - // send query - return chain.queryTransaction(tx_id); //assumes the end-to-end has run first - } - }).then((processed_transaction) => { - // set to be able to decode grpc objects - var grpc = require('grpc'); - var commonProto = grpc.load(__dirname + '/../../fabric-client/lib/protos/common/common.proto').common; - var transProto = grpc.load(__dirname + '/../../fabric-client/lib/protos/peer/transaction.proto').protos; - logger.info(' Chain queryTransaction() returned processed tranaction is valid='+processed_transaction.validationCode); - t.equals(transProto.TxValidationCode.VALID,processed_transaction.validationCode,'got back ProcessedTransaction that is a valid transaction'); - - try { - var payload = commonProto.Payload.decode(processed_transaction.transactionEnvelope.payload); - var channel_header = commonProto.ChannelHeader.decode(payload.header.channel_header); - logger.debug(' Chain queryTransaction - transaction ID :: %s:', channel_header.tx_id); - } - catch(err) { - logger.error(err); - throw new Error(err.stack ? err.stack : err); - } + return testUtil.getSubmitter(client, t, org); + }).then((admin) => { + t.pass('Successfully enrolled user \'admin\''); + the_user = admin; + // read the config block from the orderer for the chain + // and initialize the verify MSPs based on the participating + // organizations + return chain.initialize(); + }).then((success) => { + t.pass('Successfully initialized chain'); + // use default primary peer + // send query + return chain.queryBlock(0); + }).then((block) => { + logger.info(' Chain getBlock() returned block number=%s',block.header.number); + t.equal(block.header.number.toString(),'0','checking query results are correct that we got zero block back'); + chain.setPrimaryPeer(peer0); - chain.setPrimaryPeer(peer1); - // send query - return chain.queryInfo(); - }).then((blockchainInfo) => { - t.pass('got back blockchain info '); - logger.info(' Chain queryInfo() returned block height='+blockchainInfo.height); - logger.info(' Chain queryInfo() returned block previousBlockHash='+blockchainInfo.previousBlockHash); - logger.info(' Chain queryInfo() returned block currentBlockHash='+blockchainInfo.currentBlockHash); - var block_hash = blockchainInfo.currentBlockHash; - chain.setPrimaryPeer(peer0); - // send query - return chain.queryBlockByHash(block_hash); - }).then((block) => { - logger.info(' Chain queryBlockByHash() returned block number=%s',block.header.number); - t.pass('got back block number '+ block.header.number); - t.end(); - }).catch((err) => { - t.comment('Failed \'Query chain working\' with error:'); - throw new Error(err.stack ? err.stack : err); - } - ); + tx_id = utils.getConfigSetting('E2E_TX_ID', 'notfound'); + logger.info('getConfigSetting("E2E_TX_ID") = %s', tx_id); + if (tx_id === 'notfound') { + t.comment(' Did you set the E2E_TX_ID environment variable after running invoke-transaction.js ?'); + throw new Error('Could not get tx_id from ConfigSetting "E2E_TX_ID"'); + } else { + t.pass('Got tx_id from ConfigSetting "E2E_TX_ID"'); + // send query + return chain.queryTransaction(tx_id); //assumes the end-to-end has run first + } + }).then((processed_transaction) => { + // set to be able to decode grpc objects + var grpc = require('grpc'); + var commonProto = grpc.load(__dirname + '/../../fabric-client/lib/protos/common/common.proto').common; + var transProto = grpc.load(__dirname + '/../../fabric-client/lib/protos/peer/transaction.proto').protos; + logger.info(' Chain queryTransaction() returned processed tranaction is valid='+processed_transaction.validationCode); + t.equals(transProto.TxValidationCode.VALID,processed_transaction.validationCode,'got back ProcessedTransaction that is a valid transaction'); + + try { + var payload = commonProto.Payload.decode(processed_transaction.transactionEnvelope.payload); + var channel_header = commonProto.ChannelHeader.decode(payload.header.channel_header); + logger.debug(' Chain queryTransaction - transaction ID :: %s:', channel_header.tx_id); + } + catch(err) { + logger.error(err); + throw new Error(err.stack ? err.stack : err); + } + + chain.setPrimaryPeer(peer1); + // send query + return chain.queryInfo(); + }).then((blockchainInfo) => { + t.pass('got back blockchain info '); + logger.info(' Chain queryInfo() returned block height='+blockchainInfo.height); + logger.info(' Chain queryInfo() returned block previousBlockHash='+blockchainInfo.previousBlockHash); + logger.info(' Chain queryInfo() returned block currentBlockHash='+blockchainInfo.currentBlockHash); + var block_hash = blockchainInfo.currentBlockHash; + chain.setPrimaryPeer(peer0); + // send query + return chain.queryBlockByHash(block_hash); + }).then((block) => { + logger.info(' Chain queryBlockByHash() returned block number=%s',block.header.number); + t.pass('got back block number '+ block.header.number); + t.end(); + }).catch((err) => { + t.comment('Failed \'Query chain working\' with error:'); + throw new Error(err.stack ? err.stack : err); }); }); -test(' ---->>>>> Query chain failing <<<<<-----', function(t) { - hfc.newDefaultKeyValueStore({ +test(' ---->>>>> Query chain failing: GetBlockByNumber <<<<<-----', function(t) { + return hfc.newDefaultKeyValueStore({ path: testUtil.storePathForOrg(orgName) }).then( function (store) { client.setStateStore(store); @@ -197,7 +221,16 @@ test(' ---->>>>> Query chain failing <<<<<-----', function(t) { } ); } + }); +}); +test(' ---->>>>> Query chain failing: GetTransactionByID <<<<<-----', function(t) { + return hfc.newDefaultKeyValueStore({ + path: testUtil.storePathForOrg(orgName) + }).then( function (store) { + client.setStateStore(store); + var promise = testUtil.getSubmitter(client, t, org); + var queryAttempts = 0; // number of queries attempted in this test if (!queryParameters || querys.indexOf('GetTransactionByID') >= 0) { queryAttempts++; promise = promise.then( @@ -227,7 +260,16 @@ test(' ---->>>>> Query chain failing <<<<<-----', function(t) { } ); } + }); +}); +test(' ---->>>>> Query chain failing: GetChainInfo <<<<<-----', function(t) { + return hfc.newDefaultKeyValueStore({ + path: testUtil.storePathForOrg(orgName) + }).then( function (store) { + client.setStateStore(store); + var promise = testUtil.getSubmitter(client, t, org); + var queryAttempts = 0; // number of queries attempted in this test if (!queryParameters || querys.indexOf('GetChainInfo') >= 0) { queryAttempts++; promise = promise.then( @@ -258,7 +300,16 @@ test(' ---->>>>> Query chain failing <<<<<-----', function(t) { } ); } + }); +}); +test(' ---->>>>> Query chain failing: GetBlockByHash <<<<<-----', function(t) { + return hfc.newDefaultKeyValueStore({ + path: testUtil.storePathForOrg(orgName) + }).then( function (store) { + client.setStateStore(store); + var promise = testUtil.getSubmitter(client, t, org); + var queryAttempts = 0; // number of queries attempted in this test if (!queryParameters || querys.indexOf('GetBlockByHash') >= 0) { queryAttempts++; promise = promise.then( @@ -298,156 +349,155 @@ test(' ---->>>>> Query chain failing <<<<<-----', function(t) { test(' ---->>>>> Query Installed Chaincodes working <<<<<-----', function(t) { if (!queryParameters || querys.indexOf('GetInstalledChaincodes') >= 0) { - hfc.newDefaultKeyValueStore({ + return hfc.newDefaultKeyValueStore({ path: testUtil.storePathForOrg(orgName) }).then( function (store) { client.setStateStore(store); - testUtil.getSubmitter(client, t, org) - .then( - function(admin) { - t.pass('Successfully enrolled user \'admin\''); - // send query - return chain.queryInstalledChaincodes(peer0); - }, - function(err) { - t.fail('Failed to enroll user: ' + err.stack ? err.stack : err); - t.end(); - } - ).then( - function(response) { - t.comment('<<< installed chaincodes >>>'); - let found = false; - - for (let i=0; i>>'); + let found = false; + + for (let i=0; i>>>> Query Instantiated Chaincodes working <<<<<-----', function(t) { if (!queryParameters || querys.indexOf('GetInstantiatedChaincodes') >= 0) { - hfc.newDefaultKeyValueStore({ + return hfc.newDefaultKeyValueStore({ path: testUtil.storePathForOrg(orgName) }).then( function (store) { client.setStateStore(store); - testUtil.getSubmitter(client, t, org) - .then( - function(admin) { - t.pass('Successfully enrolled user \'admin\''); - // send query - return chain.queryInstantiatedChaincodes(); - }, - function(err) { - t.fail('Failed to enroll user: ' + err.stack ? err.stack : err); - t.end(); - } - ).then( - function(response) { - t.comment('<<< instantiated chaincodes >>>'); - let found = false; - for (let i=0; i>>'); + let found = false; + for (let i=0; i>>>> Query Channels working <<<<<-----', function(t) { if (!queryParameters || querys.indexOf('GetChannels') >= 0) { - hfc.newDefaultKeyValueStore({ + return hfc.newDefaultKeyValueStore({ path: testUtil.storePathForOrg(orgName) }).then( function (store) { client.setStateStore(store); - testUtil.getSubmitter(client, t, org) - .then( - function(admin) { - t.pass('Successfully enrolled user \'admin\''); - the_user = admin; - - // send query - return chain.queryChannels(peer0); - }, - function(err) { - t.fail('Failed to enroll user: ' + err.stack ? err.stack : err); - t.end(); - } - ).then( - function(response) { - t.comment('<<< channels >>>'); - for (let i=0; i>>'); + for (let i=0; i