コード例 #1
0
    def test_local_validation_errors(self):
        cfg = defaultValidatorConfig.copy()
        cfg['LedgerType'] = 'dev_mode'
        cfg['BlockWaitTime'] = 0
        cfg['LocalValidation'] = True
        vnm = None
        try:
            print "Launching validator network."
            vnm = ValidatorNetworkManager(http_port=9300, udp_port=9350,
                                          cfg=cfg)
            vnm.launch_network(1)
            urls = vnm.urls()
            self._generate_invalid_transactions(urls[0])

            if vnm:
                vnm.shutdown()
        except Exception:
            print "Exception encountered in test case."
            traceback.print_exc()
            if vnm:
                vnm.shutdown()
            raise
        finally:
            if vnm:
                vnm.create_result_archive("%s.tar.gz" % self._testMethodName)
            else:
                print "No Validator data and logs to preserve"
コード例 #2
0
    def test_missing_dependencies(self):
        vnm = None
        try:
            print "Launching validator network."
            vnm_config = defaultValidatorConfig.copy()

            vnm = ValidatorNetworkManager(http_port=9000, udp_port=9100,
                                          cfg=vnm_config)

            firstwavevalidators = vnm.launch_network(5)

            print "Testing limit of missing dependencies."
            test = IntKeyLoadTest()
            test.setup(vnm.urls(), 10)
            test.run(1)
            test.run_with_limit_txn_dependencies(1)
            test.validate()
            vnm.shutdown()
        except Exception as e:
            print "Exception encountered in test case."
            traceback.print_exc()
            if vnm:
                vnm.shutdown()
            vnm.create_result_archive("TestIntegrationResults.tar.gz")
            print "Validator data and logs preserved in: " \
                  "TestIntegrationResults.tar.gz"
            raise e
コード例 #3
0
    def setUpClass(cls):
        cls.vnm = None
        try:
            if 'TEST_VALIDATOR_URL' in os.environ:
                cls.url = os.environ['TEST_VALIDATOR_URL']
            else:
                vnm_config = defaultValidatorConfig.copy()
                if 'mktplace.transactions.market_place' not in \
                        vnm_config['TransactionFamilies']:
                    vnm_config['TransactionFamilies'].append(
                        'mktplace.transactions.market_place')
                vnm_config['InitialWaitTime'] = 1
                vnm_config['TargetWaitTime'] = 1
                vnm_config['LogLevel'] = 'DEBUG'
                cls.vnm = ValidatorNetworkManager(
                    httpPort=9500, udpPort=9600, cfg=vnm_config)
                cls.vnm.launch_network(1)
                # the url of the initial validator
                cls.url = cls.vnm.urls()[0] + '/'

            os.environ['CURRENCYHOME'] = os.path.join(
                os.path.dirname(__file__), "all_transactions")

            cls.script_path = os.path.join(os.path.dirname(__file__),
                                           'all_transactions')
            state = mktplace_state.MarketPlaceState(cls.url)
            state.fetch()
        except:
            if cls.vnm is not None:
                cls.vnm.shutdown()
            raise
コード例 #4
0
    def test_intkey_load_ext(self):
        vnm = None
        try:
            print "Launching validator network."
            vnm_config = defaultValidatorConfig.copy()
            vnm_config['LogLevel'] = 'DEBUG'

            vnm = ValidatorNetworkManager(http_port=9000, udp_port=9100,
                                          cfg=vnm_config)

            firstwavevalidators = vnm.launch_network(5)

            print "Testing transaction load."
            test = IntKeyLoadTest()
            test.setup(vnm.urls(), 10)
            test.run(1)
            vnm.expand_network(firstwavevalidators, 1)
            test.run(1)
            test.run_with_missing_dep(1)
            test.validate()
            vnm.shutdown()
        except Exception as e:
            print "Exception encountered in test case."
            traceback.print_exc()
            if vnm:
                vnm.shutdown()
            vnm.create_result_archive("TestIntegrationResults.tar.gz")
            print "Validator data and logs preserved in: " \
                  "TestIntegrationResults.tar.gz"
            raise e
コード例 #5
0
    def setUpClass(cls):
        cls.vnm = None
        try:
            if 'TEST_VALIDATOR_URLS' in os.environ:
                urls = (os.environ['TEST_VALIDATOR_URLS']).split(",")
                cls.url = urls[0]
            else:
                vnm_config = defaultValidatorConfig.copy()
                if 'mktplace.transactions.market_place' not in \
                        vnm_config['TransactionFamilies']:
                    vnm_config['TransactionFamilies'].append(
                        'mktplace.transactions.market_place')
                vnm_config['InitialWaitTime'] = 1
                vnm_config['TargetWaitTime'] = 1
                cls.vnm = ValidatorNetworkManager(http_port=9500,
                                                  udp_port=9600,
                                                  cfg=vnm_config)
                cls.vnm.launch_network(1)
                # the url of the initial validator
                cls.url = cls.vnm.urls()[0] + '/'

            os.environ['CURRENCYHOME'] = os.path.join(
                os.path.dirname(__file__), "all_transactions")

            cls.script_path = os.path.join(os.path.dirname(__file__),
                                           'all_transactions')
            state = mktplace_state.MarketPlaceState(cls.url)
            state.fetch()
        except:
            if cls.vnm is not None:
                cls.vnm.shutdown()
            raise
コード例 #6
0
    def test_intkey_load_quorum(self):
        vnm = None
        vote_cfg = defaultValidatorConfig.copy()
        vote_cfg['LedgerType'] = 'quorum'
        try:
            vnm = ValidatorNetworkManager(http_port=9000, udp_port=9100,
                                          cfg=vote_cfg)
            vnm.launch_network(5)

            print "Testing transaction load."
            test = IntKeyLoadTest()
            test.setup(vnm.urls(), 100)
            test.run(2)
            test.run_missing_dep_test(1)
            test.validate()
            vnm.shutdown()
        except Exception:
            print "Exception encountered in test case."
            traceback.print_exc()
            if vnm:
                vnm.shutdown()
            raise
        finally:
            if vnm:
                vnm.create_result_archive("TestIntegrationResultsVote.tar.gz")
コード例 #7
0
    def test_intkey_load_quorum(self):
        vnm = None
        vote_cfg = defaultValidatorConfig.copy()
        vote_cfg['LedgerType'] = 'quorum'
        try:
            vnm = ValidatorNetworkManager(http_port=9000,
                                          udp_port=9100,
                                          cfg=vote_cfg)
            vnm.launch_network(5)

            print "Testing transaction load."
            test = IntKeyLoadTest()
            test.setup(vnm.urls(), 100)
            test.run(2)
            test.run_missing_dep_test(1)
            test.validate()
            vnm.shutdown()
        except Exception:
            print "Exception encountered in test case."
            traceback.print_exc()
            if vnm:
                vnm.shutdown()
            raise
        finally:
            if vnm:
                vnm.create_result_archive("TestIntegrationResultsVote.tar.gz")
コード例 #8
0
    def test_intkey_load_ext(self):
        vnm = None
        try:
            print "Launching validator network."
            vnm_config = defaultValidatorConfig.copy()
            vnm_config['LogLevel'] = 'DEBUG'

            vnm = ValidatorNetworkManager(http_port=9000,
                                          udp_port=9100,
                                          cfg=vnm_config)

            firstwavevalidators = vnm.launch_network(5)

            print "Testing transaction load."
            test = IntKeyLoadTest()
            test.setup(vnm.urls(), 10)
            test.run(1)
            vnm.expand_network(firstwavevalidators, 1)
            test.run(1)
            test.run_missing_dep_test(1)
            test.validate()
            vnm.shutdown()
        except Exception as e:
            print "Exception encountered in test case."
            traceback.print_exc()
            if vnm:
                vnm.shutdown()
            vnm.create_result_archive("TestIntegrationResults.tar.gz")
            print "Validator data and logs preserved in: " \
                  "TestIntegrationResults.tar.gz"
            raise e
コード例 #9
0
    def test_local_validation_errors(self):
        cfg = defaultValidatorConfig.copy()
        cfg['LedgerType'] = 'dev_mode'
        cfg['BlockWaitTime'] = 0
        cfg['LocalValidation'] = True
        vnm = None
        try:
            print "Launching validator network."
            vnm = ValidatorNetworkManager(http_port=9300,
                                          udp_port=9350,
                                          cfg=cfg)
            vnm.launch_network(1)
            urls = vnm.urls()
            self._generate_invalid_transactions(urls[0])

            if vnm:
                vnm.shutdown()
        except Exception:
            print "Exception encountered in test case."
            traceback.print_exc()
            if vnm:
                vnm.shutdown()
            raise
        finally:
            if vnm:
                vnm.create_result_archive("%s.tar.gz" % self._testMethodName)
            else:
                print "No Validator data and logs to preserve"
コード例 #10
0
    def test_missing_dependencies(self):
        vnm = None
        try:
            print "Launching validator network."
            vnm_config = defaultValidatorConfig.copy()

            vnm = ValidatorNetworkManager(http_port=9000,
                                          udp_port=9100,
                                          cfg=vnm_config)

            firstwavevalidators = vnm.launch_network(5)

            print "Testing limit of missing dependencies."
            test = IntKeyLoadTest()
            test.setup(vnm.urls(), 10)
            test.run(1)
            test.run_with_limit_txn_dependencies(1)
            test.validate()
            vnm.shutdown()
        except Exception as e:
            print "Exception encountered in test case."
            traceback.print_exc()
            if vnm:
                vnm.shutdown()
            vnm.create_result_archive("TestIntegrationResults.tar.gz")
            print "Validator data and logs preserved in: " \
                  "TestIntegrationResults.tar.gz"
            raise e
コード例 #11
0
 def test_intkey_load_voting(self):
     cfg = defaultValidatorConfig.copy()
     cfg['LedgerType'] = 'voting'
     cfg['MaxTransactionsPerBlock'] = 64
     cfg['VoteTimeInterval'] = 2.0
     cfg['BallotTimeInterval'] = 1.0
     cfg['VotingQuorumTargetSize'] = 5
     self._run_int_load(cfg, 1, "TestSmokeResultsVoting", tolerance=0)
コード例 #12
0
    def setUpClass(cls):
        cls.vnm = None
        try:
            if 'TEST_VALIDATOR_URLS' in os.environ:
                urls = (os.environ['TEST_VALIDATOR_URLS']).split(",")
                cls.url = urls[0]
            else:
                vnm_config = defaultValidatorConfig.copy()
                if 'mktplace.transactions.market_place' not in \
                        vnm_config['TransactionFamilies']:
                    vnm_config['TransactionFamilies'].append(
                        'mktplace.transactions.market_place')
                cls.vnm = ValidatorNetworkManager(http_port=9500,
                                                  udp_port=9600,
                                                  cfg=vnm_config)
                cls.vnm.launch_network(5)
                # the url of the initial validator
                cls.url = cls.vnm.urls()[0] + '/'

            os.environ['CURRENCYHOME'] = os.path.join(
                os.path.dirname(__file__), "cp_scenarios")

            cls.scenarios_path = os.path.join(os.path.dirname(__file__),
                                              'cp_scenarios')
            client_cli.main(args=[
                "--name", "mkt", "--script",
                os.path.join(cls.scenarios_path, "scenario_setup_1_mkt"),
                "--echo", "--url", cls.url
            ])

            client_cli.main(args=[
                "--name", "BANK-trader", "--script",
                os.path.join(os.path.dirname(__file__), "cp_scenarios",
                             "scenario_setup_2_trader"), "--echo", "--url",
                cls.url
            ])

            client_cli.main(args=[
                "--name", "BANK-agent", "--script",
                os.path.join(cls.scenarios_path, "scenario_setup_3_agent"),
                "--echo", "--url", cls.url
            ])

            client_cli.main(args=[
                "--name", "BANK-dealer", "--script",
                os.path.join(cls.scenarios_path, "scenario_setup_4_dealer"),
                "--echo", "--url", cls.url
            ])

            state = mktplace_state.MarketPlaceState(cls.url)
            state.fetch()
        except:
            if cls.vnm is not None:
                cls.vnm.shutdown()
            raise
コード例 #13
0
 def test_intkey_load_quorum(self):
     n = 4   # size of network
     q = 4   # size of quorum
     network = StaticNetworkConfig(n, q=q, use_quorum=True)
     cfg = defaultValidatorConfig.copy()
     cfg['LedgerType'] = 'quorum'
     cfg['TopologyAlgorithm'] = "Quorum"
     cfg["MinimumConnectivity"] = q
     cfg["TargetConnectivity"] = q
     cfg['VotingQuorumTargetSize'] = q
     cfg['Nodes'] = network.get_nodes()
     cfg['VoteTimeInterval'] = 48.0
     cfg['BallotTimeInterval'] = 8.0
     self._run_int_load(cfg, n, "TestSmokeResultsQuorum",
                        tolerance=0, block_id=False,
                        static_network=network,
                        vnm_timeout=240, txn_timeout=240,
                        n_keys=100, n_runs=1)
コード例 #14
0
 def setUpClass(cls):
     cls.vnm = None
     try:
         if 'TEST_VALIDATOR_URL' in os.environ:
             cls.url = os.environ['TEST_VALIDATOR_URL']
         else:
             vnm_config = defaultValidatorConfig.copy()
             if 'sawtooth_xo' not in \
                     vnm_config['TransactionFamilies']:
                 vnm_config['TransactionFamilies'].append(
                     'sawtooth_xo')
             cls.vnm = ValidatorNetworkManager(
                 http_port=8800, udp_port=9600, cfg=vnm_config)
             cls.vnm.launch_network(5)
             # the url of the initial validator
             cls.url = cls.vnm.urls()[0] + '/'
     except:
         if cls.vnm is not None:
             cls.vnm.shutdown()
             cls.vnm = None
         raise
コード例 #15
0
 def setUpClass(cls):
     cls.vnm = None
     try:
         if 'TEST_VALIDATOR_URL' in os.environ:
             cls.url = os.environ['TEST_VALIDATOR_URL']
         else:
             vnm_config = defaultValidatorConfig.copy()
             if 'sawtooth_battleship' not in \
                     vnm_config['TransactionFamilies']:
                 vnm_config['TransactionFamilies'].append(
                     'sawtooth_battleship')
             cls.vnm = ValidatorNetworkManager(
                 httpPort=8800, udpPort=9600, cfg=vnm_config)
             cls.vnm.launch_network(5)
             # the url of the initial validator
             cls.url = cls.vnm.urls()[0] + '/'
     except:
         if cls.vnm is not None:
             cls.vnm.shutdown()
             cls.vnm = None
         raise Exception("Validators didn't start up correctly.")
コード例 #16
0
    def test_mktplace_load(self):
        vnm = None
        try:
            print "Launching validator network."
            vnm_config = defaultValidatorConfig.copy()
            if 'mktplace.transactions.market_place' not in \
                    vnm_config['TransactionFamilies']:
                vnm_config['TransactionFamilies'].append(
                    'mktplace.transactions.market_place')
            vnm_config['LogLevel'] = 'DEBUG'
            vnm = ValidatorNetworkManager(
                httpPort=9500, udpPort=9600, cfg=vnm_config)
            vnm.launch_network(5)

            print "Testing transaction load."
            test_case = MktPlaceLoad(num_traders=5,
                                     iterations=1,
                                     urls=vnm.urls(),
                                     test_dir=vnm.DataDir)
            test_case.setup()
            test_case.run()
            test_case.validate()

            if SAVE_INTEGRATION_TEST_DATA:
                vnm.create_result_archive("TestSmokeResults.tar.gz")
                print "Validator data and logs preserved in: " \
                    "TestSmokeResults.tar.gz"
            vnm.shutdown()
        except:
            print "Exception encountered in test case."
            traceback.print_exc()
            if vnm:
                vnm.shutdown()
                if vnm.create_result_archive("TestSmokeResults.tar.gz"):
                    print "Validator data and logs preserved in: " \
                          "TestSmokeResults.tar.gz"
                else:
                    print "No Validator data and logs to preserve."

            raise
コード例 #17
0
ファイル: test_smoke.py プロジェクト: trbs/sawtooth-mktplace
    def test_mktplace_load(self):
        vnm = None
        try:
            print "Launching validator network."
            vnm_config = defaultValidatorConfig.copy()
            if 'mktplace.transactions.market_place' not in \
                    vnm_config['TransactionFamilies']:
                vnm_config['TransactionFamilies'].append(
                    'mktplace.transactions.market_place')
            vnm = ValidatorNetworkManager(http_port=9500,
                                          udp_port=9600,
                                          cfg=vnm_config)
            vnm.launch_network(5)

            print "Testing transaction load."
            test_case = MktPlaceLoad(num_traders=5,
                                     iterations=1,
                                     urls=vnm.urls(),
                                     test_dir=vnm.data_dir)
            test_case.setup()
            test_case.run()
            test_case.validate()

            if SAVE_INTEGRATION_TEST_DATA:
                vnm.create_result_archive("TestSmokeResults.tar.gz")
                print "Validator data and logs preserved in: " \
                    "TestSmokeResults.tar.gz"
            vnm.shutdown()
        except:
            print "Exception encountered in test case."
            traceback.print_exc()
            if vnm:
                vnm.shutdown()
                if vnm.create_result_archive("TestSmokeResults.tar.gz"):
                    print "Validator data and logs preserved in: " \
                          "TestSmokeResults.tar.gz"
                else:
                    print "No Validator data and logs to preserve."

            raise
コード例 #18
0
 def test_intkey_load_quorum(self):
     n = 4  # size of network
     q = 4  # size of quorum
     network = StaticNetworkConfig(n, q=q, use_quorum=True)
     cfg = defaultValidatorConfig.copy()
     cfg['LedgerType'] = 'quorum'
     cfg['TopologyAlgorithm'] = "Quorum"
     cfg["MinimumConnectivity"] = q
     cfg["TargetConnectivity"] = q
     cfg['VotingQuorumTargetSize'] = q
     cfg['Nodes'] = network.get_nodes()
     cfg['VoteTimeInterval'] = 48.0
     cfg['BallotTimeInterval'] = 8.0
     self._run_int_load(cfg,
                        n,
                        "TestSmokeResultsQuorum",
                        tolerance=0,
                        block_id=False,
                        static_network=network,
                        vnm_timeout=240,
                        txn_timeout=240,
                        n_keys=100,
                        n_runs=1)
コード例 #19
0
    def test_intkey_load_voting(self):
        vnm = None
        vote_cfg = defaultValidatorConfig.copy()
        vote_cfg['LedgerType'] = 'voting'
        try:
            vnm = ValidatorNetworkManager(httpPort=9000, udpPort=9100,
                                          cfg=vote_cfg)
            vnm.launch_network(5)

            print "Testing transaction load."
            test = IntKeyLoadTest()
            test.setup(vnm.urls(), 100)
            test.run(2)
            test.validate()
            vnm.shutdown()
        except Exception as e:
            print "Exception encountered in test case."
            traceback.print_exc()
            if vnm:
                vnm.shutdown()
            vnm.create_result_archive("TestSmokeResultsVote.tar.gz")
            print "Validator data and logs preserved in: " \
                  "TestSmokeResultsVote.tar.gz"
            raise e
コード例 #20
0
ファイル: test_smoke.py プロジェクト: witwiki/sawtooth-core
 def test_intkey_load_dev_mode(self):
     cfg = defaultValidatorConfig.copy()
     cfg['LedgerType'] = 'dev_mode'
     self._run_int_load(cfg, 1, "TestSmokeResultsDevMode")
コード例 #21
0
ファイル: test_smoke.py プロジェクト: witwiki/sawtooth-core
 def test_intkey_load_poet0(self):
     cfg = defaultValidatorConfig.copy()
     cfg['LedgerType'] = 'poet0'
     self._run_int_load(cfg, 5, "TestSmokeResultsPoet")
コード例 #22
0
 def test_intkey_load_dev_mode(self):
     cfg = defaultValidatorConfig.copy()
     cfg['LedgerType'] = 'dev_mode'
     self._run_int_load(cfg, 1, "TestSmokeResultsDevMode")
コード例 #23
0
 def test_intkey_load_poet0(self):
     cfg = defaultValidatorConfig.copy()
     cfg['LedgerType'] = 'poet0'
     self._run_int_load(cfg, 5, "TestSmokeResultsPoet")
コード例 #24
0
 def setUp(self):
     self.number_of_daemons = int(os.environ.get("NUMBER_OF_DAEMONS", 5))
     self.vnm = ValidatorNetworkManager(cfg=defaultValidatorConfig.copy())
コード例 #25
0
 def test_intkey_load_lottery(self):
     cfg = defaultValidatorConfig.copy()
     self._run_int_load(cfg, 5, "TestSmokeResultsLottery")
コード例 #26
0
    def setUpClass(cls):
        cls.vnm = None
        try:
            if 'TEST_VALIDATOR_URL' in os.environ:
                cls.url = os.environ['TEST_VALIDATOR_URL']
            else:
                vnm_config = defaultValidatorConfig.copy()
                if 'mktplace.transactions.market_place' not in \
                        vnm_config['TransactionFamilies']:
                    vnm_config['TransactionFamilies'].append(
                        'mktplace.transactions.market_place')
                vnm_config['LogLevel'] = 'DEBUG'
                cls.vnm = ValidatorNetworkManager(
                    httpPort=9500, udpPort=9600, cfg=vnm_config)
                cls.vnm.launch_network(5)
                # the url of the initial validator
                cls.url = cls.vnm.urls()[0] + '/'

            os.environ['CURRENCYHOME'] = os.path.join(
                os.path.dirname(__file__), "cp_scenarios")

            cls.scenarios_path = os.path.join(os.path.dirname(__file__),
                                              'cp_scenarios')
            client_cli.main(args=["--name", "mkt",
                                  "--script",
                                  os.path.join(cls.scenarios_path,
                                               "scenario_setup_1_mkt"),
                                  "--echo",
                                  "--url",
                                  cls.url
                                  ])

            client_cli.main(
                args=["--name", "BANK-trader",
                      "--script",
                      os.path.join(os.path.dirname(__file__),
                                   "cp_scenarios",
                                   "scenario_setup_2_trader"),
                      "--echo",
                      "--url",
                      cls.url
                      ])

            client_cli.main(args=["--name", "BANK-agent",
                                  "--script",
                                  os.path.join(cls.scenarios_path,
                                               "scenario_setup_3_agent"),
                                  "--echo",
                                  "--url",
                                  cls.url
                                  ])

            client_cli.main(
                args=["--name", "BANK-dealer",
                      "--script",
                      os.path.join(cls.scenarios_path,
                                   "scenario_setup_4_dealer"),
                      "--echo",
                      "--url",
                      cls.url
                      ])

            state = mktplace_state.MarketPlaceState(cls.url)
            state.fetch()
        except:
            if cls.vnm is not None:
                cls.vnm.shutdown()
            raise
コード例 #27
0
 def test_intkey_load_lottery(self):
     cfg = defaultValidatorConfig.copy()
     cfg['LedgerType'] = 'lottery'
     self._run_int_load(cfg, 5, "TestSmokeResultsLottery")
コード例 #28
0
 def setUp(self):
     self.number_of_daemons = int(os.environ.get("NUMBER_OF_DAEMONS", 5))
     self.vnm = ValidatorNetworkManager(cfg=defaultValidatorConfig.copy())
コード例 #29
0
 def test_intkey_load_lottery(self):
     cfg = defaultValidatorConfig.copy()
     cfg['LedgerType'] = 'lottery'
     self._run_int_load(cfg, 5, "TestSmokeResultsLottery")
コード例 #30
0
    def test_validator_shutdown_ext(self):
        urls = []
        validators = []
        vnm = None
        try:
            print "Launching validator network."
            vnm_config = defaultValidatorConfig.copy()

            vnm = ValidatorNetworkManager(http_port=9000, udp_port=9100,
                                          cfg=vnm_config)

            firstwavevalidators = vnm.launch_network(5)

            urls = vnm.urls()
            for i in range(0, len(urls)):
                validators.append(vnm.validator(i))

            keys = 10
            rounds = 2
            txn_intv = 0

            print "Testing transaction load."
            test = IntKeyLoadTest()
            test.setup(urls, keys)
            test.validate()
            test.run(keys, rounds, txn_intv)

            validator_to_be_removed = 4
            print ("shutting down validator ", validator_to_be_removed)
            vnm.validator_shutdown(validator_to_be_removed,
                                   force=True,
                                   term=False,
                                   archive=None
                                   )

            print "sending more txns after SIGKILL"
            urls.pop(validator_to_be_removed)
            test.setup(urls, keys)
            test.validate()
            test.run(keys, rounds, txn_intv)

            validator_to_be_removed = 2
            print "now validator shutdown w/ SIGINT"
            print ("shutdown(SIGINT) of validator ", validator_to_be_removed)
            vnm.validator_shutdown(validator_to_be_removed,
                                   force=False,
                                   term=False,
                                   archive=None
                                   )

            print "sending more txns after SIGINT"
            urls = []
            urls = vnm.urls()
            test.setup(urls, keys)
            test.validate()
            test.run(keys, rounds, txn_intv)

            validator_to_be_removed = len(vnm.urls()) - 1
            print ("shutdown(SIGTERM) of validator ",
                   validator_to_be_removed)
            vnm.validator_shutdown(validator_to_be_removed,
                                   force=False,
                                   term=True,
                                   archive=None
                                   )

            print "sending more txns after SIGTERM"
            urls.pop(validator_to_be_removed)
            test.setup(urls, keys)
            test.validate()
            test.run(keys, rounds, txn_intv)

            vnm.shutdown()
        except Exception as e:
            print "Exception encountered in test case."
            traceback.print_exc()
            if vnm:
                vnm.shutdown()
            vnm.create_result_archive("TestValidatorShutdown.tar.gz")
            print "Validator data and logs preserved in: " \
                  "TestValidatorShutdown.tar.gz"
            raise e