With the implementation of cards in v0.15, previous versions of test routines which used profiles (obviously) won't work. However, I cannot find an SDK approach to create the necessary cards to run tests. The 'before' section of code up through v0.14 for my tests has looked like the following, which uses an embedded profile, creates a temporary instance of the network and runs the tests:
describe('Finance Network', () => {
// let adminConnection;
let businessNetworkConnection;
before(() => {
BrowserFS.initialize(new BrowserFS.FileSystem.InMemory());
const adminConnection = new AdminConnection({ fs: bfs_fs });
return adminConnection.createProfile('defaultProfile', {
type: 'embedded'
})
.then(() => {
return adminConnection.connect('defaultProfile', adminID, adminPW);
})
.then(() => {
return BusinessNetworkDefinition.fromDirectory(path.resolve(__dirname, '..'));
})
.then((businessNetworkDefinition) => {
return adminConnection.deploy(businessNetworkDefinition);
})
.then(() => {
businessNetworkConnection = new BusinessNetworkConnection({ fs: bfs_fs });
return businessNetworkConnection.connect('defaultProfile', network, adminID, adminPW);
});
});
What I'm trying to find (and haven't yet) in the nodejs documentation is how to create the necessary cards to make this work, while using this same approach.
I expect to replace the following lines of code with something that creates the necessary cards:
return adminConnection.createProfile('defaultProfile', {
type: 'embedded'
})
.then(() => {
return adminConnection.connect('defaultProfile', adminID, adminPW);
})
The only place where I see card creation is in composer-client Participant Registry, but it's a Catch-22 situation where I have to be connected to create the card, but I need a card to get connected. What is the recommended approach for writing mocha-based testing as we have been doing for the past umpteen releases of Hyperledger-Composer?
Thanks!
I guess subject to some refinement as the card-based API is established, but you should be looking at something like this using only the API:
The caveat to this is that the network admin cards being returned from the call to
AdminConnection.start()
is (as I type) in the process of being added in this issue: hyperledger/composer#2753The CLI commands already register the network admin identity and output a card for this admin that you can import if you want to use it rather than give to somebody else.
After a couple of days of experimenting, I've found a way to solve this problem. The following code sequence uses the PeerAdmin card created as part of the v0.15 release. I import that card and, after adminConnect, update the businessNetwork element in the card's metadata and then, after re-importing the card, deploy and connect to the business network.