Explorar o código

Merge pull request #528 from gleb-urvanov/feature/types-api-refactoring

Network Testing: refactor api and type registration
Mokhtar Naamani %!s(int64=4) %!d(string=hai) anos
pai
achega
5c6f5466b0
Modificáronse 25 ficheiros con 364 adicións e 377 borrados
  1. 30 18
      tests/network-tests/src/constantinople/tests/electingCouncilTest.ts
  2. 8 0
      tests/network-tests/src/constantinople/tests/impl/closeApi.ts
  3. 3 14
      tests/network-tests/src/constantinople/tests/impl/electingCouncil.ts
  4. 1 11
      tests/network-tests/src/constantinople/tests/impl/membershipCreation.ts
  5. 0 20
      tests/network-tests/src/constantinople/tests/impl/setTimeout.ts
  6. 22 12
      tests/network-tests/src/constantinople/tests/membershipCreationTest.ts
  7. 30 19
      tests/network-tests/src/constantinople/tests/proposals/electionParametersProposalTest.ts
  8. 30 19
      tests/network-tests/src/constantinople/tests/proposals/evictStorageProviderTest.ts
  9. 2 14
      tests/network-tests/src/constantinople/tests/proposals/impl/electionParametersProposal.ts
  10. 2 14
      tests/network-tests/src/constantinople/tests/proposals/impl/evictStoraveProvider.ts
  11. 2 14
      tests/network-tests/src/constantinople/tests/proposals/impl/setLeadProposal.ts
  12. 2 14
      tests/network-tests/src/constantinople/tests/proposals/impl/spendingProposal.ts
  13. 2 14
      tests/network-tests/src/constantinople/tests/proposals/impl/storageRoleParametersProposal.ts
  14. 2 14
      tests/network-tests/src/constantinople/tests/proposals/impl/textProposal.ts
  15. 2 14
      tests/network-tests/src/constantinople/tests/proposals/impl/updateRuntime.ts
  16. 2 14
      tests/network-tests/src/constantinople/tests/proposals/impl/validatorCountProposal.ts
  17. 2 14
      tests/network-tests/src/constantinople/tests/proposals/impl/workingGroupMintCapacityProposal.ts
  18. 30 19
      tests/network-tests/src/constantinople/tests/proposals/setLeadProposalTest.ts
  19. 32 21
      tests/network-tests/src/constantinople/tests/proposals/spendingProposalTest.ts
  20. 30 19
      tests/network-tests/src/constantinople/tests/proposals/storageRoleParametersProposalTest.ts
  21. 30 19
      tests/network-tests/src/constantinople/tests/proposals/textProposalTest.ts
  22. 31 20
      tests/network-tests/src/constantinople/tests/proposals/updateRuntimeTest.ts
  23. 31 20
      tests/network-tests/src/constantinople/tests/proposals/validatorCountProposalTest.ts
  24. 31 20
      tests/network-tests/src/constantinople/tests/proposals/workingGroupMintCapacityProposalTest.ts
  25. 7 0
      tests/network-tests/src/constantinople/utils/setTestTimeout.ts

+ 30 - 18
tests/network-tests/src/constantinople/tests/electingCouncilTest.ts

@@ -2,26 +2,38 @@ import { KeyringPair } from '@polkadot/keyring/types';
 import { membershipTest } from './impl/membershipCreation';
 import { councilTest } from './impl/electingCouncil';
 import { initConfig } from '../utils/config';
-import { Keyring } from '@polkadot/api';
-import { setTimeout } from './impl/setTimeout';
+import { Keyring, WsProvider } from '@polkadot/api';
+import { setTestTimeout } from '../utils/setTestTimeout';
 import BN from 'bn.js';
+import tap from 'tap';
+import { registerJoystreamTypes } from '@constantinople/types';
+import { ApiWrapper } from '../utils/apiWrapper';
+import { closeApi } from './impl/closeApi';
 
-initConfig();
+tap.mocha.describe('Electing council scenario', async () => {
+  initConfig();
+  registerJoystreamTypes();
+  registerJoystreamTypes();
 
-const m1KeyPairs: KeyringPair[] = new Array();
-const m2KeyPairs: KeyringPair[] = new Array();
+  const m1KeyPairs: KeyringPair[] = new Array();
+  const m2KeyPairs: KeyringPair[] = new Array();
 
-const keyring = new Keyring({ type: 'sr25519' });
-const N: number = +process.env.MEMBERSHIP_CREATION_N!;
-const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!;
-const nodeUrl: string = process.env.NODE_URL!;
-const sudoUri: string = process.env.SUDO_ACCOUNT_URI!;
-const K: number = +process.env.COUNCIL_ELECTION_K!;
-const greaterStake: BN = new BN(+process.env.COUNCIL_STAKE_GREATER_AMOUNT!);
-const lesserStake: BN = new BN(+process.env.COUNCIL_STAKE_LESSER_AMOUNT!);
-const durationInBlocks: number = 25;
+  const keyring = new Keyring({ type: 'sr25519' });
+  const N: number = +process.env.MEMBERSHIP_CREATION_N!;
+  const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!;
+  const nodeUrl: string = process.env.NODE_URL!;
+  const sudoUri: string = process.env.SUDO_ACCOUNT_URI!;
+  const K: number = +process.env.COUNCIL_ELECTION_K!;
+  const greaterStake: BN = new BN(+process.env.COUNCIL_STAKE_GREATER_AMOUNT!);
+  const lesserStake: BN = new BN(+process.env.COUNCIL_STAKE_LESSER_AMOUNT!);
+  const durationInBlocks: number = 25;
 
-setTimeout(nodeUrl, durationInBlocks);
-membershipTest(m1KeyPairs, keyring, N, paidTerms, nodeUrl, sudoUri);
-membershipTest(m2KeyPairs, keyring, N, paidTerms, nodeUrl, sudoUri);
-councilTest(m1KeyPairs, m2KeyPairs, keyring, K, nodeUrl, sudoUri, greaterStake, lesserStake);
+  const provider = new WsProvider(nodeUrl);
+  const apiWrapper: ApiWrapper = await ApiWrapper.create(provider);
+
+  setTestTimeout(apiWrapper, durationInBlocks);
+  membershipTest(apiWrapper, m1KeyPairs, keyring, N, paidTerms, sudoUri);
+  membershipTest(apiWrapper, m2KeyPairs, keyring, N, paidTerms, sudoUri);
+  councilTest(apiWrapper, m1KeyPairs, m2KeyPairs, keyring, K, sudoUri, greaterStake, lesserStake);
+  closeApi(apiWrapper);
+});

+ 8 - 0
tests/network-tests/src/constantinople/tests/impl/closeApi.ts

@@ -0,0 +1,8 @@
+import { ApiWrapper } from '../../utils/apiWrapper';
+import tap from 'tap';
+
+export function closeApi(apiWrapper: ApiWrapper) {
+  tap.teardown(() => {
+    apiWrapper.close();
+  });
+}

+ 3 - 14
tests/network-tests/src/constantinople/tests/impl/electingCouncil.ts

@@ -1,31 +1,24 @@
 import { KeyringPair } from '@polkadot/keyring/types';
 import { ApiWrapper } from '../../utils/apiWrapper';
-import { WsProvider, Keyring } from '@polkadot/api';
+import { Keyring } from '@polkadot/api';
 import BN from 'bn.js';
-import { registerJoystreamTypes, Seat } from '@constantinople/types';
+import { Seat } from '@constantinople/types';
 import { assert } from 'chai';
 import { v4 as uuid } from 'uuid';
 import { Utils } from '../../utils/utils';
 import tap from 'tap';
 
 export function councilTest(
+  apiWrapper: ApiWrapper,
   m1KeyPairs: KeyringPair[],
   m2KeyPairs: KeyringPair[],
   keyring: Keyring,
   K: number,
-  nodeUrl: string,
   sudoUri: string,
   greaterStake: BN,
   lesserStake: BN
 ) {
   let sudo: KeyringPair;
-  let apiWrapper: ApiWrapper;
-
-  tap.test('Electing council test setup', async () => {
-    registerJoystreamTypes();
-    const provider = new WsProvider(nodeUrl);
-    apiWrapper = await ApiWrapper.create(provider);
-  });
 
   tap.test('Electing a council test', async () => {
     // Setup goes here because M keypairs are generated after before() function
@@ -111,8 +104,4 @@ export function councilTest(
       )
     );
   });
-
-  tap.teardown(() => {
-    apiWrapper.close();
-  });
 }

+ 1 - 11
tests/network-tests/src/constantinople/tests/impl/membershipCreation.ts

@@ -1,5 +1,3 @@
-import { WsProvider } from '@polkadot/api';
-import { registerJoystreamTypes } from '@constantinople/types';
 import { Keyring } from '@polkadot/keyring';
 import { assert } from 'chai';
 import { KeyringPair } from '@polkadot/keyring/types';
@@ -9,23 +7,19 @@ import { v4 as uuid } from 'uuid';
 import tap from 'tap';
 
 export function membershipTest(
+  apiWrapper: ApiWrapper,
   nKeyPairs: KeyringPair[],
   keyring: Keyring,
   N: number,
   paidTerms: number,
-  nodeUrl: string,
   sudoUri: string
 ) {
-  let apiWrapper: ApiWrapper;
   let sudo: KeyringPair;
   let aKeyPair: KeyringPair;
   let membershipFee: BN;
   let membershipTransactionFee: BN;
-  registerJoystreamTypes();
 
   tap.test('Membership creation test setup', async () => {
-    const provider = new WsProvider(nodeUrl);
-    apiWrapper = await ApiWrapper.create(provider);
     sudo = keyring.addFromUri(sudoUri);
     for (let i = 0; i < N; i++) {
       nKeyPairs.push(keyring.addFromUri(i + uuid().substring(0, 8)));
@@ -81,8 +75,4 @@ export function membershipTest(
       .getMemberIds(aKeyPair.address)
       .then(membership => assert(membership.length > 0, 'Account A is a not member'));
   });
-
-  tap.teardown(() => {
-    apiWrapper.close();
-  });
 }

+ 0 - 20
tests/network-tests/src/constantinople/tests/impl/setTimeout.ts

@@ -1,20 +0,0 @@
-import tap from 'tap';
-import { ApiWrapper } from '../../utils/apiWrapper';
-import { WsProvider } from '@polkadot/api';
-import { registerJoystreamTypes } from '@constantinople/types';
-
-export function setTimeout(nodeUrl: string, durationInBlocks: number) {
-  let apiWrapper: ApiWrapper;
-  registerJoystreamTypes();
-
-  tap.test('retrieving time necessary for the test', async () => {
-    const provider = new WsProvider(nodeUrl);
-    apiWrapper = await ApiWrapper.create(provider);
-    const durationInMillis = (await apiWrapper.getBlockDuration()).muln(durationInBlocks).toNumber();
-    tap.setTimeout(durationInMillis);
-  });
-
-  tap.teardown(() => {
-    apiWrapper.close();
-  });
-}

+ 22 - 12
tests/network-tests/src/constantinople/tests/membershipCreationTest.ts

@@ -1,19 +1,29 @@
 import { KeyringPair } from '@polkadot/keyring/types';
 import { membershipTest } from './impl/membershipCreation';
-import { Keyring } from '@polkadot/api';
+import { Keyring, WsProvider } from '@polkadot/api';
 import { initConfig } from '../utils/config';
-import { setTimeout } from './impl/setTimeout';
+import { setTestTimeout } from '../utils/setTestTimeout';
+import tap from 'tap';
+import { registerJoystreamTypes } from '@constantinople/types';
+import { ApiWrapper } from '../utils/apiWrapper';
+import { closeApi } from './impl/closeApi';
 
-initConfig();
+tap.mocha.describe('Membership creation scenario', async () => {
+  initConfig();
+  registerJoystreamTypes();
 
-const nKeyPairs: KeyringPair[] = new Array();
+  const nKeyPairs: KeyringPair[] = new Array();
+  const keyring = new Keyring({ type: 'sr25519' });
+  const N: number = +process.env.MEMBERSHIP_CREATION_N!;
+  const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!;
+  const nodeUrl: string = process.env.NODE_URL!;
+  const sudoUri: string = process.env.SUDO_ACCOUNT_URI!;
+  const durationInBlocks: number = 7;
 
-const keyring = new Keyring({ type: 'sr25519' });
-const N: number = +process.env.MEMBERSHIP_CREATION_N!;
-const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!;
-const nodeUrl: string = process.env.NODE_URL!;
-const sudoUri: string = process.env.SUDO_ACCOUNT_URI!;
-const durationInBlocks: number = 7;
+  const provider = new WsProvider(nodeUrl);
+  const apiWrapper: ApiWrapper = await ApiWrapper.create(provider);
 
-setTimeout(nodeUrl, durationInBlocks);
-membershipTest(nKeyPairs, keyring, N, paidTerms, nodeUrl, sudoUri);
+  setTestTimeout(apiWrapper, durationInBlocks);
+  membershipTest(apiWrapper, nKeyPairs, keyring, N, paidTerms, sudoUri);
+  closeApi(apiWrapper);
+});

+ 30 - 19
tests/network-tests/src/constantinople/tests/proposals/electionParametersProposalTest.ts

@@ -3,27 +3,38 @@ import { membershipTest } from '../impl/membershipCreation';
 import { councilTest } from '../impl/electingCouncil';
 import { electionParametersProposalTest } from './impl/electionParametersProposal';
 import { initConfig } from '../../utils/config';
-import { Keyring } from '@polkadot/api';
+import { Keyring, WsProvider } from '@polkadot/api';
 import BN from 'bn.js';
-import { setTimeout } from '../impl/setTimeout';
+import { setTestTimeout } from '../../utils/setTestTimeout';
+import tap from 'tap';
+import { registerJoystreamTypes } from '@constantinople/types';
+import { closeApi } from '../impl/closeApi';
+import { ApiWrapper } from '../../utils/apiWrapper';
 
-initConfig();
+tap.mocha.describe('Election parameters proposal scenario', async () => {
+  initConfig();
+  registerJoystreamTypes();
 
-const m1KeyPairs: KeyringPair[] = new Array();
-const m2KeyPairs: KeyringPair[] = new Array();
+  const m1KeyPairs: KeyringPair[] = new Array();
+  const m2KeyPairs: KeyringPair[] = new Array();
 
-const keyring = new Keyring({ type: 'sr25519' });
-const N: number = +process.env.MEMBERSHIP_CREATION_N!;
-const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!;
-const nodeUrl: string = process.env.NODE_URL!;
-const sudoUri: string = process.env.SUDO_ACCOUNT_URI!;
-const K: number = +process.env.COUNCIL_ELECTION_K!;
-const greaterStake: BN = new BN(+process.env.COUNCIL_STAKE_GREATER_AMOUNT!);
-const lesserStake: BN = new BN(+process.env.COUNCIL_STAKE_LESSER_AMOUNT!);
-const durationInBlocks: number = 29;
+  const keyring = new Keyring({ type: 'sr25519' });
+  const N: number = +process.env.MEMBERSHIP_CREATION_N!;
+  const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!;
+  const nodeUrl: string = process.env.NODE_URL!;
+  const sudoUri: string = process.env.SUDO_ACCOUNT_URI!;
+  const K: number = +process.env.COUNCIL_ELECTION_K!;
+  const greaterStake: BN = new BN(+process.env.COUNCIL_STAKE_GREATER_AMOUNT!);
+  const lesserStake: BN = new BN(+process.env.COUNCIL_STAKE_LESSER_AMOUNT!);
+  const durationInBlocks: number = 29;
 
-setTimeout(nodeUrl, durationInBlocks);
-membershipTest(m1KeyPairs, keyring, N, paidTerms, nodeUrl, sudoUri);
-membershipTest(m2KeyPairs, keyring, N, paidTerms, nodeUrl, sudoUri);
-councilTest(m1KeyPairs, m2KeyPairs, keyring, K, nodeUrl, sudoUri, greaterStake, lesserStake);
-electionParametersProposalTest(m1KeyPairs, m2KeyPairs, keyring, nodeUrl, sudoUri);
+  const provider = new WsProvider(nodeUrl);
+  const apiWrapper: ApiWrapper = await ApiWrapper.create(provider);
+
+  setTestTimeout(apiWrapper, durationInBlocks);
+  membershipTest(apiWrapper, m1KeyPairs, keyring, N, paidTerms, sudoUri);
+  membershipTest(apiWrapper, m2KeyPairs, keyring, N, paidTerms, sudoUri);
+  councilTest(apiWrapper, m1KeyPairs, m2KeyPairs, keyring, K, sudoUri, greaterStake, lesserStake);
+  electionParametersProposalTest(apiWrapper, m1KeyPairs, m2KeyPairs, keyring, sudoUri);
+  closeApi(apiWrapper);
+});

+ 30 - 19
tests/network-tests/src/constantinople/tests/proposals/evictStorageProviderTest.ts

@@ -3,27 +3,38 @@ import { membershipTest } from '../impl/membershipCreation';
 import { councilTest } from '../impl/electingCouncil';
 import { evictStorageProviderTest } from './impl/evictStoraveProvider';
 import { initConfig } from '../../utils/config';
-import { Keyring } from '@polkadot/api';
+import { Keyring, WsProvider } from '@polkadot/api';
 import BN from 'bn.js';
-import { setTimeout } from '../impl/setTimeout';
+import { setTestTimeout } from '../../utils/setTestTimeout';
+import tap from 'tap';
+import { registerJoystreamTypes } from '@constantinople/types';
+import { closeApi } from '../impl/closeApi';
+import { ApiWrapper } from '../../utils/apiWrapper';
 
-initConfig();
+tap.mocha.describe('Evict Storage provider scenario', async () => {
+  initConfig();
+  registerJoystreamTypes();
 
-const m1KeyPairs: KeyringPair[] = new Array();
-const m2KeyPairs: KeyringPair[] = new Array();
+  const m1KeyPairs: KeyringPair[] = new Array();
+  const m2KeyPairs: KeyringPair[] = new Array();
 
-const keyring = new Keyring({ type: 'sr25519' });
-const N: number = +process.env.MEMBERSHIP_CREATION_N!;
-const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!;
-const nodeUrl: string = process.env.NODE_URL!;
-const sudoUri: string = process.env.SUDO_ACCOUNT_URI!;
-const K: number = +process.env.COUNCIL_ELECTION_K!;
-const greaterStake: BN = new BN(+process.env.COUNCIL_STAKE_GREATER_AMOUNT!);
-const lesserStake: BN = new BN(+process.env.COUNCIL_STAKE_LESSER_AMOUNT!);
-const durationInBlocks: number = 32;
+  const keyring = new Keyring({ type: 'sr25519' });
+  const N: number = +process.env.MEMBERSHIP_CREATION_N!;
+  const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!;
+  const nodeUrl: string = process.env.NODE_URL!;
+  const sudoUri: string = process.env.SUDO_ACCOUNT_URI!;
+  const K: number = +process.env.COUNCIL_ELECTION_K!;
+  const greaterStake: BN = new BN(+process.env.COUNCIL_STAKE_GREATER_AMOUNT!);
+  const lesserStake: BN = new BN(+process.env.COUNCIL_STAKE_LESSER_AMOUNT!);
+  const durationInBlocks: number = 32;
 
-setTimeout(nodeUrl, durationInBlocks);
-membershipTest(m1KeyPairs, keyring, N, paidTerms, nodeUrl, sudoUri);
-membershipTest(m2KeyPairs, keyring, N, paidTerms, nodeUrl, sudoUri);
-councilTest(m1KeyPairs, m2KeyPairs, keyring, K, nodeUrl, sudoUri, greaterStake, lesserStake);
-evictStorageProviderTest(m1KeyPairs, m2KeyPairs, keyring, nodeUrl, sudoUri);
+  const provider = new WsProvider(nodeUrl);
+  const apiWrapper: ApiWrapper = await ApiWrapper.create(provider);
+
+  setTestTimeout(apiWrapper, durationInBlocks);
+  membershipTest(apiWrapper, m1KeyPairs, keyring, N, paidTerms, sudoUri);
+  membershipTest(apiWrapper, m2KeyPairs, keyring, N, paidTerms, sudoUri);
+  councilTest(apiWrapper, m1KeyPairs, m2KeyPairs, keyring, K, sudoUri, greaterStake, lesserStake);
+  evictStorageProviderTest(apiWrapper, m1KeyPairs, m2KeyPairs, keyring, sudoUri);
+  closeApi(apiWrapper);
+});

+ 2 - 14
tests/network-tests/src/constantinople/tests/proposals/impl/electionParametersProposal.ts

@@ -1,6 +1,5 @@
-import { Keyring, WsProvider } from '@polkadot/api';
+import { Keyring } from '@polkadot/api';
 import { KeyringPair } from '@polkadot/keyring/types';
-import { registerJoystreamTypes } from '@constantinople/types';
 import { ApiWrapper } from '../../../utils/apiWrapper';
 import { v4 as uuid } from 'uuid';
 import BN from 'bn.js';
@@ -8,21 +7,14 @@ import { assert } from 'chai';
 import tap from 'tap';
 
 export function electionParametersProposalTest(
+  apiWrapper: ApiWrapper,
   m1KeyPairs: KeyringPair[],
   m2KeyPairs: KeyringPair[],
   keyring: Keyring,
-  nodeUrl: string,
   sudoUri: string
 ) {
-  let apiWrapper: ApiWrapper;
   let sudo: KeyringPair;
 
-  tap.test('Election parameters proposal test setup', async () => {
-    registerJoystreamTypes();
-    const provider = new WsProvider(nodeUrl);
-    apiWrapper = await ApiWrapper.create(provider);
-  });
-
   tap.test('Election parameters proposal test', async () => {
     // Setup
     sudo = keyring.addFromUri(sudoUri);
@@ -129,8 +121,4 @@ export function electionParametersProposalTest(
       `Min voting stake has unexpected value ${newMinVotingStake}, expected ${proposedMinVotingStake}`
     );
   });
-
-  tap.teardown(() => {
-    apiWrapper.close();
-  });
 }

+ 2 - 14
tests/network-tests/src/constantinople/tests/proposals/impl/evictStoraveProvider.ts

@@ -1,6 +1,5 @@
-import { Keyring, WsProvider } from '@polkadot/api';
+import { Keyring } from '@polkadot/api';
 import { KeyringPair } from '@polkadot/keyring/types';
-import { registerJoystreamTypes } from '@constantinople/types';
 import { ApiWrapper } from '../../../utils/apiWrapper';
 import { v4 as uuid } from 'uuid';
 import BN from 'bn.js';
@@ -9,21 +8,14 @@ import { Utils } from '../../../utils/utils';
 import tap from 'tap';
 
 export function evictStorageProviderTest(
+  apiWrapper: ApiWrapper,
   m1KeyPairs: KeyringPair[],
   m2KeyPairs: KeyringPair[],
   keyring: Keyring,
-  nodeUrl: string,
   sudoUri: string
 ) {
-  let apiWrapper: ApiWrapper;
   let sudo: KeyringPair;
 
-  tap.test('Evict storage provider proposal test setup', async () => {
-    registerJoystreamTypes();
-    const provider = new WsProvider(nodeUrl);
-    apiWrapper = await ApiWrapper.create(provider);
-  });
-
   tap.test('Evict storage provider proposal test', async () => {
     // Setup
     sudo = keyring.addFromUri(sudoUri);
@@ -67,8 +59,4 @@ export function evictStorageProviderTest(
       `Account ${sudo.address} is storage provider after eviction`
     );
   });
-
-  tap.teardown(() => {
-    apiWrapper.close();
-  });
 }

+ 2 - 14
tests/network-tests/src/constantinople/tests/proposals/impl/setLeadProposal.ts

@@ -1,6 +1,5 @@
-import { Keyring, WsProvider } from '@polkadot/api';
+import { Keyring } from '@polkadot/api';
 import { KeyringPair } from '@polkadot/keyring/types';
-import { registerJoystreamTypes } from '@constantinople/types';
 import { ApiWrapper } from '../../../utils/apiWrapper';
 import { v4 as uuid } from 'uuid';
 import BN from 'bn.js';
@@ -8,21 +7,14 @@ import { assert } from 'chai';
 import tap from 'tap';
 
 export function setLeadProposalTest(
+  apiWrapper: ApiWrapper,
   m1KeyPairs: KeyringPair[],
   m2KeyPairs: KeyringPair[],
   keyring: Keyring,
-  nodeUrl: string,
   sudoUri: string
 ) {
-  let apiWrapper: ApiWrapper;
   let sudo: KeyringPair;
 
-  tap.test('Set lead proposal test', async () => {
-    registerJoystreamTypes();
-    const provider = new WsProvider(nodeUrl);
-    apiWrapper = await ApiWrapper.create(provider);
-  });
-
   tap.test('Lead proposal test', async () => {
     // Setup
     sudo = keyring.addFromUri(sudoUri);
@@ -51,8 +43,4 @@ export function setLeadProposalTest(
       `New lead has unexpected value ${newLead}, expected ${m1KeyPairs[1].address}`
     );
   });
-
-  tap.teardown(() => {
-    apiWrapper.close();
-  });
 }

+ 2 - 14
tests/network-tests/src/constantinople/tests/proposals/impl/spendingProposal.ts

@@ -1,6 +1,5 @@
-import { Keyring, WsProvider } from '@polkadot/api';
+import { Keyring } from '@polkadot/api';
 import { KeyringPair } from '@polkadot/keyring/types';
-import { registerJoystreamTypes } from '@constantinople/types';
 import { ApiWrapper } from '../../../utils/apiWrapper';
 import { v4 as uuid } from 'uuid';
 import BN from 'bn.js';
@@ -8,23 +7,16 @@ import { assert } from 'chai';
 import tap from 'tap';
 
 export function spendingProposalTest(
+  apiWrapper: ApiWrapper,
   m1KeyPairs: KeyringPair[],
   m2KeyPairs: KeyringPair[],
   keyring: Keyring,
-  nodeUrl: string,
   sudoUri: string,
   spendingBalance: BN,
   mintCapacity: BN
 ) {
-  let apiWrapper: ApiWrapper;
   let sudo: KeyringPair;
 
-  tap.test('Spending proposal test setup', async () => {
-    registerJoystreamTypes();
-    const provider = new WsProvider(nodeUrl);
-    apiWrapper = await ApiWrapper.create(provider);
-  });
-
   tap.test('Spending proposal test', async () => {
     // Setup
     sudo = keyring.addFromUri(sudoUri);
@@ -69,8 +61,4 @@ export function spendingProposalTest(
       } has unexpected balance ${balanceAfterMinting}, expected ${balanceBeforeMinting.add(spendingBalance)}`
     );
   });
-
-  tap.teardown(() => {
-    apiWrapper.close();
-  });
 }

+ 2 - 14
tests/network-tests/src/constantinople/tests/proposals/impl/storageRoleParametersProposal.ts

@@ -1,6 +1,5 @@
-import { Keyring, WsProvider } from '@polkadot/api';
+import { Keyring } from '@polkadot/api';
 import { KeyringPair } from '@polkadot/keyring/types';
-import { registerJoystreamTypes } from '@constantinople/types';
 import { ApiWrapper } from '../../../utils/apiWrapper';
 import { v4 as uuid } from 'uuid';
 import BN from 'bn.js';
@@ -9,21 +8,14 @@ import { RoleParameters } from '@constantinople/types/lib/roles';
 import tap from 'tap';
 
 export function storageRoleParametersProposalTest(
+  apiWrapper: ApiWrapper,
   m1KeyPairs: KeyringPair[],
   m2KeyPairs: KeyringPair[],
   keyring: Keyring,
-  nodeUrl: string,
   sudoUri: string
 ) {
-  let apiWrapper: ApiWrapper;
   let sudo: KeyringPair;
 
-  tap.test('Storage role parameters proposal test setup', async () => {
-    registerJoystreamTypes();
-    const provider = new WsProvider(nodeUrl);
-    apiWrapper = await ApiWrapper.create(provider);
-  });
-
   tap.test('Storage role parameters proposal test', async () => {
     // Setup
     sudo = keyring.addFromUri(sudoUri);
@@ -125,8 +117,4 @@ export function storageRoleParametersProposalTest(
       `Entry request fee has unexpected value ${newRoleParameters.entry_request_fee.toBn()}, expected ${proposedEntryRequestFee}`
     );
   });
-
-  tap.teardown(() => {
-    apiWrapper.close();
-  });
 }

+ 2 - 14
tests/network-tests/src/constantinople/tests/proposals/impl/textProposal.ts

@@ -1,27 +1,19 @@
-import { Keyring, WsProvider } from '@polkadot/api';
+import { Keyring } from '@polkadot/api';
 import { KeyringPair } from '@polkadot/keyring/types';
-import { registerJoystreamTypes } from '@constantinople/types';
 import { ApiWrapper } from '../../../utils/apiWrapper';
 import { v4 as uuid } from 'uuid';
 import BN from 'bn.js';
 import tap from 'tap';
 
 export function textProposalTest(
+  apiWrapper: ApiWrapper,
   m1KeyPairs: KeyringPair[],
   m2KeyPairs: KeyringPair[],
   keyring: Keyring,
-  nodeUrl: string,
   sudoUri: string
 ) {
-  let apiWrapper: ApiWrapper;
   let sudo: KeyringPair;
 
-  tap.test('Text proposal test setup', async () => {
-    registerJoystreamTypes();
-    const provider = new WsProvider(nodeUrl);
-    apiWrapper = await ApiWrapper.create(provider);
-  });
-
   tap.test('Text proposal test', async () => {
     // Setup
     sudo = keyring.addFromUri(sudoUri);
@@ -51,8 +43,4 @@ export function textProposalTest(
     await apiWrapper.batchApproveProposal(m2KeyPairs, proposalNumber);
     await textProposalPromise;
   });
-
-  tap.teardown(() => {
-    apiWrapper.close();
-  });
 }

+ 2 - 14
tests/network-tests/src/constantinople/tests/proposals/impl/updateRuntime.ts

@@ -1,28 +1,20 @@
-import { Keyring, WsProvider } from '@polkadot/api';
+import { Keyring } from '@polkadot/api';
 import { Bytes } from '@polkadot/types';
 import { KeyringPair } from '@polkadot/keyring/types';
-import { registerJoystreamTypes } from '@constantinople/types';
 import { ApiWrapper } from '../../../utils/apiWrapper';
 import { v4 as uuid } from 'uuid';
 import BN from 'bn.js';
 import tap from 'tap';
 
 export function updateRuntimeTest(
+  apiWrapper: ApiWrapper,
   m1KeyPairs: KeyringPair[],
   m2KeyPairs: KeyringPair[],
   keyring: Keyring,
-  nodeUrl: string,
   sudoUri: string
 ) {
-  let apiWrapper: ApiWrapper;
   let sudo: KeyringPair;
 
-  tap.test('Update runtime test setup', async () => {
-    registerJoystreamTypes();
-    const provider = new WsProvider(nodeUrl);
-    apiWrapper = await ApiWrapper.create(provider);
-  });
-
   tap.test('\n\tUpgrading the runtime test', async () => {
     // Setup
     sudo = keyring.addFromUri(sudoUri);
@@ -57,8 +49,4 @@ export function updateRuntimeTest(
     await apiWrapper.batchApproveProposal(m2KeyPairs, proposalNumber);
     await runtimePromise;
   });
-
-  tap.teardown(() => {
-    apiWrapper.close();
-  });
 }

+ 2 - 14
tests/network-tests/src/constantinople/tests/proposals/impl/validatorCountProposal.ts

@@ -1,6 +1,5 @@
-import { Keyring, WsProvider } from '@polkadot/api';
+import { Keyring } from '@polkadot/api';
 import { KeyringPair } from '@polkadot/keyring/types';
-import { registerJoystreamTypes } from '@constantinople/types';
 import { ApiWrapper } from '../../../utils/apiWrapper';
 import { v4 as uuid } from 'uuid';
 import BN from 'bn.js';
@@ -8,22 +7,15 @@ import { assert } from 'chai';
 import tap from 'tap';
 
 export function validatorCountProposal(
+  apiWrapper: ApiWrapper,
   m1KeyPairs: KeyringPair[],
   m2KeyPairs: KeyringPair[],
   keyring: Keyring,
-  nodeUrl: string,
   sudoUri: string,
   validatorCountIncrement: BN
 ) {
-  let apiWrapper: ApiWrapper;
   let sudo: KeyringPair;
 
-  tap.test('Validator count proposal test setup', async () => {
-    registerJoystreamTypes();
-    const provider = new WsProvider(nodeUrl);
-    apiWrapper = await ApiWrapper.create(provider);
-  });
-
   tap.test('Validator count proposal test', async () => {
     // Setup
     sudo = keyring.addFromUri(sudoUri);
@@ -60,8 +52,4 @@ export function validatorCountProposal(
       `Validator count has unexpeccted value ${newValidatorCount}, expected ${proposedValidatorCount}`
     );
   });
-
-  tap.teardown(() => {
-    apiWrapper.close();
-  });
 }

+ 2 - 14
tests/network-tests/src/constantinople/tests/proposals/impl/workingGroupMintCapacityProposal.ts

@@ -1,6 +1,5 @@
-import { Keyring, WsProvider } from '@polkadot/api';
+import { Keyring } from '@polkadot/api';
 import { KeyringPair } from '@polkadot/keyring/types';
-import { registerJoystreamTypes } from '@constantinople/types';
 import { ApiWrapper } from '../../../utils/apiWrapper';
 import { v4 as uuid } from 'uuid';
 import BN from 'bn.js';
@@ -8,22 +7,15 @@ import { assert } from 'chai';
 import tap from 'tap';
 
 export function workingGroupMintCapacityProposalTest(
+  apiWrapper: ApiWrapper,
   m1KeyPairs: KeyringPair[],
   m2KeyPairs: KeyringPair[],
   keyring: Keyring,
-  nodeUrl: string,
   sudoUri: string,
   mintingCapacityIncrement: BN
 ) {
-  let apiWrapper: ApiWrapper;
   let sudo: KeyringPair;
 
-  tap.test('Working group mint capacity proposal test', async () => {
-    registerJoystreamTypes();
-    const provider = new WsProvider(nodeUrl);
-    apiWrapper = await ApiWrapper.create(provider);
-  });
-
   tap.test('Mint capacity proposal test', async () => {
     // Setup
     sudo = keyring.addFromUri(sudoUri);
@@ -64,8 +56,4 @@ export function workingGroupMintCapacityProposalTest(
       `Content working group has unexpected minting capacity ${newMintingCapacity}, expected ${proposedMintingCapacity}`
     );
   });
-
-  tap.teardown(() => {
-    apiWrapper.close();
-  });
 }

+ 30 - 19
tests/network-tests/src/constantinople/tests/proposals/setLeadProposalTest.ts

@@ -3,27 +3,38 @@ import { membershipTest } from '../impl/membershipCreation';
 import { councilTest } from '../impl/electingCouncil';
 import { setLeadProposalTest } from './impl/setLeadProposal';
 import { initConfig } from '../../utils/config';
-import { Keyring } from '@polkadot/api';
+import { Keyring, WsProvider } from '@polkadot/api';
 import BN from 'bn.js';
-import { setTimeout } from '../impl/setTimeout';
+import { setTestTimeout } from '../../utils/setTestTimeout';
+import tap from 'tap';
+import { registerJoystreamTypes } from '@constantinople/types';
+import { closeApi } from '../impl/closeApi';
+import { ApiWrapper } from '../../utils/apiWrapper';
 
-initConfig();
+tap.mocha.describe('Set lead proposal scenario', async () => {
+  initConfig();
+  registerJoystreamTypes();
 
-const m1KeyPairs: KeyringPair[] = new Array();
-const m2KeyPairs: KeyringPair[] = new Array();
+  const m1KeyPairs: KeyringPair[] = new Array();
+  const m2KeyPairs: KeyringPair[] = new Array();
 
-const keyring = new Keyring({ type: 'sr25519' });
-const N: number = +process.env.MEMBERSHIP_CREATION_N!;
-const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!;
-const nodeUrl: string = process.env.NODE_URL!;
-const sudoUri: string = process.env.SUDO_ACCOUNT_URI!;
-const K: number = +process.env.COUNCIL_ELECTION_K!;
-const greaterStake: BN = new BN(+process.env.COUNCIL_STAKE_GREATER_AMOUNT!);
-const lesserStake: BN = new BN(+process.env.COUNCIL_STAKE_LESSER_AMOUNT!);
-const durationInBlocks: number = 29;
+  const keyring = new Keyring({ type: 'sr25519' });
+  const N: number = +process.env.MEMBERSHIP_CREATION_N!;
+  const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!;
+  const nodeUrl: string = process.env.NODE_URL!;
+  const sudoUri: string = process.env.SUDO_ACCOUNT_URI!;
+  const K: number = +process.env.COUNCIL_ELECTION_K!;
+  const greaterStake: BN = new BN(+process.env.COUNCIL_STAKE_GREATER_AMOUNT!);
+  const lesserStake: BN = new BN(+process.env.COUNCIL_STAKE_LESSER_AMOUNT!);
+  const durationInBlocks: number = 29;
 
-setTimeout(nodeUrl, durationInBlocks);
-membershipTest(m1KeyPairs, keyring, N, paidTerms, nodeUrl, sudoUri);
-membershipTest(m2KeyPairs, keyring, N, paidTerms, nodeUrl, sudoUri);
-councilTest(m1KeyPairs, m2KeyPairs, keyring, K, nodeUrl, sudoUri, greaterStake, lesserStake);
-setLeadProposalTest(m1KeyPairs, m2KeyPairs, keyring, nodeUrl, sudoUri);
+  const provider = new WsProvider(nodeUrl);
+  const apiWrapper: ApiWrapper = await ApiWrapper.create(provider);
+
+  setTestTimeout(apiWrapper, durationInBlocks);
+  membershipTest(apiWrapper, m1KeyPairs, keyring, N, paidTerms, sudoUri);
+  membershipTest(apiWrapper, m2KeyPairs, keyring, N, paidTerms, sudoUri);
+  councilTest(apiWrapper, m1KeyPairs, m2KeyPairs, keyring, K, sudoUri, greaterStake, lesserStake);
+  setLeadProposalTest(apiWrapper, m1KeyPairs, m2KeyPairs, keyring, sudoUri);
+  closeApi(apiWrapper);
+});

+ 32 - 21
tests/network-tests/src/constantinople/tests/proposals/spendingProposalTest.ts

@@ -3,29 +3,40 @@ import { membershipTest } from '../impl/membershipCreation';
 import { councilTest } from '../impl/electingCouncil';
 import { spendingProposalTest } from './impl/spendingProposal';
 import { initConfig } from '../../utils/config';
-import { Keyring } from '@polkadot/api';
+import { Keyring, WsProvider } from '@polkadot/api';
 import BN from 'bn.js';
-import { setTimeout } from '../impl/setTimeout';
+import { setTestTimeout } from '../../utils/setTestTimeout';
+import tap from 'tap';
+import { registerJoystreamTypes } from '@constantinople/types';
+import { closeApi } from '../impl/closeApi';
+import { ApiWrapper } from '../../utils/apiWrapper';
 
-initConfig();
+tap.mocha.describe('Spending proposal scenario', async () => {
+  initConfig();
+  registerJoystreamTypes();
 
-const m1KeyPairs: KeyringPair[] = new Array();
-const m2KeyPairs: KeyringPair[] = new Array();
+  const m1KeyPairs: KeyringPair[] = new Array();
+  const m2KeyPairs: KeyringPair[] = new Array();
 
-const keyring = new Keyring({ type: 'sr25519' });
-const N: number = +process.env.MEMBERSHIP_CREATION_N!;
-const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!;
-const nodeUrl: string = process.env.NODE_URL!;
-const sudoUri: string = process.env.SUDO_ACCOUNT_URI!;
-const K: number = +process.env.COUNCIL_ELECTION_K!;
-const greaterStake: BN = new BN(+process.env.COUNCIL_STAKE_GREATER_AMOUNT!);
-const lesserStake: BN = new BN(+process.env.COUNCIL_STAKE_LESSER_AMOUNT!);
-const spendingBalance: BN = new BN(+process.env.SPENDING_BALANCE!);
-const mintCapacity: BN = new BN(+process.env.COUNCIL_MINTING_CAPACITY!);
-const durationInBlocks: number = 29;
+  const keyring = new Keyring({ type: 'sr25519' });
+  const N: number = +process.env.MEMBERSHIP_CREATION_N!;
+  const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!;
+  const nodeUrl: string = process.env.NODE_URL!;
+  const sudoUri: string = process.env.SUDO_ACCOUNT_URI!;
+  const K: number = +process.env.COUNCIL_ELECTION_K!;
+  const greaterStake: BN = new BN(+process.env.COUNCIL_STAKE_GREATER_AMOUNT!);
+  const lesserStake: BN = new BN(+process.env.COUNCIL_STAKE_LESSER_AMOUNT!);
+  const spendingBalance: BN = new BN(+process.env.SPENDING_BALANCE!);
+  const mintCapacity: BN = new BN(+process.env.COUNCIL_MINTING_CAPACITY!);
+  const durationInBlocks: number = 29;
 
-setTimeout(nodeUrl, durationInBlocks);
-membershipTest(m1KeyPairs, keyring, N, paidTerms, nodeUrl, sudoUri);
-membershipTest(m2KeyPairs, keyring, N, paidTerms, nodeUrl, sudoUri);
-councilTest(m1KeyPairs, m2KeyPairs, keyring, K, nodeUrl, sudoUri, greaterStake, lesserStake);
-spendingProposalTest(m1KeyPairs, m2KeyPairs, keyring, nodeUrl, sudoUri, spendingBalance, mintCapacity);
+  const provider = new WsProvider(nodeUrl);
+  const apiWrapper: ApiWrapper = await ApiWrapper.create(provider);
+
+  setTestTimeout(apiWrapper, durationInBlocks);
+  membershipTest(apiWrapper, m1KeyPairs, keyring, N, paidTerms, sudoUri);
+  membershipTest(apiWrapper, m2KeyPairs, keyring, N, paidTerms, sudoUri);
+  councilTest(apiWrapper, m1KeyPairs, m2KeyPairs, keyring, K, sudoUri, greaterStake, lesserStake);
+  spendingProposalTest(apiWrapper, m1KeyPairs, m2KeyPairs, keyring, sudoUri, spendingBalance, mintCapacity);
+  closeApi(apiWrapper);
+});

+ 30 - 19
tests/network-tests/src/constantinople/tests/proposals/storageRoleParametersProposalTest.ts

@@ -3,27 +3,38 @@ import { membershipTest } from '../impl/membershipCreation';
 import { councilTest } from '../impl/electingCouncil';
 import { storageRoleParametersProposalTest } from './impl/storageRoleParametersProposal';
 import { initConfig } from '../../utils/config';
-import { Keyring } from '@polkadot/api';
+import { Keyring, WsProvider } from '@polkadot/api';
 import BN from 'bn.js';
-import { setTimeout } from '../impl/setTimeout';
+import { setTestTimeout } from '../../utils/setTestTimeout';
+import tap from 'tap';
+import { registerJoystreamTypes } from '@constantinople/types';
+import { closeApi } from '../impl/closeApi';
+import { ApiWrapper } from '../../utils/apiWrapper';
 
-initConfig();
+tap.mocha.describe('Storage role parameters proposal scenario', async () => {
+  initConfig();
+  registerJoystreamTypes();
 
-const m1KeyPairs: KeyringPair[] = new Array();
-const m2KeyPairs: KeyringPair[] = new Array();
+  const m1KeyPairs: KeyringPair[] = new Array();
+  const m2KeyPairs: KeyringPair[] = new Array();
 
-const keyring = new Keyring({ type: 'sr25519' });
-const N: number = +process.env.MEMBERSHIP_CREATION_N!;
-const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!;
-const nodeUrl: string = process.env.NODE_URL!;
-const sudoUri: string = process.env.SUDO_ACCOUNT_URI!;
-const K: number = +process.env.COUNCIL_ELECTION_K!;
-const greaterStake: BN = new BN(+process.env.COUNCIL_STAKE_GREATER_AMOUNT!);
-const lesserStake: BN = new BN(+process.env.COUNCIL_STAKE_LESSER_AMOUNT!);
-const durationInBlocks: number = 29;
+  const keyring = new Keyring({ type: 'sr25519' });
+  const N: number = +process.env.MEMBERSHIP_CREATION_N!;
+  const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!;
+  const nodeUrl: string = process.env.NODE_URL!;
+  const sudoUri: string = process.env.SUDO_ACCOUNT_URI!;
+  const K: number = +process.env.COUNCIL_ELECTION_K!;
+  const greaterStake: BN = new BN(+process.env.COUNCIL_STAKE_GREATER_AMOUNT!);
+  const lesserStake: BN = new BN(+process.env.COUNCIL_STAKE_LESSER_AMOUNT!);
+  const durationInBlocks: number = 29;
 
-setTimeout(nodeUrl, durationInBlocks);
-membershipTest(m1KeyPairs, keyring, N, paidTerms, nodeUrl, sudoUri);
-membershipTest(m2KeyPairs, keyring, N, paidTerms, nodeUrl, sudoUri);
-councilTest(m1KeyPairs, m2KeyPairs, keyring, K, nodeUrl, sudoUri, greaterStake, lesserStake);
-storageRoleParametersProposalTest(m1KeyPairs, m2KeyPairs, keyring, nodeUrl, sudoUri);
+  const provider = new WsProvider(nodeUrl);
+  const apiWrapper: ApiWrapper = await ApiWrapper.create(provider);
+
+  setTestTimeout(apiWrapper, durationInBlocks);
+  membershipTest(apiWrapper, m1KeyPairs, keyring, N, paidTerms, sudoUri);
+  membershipTest(apiWrapper, m2KeyPairs, keyring, N, paidTerms, sudoUri);
+  councilTest(apiWrapper, m1KeyPairs, m2KeyPairs, keyring, K, sudoUri, greaterStake, lesserStake);
+  storageRoleParametersProposalTest(apiWrapper, m1KeyPairs, m2KeyPairs, keyring, sudoUri);
+  closeApi(apiWrapper);
+});

+ 30 - 19
tests/network-tests/src/constantinople/tests/proposals/textProposalTest.ts

@@ -3,27 +3,38 @@ import { membershipTest } from '../impl/membershipCreation';
 import { councilTest } from '../impl/electingCouncil';
 import { textProposalTest } from './impl/textProposal';
 import { initConfig } from '../../utils/config';
-import { Keyring } from '@polkadot/api';
+import { Keyring, WsProvider } from '@polkadot/api';
 import BN from 'bn.js';
-import { setTimeout } from '../impl/setTimeout';
+import { setTestTimeout } from '../../utils/setTestTimeout';
+import tap from 'tap';
+import { registerJoystreamTypes } from '@constantinople/types';
+import { closeApi } from '../impl/closeApi';
+import { ApiWrapper } from '../../utils/apiWrapper';
 
-initConfig();
+tap.mocha.describe('Text proposal scenario', async () => {
+  initConfig();
+  registerJoystreamTypes();
 
-const m1KeyPairs: KeyringPair[] = new Array();
-const m2KeyPairs: KeyringPair[] = new Array();
+  const m1KeyPairs: KeyringPair[] = new Array();
+  const m2KeyPairs: KeyringPair[] = new Array();
 
-const keyring = new Keyring({ type: 'sr25519' });
-const N: number = +process.env.MEMBERSHIP_CREATION_N!;
-const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!;
-const nodeUrl: string = process.env.NODE_URL!;
-const sudoUri: string = process.env.SUDO_ACCOUNT_URI!;
-const K: number = +process.env.COUNCIL_ELECTION_K!;
-const greaterStake: BN = new BN(+process.env.COUNCIL_STAKE_GREATER_AMOUNT!);
-const lesserStake: BN = new BN(+process.env.COUNCIL_STAKE_LESSER_AMOUNT!);
-const durationInBlocks: number = 28;
+  const keyring = new Keyring({ type: 'sr25519' });
+  const N: number = +process.env.MEMBERSHIP_CREATION_N!;
+  const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!;
+  const nodeUrl: string = process.env.NODE_URL!;
+  const sudoUri: string = process.env.SUDO_ACCOUNT_URI!;
+  const K: number = +process.env.COUNCIL_ELECTION_K!;
+  const greaterStake: BN = new BN(+process.env.COUNCIL_STAKE_GREATER_AMOUNT!);
+  const lesserStake: BN = new BN(+process.env.COUNCIL_STAKE_LESSER_AMOUNT!);
+  const durationInBlocks: number = 28;
 
-setTimeout(nodeUrl, durationInBlocks);
-membershipTest(m1KeyPairs, keyring, N, paidTerms, nodeUrl, sudoUri);
-membershipTest(m2KeyPairs, keyring, N, paidTerms, nodeUrl, sudoUri);
-councilTest(m1KeyPairs, m2KeyPairs, keyring, K, nodeUrl, sudoUri, greaterStake, lesserStake);
-textProposalTest(m1KeyPairs, m2KeyPairs, keyring, nodeUrl, sudoUri);
+  const provider = new WsProvider(nodeUrl);
+  const apiWrapper: ApiWrapper = await ApiWrapper.create(provider);
+
+  setTestTimeout(apiWrapper, durationInBlocks);
+  membershipTest(apiWrapper, m1KeyPairs, keyring, N, paidTerms, sudoUri);
+  membershipTest(apiWrapper, m2KeyPairs, keyring, N, paidTerms, sudoUri);
+  councilTest(apiWrapper, m1KeyPairs, m2KeyPairs, keyring, K, sudoUri, greaterStake, lesserStake);
+  textProposalTest(apiWrapper, m1KeyPairs, m2KeyPairs, keyring, sudoUri);
+  closeApi(apiWrapper);
+});

+ 31 - 20
tests/network-tests/src/constantinople/tests/proposals/updateRuntimeTest.ts

@@ -3,28 +3,39 @@ import { membershipTest } from '../impl/membershipCreation';
 import { councilTest } from '../impl/electingCouncil';
 import { updateRuntimeTest } from './impl/updateRuntime';
 import { initConfig } from '../../utils/config';
-import { Keyring } from '@polkadot/api';
+import { Keyring, WsProvider } from '@polkadot/api';
 import BN from 'bn.js';
-import { setTimeout } from '../impl/setTimeout';
+import { setTestTimeout } from '../../utils/setTestTimeout';
+import tap from 'tap';
+import { registerJoystreamTypes } from '@constantinople/types';
+import { closeApi } from '../impl/closeApi';
+import { ApiWrapper } from '../../utils/apiWrapper';
 
-initConfig();
+tap.mocha.describe('Update runtime scenario', async () => {
+  initConfig();
+  registerJoystreamTypes();
 
-const m1KeyPairs: KeyringPair[] = new Array();
-const m2KeyPairs: KeyringPair[] = new Array();
+  const m1KeyPairs: KeyringPair[] = new Array();
+  const m2KeyPairs: KeyringPair[] = new Array();
 
-const keyring = new Keyring({ type: 'sr25519' });
-const N: number = +process.env.MEMBERSHIP_CREATION_N!;
-const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!;
-const nodeUrl: string = process.env.NODE_URL!;
-const sudoUri: string = process.env.SUDO_ACCOUNT_URI!;
-const K: number = +process.env.COUNCIL_ELECTION_K!;
-const greaterStake: BN = new BN(+process.env.COUNCIL_STAKE_GREATER_AMOUNT!);
-const lesserStake: BN = new BN(+process.env.COUNCIL_STAKE_LESSER_AMOUNT!);
-const durationInBlocks: number = 54;
+  const keyring = new Keyring({ type: 'sr25519' });
+  const N: number = +process.env.MEMBERSHIP_CREATION_N!;
+  const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!;
+  const nodeUrl: string = process.env.NODE_URL!;
+  const sudoUri: string = process.env.SUDO_ACCOUNT_URI!;
+  const K: number = +process.env.COUNCIL_ELECTION_K!;
+  const greaterStake: BN = new BN(+process.env.COUNCIL_STAKE_GREATER_AMOUNT!);
+  const lesserStake: BN = new BN(+process.env.COUNCIL_STAKE_LESSER_AMOUNT!);
+  const durationInBlocks: number = 54;
 
-setTimeout(nodeUrl, durationInBlocks);
-membershipTest(m1KeyPairs, keyring, N, paidTerms, nodeUrl, sudoUri);
-membershipTest(m2KeyPairs, keyring, N, paidTerms, nodeUrl, sudoUri);
-councilTest(m1KeyPairs, m2KeyPairs, keyring, K, nodeUrl, sudoUri, greaterStake, lesserStake);
-updateRuntimeTest(m1KeyPairs, m2KeyPairs, keyring, nodeUrl, sudoUri);
-membershipTest(new Array<KeyringPair>(), keyring, N, paidTerms, nodeUrl, sudoUri);
+  const provider = new WsProvider(nodeUrl);
+  const apiWrapper: ApiWrapper = await ApiWrapper.create(provider);
+
+  setTestTimeout(apiWrapper, durationInBlocks);
+  membershipTest(apiWrapper, m1KeyPairs, keyring, N, paidTerms, sudoUri);
+  membershipTest(apiWrapper, m2KeyPairs, keyring, N, paidTerms, sudoUri);
+  councilTest(apiWrapper, m1KeyPairs, m2KeyPairs, keyring, K, sudoUri, greaterStake, lesserStake);
+  updateRuntimeTest(apiWrapper, m1KeyPairs, m2KeyPairs, keyring, sudoUri);
+  membershipTest(apiWrapper, new Array<KeyringPair>(), keyring, N, paidTerms, sudoUri);
+  closeApi(apiWrapper);
+});

+ 31 - 20
tests/network-tests/src/constantinople/tests/proposals/validatorCountProposalTest.ts

@@ -3,28 +3,39 @@ import { membershipTest } from '../impl/membershipCreation';
 import { councilTest } from '../impl/electingCouncil';
 import { validatorCountProposal } from './impl/validatorCountProposal';
 import { initConfig } from '../../utils/config';
-import { Keyring } from '@polkadot/api';
+import { Keyring, WsProvider } from '@polkadot/api';
 import BN from 'bn.js';
-import { setTimeout } from '../impl/setTimeout';
+import { setTestTimeout } from '../../utils/setTestTimeout';
+import tap from 'tap';
+import { registerJoystreamTypes } from '@constantinople/types';
+import { closeApi } from '../impl/closeApi';
+import { ApiWrapper } from '../../utils/apiWrapper';
 
-initConfig();
+tap.mocha.describe('Validator count proposal scenario', async () => {
+  initConfig();
+  registerJoystreamTypes();
 
-const m1KeyPairs: KeyringPair[] = new Array();
-const m2KeyPairs: KeyringPair[] = new Array();
+  const m1KeyPairs: KeyringPair[] = new Array();
+  const m2KeyPairs: KeyringPair[] = new Array();
 
-const keyring = new Keyring({ type: 'sr25519' });
-const N: number = +process.env.MEMBERSHIP_CREATION_N!;
-const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!;
-const nodeUrl: string = process.env.NODE_URL!;
-const sudoUri: string = process.env.SUDO_ACCOUNT_URI!;
-const K: number = +process.env.COUNCIL_ELECTION_K!;
-const greaterStake: BN = new BN(+process.env.COUNCIL_STAKE_GREATER_AMOUNT!);
-const lesserStake: BN = new BN(+process.env.COUNCIL_STAKE_LESSER_AMOUNT!);
-const validatorCountIncrement: BN = new BN(+process.env.VALIDATOR_COUNT_INCREMENT!);
-const durationInBlocks: number = 29;
+  const keyring = new Keyring({ type: 'sr25519' });
+  const N: number = +process.env.MEMBERSHIP_CREATION_N!;
+  const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!;
+  const nodeUrl: string = process.env.NODE_URL!;
+  const sudoUri: string = process.env.SUDO_ACCOUNT_URI!;
+  const K: number = +process.env.COUNCIL_ELECTION_K!;
+  const greaterStake: BN = new BN(+process.env.COUNCIL_STAKE_GREATER_AMOUNT!);
+  const lesserStake: BN = new BN(+process.env.COUNCIL_STAKE_LESSER_AMOUNT!);
+  const validatorCountIncrement: BN = new BN(+process.env.VALIDATOR_COUNT_INCREMENT!);
+  const durationInBlocks: number = 29;
 
-setTimeout(nodeUrl, durationInBlocks);
-membershipTest(m1KeyPairs, keyring, N, paidTerms, nodeUrl, sudoUri);
-membershipTest(m2KeyPairs, keyring, N, paidTerms, nodeUrl, sudoUri);
-councilTest(m1KeyPairs, m2KeyPairs, keyring, K, nodeUrl, sudoUri, greaterStake, lesserStake);
-validatorCountProposal(m1KeyPairs, m2KeyPairs, keyring, nodeUrl, sudoUri, validatorCountIncrement);
+  const provider = new WsProvider(nodeUrl);
+  const apiWrapper: ApiWrapper = await ApiWrapper.create(provider);
+
+  setTestTimeout(apiWrapper, durationInBlocks);
+  membershipTest(apiWrapper, m1KeyPairs, keyring, N, paidTerms, sudoUri);
+  membershipTest(apiWrapper, m2KeyPairs, keyring, N, paidTerms, sudoUri);
+  councilTest(apiWrapper, m1KeyPairs, m2KeyPairs, keyring, K, sudoUri, greaterStake, lesserStake);
+  validatorCountProposal(apiWrapper, m1KeyPairs, m2KeyPairs, keyring, sudoUri, validatorCountIncrement);
+  closeApi(apiWrapper);
+});

+ 31 - 20
tests/network-tests/src/constantinople/tests/proposals/workingGroupMintCapacityProposalTest.ts

@@ -3,28 +3,39 @@ import { membershipTest } from '../impl/membershipCreation';
 import { councilTest } from '../impl/electingCouncil';
 import { workingGroupMintCapacityProposalTest } from './impl/workingGroupMintCapacityProposal';
 import { initConfig } from '../../utils/config';
-import { Keyring } from '@polkadot/api';
+import { Keyring, WsProvider } from '@polkadot/api';
 import BN from 'bn.js';
-import { setTimeout } from '../impl/setTimeout';
+import { setTestTimeout } from '../../utils/setTestTimeout';
+import tap from 'tap';
+import { registerJoystreamTypes } from '@constantinople/types';
+import { closeApi } from '../impl/closeApi';
+import { ApiWrapper } from '../../utils/apiWrapper';
 
-initConfig();
+tap.mocha.describe('Validator count proposal scenario', async () => {
+  initConfig();
+  registerJoystreamTypes();
 
-const m1KeyPairs: KeyringPair[] = new Array();
-const m2KeyPairs: KeyringPair[] = new Array();
+  const m1KeyPairs: KeyringPair[] = new Array();
+  const m2KeyPairs: KeyringPair[] = new Array();
 
-const keyring = new Keyring({ type: 'sr25519' });
-const N: number = +process.env.MEMBERSHIP_CREATION_N!;
-const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!;
-const nodeUrl: string = process.env.NODE_URL!;
-const sudoUri: string = process.env.SUDO_ACCOUNT_URI!;
-const K: number = +process.env.COUNCIL_ELECTION_K!;
-const greaterStake: BN = new BN(+process.env.COUNCIL_STAKE_GREATER_AMOUNT!);
-const lesserStake: BN = new BN(+process.env.COUNCIL_STAKE_LESSER_AMOUNT!);
-const mintingCapacityIncrement: BN = new BN(+process.env.MINTING_CAPACITY_INCREMENT!);
-const durationInBlocks: number = 29;
+  const keyring = new Keyring({ type: 'sr25519' });
+  const N: number = +process.env.MEMBERSHIP_CREATION_N!;
+  const paidTerms: number = +process.env.MEMBERSHIP_PAID_TERMS!;
+  const nodeUrl: string = process.env.NODE_URL!;
+  const sudoUri: string = process.env.SUDO_ACCOUNT_URI!;
+  const K: number = +process.env.COUNCIL_ELECTION_K!;
+  const greaterStake: BN = new BN(+process.env.COUNCIL_STAKE_GREATER_AMOUNT!);
+  const lesserStake: BN = new BN(+process.env.COUNCIL_STAKE_LESSER_AMOUNT!);
+  const mintingCapacityIncrement: BN = new BN(+process.env.MINTING_CAPACITY_INCREMENT!);
+  const durationInBlocks: number = 29;
 
-setTimeout(nodeUrl, durationInBlocks);
-membershipTest(m1KeyPairs, keyring, N, paidTerms, nodeUrl, sudoUri);
-membershipTest(m2KeyPairs, keyring, N, paidTerms, nodeUrl, sudoUri);
-councilTest(m1KeyPairs, m2KeyPairs, keyring, K, nodeUrl, sudoUri, greaterStake, lesserStake);
-workingGroupMintCapacityProposalTest(m1KeyPairs, m2KeyPairs, keyring, nodeUrl, sudoUri, mintingCapacityIncrement);
+  const provider = new WsProvider(nodeUrl);
+  const apiWrapper: ApiWrapper = await ApiWrapper.create(provider);
+
+  setTestTimeout(apiWrapper, durationInBlocks);
+  membershipTest(apiWrapper, m1KeyPairs, keyring, N, paidTerms, sudoUri);
+  membershipTest(apiWrapper, m2KeyPairs, keyring, N, paidTerms, sudoUri);
+  councilTest(apiWrapper, m1KeyPairs, m2KeyPairs, keyring, K, sudoUri, greaterStake, lesserStake);
+  workingGroupMintCapacityProposalTest(apiWrapper, m1KeyPairs, m2KeyPairs, keyring, sudoUri, mintingCapacityIncrement);
+  closeApi(apiWrapper);
+});

+ 7 - 0
tests/network-tests/src/constantinople/utils/setTestTimeout.ts

@@ -0,0 +1,7 @@
+import tap from 'tap';
+import { ApiWrapper } from './apiWrapper';
+
+export function setTestTimeout(apiWrapper: ApiWrapper, durationInBlocks: number) {
+  const durationInMillis = apiWrapper.getBlockDuration().muln(durationInBlocks).toNumber();
+  tap.setTimeout(durationInMillis);
+}