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