Beispiel #1
0
    def test_get_statistics(self):
        """
        Testing whether the API returns the correct statistics
        """
        block = TrustChainBlock()
        block.public_key = self.member.public_key
        block.link_public_key = "deadbeef".decode("HEX")
        block.link_sequence_number = 21
        block.transaction = {"up": 42, "down": 8, "total_up": 1024, "total_down": 2048}
        block.sequence_number = 3
        block.previous_hash = "babecafe".decode("HEX")
        block.signature = "babebeef".decode("HEX")
        self.tc_community.persistence.add_block(block)

        def verify_response(response):
            response_json = json.loads(response)
            self.assertTrue("statistics" in response_json)
            stats = response_json["statistics"]
            self.assertEqual(stats["id"], self.member.public_key.encode("HEX"))
            self.assertEqual(stats["total_blocks"], 3)
            self.assertEqual(stats["total_up"], 1024)
            self.assertEqual(stats["total_down"], 2048)
            self.assertEqual(stats["peers_that_pk_helped"], 1)
            self.assertEqual(stats["peers_that_helped_pk"], 1)
            self.assertIn("latest_block", stats)
            self.assertNotEqual(stats["latest_block"]["insert_time"], "")
            self.assertEqual(stats["latest_block"]["hash"], block.hash.encode("HEX"))
            self.assertEqual(stats["latest_block"]["link_public_key"], "deadbeef")
            self.assertEqual(stats["latest_block"]["link_sequence_number"], 21)
            self.assertEqual(stats["latest_block"]["up"], 42)
            self.assertEqual(stats["latest_block"]["down"], 8)

        self.should_check_equality = False
        return self.do_request('trustchain/statistics', expected_code=200).addCallback(verify_response)
Beispiel #2
0
 def test_validate_existing_fraud(self):
     # Arrange
     db = MockDatabase()
     (block1, block2, _, _) = TestBlocks.setup_validate()
     db.add_block(block1)
     db.add_block(block2)
     # Act
     block3 = TrustChainBlock(block2.pack_db_insert())
     block3.previous_hash = sha256(str(random.randint(0, 100000))).digest()
     block3.sign(block2.key)
     result = block3.validate(db)
     # Assert
     self.assertEqual(result[0], ValidationResult.invalid)
     self.assertIn("Double sign fraud", result[1])
Beispiel #3
0
 def test_pack(self):
     block = TrustChainBlock()
     block.transaction = {'id': 3}
     block.public_key = ' fish, so sad that it should come to this. - We tried to warn you all but '
     block.sequence_number = 1869095012
     block.link_public_key = 'ear! - You may not share our intellect, which might explain your disrespec'
     block.link_sequence_number = 1949048934
     block.previous_hash = 'or all the natural wonders that '
     block.signature = 'grow around you. - So long, so long, and thanks for all the fish'
     self.assertEqual(
         block.pack(),
         ' fish, so sad that it should come to this. - We tried to warn you '
         'all but oh dear! - You may not share our intellect, which might explain your '
         'disrespect, for all the natural wonders that grow around you. - So long, '
         'so long, and thanks for all the fish\x00\x00\x00\na1d2bid1i3')
Beispiel #4
0
 def test_validate_existing_hash(self):
     # Arrange
     db = MockDatabase()
     (block1, block2, block3, _) = TestBlocks.setup_validate()
     db.add_block(block1)
     db.add_block(block2)
     db.add_block(block3)
     # Act
     block2 = TrustChainBlock(block2.pack_db_insert())
     block2.previous_hash = sha256(str(random.randint(0, 100000))).digest()
     block2.sign(db.get(block2.public_key, block2.sequence_number).key)
     result = block2.validate(db)
     # Assert
     self.assertEqual(result[0], ValidationResult.invalid)
     self.assertIn(
         'Previous hash is not equal to the hash id of the previous block',
         result[1])