Exemple #1
0
    def test_builder_audit(self):
        # generate shards for testing
        bucket = Builder(addresses["epsilon"], my_shard_size, my_max_size)
        bucket.build(self.store_path)

        # audit
        audit_results = bucket.audit(b"storj", self.store_path, height)
        result0 = fixtures["test_builder_audit"]["result0"]
        result1 = fixtures["test_builder_audit"]["result1"]
        self.assertEqual(audit_results[0], _to_bytes(result0))
        self.assertEqual(audit_results[1], _to_bytes(result1))

        # audit full
        expected = fixtures["test_builder_audit"]["expected"]
        audit_results = bucket.full_audit(b"storj", self.store_path, height)
        self.assertEqual(audit_results, expected)
    def test_builder_audit(self):
        # generate shards for testing
        bucket = Builder(addresses["epsilon"], my_shard_size, my_max_size, debug=True)
        bucket.build(self.store_path)

        # audit
        audit_results = bucket.audit(b"storj", self.store_path, height)
        result0 = fixtures["test_builder_audit"]["result0"]
        result1 = fixtures["test_builder_audit"]["result1"]
        self.assertEqual(audit_results[0], _to_bytes(result0))
        self.assertEqual(audit_results[1], _to_bytes(result1))

        # audit full
        expected = fixtures["test_builder_audit"]["expected"]
        audit_results = bucket.full_audit(b"storj", self.store_path,
                                          height)
        self.assertEqual(audit_results, expected)
    def test_builder_audit(self):
        bucket = Builder(addresses["epsilon"], my_shard_size, 0,
                         my_min_free_size)

        # check last confirmed bitcoin hash
        btc_block = bucket.btc_last_confirmed_block()

        self.assertTrue(
            btc_block['confirmations'] >= common.DEFAULT_MIN_CONFIRMATIONS)
        self.assertTrue(btc_block['is_orphan'] == False)

        index = btc_block['block_no']

        block_pos = index % common.DEFAULT_FULL_AUDIT
        block_size = common.DEFAULT_BLOCK_SIZE

        # create empty files to skip to btc_index
        seeds = bucket.build_seeds(block_pos * block_size)
        for seed in seeds:
            path = os.path.join(self.store_path, seed)
            open(path, 'w').close()

        # generate shards for audit
        shard_size = my_shard_size * (block_pos + 1) * block_size
        bucket = Builder(addresses["epsilon"], my_shard_size, shard_size,
                         my_min_free_size)
        bucket.build(self.store_path)

        # audit possible
        good_hash = bucket.audit(self.store_path, btc_block['block_no'],
                                 btc_block['blockhash'])
        self.assertTrue(good_hash)

        seeds = bucket.build_seeds((block_pos + 1) * block_size)

        # copy a bad file for a bad audit
        path1 = os.path.join(self.store_path, seeds[-2])
        path2 = os.path.join(self.store_path, seeds[-1])
        shutil.copyfile(path1, path2)
        bad_hash = bucket.audit(self.store_path, btc_block['block_no'],
                                btc_block['blockhash'])

        self.assertFalse(good_hash == bad_hash)

        # write some bad data
        with open(path2, "a") as f:
            f.write("bad data is bad\n")

        # audit failed because last shard has bad data
        self.assertFalse(
            bucket.audit(self.store_path, btc_block['block_no'],
                         btc_block['blockhash']))

        # remove last shard
        os.remove(path2)

        # audit failed because last shard missing
        self.assertFalse(
            bucket.audit(self.store_path, btc_block['block_no'],
                         btc_block['blockhash']))

        # build last shard again
        bucket = Builder(addresses["epsilon"], my_shard_size, shard_size,
                         my_min_free_size)
        bucket.build(self.store_path)

        # audit possible
        good_hash = bucket.audit(self.store_path, btc_block['block_no'],
                                 btc_block['blockhash'])
        self.assertTrue(good_hash)

        # remove first shard of that block
        path1 = os.path.join(self.store_path, seeds[-80])
        os.remove(path1)

        # audit failed because first shard missing
        self.assertFalse(
            bucket.audit(self.store_path, btc_block['block_no'],
                         btc_block['blockhash']))
    def test_builder_audit(self):
        bucket = Builder(addresses["epsilon"], my_shard_size, 0,
                         my_min_free_size)

        # check last confirmed bitcoin hash
        btc_block = bucket.btc_last_confirmed_block()

        self.assertTrue(btc_block['confirmations']>=
                        common.DEFAULT_MIN_CONFIRMATIONS)
        self.assertTrue(btc_block['is_orphan']==False)

        index = btc_block['block_no']

        block_pos = index % common.DEFAULT_FULL_AUDIT
        block_size = common.DEFAULT_BLOCK_SIZE
        
        # create empty files to skip to btc_index
        seeds = bucket.build_seeds(block_pos * block_size)
        for seed in seeds:
            path = os.path.join(self.store_path, seed)
            open(path,'w').close()

        # generate shards for audit
        shard_size = my_shard_size * (block_pos + 1) * block_size
        bucket = Builder(addresses["epsilon"], my_shard_size, shard_size,
                         my_min_free_size)
        bucket.build(self.store_path)

        # audit possible
        good_hash = bucket.audit(self.store_path, 
                                 btc_block['block_no'], 
                                 btc_block['blockhash'])
        self.assertTrue(good_hash)

        seeds = bucket.build_seeds((block_pos + 1) * block_size)

        # copy a bad file for a bad audit
        path1 = os.path.join(self.store_path, seeds[-2])
        path2 = os.path.join(self.store_path, seeds[-1])
        shutil.copyfile(path1, path2)
        bad_hash = bucket.audit(self.store_path,
                                btc_block['block_no'],
                                btc_block['blockhash'])

        self.assertFalse(good_hash==bad_hash)

        # write some bad data
        with open(path2, "a") as f:
            f.write("bad data is bad\n")

        # audit failed because last shard has bad data
        self.assertFalse(bucket.audit(self.store_path,
                                      btc_block['block_no'],
                                      btc_block['blockhash']))

        # remove last shard
        os.remove(path2)

        # audit failed because last shard missing
        self.assertFalse(bucket.audit(self.store_path,
                                      btc_block['block_no'],
                                      btc_block['blockhash']))

        # build last shard again
        bucket = Builder(addresses["epsilon"], my_shard_size, shard_size,
                         my_min_free_size)
        bucket.build(self.store_path)

        # audit possible
        good_hash = bucket.audit(self.store_path,
                                 btc_block['block_no'],
                                 btc_block['blockhash'])
        self.assertTrue(good_hash)

        # remove first shard of that block
        path1 = os.path.join(self.store_path, seeds[-80])
        os.remove(path1)

        # audit failed because first shard missing
        self.assertFalse(bucket.audit(self.store_path,
                                      btc_block['block_no'],
                                      btc_block['blockhash']))