Пример #1
0
 def testEmptySubmitChecking(self):
     test_db = ProvedDB(_TEST_CONFIG, 'json')
     key = 'You should not pass'
     existed, finalised, entries_length = test_db.get_finalise_entries_length(key)
     self.assertEqual(False, existed, 'hash doesnt exist')
     self.assertEqual(False, finalised, 'hash doesn finalise')
     self.assertEqual(0, entries_length, 'hash entry index should be zero')
Пример #2
0
    def testCheckEntryWithEntry(self):
        test_key = 'testCheckEntryWithEntry'
        test_db = ProvedDB(_TEST_CONFIG, 'json')
        test_db.create(self.TEST_DATA[test_key][0])

        now_key = list(self.TEST_DATA[test_key][0])[0]
        now_val = self.TEST_DATA[test_key][0][now_key]
        ret = test_db.check_entry(now_key, now_val)
        self.assertEqual(ret, True, 'checking should pass')
Пример #3
0
    def testMultipleSubmitChecking(self):
        test_db = ProvedDB(_TEST_CONFIG, 'json')
        for i in range(0, TEST_PAIR_PERIOD * TEST_PAIR_LENGTH, TEST_PAIR_PERIOD):
            for j in range(TEST_PAIR_PERIOD):
                val = str(i + j)
                test_db.create({val: val})

        for i in range(0, TEST_PAIR_PERIOD * TEST_PAIR_LENGTH, TEST_PAIR_PERIOD):
            check_hash_sum = calculate_submit_hash([[str(i), str(i)],
                                                    [str(i + 1), str(i + 1)]])
            existed, finalised, entries_length = test_db.get_finalise_entries_length(check_hash_sum)
            self.assertEqual(True, existed, 'hash does exist')
            self.assertEqual(False, finalised, 'hash doesn finalise')
            self.assertEqual(2, entries_length, 'hash entry index should not be zero')
            test_db.finalise(check_hash_sum)

            existed, finalised, entries_length = test_db.get_finalise_entries_length(check_hash_sum)
            self.assertEqual(True, existed, 'hash does exist')
            self.assertEqual(True, finalised, 'hash doesn finalise')
            self.assertEqual(2, entries_length, 'hash entry index should not be zero')

            for j in range(entries_length):
                entry_hash = test_db.get_finalise_entry(check_hash_sum, j)
                self.assertEqual(calculate_entry_hash([str(i + j), str(i + j)]),
                                 entry_hash,
                                 'hash should be the same')
Пример #4
0
    def testMultipleFinaliseGroup(self):
        test_db = ProvedDB(_TEST_CONFIG, 'json')
        for i in range(0, TEST_PAIR_PERIOD * TEST_PAIR_LENGTH, TEST_PAIR_PERIOD):
            for j in range(TEST_PAIR_PERIOD):
                val = str(i + j)
                test_db.create({val: val})

            for j in range(TEST_PAIR_PERIOD):
                check_group_hash = calculate_entry_hash([str(i + j), str(i + j)])
                existed, entries_length = test_db.get_finalised_group_entries_length(check_group_hash)
                self.assertEqual(False, existed, 'hash does exist')
                self.assertEqual(0, entries_length, 'hash entry index should be zero')

            check_hash_sum = calculate_submit_hash([[str(i + j), str(i + j)] for j in range(TEST_PAIR_PERIOD)])
            test_db.finalise(check_hash_sum)

        for i in range(0, TEST_PAIR_PERIOD * TEST_PAIR_LENGTH, TEST_PAIR_PERIOD):
            for j in range(TEST_PAIR_PERIOD):
                check_group_hash = calculate_entry_hash([str(i + j), str(i + j)])
                existed, entries_length = test_db.get_finalised_group_entries_length(check_group_hash)
                self.assertEqual(True, existed, 'hash does exist')
                self.assertEqual(TEST_PAIR_PERIOD, entries_length, 'hash entry index should not be zero')
                for k in range(TEST_PAIR_PERIOD):
                    entry_hash = test_db.get_finalised_group_entry(check_group_hash, k)
                    self.assertEqual(calculate_entry_hash([str(i + k), str(i + k)]),
                                     entry_hash,
                                     'hash should be the same')
 def __init__(self,
              config_path=my_config.CONFIG_PATH,
              submit_hash_callback_objs=[],
              record_over_callback_objs=[],
              wait_time=3):
     self._record_hash_mgr = RecordHash(config_path)
     self._proved_db_mgr = ProvedDB(config_path, 'json')
     submit_hash_callback_objs = [self] + submit_hash_callback_objs
     record_over_callback_objs = [self] + record_over_callback_objs
     super(SubmitAndRecordChainNode,
           self).__init__(config_path, submit_hash_callback_objs,
                          record_over_callback_objs, wait_time)
Пример #6
0
    def testDeleteNoEntry(self):
        test_db = ProvedDB(_TEST_CONFIG, 'json')
        data = self.TEST_DATA['testDeleteNoEntry']
        key = list(data)[0]
        test_db.delete(key)

        data = test_db.retrieve(key)
        self.assertEqual(data, '', 'data is deleted!')

        onchain_handler = ProvedDBOnChainHandler(_TEST_CONFIG)
        exist, retrieve_hash = onchain_handler.retrieve(key)
        self.assertEqual(exist, False, 'key is not on chain')
        self.assertEqual(retrieve_hash, ZERO_VALUE,
                         'data on chain is inconsistent {0} != {1}'.format(retrieve_hash, ZERO_VALUE))
Пример #7
0
    def testCreateEntry(self):
        test_db = ProvedDB(_TEST_CONFIG, 'json')
        data = self.TEST_DATA['testCreateEntry']
        test_db.create(data)
        # Don't use select check here, so assume create is success here
        # Call solidity select for find hash is already on smart contract

        onchain_handler = ProvedDBOnChainHandler(_TEST_CONFIG)
        key = list(data)[0]
        val = onchain_handler.hash_entry([key, data[key]])
        exist, data = onchain_handler.retrieve(key)
        self.assertEqual(exist, True, 'key is not on chain')
        self.assertEqual(data, val,
                         'data on chain is inconsistent {0} != {1}'.format(data, val))
Пример #8
0
    def testSingleEvent(self):
        private_node = SubmitAndRecordChainNode(config_path=_TEST_CONFIG,
                                                submit_hash_callback_objs=[],
                                                record_over_callback_objs=[],
                                                wait_time=1)
        private_node.start()
        test_db = ProvedDB(_TEST_CONFIG, 'json')
        test_data = [{'testaaa': 'hash1'}, {'testbbb': 'hash2'}]
        test_key = 'May the force be with you'
        test_db.create({test_key: test_data[0]})
        test_db.update({test_key: test_data[1]})

        gevent.sleep(1)
        check_hash_sum = calculate_submit_hash([[test_key, _]
                                                for _ in test_data])

        existed, finalised, entries_length = test_db.get_finalise_entries_length(
            check_hash_sum)
        self.assertEqual(True, existed, 'hash does exist')
        self.assertEqual(True, finalised, 'hash doesn finalise')
        self.assertEqual(2, entries_length,
                         'hash entry index should not be zero')

        for i in range(entries_length):
            entry_hash = test_db.get_finalise_entry(check_hash_sum, i)
            self.assertEqual(calculate_entry_hash([test_key, test_data[i]]),
                             entry_hash, 'hash should be the same')
        private_node.kill()
Пример #9
0
    def testRetrieveEntry(self):
        test_db = ProvedDB(_TEST_CONFIG, 'json')
        data = self.TEST_DATA['testRetrieveEntry']
        test_db.create(data)

        retrieve_data = test_db.retrieve(list(data)[0])
        check_data = data[list(data)[0]]
        self.assertEqual(retrieve_data, check_data,
                         'retrive should be the same data, {0} != {1}'.format(retrieve_data, check_data))

        onchain_handler = ProvedDBOnChainHandler(_TEST_CONFIG)
        key = list(data)[0]
        onchain_hash = onchain_handler.hash_entry([key, data[key]])
        exist, retrieve_hash = onchain_handler.retrieve(key)
        self.assertEqual(exist, True, 'key is not on chain')
        self.assertEqual(retrieve_hash, onchain_hash,
                         'data on chain is inconsistent {0} != {1}'.format(retrieve_hash, onchain_hash))
Пример #10
0
    def testCheckAllEntriesEntry(self):
        deploy.deploy(_TEST_CONFIG)
        test_key = 'testCheckAllEntriesEntry'
        test_db = ProvedDB(_TEST_CONFIG, 'json')
        for test_case in self.TEST_DATA[test_key]:
            test_db.create(test_case)
        self.assertEqual(test_db.check_all_entries(), True, 'There should pass the checking')

        test_db.delete(list(self.TEST_DATA[test_key][1])[0])
        self.assertEqual(test_db.check_all_entries(), True, 'There should pass the checking')
class SubmitAndRecordChainNode(BaseChainNode):
    def __init__(self,
                 config_path=my_config.CONFIG_PATH,
                 submit_hash_callback_objs=[],
                 record_over_callback_objs=[],
                 wait_time=3):
        self._record_hash_mgr = RecordHash(config_path)
        self._proved_db_mgr = ProvedDB(config_path, 'json')
        submit_hash_callback_objs = [self] + submit_hash_callback_objs
        record_over_callback_objs = [self] + record_over_callback_objs
        super(SubmitAndRecordChainNode,
              self).__init__(config_path, submit_hash_callback_objs,
                             record_over_callback_objs, wait_time)

    def submitHashEventCallback(self, node, event):
        event_finalise_hash = event['args']['finalise_hash']
        self._record_hash_mgr.record(event_finalise_hash)

    def recordOverEventCallback(self, node, event):
        event_finalise_hash = event['args']['finalise_hash']
        self._proved_db_mgr.finalise(event_finalise_hash)
Пример #12
0
    def testMultipleEvent(self):
        self._submit_multiple_hash_data = []
        test_db = ProvedDB(_TEST_CONFIG, 'json')
        private_node = BaseChainNode(config_path=_TEST_CONFIG,
                                     submit_hash_callback_objs=[self],
                                     record_over_callback_objs=[],
                                     wait_time=1)
        private_node.start()
        for i in range(0, TEST_PAIR_PERIOD * TEST_PAIR_LENGTH,
                       TEST_PAIR_PERIOD):
            for j in range(TEST_PAIR_PERIOD):
                val = str(i + j)
                test_db.create({val: val})

        private_node.join(10)
        for i in range(0, TEST_PAIR_PERIOD * TEST_PAIR_LENGTH,
                       TEST_PAIR_PERIOD):
            check_hash_sum = calculate_submit_hash([[str(i), str(i)],
                                                    [str(i + 1),
                                                     str(i + 1)]])
            self.assertEqual(
                self._submit_multiple_hash_data[int(i / TEST_PAIR_PERIOD)],
                check_hash_sum, 'should be the same')
Пример #13
0
    def testDeleteEntry(self):
        test_db = ProvedDB(_TEST_CONFIG, 'json')
        data = self.TEST_DATA['testDeleteEntry']
        test_db.create(data)

        key = list(data)[0]
        test_db.delete(key)

        data = test_db.retrieve(key)
        self.assertEqual(data, '', 'data is deleted!')

        onchain_handler = ProvedDBOnChainHandler(_TEST_CONFIG)
        val = onchain_handler.hash_entry([key, data])
        exist, data = onchain_handler.retrieve(key)
        self.assertEqual(exist, False, 'key is on chain')
        self.assertEqual(data, ZERO_VALUE, 'data on chain is inconsistent {0} != {1}'.format(data, val))
Пример #14
0
    def testSingleEvent(self):
        private_node = BaseChainNode(config_path=_TEST_CONFIG,
                                     submit_hash_callback_objs=[self],
                                     record_over_callback_objs=[],
                                     wait_time=1)
        private_node.start()
        test_db = ProvedDB(_TEST_CONFIG, 'json')
        test_data = [{'testaaa': 'hash1'}, {'testbbb': 'hash2'}]
        test_key = 'May the force be with you'
        test_db.create({test_key: test_data[0]})
        test_db.update({test_key: test_data[1]})

        private_node.join()
        check_hash_sum = calculate_submit_hash([[test_key, _]
                                                for _ in test_data])
        self.assertEqual(self._submit_single_hash_data, check_hash_sum,
                         'should be the same')
Пример #15
0
 def testCheckEntryNoEntry(self):
     test_db = ProvedDB(_TEST_CONFIG, 'json')
     check_data = test_db.check_entry('I should not pass', 'I should not pass')
     self.assertEqual(check_data, False, 'checking should not pass')
Пример #16
0
    def testBehaior(self):
        private_node = SubmitAndRecordChainNode(config_path=_TEST_CONFIG,
                                                submit_hash_callback_objs=[],
                                                record_over_callback_objs=[],
                                                wait_time=1)
        private_node.start()
        test_db = ProvedDB(_TEST_CONFIG, 'json')
        # setting key val
        test_db.create({'my_key1': 'key1_data_01'})
        test_db.create({'my_key2': 'key1_data_01'})

        test_db.create({'my_key3': 'key1_data_01'})
        test_db.create({'my_key4': 'key1_data_01'})

        test_db.create({'my_key5': 'key1_data_01'})
        # check all entry
        test_db.check_all_entries()
        val = test_db.retrieve('my_key2')
        self.assertEqual(True, test_db.check_entry('my_key2', val),
                         'should pass')

        gevent.sleep(1)
        # check finalised data
        check_hash = calculate_entry_hash(['my_key3', 'key1_data_01'])
        existed, entries_length = test_db.get_finalised_group_entries_length(
            check_hash)
        self.assertEqual(True, existed, 'should be pass')
        all_check_hash = [
            test_db.get_finalised_group_entry(check_hash, i)
            for i in range(entries_length)
        ]
        self.assertEqual(True, check_hash in all_check_hash, 'should pass')

        check_hash_sum = calculate_submit_hash_from_group(all_check_hash)
        existed, finalised, entries_length = test_db.get_finalise_entries_length(
            check_hash_sum)
        self.assertEqual(True, existed, 'hash does exist')
        self.assertEqual(True, finalised, 'hash doesn finalise')
        self.assertEqual(2, entries_length,
                         'hash entry index should not be zero')

        double_check_hashes = [
            test_db.get_finalise_entry(check_hash_sum, i)
            for i in range(entries_length)
        ]
        self.assertEqual(double_check_hashes, all_check_hash, 'should pass')

        check_hash = calculate_entry_hash(['my_key5', 'key1_data_01'])
        existed, entries_length = test_db.get_finalised_group_entries_length(
            check_hash)
        self.assertEqual(False, existed, 'should be pass')

        # Test again
        test_db.update({'my_key5': 'key1_data_02'})
        gevent.sleep(1)

        check_hash = calculate_entry_hash(['my_key5', 'key1_data_01'])
        existed, entries_length = test_db.get_finalised_group_entries_length(
            check_hash)
        self.assertEqual(True, existed, 'should be pass')

        all_check_hash = [
            test_db.get_finalised_group_entry(check_hash, i)
            for i in range(entries_length)
        ]
        self.assertEqual(True, check_hash in all_check_hash, 'should pass')

        check_hash_sum = calculate_submit_hash_from_group(all_check_hash)
        existed, finalised, entries_length = test_db.get_finalise_entries_length(
            check_hash_sum)
        self.assertEqual(True, existed, 'hash does exist')
        self.assertEqual(True, finalised, 'hash doesn finalise')
        self.assertEqual(2, entries_length,
                         'hash entry index should not be zero')

        double_check_hashes = [
            test_db.get_finalise_entry(check_hash_sum, i)
            for i in range(entries_length)
        ]
        self.assertEqual(double_check_hashes, all_check_hash, 'should pass')

        #        # setting key val again
        test_db.delete('my_key2')
        test_db.create({'my_key6': 'key1_data_01'})
        # Test again
        test_db.update({'my_key6': 'key1_data_02'})

        gevent.sleep(1)
        check_hash = calculate_entry_hash(['my_key6', 'key1_data_01'])
        existed, entries_length = test_db.get_finalised_group_entries_length(
            check_hash)
        self.assertEqual(True, existed, 'should be pass')

        all_check_hash = [
            test_db.get_finalised_group_entry(check_hash, i)
            for i in range(entries_length)
        ]
        self.assertEqual(True, check_hash in all_check_hash, 'should pass')

        check_hash_sum = calculate_submit_hash_from_group(all_check_hash)
        existed, finalised, entries_length = test_db.get_finalise_entries_length(
            check_hash_sum)
        self.assertEqual(True, existed, 'hash does exist')
        self.assertEqual(True, finalised, 'hash doesn finalise')
        self.assertEqual(2, entries_length,
                         'hash entry index should not be zero')

        double_check_hashes = [
            test_db.get_finalise_entry(check_hash_sum, i)
            for i in range(entries_length)
        ]
        self.assertEqual(double_check_hashes, all_check_hash, 'should pass')

        private_node.kill()
Пример #17
0
 def testCreateNoIdEntry(self):
     test_db = ProvedDB(_TEST_CONFIG, 'json')
     data = self.TEST_DATA['testCreateNoIdEntry']
     self.assertRaisesRegex(IOError, 'input key should not more than one', test_db.create, data)
Пример #18
0
    def testSingleFinaliseGroup(self):
        test_db = ProvedDB(_TEST_CONFIG, 'json')
        test_key = 'show me the money'
        test_data = [{
            'testaaa': 'hash1'
        }, {
            'testbbb': 'hash2'
        }]
        test_db.create({test_key: test_data[0]})
        test_db.update({test_key: test_data[1]})

        for check_val in test_data:
            check_group_hash = calculate_entry_hash([test_key, check_val])
            existed, entries_length = test_db.get_finalised_group_entries_length(check_group_hash)
            self.assertEqual(False, existed, 'hash does exist')
            self.assertEqual(0, entries_length, 'hash entry index should be zero')

        check_hash_sum = calculate_submit_hash([[test_key, _] for _ in test_data])
        test_db.finalise(check_hash_sum)

        for check_val in test_data:
            check_group_hash = calculate_entry_hash([test_key, check_val])
            existed, entries_length = test_db.get_finalised_group_entries_length(check_group_hash)
            self.assertEqual(True, existed, 'hash does exist')
            self.assertEqual(len(test_data), entries_length, 'hash entry index should not be zero')
            for i in range(entries_length):
                entry_hash = test_db.get_finalised_group_entry(check_group_hash, i)
                self.assertEqual(calculate_entry_hash([test_key, test_data[i]]),
                                 entry_hash,
                                 'hash should be the same')
Пример #19
0
    def testCreateDuplicateID(self):
        test_db = ProvedDB(_TEST_CONFIG, 'json')
        data = self.TEST_DATA['testCreateDuplicateID']

        test_db.create(data)
        self.assertRaisesRegex(IOError, 'unique key already exist', test_db.create, data)
Пример #20
0
 def testUpdateNoEntry(self):
     test_db = ProvedDB(_TEST_CONFIG, 'json')
     self.assertRaisesRegex(IOError, 'unique key does not exist',
                            test_db.update, {'you should not pass': {'a': 'b'}})
Пример #21
0
 def testCheckAllEntriesNoEntry(self):
     deploy.deploy(_TEST_CONFIG)
     test_db = ProvedDB(_TEST_CONFIG, 'json')
     self.assertEqual(test_db.check_all_entries(), True, 'There should no data to check')