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 5a34ede3d4..9384402e35 100644 Binary files a/test/fixtures/channel/mychannel.tx and b/test/fixtures/channel/mychannel.tx differ diff --git a/test/fixtures/channel/twoorgs.orderer.block b/test/fixtures/channel/twoorgs.orderer.block index eb10915564..c800a059fb 100644 Binary files a/test/fixtures/channel/twoorgs.orderer.block and b/test/fixtures/channel/twoorgs.orderer.block differ diff --git a/test/fixtures/config/overrides.json b/test/fixtures/config/overrides.json deleted file mode 100644 index 03e8a49687..0000000000 --- a/test/fixtures/config/overrides.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "crypto-hsm": true -} \ No newline at end of file diff --git a/test/fixtures/docker-compose.yaml b/test/fixtures/docker-compose.yaml new file mode 100644 index 0000000000..9b3145572e --- /dev/null +++ b/test/fixtures/docker-compose.yaml @@ -0,0 +1,196 @@ +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: + - ./channel/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: + - ./channel/crypto-config/peerOrganizations/peerOrg2/ca/:/etc/hyperledger/fabric-ca-server-config + container_name: ca_peerOrg2 + + orderer0: + container_name: orderer0 + image: hyperledger/fabric-orderer + environment: + - GRPC_TRACE=all + - GRPC_VERBOSITY=debug + - 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/msp/orderer + - ORDERER_GENERAL_TLS_ENABLED=true + - ORDERER_GENERAL_TLS_PRIVATEKEY=/etc/hyperledger/tls/orderer/key.pem + - ORDERER_GENERAL_TLS_CERTIFICATE=/etc/hyperledger/tls/orderer/cert.pem + - ORDERER_GENERAL_TLS_ROOTCAS=[/etc/hyperledger/tls/orderer/ca-cert.pem, /etc/hyperledger/tls/peers/peer0/ca-cert.pem, /etc/hyperledger/tls/peers/peer2/ca-cert.pem] + working_dir: /opt/gopath/src/github.com/hyperledger/fabric/orderer + command: orderer + ports: + - 7050:7050 + volumes: + - ./channel:/etc/hyperledger/configtx + - ./channel/crypto-config/ordererOrganizations/ordererOrg1/orderers/ordererOrg1orderer1/:/etc/hyperledger/msp/orderer + - ./tls/orderer:/etc/hyperledger/tls/orderer + - ./tls/peers:/etc/hyperledger/tls/peers + + peer0: + container_name: peer0 + image: hyperledger/fabric-peer + environment: + - CORE_LOGGING_LEVEL=DEBUG + - CORE_NEXT=true + - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock + - CORE_PEER_ID=peer0 + - CORE_PEER_ENDORSER_ENABLED=true + - CORE_PEER_LOCALMSPID=Org1MSP + - CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/msp/peer/ + - CORE_PEER_GOSSIP_ORGLEADER=true + - CORE_PEER_ADDRESS=peer0:7051 + - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0:7051 + - CORE_PEER_TLS_ENABLED=true + - CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/tls/key.pem + - CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/tls/cert.pem + - CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/tls/ca-cert.pem + # the following setting starts chaincode containers on the same + # bridge network as the peers + # https://docs.docker.com/compose/networking/ + - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=fixtures_default + 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/ + - ./channel/crypto-config/peerOrganizations/peerOrg1/peers/peerOrg1Peer1/:/etc/hyperledger/msp/peer + - ./tls/peers/peer0:/etc/hyperledger/tls + depends_on: + - orderer0 + + peer1: + container_name: peer1 + image: hyperledger/fabric-peer + environment: + - CORE_NEXT=true + - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock + - CORE_PEER_ID=peer1 + - CORE_PEER_ENDORSER_ENABLED=true + - CORE_PEER_LOCALMSPID=Org1MSP + - CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/msp/peer/ + - CORE_PEER_GOSSIP_ORGLEADER=false + - CORE_PEER_ADDRESS=peer1:7051 + - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1:7051 + - CORE_PEER_TLS_ENABLED=true + - CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/tls/key.pem + - CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/tls/cert.pem + - CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/tls/ca-cert.pem + # the following setting starts chaincode containers on the same + # bridge network as the peers + # https://docs.docker.com/compose/networking/ + - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=fixtures_default + 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/ + - ./channel/crypto-config/peerOrganizations/peerOrg1/peers/peerOrg1Peer2/:/etc/hyperledger/msp/peer + - ./tls/peers/peer1:/etc/hyperledger/tls + depends_on: + - orderer0 + - peer0 + + peer2: + container_name: peer2 + image: hyperledger/fabric-peer + environment: + - CORE_NEXT=true + - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock + - CORE_PEER_ID=peer2 + - CORE_PEER_ENDORSER_ENABLED=true + - CORE_PEER_LOCALMSPID=Org2MSP + - CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/msp/peer/ + - CORE_PEER_GOSSIP_ORGLEADER=true + - CORE_PEER_ADDRESS=peer2:7051 + - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer2:7051 + - CORE_PEER_TLS_ENABLED=true + - CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/tls/key.pem + - CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/tls/cert.pem + - CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/tls/ca-cert.pem + # the following setting starts chaincode containers on the same + # bridge network as the peers + # https://docs.docker.com/compose/networking/ + - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=fixtures_default + 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/ + - ./channel/crypto-config/peerOrganizations/peerOrg2/peers/peerOrg2Peer1/:/etc/hyperledger/msp/peer + - ./tls/peers/peer2:/etc/hyperledger/tls + depends_on: + - orderer0 + + peer3: + container_name: peer3 + image: hyperledger/fabric-peer + environment: + - CORE_NEXT=true + - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock + - CORE_PEER_ID=peer3 + - CORE_PEER_ENDORSER_ENABLED=true + - CORE_PEER_LOCALMSPID=Org2MSP + - CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/msp/peer/ + - CORE_PEER_GOSSIP_ORGLEADER=false + - CORE_PEER_ADDRESS=peer3:7051 + - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer3:7051 + - CORE_PEER_TLS_ENABLED=true + - CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/tls/key.pem + - CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/tls/cert.pem + - CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/tls/ca-cert.pem + # the following setting starts chaincode containers on the same + # bridge network as the peers + # https://docs.docker.com/compose/networking/ + - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=fixtures_default + 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/ + - ./channel/crypto-config/peerOrganizations/peerOrg2/peers/peerOrg2Peer2/:/etc/hyperledger/msp/peer + - ./tls/peers/peer3:/etc/hyperledger/tls + depends_on: + - orderer0 + - 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/foo.tx b/test/fixtures/foo.tx deleted file mode 100644 index e254aebeca..0000000000 Binary files a/test/fixtures/foo.tx and /dev/null differ 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