Exemplo n.º 1
0
 def setUp(self):
     time.sleep(20)
     print('Start new test')
     warnings.simplefilter("ignore", ResourceWarning)
     self.client = MtmClient([
         "dbname=regression user=postgres host=127.0.0.1 port=15432",
         "dbname=regression user=postgres host=127.0.0.1 port=15433",
         "dbname=regression user=postgres host=127.0.0.1 port=15434"
     ],
                             n_accounts=1000)
     self.client.bgrun()
Exemplo n.º 2
0
    def setUpClass(self):
        subprocess.check_call(['docker-compose','up',
            '--force-recreate',
            '-d'])

        # XXX: add normal wait here
        time.sleep(20)
        print('started')
        self.client = MtmClient([
            "dbname=regression user=postgres host=127.0.0.1 port=15432",
            "dbname=regression user=postgres host=127.0.0.1 port=15433",
            "dbname=regression user=postgres host=127.0.0.1 port=15434"
        ], n_accounts=1000)
        self.client.bgrun()
Exemplo n.º 3
0
    def setUpClass(cls):
        host_ip = socket.gethostbyname(NODE_HOST)

        cls.dsns = [
            f"dbname=regression user=postgres host={host_ip} port=15432",
            f"dbname=regression user=postgres host={host_ip} port=15433",
        ]
        cls.referee_dsn = f"dbname=regression user=postgres host={host_ip} port=15435"
        cls.test_ok = True

        subprocess.check_call([
            'docker-compose', '-f', 'support/two_nodes.yml', 'up',
            '--force-recreate', '--build', '-d'
        ])

        # Wait for all nodes to become online
        try:
            [cls.awaitOnline(dsn) for dsn in cls.dsns]

            cls.client = MtmClient(cls.dsns, n_accounts=1000)
            cls.client.bgrun()
            # create extension on referee
            cls.nodeExecute(cls.referee_dsn, ['create extension referee'])
        except Exception as e:
            # collect logs even if fail in setupClass
            cls.collectLogs(referee=True)
            raise e
Exemplo n.º 4
0
    def setUpClass(cls):
        subprocess.check_call(
            ['docker-compose', 'up', '--force-recreate', '--build', '-d'])

        # XXX: add normal wait here
        time.sleep(TEST_SETUP_TIME)

        cls.client = MtmClient([
            "dbname=regression user=postgres host=127.0.0.1 port=15432",
            "dbname=regression user=postgres host=127.0.0.1 port=15433",
            "dbname=regression user=postgres host=127.0.0.1 port=15434"
        ],
                               n_accounts=1000)
        cls.client.bgrun()
Exemplo n.º 5
0
    def setUpClass(cls):
        cls.dsns = [
            "dbname=regression user=postgres host=127.0.0.1 port=15432",
            "dbname=regression user=postgres host=127.0.0.1 port=15433",
            "dbname=regression user=postgres host=127.0.0.1 port=15434"
        ]

        print('setUp')
        subprocess.check_call(
            ['docker-compose', 'up', '--force-recreate', '--build', '-d'])

        # Wait for all nodes to become online
        [cls.awaitOnline(dsn) for dsn in cls.dsns]

        cls.client = MtmClient(cls.dsns, n_accounts=1000)
Exemplo n.º 6
0
    def setUpClass(cls):
        subprocess.check_call([
            'docker-compose', '-f', 'support/two_nodes.yml', 'up',
            '--force-recreate', '--build', '-d'
        ])

        cls.client = MtmClient([
            "dbname=regression user=postgres host=127.0.0.1 port=15432",
            "dbname=regression user=postgres host=127.0.0.1 port=15433"
        ],
                               n_accounts=1000)
        cls.client.bgrun()

        # create extension on referee
        cls.nodeExecute(
            "dbname=regression user=postgres host=127.0.0.1 port=15435",
            ['create extension referee'])
Exemplo n.º 7
0
    def setUpClass(cls):
        subprocess.check_call([
            'docker-compose', '-f', 'support/two_nodes.yml', 'up',
            '--force-recreate', '--build', '-d'
        ])

        # XXX: add normal wait here
        time.sleep(TEST_SETUP_TIME)

        cls.client = MtmClient([
            "dbname=regression user=postgres host=127.0.0.1 port=15432",
            "dbname=regression user=postgres host=127.0.0.1 port=15433"
        ],
                               n_accounts=1000)
        cls.client.bgrun()

        # create extension on referee
        cls.nodeExecute(
            "dbname=regression user=postgres host=127.0.0.1 port=15435",
            ['create extension multimaster'])
Exemplo n.º 8
0
class RecoveryTest(unittest.TestCase, TestHelper):

    @classmethod
    def setUpClass(self):
        subprocess.check_call(['docker-compose','up',
            '--force-recreate',
            '-d'])

        # XXX: add normal wait here
        time.sleep(20)
        print('started')
        self.client = MtmClient([
            "dbname=regression user=postgres host=127.0.0.1 port=15432",
            "dbname=regression user=postgres host=127.0.0.1 port=15433",
            "dbname=regression user=postgres host=127.0.0.1 port=15434"
        ], n_accounts=1000)
        self.client.bgrun()

    @classmethod
    def tearDownClass(self):
        print('tearDown')
        self.client.stop()
        # XXX: check nodes data identity here
        subprocess.check_call(['docker-compose','down'])

    def setUp(self):
        warnings.simplefilter("ignore", ResourceWarning)

    def test_normal_operations(self):
        print('### test_normal_operations ###')

        aggs_failure, aggs = self.performFailure(NoFailure())

        self.assertCommits(aggs_failure)
        self.assertIsolation(aggs_failure)

        self.assertCommits(aggs)
        self.assertIsolation(aggs)


    def test_node_partition(self):
        print('### test_node_partition ###')

        aggs_failure, aggs = self.performFailure(SingleNodePartition('node3'))

        self.assertCommits(aggs_failure[:2])
        self.assertNoCommits(aggs_failure[2:])
        self.assertIsolation(aggs_failure)

        self.assertCommits(aggs)
        self.assertIsolation(aggs)


    def test_edge_partition(self):
        print('### test_edge_partition ###')

        aggs_failure, aggs = self.performFailure(EdgePartition('node2', 'node3'))

        self.assertTrue( ('commit' in aggs_failure[1]['transfer']['finish']) or ('commit' in aggs_failure[2]['transfer']['finish']) )
        self.assertCommits(aggs_failure[0:1]) # first node
        self.assertIsolation(aggs_failure)

        self.assertCommits(aggs)
        self.assertIsolation(aggs)

    def test_node_restart(self):
        print('### test_node_restart ###')

        time.sleep(3)

        aggs_failure, aggs = self.performFailure(RestartNode('node3'))

        self.assertCommits(aggs_failure[:2])
        self.assertNoCommits(aggs_failure[2:])
        self.assertIsolation(aggs_failure)

        self.assertCommits(aggs)
        self.assertIsolation(aggs)

    def test_node_crash(self):
        print('### test_node_crash ###')

        aggs_failure, aggs = self.performFailure(CrashRecoverNode('node3'))

        self.assertCommits(aggs_failure[:2])
        self.assertNoCommits(aggs_failure[2:])
        self.assertIsolation(aggs_failure)

        self.assertCommits(aggs)
        self.assertIsolation(aggs)
Exemplo n.º 9
0
class RecoveryTest(unittest.TestCase, TestHelper):
    def setUp(self):
        time.sleep(20)
        print('Start new test')
        warnings.simplefilter("ignore", ResourceWarning)
        self.client = MtmClient([
            "dbname=regression user=postgres host=127.0.0.1 port=15432",
            "dbname=regression user=postgres host=127.0.0.1 port=15433",
            "dbname=regression user=postgres host=127.0.0.1 port=15434"
        ],
                                n_accounts=1000)
        self.client.bgrun()

    def tearDown(self):
        print('tearDown')
        self.client.stop()

    def test_normal_operations(self):
        print('### test_normal_operations ###')

        aggs_failure, aggs = self.performFailure(NoFailure())

        self.assertCommits(aggs_failure)
        self.assertIsolation(aggs_failure)

        self.assertCommits(aggs)
        self.assertIsolation(aggs)

    def test_node_partition(self):
        print('### test_node_partition ###')

        aggs_failure, aggs = self.performFailure(SingleNodePartition('node3'))

        self.assertCommits(aggs_failure[:2])
        self.assertNoCommits(aggs_failure[2:])
        self.assertIsolation(aggs_failure)

        self.assertCommits(aggs)
        self.assertIsolation(aggs)

    def test_edge_partition(self):
        print('### test_edge_partition ###')

        aggs_failure, aggs = self.performFailure(
            EdgePartition('node2', 'node3'))

        self.assertTrue(('commit' in aggs_failure[1]['transfer']['finish'])
                        or ('commit' in aggs_failure[2]['transfer']['finish']))
        self.assertCommits(aggs_failure[0:1])  # first node
        self.assertIsolation(aggs_failure)

        self.assertCommits(aggs)
        self.assertIsolation(aggs)

    def test_node_restart(self):
        print('### test_node_restart ###')

        time.sleep(5)

        aggs_failure, aggs = self.performFailure(RestartNode('node3'))

        self.assertCommits(aggs_failure[:2])
        self.assertNoCommits(aggs_failure[2:])
        self.assertIsolation(aggs_failure)

        self.assertCommits(aggs)
        self.assertIsolation(aggs)

    def test_node_crash(self):
        print('### test_node_crash ###')

        time.sleep(5)

        aggs_failure, aggs = self.performFailure(CrashRecoverNode('node3'))

        self.assertCommits(aggs_failure[:2])
        self.assertNoCommits(aggs_failure[2:])
        self.assertIsolation(aggs_failure)

        self.assertCommits(aggs)
        self.assertIsolation(aggs)