def testConsecutiveAddSameNodeWithOnlyAliasChange(be, do, newStewardCli, newNodeVals, newNodeAdded): be(newStewardCli) newNodeVals['newNodeData'][ALIAS] = randomString(6) doSendNodeCmd(do, newNodeVals, expMsgs=['existing data has conflicts with request data']) exitFromCli(do)
def test_add_same_node_without_any_change(be, do, newStewardCli, newNodeVals, newNodeAdded): ''' Checks that it's not possible to add the same node twice by owner ''' be(newStewardCli) doSendNodeCmd(do, newNodeVals, expMsgs=['node already has the same data as requested']) exitFromCli(do)
def test_add_same_node_without_any_change(be, do, newStewardCli, newNodeVals, newNodeAdded): ''' Checks that it's not possible to add the same node twice by owner ''' be(newStewardCli) doSendNodeCmd(do, newNodeVals, expMsgs=['node already has the same data as requested']) exitFromCli(do)
def test_add_same_node_without_any_change_by_trustee(be, do, trusteeCli, newNodeVals, newNodeAdded, nodeValsEmptyData): ''' Checks that it's not possible to add the same node twice by Trustee ''' be(trusteeCli) doSendNodeCmd(do, newNodeVals, expMsgs=["node already has the same data as requested"]) exitFromCli(do)
def test_add_same_node_without_any_change_by_trustee(be, do, trusteeCli, newNodeVals, newNodeAdded, nodeValsEmptyData): ''' Checks that it's not possible to add the same node twice by Trustee ''' be(trusteeCli) doSendNodeCmd(do, newNodeVals, expMsgs=["node already has the same data as requested"]) exitFromCli(do)
def test_add_same_data_alias_changed(be, do, newStewardCli, newNodeVals, newNodeAdded): ''' Checks that it's not possible to add a new Node with the same alias (by owner) ''' be(newStewardCli) newNodeVals['newNodeData'][ALIAS] = randomString(6) doSendNodeCmd(do, newNodeVals, expMsgs=['existing data has conflicts with request data']) exitFromCli(do)
def testConsecutiveAddSameNodeWithNonAliasChange(be, do, newStewardCli, newNodeVals, newNodeAdded): be(newStewardCli) nodeIp, nodePort = genHa() clientIp, clientPort = genHa() newNodeVals['newNodeData'][NODE_IP] = nodeIp newNodeVals['newNodeData'][NODE_PORT] = nodePort newNodeVals['newNodeData'][CLIENT_IP] = nodeIp newNodeVals['newNodeData'][CLIENT_PORT] = clientPort doSendNodeCmd(do, newNodeVals) exitFromCli(do)
def test_add_same_data_alias_changed(be, do, newStewardCli, newNodeVals, newNodeAdded): ''' Checks that it's not possible to add a new Node with the same alias (by owner) ''' be(newStewardCli) newNodeVals['newNodeData'][ALIAS] = randomString(6) doSendNodeCmd(do, newNodeVals, expMsgs=['existing data has conflicts with request data']) exitFromCli(do)
def test_add_same_node_with_changed_bls_by_trustee(be, do, trusteeCli, newNodeVals, newNodeAdded, nodeValsEmptyData): ''' Checks that it's not possible to add the same node with different BLS key by Trustee ''' be(trusteeCli) node_vals = newNodeVals node_vals['newNodeData'][BLS_KEY] = base58.b58encode(randomString(128).encode()) doSendNodeCmd(do, node_vals, expMsgs=["TRUSTEE not in allowed roles ['STEWARD']"]) exitFromCli(do)
def test_add_same_node_with_changed_bls_by_trustee(be, do, trusteeCli, newNodeVals, newNodeAdded, nodeValsEmptyData): ''' Checks that it's not possible to add the same node with different BLS key by Trustee ''' be(trusteeCli) node_vals = newNodeVals node_vals['newNodeData'][BLS_KEY] = randomString(32) doSendNodeCmd(do, node_vals, expMsgs=["TRUSTEE not in allowed roles ['STEWARD']"]) exitFromCli(do)
def testConsecutiveAddSameNodeWithNodeAndClientPortSame(be, do, newStewardCli, newNodeVals, newNodeAdded): be(newStewardCli) nodeIp, nodePort = genHa() newNodeVals['newNodeData'][NODE_IP] = nodeIp newNodeVals['newNodeData'][NODE_PORT] = nodePort newNodeVals['newNodeData'][CLIENT_IP] = nodeIp newNodeVals['newNodeData'][CLIENT_PORT] = nodePort doSendNodeCmd(do, newNodeVals, expMsgs=["node and client ha cannot be same"]) exitFromCli(do)
def test_update_bls(be, do, newStewardCli, newNodeVals, newNodeAdded, nodeValsEmptyData): ''' Checks that it's possible to update BLS keys by owner (just alias and new key are required) ''' be(newStewardCli) node_vals = nodeValsEmptyData node_vals['newNodeData'][ALIAS] = newNodeVals['newNodeData'][ALIAS] node_vals['newNodeData'][BLS_KEY] = randomString(32) doSendNodeCmd(do, node_vals, expMsgs=['Node request completed']) exitFromCli(do)
def test_update_alias(be, do, newStewardCli, newNodeAdded, nodeValsEmptyData): ''' Checks that it's not possible to change alias of existing node (by owner) ''' be(newStewardCli) node_vals = nodeValsEmptyData node_vals['newNodeData'][ALIAS] = randomString(6) doSendNodeCmd(do, node_vals, expMsgs=['existing data has conflicts with request data']) exitFromCli(do)
def testSuspendNode(be, do, trusteeCli, newNodeAdded): """ Suspend a node and then cancel suspension. Suspend while suspended to test that there is no error """ newNodeVals = newNodeAdded be(trusteeCli) newNodeVals['newNodeData'][SERVICES] = [] doSendNodeCmd(do, newNodeVals) # Re-suspend node newNodeVals['newNodeData'][SERVICES] = [] doSendNodeCmd(do, newNodeVals, expMsgs=['node already has the same data as requested']) # Cancel suspension newNodeVals['newNodeData'][SERVICES] = [VALIDATOR] doSendNodeCmd(do, newNodeVals) # Re-cancel suspension newNodeVals['newNodeData'][SERVICES] = [VALIDATOR] doSendNodeCmd(do, nodeVals=newNodeVals, expMsgs=['node already has the same data as requested'])
def test_update_bls(be, do, newStewardCli, newNodeVals, newNodeAdded, nodeValsEmptyData): ''' Checks that it's possible to update BLS keys by owner (just alias and new key are required) ''' be(newStewardCli) node_vals = nodeValsEmptyData node_vals['newNodeData'][ALIAS] = newNodeVals['newNodeData'][ALIAS] node_vals['newNodeData'][BLS_KEY] = randomString(32) doSendNodeCmd(do, node_vals, expMsgs=['Node request completed']) exitFromCli(do)
def test_add_same_node_with_changed_bls_by_trustee(be, do, trusteeCli, newNodeVals, newNodeAdded, nodeValsEmptyData, new_bls_keys): ''' Checks that it's not possible to add the same node with different BLS key by Trustee ''' be(trusteeCli) node_vals = newNodeVals bls_key, key_proof = new_bls_keys node_vals['newNodeData'][BLS_KEY] = bls_key node_vals['newNodeData'][BLS_KEY_PROOF] = key_proof doSendNodeCmd(do, node_vals, expMsgs=["TRUSTEE not in allowed roles ['STEWARD']"]) exitFromCli(do)
def test_update_alias(be, do, newStewardCli, newNodeAdded, nodeValsEmptyData): ''' Checks that it's not possible to change alias of existing node (by owner) ''' be(newStewardCli) node_vals = nodeValsEmptyData node_vals['newNodeData'][ALIAS] = randomString(6) doSendNodeCmd(do, node_vals, expMsgs=['existing data has conflicts with request data']) exitFromCli(do)
def test_update_bls_by_trustee(be, do, trusteeCli, newNodeVals, newNodeAdded, nodeValsEmptyData): ''' Checks that it's not possible to update BLS keys by Trustee (just alias and new key are required) ''' be(trusteeCli) node_vals = nodeValsEmptyData node_vals['newNodeData'][ALIAS] = newNodeVals['newNodeData'][ALIAS] node_vals['newNodeData'][BLS_KEY] = randomString(32) doSendNodeCmd(do, node_vals, expMsgs=["TRUSTEE not in allowed roles ['STEWARD']"]) exitFromCli(do)
def test_update_bls_by_trustee(be, do, trusteeCli, newNodeVals, newNodeAdded, nodeValsEmptyData): ''' Checks that it's not possible to update BLS keys by Trustee (just alias and new key are required) ''' be(trusteeCli) node_vals = nodeValsEmptyData node_vals['newNodeData'][ALIAS] = newNodeVals['newNodeData'][ALIAS] node_vals['newNodeData'][BLS_KEY] = base58.b58encode(randomString(128).encode()) doSendNodeCmd(do, node_vals, expMsgs=["TRUSTEE not in allowed roles ['STEWARD']"]) exitFromCli(do)
def test_update_node_and_client_port_same(be, do, newStewardCli, newNodeVals, newNodeAdded, nodeValsEmptyData): ''' Checks that it's not possible to have node and client ports same (by owner) ''' be(newStewardCli) nodeIp, nodePort = genHa() node_vals = nodeValsEmptyData node_vals['newNodeData'][ALIAS] = newNodeVals['newNodeData'][ALIAS] node_vals['newNodeData'][NODE_IP] = nodeIp node_vals['newNodeData'][NODE_PORT] = nodePort node_vals['newNodeData'][CLIENT_IP] = nodeIp node_vals['newNodeData'][CLIENT_PORT] = nodePort doSendNodeCmd(do, node_vals, expMsgs=["node and client ha cannot be same"]) exitFromCli(do)
def test_update_bls(be, do, newStewardCli, newNodeVals, newNodeAdded, nodeValsEmptyData, new_bls_keys): ''' Checks that it's possible to update BLS keys by owner (just alias and new key are required) ''' be(newStewardCli) node_vals = nodeValsEmptyData bls_key, key_proof = new_bls_keys node_vals['newNodeData'][BLS_KEY] = bls_key node_vals['newNodeData'][BLS_KEY_PROOF] = key_proof node_vals['newNodeData'][ALIAS] = newNodeVals['newNodeData'][ALIAS] doSendNodeCmd(do, node_vals, expMsgs=['Node request completed']) exitFromCli(do)
def test_update_bls_by_trustee(be, do, trusteeCli, newNodeVals, newNodeAdded, nodeValsEmptyData, new_bls_keys): ''' Checks that it's not possible to update BLS keys by Trustee (just alias and new key are required) ''' be(trusteeCli) node_vals = nodeValsEmptyData bls_key, key_proof = new_bls_keys node_vals['newNodeData'][BLS_KEY] = bls_key node_vals['newNodeData'][BLS_KEY_PROOF] = key_proof node_vals['newNodeData'][ALIAS] = newNodeVals['newNodeData'][ALIAS] doSendNodeCmd(do, node_vals, expMsgs=["TRUSTEE not in allowed roles ['STEWARD']"]) exitFromCli(do)
def testSuspendNodeWhichWasNeverActive(be, do, trusteeCli, nymAddedOut, poolNodesStarted, trusteeMap): """ Add a node without services field and check that the ledger does not contain the `services` field and check that it can be blacklisted and the ledger has `services` as empty list """ newStewardSeed = '0000000000000000000KellySteward2' newStewardIdr = 'DqCx7RFEpSUMZbV2mH89XPH6JT3jMvDNU55NTnBHsQCs' be(trusteeCli) do('send NYM dest={{remote}} role={role}'.format( role=Roles.STEWARD.name), within=5, expect=nymAddedOut, mapper={'remote': newStewardIdr}) do('new key with seed {}'.format(newStewardSeed)) nport, cport = (_[1] for _ in genHa(2)) nodeId = '6G9QhQa3HWjRKeRmEvEkLbWWf2t7cw6KLtafzi494G4G' newNodeVals = { 'newNodeIdr': nodeId, 'newNodeData': {'client_port': cport, 'client_ip': '127.0.0.1', 'alias': 'Node6', 'node_ip': '127.0.0.1', 'node_port': nport } } doSendNodeCmd(do, newNodeVals) for node in poolNodesStarted.nodes.values(): txn = [t for _, t in node.poolLedger.getAllTxn()][-1] txn_data = get_payload_data(txn) assert txn_data[TARGET_NYM] == nodeId assert SERVICES not in txn_data[DATA] do('new key with seed {}'.format(trusteeMap['trusteeSeed'])) newNodeVals['newNodeData'][SERVICES] = [] doSendNodeCmd(do, newNodeVals) for node in poolNodesStarted.nodes.values(): txn = [t for _, t in node.poolLedger.getAllTxn()][-1] txn_data = get_payload_data(txn) assert txn_data[TARGET_NYM] == nodeId assert SERVICES in txn_data[DATA] and txn_data[DATA][SERVICES] == []
def test_update_ports_and_ips(be, do, newStewardCli, newNodeVals, newNodeAdded, nodeValsEmptyData): ''' Checks that it's possible to update node and client ports and IPs (by owner) (just alias and ports/IPs are required) ''' be(newStewardCli) nodeIp, nodePort = genHa() clientIp, clientPort = genHa() node_vals = nodeValsEmptyData node_vals['newNodeData'][ALIAS] = newNodeVals['newNodeData'][ALIAS] node_vals['newNodeData'][NODE_IP] = nodeIp node_vals['newNodeData'][NODE_PORT] = nodePort node_vals['newNodeData'][CLIENT_IP] = clientIp node_vals['newNodeData'][CLIENT_PORT] = clientPort doSendNodeCmd(do, node_vals, expMsgs=['Node request completed']) exitFromCli(do)
def newNodeAdded(be, do, poolNodesStarted, philCli, newStewardCli, newNodeVals): be(newStewardCli) doSendNodeCmd(do, newNodeVals) newNodeData = newNodeVals["newNodeData"] def checkClientConnected(client): name = newNodeData[ALIAS] + CLIENT_STACK_SUFFIX assert name in client.nodeReg def checkNodeConnected(nodes): for node in nodes: name = newNodeData[ALIAS] assert name in node.nodeReg # Reconnect steward's CLI to get new pool membership info. disconnect_and_check_output(do) connect_and_check_output(do, newStewardCli.txn_dir) timeout = waits.expectedClientToPoolConnectionTimeout( len(newStewardCli.activeClient.nodeReg)) newStewardCli.looper.run( eventually(checkClientConnected, newStewardCli.activeClient, timeout=timeout)) be(philCli) # Reconnect Phil's CLI if needed to get new pool membership info. if philCli._isConnectedToAnyEnv(): disconnect_and_check_output(do) connect_and_check_output(do, philCli.txn_dir) philCli.looper.run( eventually(checkClientConnected, philCli.activeClient, timeout=timeout)) poolNodesStarted.looper.run( eventually(checkNodeConnected, list(poolNodesStarted.nodes.values()), timeout=timeout)) return newNodeVals
def testSuspendNodeWhichWasNeverActive(be, do, trusteeCli, nymAddedOut, poolNodesStarted, trusteeMap): """ Add a node without services field and check that the ledger does not contain the `services` field and check that it can be blacklisted and the ledger has `services` as empty list """ newStewardSeed = '0000000000000000000KellySteward2' newStewardIdr = 'DqCx7RFEpSUMZbV2mH89XPH6JT3jMvDNU55NTnBHsQCs' be(trusteeCli) do('send NYM dest={{remote}} role={role}'.format(role=Roles.STEWARD.name), within=5, expect=nymAddedOut, mapper={'remote': newStewardIdr}) do('new key with seed {}'.format(newStewardSeed)) nport, cport = (_[1] for _ in genHa(2)) nodeId = '6G9QhQa3HWjRKeRmEvEkLbWWf2t7cw6KLtafzi494G4G' newNodeVals = { 'newNodeIdr': nodeId, 'newNodeData': { 'client_port': cport, 'client_ip': '127.0.0.1', 'alias': 'Node6', 'node_ip': '127.0.0.1', 'node_port': nport } } doSendNodeCmd(do, newNodeVals) for node in poolNodesStarted.nodes.values(): txn = [t for _, t in node.poolLedger.getAllTxn()][-1] assert txn[TARGET_NYM] == nodeId assert SERVICES not in txn[DATA] do('new key with seed {}'.format(trusteeMap['trusteeSeed'])) newNodeVals['newNodeData'][SERVICES] = [] doSendNodeCmd(do, newNodeVals) for node in poolNodesStarted.nodes.values(): txn = [t for _, t in node.poolLedger.getAllTxn()][-1] assert txn[TARGET_NYM] == nodeId assert SERVICES in txn[DATA] and txn[DATA][SERVICES] == []
def test_update_node_and_client_port_same(be, do, newStewardCli, newNodeVals, newNodeAdded, nodeValsEmptyData): ''' Checks that it's not possible to have node and client ports same (by owner) ''' be(newStewardCli) nodeIp, nodePort = genHa() node_vals = nodeValsEmptyData node_vals['newNodeData'][ALIAS] = newNodeVals['newNodeData'][ALIAS] node_vals['newNodeData'][NODE_IP] = nodeIp node_vals['newNodeData'][NODE_PORT] = nodePort node_vals['newNodeData'][CLIENT_IP] = nodeIp node_vals['newNodeData'][CLIENT_PORT] = nodePort doSendNodeCmd(do, node_vals, expMsgs=["node and client ha cannot be same"]) exitFromCli(do)
def test_update_ports_and_ips(be, do, newStewardCli, newNodeVals, newNodeAdded, nodeValsEmptyData): ''' Checks that it's possible to update node and client ports and IPs (by owner) (just alias and ports/IPs are required) ''' be(newStewardCli) nodeIp, nodePort = genHa() clientIp, clientPort = genHa() node_vals = nodeValsEmptyData node_vals['newNodeData'][ALIAS] = newNodeVals['newNodeData'][ALIAS] node_vals['newNodeData'][NODE_IP] = nodeIp node_vals['newNodeData'][NODE_PORT] = nodePort node_vals['newNodeData'][CLIENT_IP] = clientIp node_vals['newNodeData'][CLIENT_PORT] = clientPort doSendNodeCmd(do, node_vals, expMsgs=['Node request completed']) exitFromCli(do)
def newNodeAdded(be, do, poolNodesStarted, philCli, newStewardCli, newNodeVals): be(philCli) if not philCli._isConnectedToAnyEnv(): connect_and_check_output(do, philCli.txn_dir) be(newStewardCli) doSendNodeCmd(do, newNodeVals) newNodeData = newNodeVals["newNodeData"] def checkClientConnected(client): name = newNodeData[ALIAS] + CLIENT_STACK_SUFFIX assert name in client.nodeReg def checkNodeConnected(nodes): for node in nodes: name = newNodeData[ALIAS] assert name in node.nodeReg timeout = waits.expectedClientToPoolConnectionTimeout( util.getMaxFailures(len(philCli.nodeReg)) ) newStewardCli.looper.run(eventually(checkClientConnected, newStewardCli.activeClient, timeout=timeout)) philCli.looper.run(eventually(checkClientConnected, philCli.activeClient, timeout=timeout)) poolNodesStarted.looper.run( eventually( checkNodeConnected, list( poolNodesStarted.nodes.values()), timeout=timeout)) return newNodeVals
def newNodeAdded(be, do, poolNodesStarted, philCli, newStewardCli, newNodeVals): be(philCli) if not philCli._isConnectedToAnyEnv(): connect_and_check_output(do, philCli.txn_dir) be(newStewardCli) doSendNodeCmd(do, newNodeVals) newNodeData = newNodeVals["newNodeData"] def checkClientConnected(client): name = newNodeData[ALIAS] + CLIENT_STACK_SUFFIX assert name in client.nodeReg def checkNodeConnected(nodes): for node in nodes: name = newNodeData[ALIAS] assert name in node.nodeReg timeout = waits.expectedClientToPoolConnectionTimeout( util.getMaxFailures(len(philCli.nodeReg)) ) newStewardCli.looper.run(eventually(checkClientConnected, newStewardCli.activeClient, timeout=timeout)) philCli.looper.run(eventually(checkClientConnected, philCli.activeClient, timeout=timeout)) poolNodesStarted.looper.run( eventually( checkNodeConnected, list( poolNodesStarted.nodes.values()), timeout=timeout)) return newNodeVals
def testSuspendNode(be, do, trusteeCli, newNodeAdded): """ Suspend a node and then cancel suspension. Suspend while suspended to test that there is no error """ newNodeVals = newNodeAdded be(trusteeCli) newNodeVals['newNodeData'][SERVICES] = [] doSendNodeCmd(do, newNodeVals) # Re-suspend node newNodeVals['newNodeData'][SERVICES] = [] doSendNodeCmd(do, newNodeVals, expMsgs=['node already has the same data as requested']) # Cancel suspension newNodeVals['newNodeData'][SERVICES] = [VALIDATOR] doSendNodeCmd(do, newNodeVals) # Re-cancel suspension newNodeVals['newNodeData'][SERVICES] = [VALIDATOR] doSendNodeCmd(do, nodeVals=newNodeVals, expMsgs=['node already has the same data as requested'])
def testConsecutiveAddSameNodeWithoutAnyChange(be, do, newStewardCli, newNodeVals, newNodeAdded): be(newStewardCli) doSendNodeCmd(do, newNodeVals, expMsgs=['node already has the same data as requested']) exitFromCli(do)