def test_create(self):
        addr = random_name(34)

        signup_info = poet.create_signup_info(
            originator_public_key_hash=self._originator_public_key_hash,
            nonce=poet.NULL_IDENTIFIER)
        sealed_data = signup_info.sealed_signup_data

        previous_cert_id = poet.NULL_IDENTIFIER
        wait_timer = poet.create_wait_timer(sealed_data, addr,
                                            previous_cert_id, 100)
        self.assertEqual(wait_timer.previous_certificate_id, previous_cert_id)
        self.assertEqual(wait_timer.local_mean, 100)

        # Random previous cert id
        previous_cert_id = random_name(poet.IDENTIFIER_LENGTH)

        # Invalid types for validator address
        with self.assertRaises(TypeError):
            poet.create_wait_timer(sealed_data, [], previous_cert_id, 100)
        with self.assertRaises(TypeError):
            poet.create_wait_timer(sealed_data, {}, previous_cert_id, 100)
        with self.assertRaises(ValueError):
            poet.create_wait_timer(sealed_data, None, previous_cert_id, 100)
        with self.assertRaises(TypeError):
            poet.create_wait_timer(sealed_data, 8888, previous_cert_id, 100)

        # Bad local means
        with self.assertRaises(ValueError):
            poet.create_wait_timer(sealed_data, addr, previous_cert_id, -1)
        with self.assertRaises(ValueError):
            poet.create_wait_timer(sealed_data, addr, previous_cert_id, 0)
        with self.assertRaises(TypeError):
            poet.create_wait_timer(sealed_data, addr, previous_cert_id, [])
        with self.assertRaises(TypeError):
            poet.create_wait_timer(sealed_data, addr, previous_cert_id, None)
        with self.assertRaises(TypeError):
            poet.create_wait_timer(sealed_data, addr, previous_cert_id, "3")

        # Invalid types for previous certificate
        with self.assertRaises(TypeError):
            poet.create_wait_timer(sealed_data, addr, [], 0)
        with self.assertRaises(TypeError):
            poet.create_wait_timer(sealed_data, addr, {}, 0)
        with self.assertRaises(ValueError):
            poet.create_wait_timer(sealed_data, addr, None, 0)
        with self.assertRaises(TypeError):
            poet.create_wait_timer(sealed_data, addr, 8888, 0)

        previous_cert_id = ""  # to short
        with self.assertRaises(ValueError):
            poet.create_wait_timer(sealed_data, addr, previous_cert_id, 100)

        previous_cert_id = random_name(8)  # to short
        with self.assertRaises(ValueError):
            poet.create_wait_timer(sealed_data, addr, previous_cert_id, 100)

        previous_cert_id = random_name(17)  # to long
        with self.assertRaises(ValueError):
            poet.create_wait_timer(sealed_data, addr, previous_cert_id, 100)
Пример #2
0
    def test_create(self):
        addr = random_name(34)
        _ = \
            poet.create_signup_info(
                originator_public_key_hash=self._originator_public_key_hash,
                nonce=poet.NULL_IDENTIFIER)

        block_hash = random_name(32)

        # with expired timer -- positive case
        wait_timer = self.get_wait_timer(addr=addr)
        wait_cert = \
            poet.create_wait_certificate(
                wait_timer,
                block_hash)
        self.assertEqual(wait_timer.duration, wait_cert.duration)
        self.assertEqual(wait_timer.local_mean, wait_cert.local_mean)
        self.assertEqual(wait_timer.previous_certificate_id,
                         wait_cert.previous_certificate_id)
        self.assertEqual(len(wait_cert.identifier()),
                         poet.IDENTIFIER_LENGTH)

        # the initial block does not need to wait, to accelerate
        # validator launch
        wait_timer = poet.create_wait_timer(addr, poet.NULL_IDENTIFIER, 1)
        wait_cert = \
            poet.create_wait_certificate(
                wait_timer,
                block_hash)
        self.assertEqual(wait_timer.duration, wait_cert.duration)
        self.assertEqual(wait_timer.local_mean, wait_cert.local_mean)
        self.assertEqual(wait_timer.previous_certificate_id,
                         wait_cert.previous_certificate_id)
    def test_create(self):
        addr = random_name(34)

        signup_info = poet.create_signup_info(
            originator_public_key_hash=self._originator_public_key_hash,
            nonce=poet.NULL_IDENTIFIER)
        sealed_data = signup_info.sealed_signup_data

        previous_cert_id = poet.NULL_IDENTIFIER
        wait_timer = poet.create_wait_timer(
            sealed_data, addr, previous_cert_id, 100)
        self.assertEqual(wait_timer.previous_certificate_id, previous_cert_id)
        self.assertEqual(wait_timer.local_mean, 100)

        # Random previous cert id
        previous_cert_id = random_name(poet.IDENTIFIER_LENGTH)

        # Invalid types for validator address
        with self.assertRaises(TypeError):
            poet.create_wait_timer(sealed_data, [], previous_cert_id, 100)
        with self.assertRaises(TypeError):
            poet.create_wait_timer(sealed_data, {}, previous_cert_id, 100)
        with self.assertRaises(ValueError):
            poet.create_wait_timer(sealed_data, None, previous_cert_id, 100)
        with self.assertRaises(TypeError):
            poet.create_wait_timer(sealed_data, 8888, previous_cert_id, 100)

        # Bad local means
        with self.assertRaises(ValueError):
            poet.create_wait_timer(sealed_data, addr, previous_cert_id, -1)
        with self.assertRaises(ValueError):
            poet.create_wait_timer(sealed_data, addr, previous_cert_id, 0)
        with self.assertRaises(TypeError):
            poet.create_wait_timer(sealed_data, addr, previous_cert_id, [])
        with self.assertRaises(TypeError):
            poet.create_wait_timer(sealed_data, addr, previous_cert_id, None)
        with self.assertRaises(TypeError):
            poet.create_wait_timer(sealed_data, addr, previous_cert_id, "3")

        # Invalid types for previous certificate
        with self.assertRaises(TypeError):
            poet.create_wait_timer(sealed_data, addr, [], 0)
        with self.assertRaises(TypeError):
            poet.create_wait_timer(sealed_data, addr, {}, 0)
        with self.assertRaises(ValueError):
            poet.create_wait_timer(sealed_data, addr, None, 0)
        with self.assertRaises(TypeError):
            poet.create_wait_timer(sealed_data, addr, 8888, 0)

        previous_cert_id = ""  # to short
        with self.assertRaises(ValueError):
            poet.create_wait_timer(sealed_data, addr, previous_cert_id, 100)

        previous_cert_id = random_name(8)  # to short
        with self.assertRaises(ValueError):
            poet.create_wait_timer(sealed_data, addr, previous_cert_id, 100)

        previous_cert_id = random_name(17)  # to long
        with self.assertRaises(ValueError):
            poet.create_wait_timer(sealed_data, addr, previous_cert_id, 100)
Пример #4
0
    def test_create(self):
        addr = random_name(34)
        _ = \
            poet.create_signup_info(
                originator_public_key_hash=self._originator_public_key_hash,
                nonce=poet.NULL_IDENTIFIER)

        block_hash = random_name(32)

        # with expired timer -- positive case
        wait_timer = self.get_wait_timer(addr=addr)
        wait_cert = \
            poet.create_wait_certificate(
                wait_timer,
                block_hash)
        self.assertEqual(wait_timer.duration, wait_cert.duration)
        self.assertEqual(wait_timer.local_mean, wait_cert.local_mean)
        self.assertEqual(wait_timer.previous_certificate_id,
                         wait_cert.previous_certificate_id)
        self.assertEqual(len(wait_cert.identifier()), poet.IDENTIFIER_LENGTH)

        # the initial block does not need to wait, to accelerate
        # validator launch
        wait_timer = poet.create_wait_timer(addr, poet.NULL_IDENTIFIER, 1)
        wait_cert = \
            poet.create_wait_certificate(
                wait_timer,
                block_hash)
        self.assertEqual(wait_timer.duration, wait_cert.duration)
        self.assertEqual(wait_timer.local_mean, wait_cert.local_mean)
        self.assertEqual(wait_timer.previous_certificate_id,
                         wait_cert.previous_certificate_id)
    def get_wait_timer(self, sealed_data, addr=None):
        pid = random_name(poet.IDENTIFIER_LENGTH)

        if addr is None:
            addr = random_name(34)

        # super short local mean to get small duration..
        wait_timer = poet.create_wait_timer(sealed_data, addr, pid, 1)

        while not wait_timer.has_expired():
            time.sleep(1)

        return wait_timer
    def test_create_out_of_seq(self):
        addr = random_name(34)
        poet.create_signup_info(
            originator_public_key_hash=self._originator_public_key_hash,
            nonce=poet.NULL_IDENTIFIER)

        block_hash = random_name(32)

        # use expired wait timers out of order
        wait_timer = self.get_wait_timer(addr)
        _ = self.get_wait_timer(addr)
        with self.assertRaises(ValueError):
            _ = poet.create_wait_certificate(wait_timer, block_hash)
    def test_create_out_of_seq(self):
        addr = random_name(34)
        poet.create_signup_info(
            originator_public_key_hash=self._originator_public_key_hash,
            nonce=poet.NULL_IDENTIFIER)

        block_hash = random_name(32)

        # use expired wait timers out of order
        wait_timer = self.get_wait_timer(addr)
        _ = self.get_wait_timer(addr)
        with self.assertRaises(ValueError):
            _ = poet.create_wait_certificate(wait_timer, block_hash)
    def test_serialize(self):
        addr = random_name(34)
        signup_info = poet.create_signup_info(
            originator_public_key_hash=self._originator_public_key_hash,
            nonce=poet.NULL_IDENTIFIER)
        sealed_data = signup_info.sealed_signup_data

        wait_cert = self.get_wait_cert(sealed_data, addr=addr)
        serialized_wait_cert = wait_cert.serialize()

        wait_cert2 = poet.deserialize_wait_certificate(
            serialized_wait_cert,
            wait_cert.signature)

        self.assertAlmostEqual(wait_cert.duration, wait_cert2.duration)
        self.assertEqual(wait_cert.local_mean, wait_cert2.local_mean)
        self.assertEqual(wait_cert.request_time, wait_cert2.request_time)
        self.assertEqual(wait_cert.nonce, wait_cert2.nonce)
        self.assertEqual(wait_cert.previous_certificate_id,
                         wait_cert2.previous_certificate_id)
        self.assertEqual(wait_cert.signature, wait_cert2.signature)
        self.assertEqual(wait_cert.identifier(), wait_cert2.identifier())

        # Bad Serial strings
        with self.assertRaises(ValueError):
            poet.deserialize_wait_certificate(None, wait_cert.signature)
        with self.assertRaises(TypeError):
            poet.deserialize_wait_certificate([], wait_cert.signature)
        with self.assertRaises(TypeError):
            poet.deserialize_wait_certificate(8, wait_cert.signature)
        with self.assertRaises(ValueError):
            poet.deserialize_wait_certificate(
                random_name(len(serialized_wait_cert)),
                wait_cert.signature)
        with self.assertRaises(ValueError):
            poet.deserialize_wait_certificate("{}", wait_cert.signature)

        with self.assertRaises(ValueError):
            poet.deserialize_wait_certificate(
                serialized_wait_cert[:int(len(serialized_wait_cert) / 2)],
                wait_cert.signature)

        # Bad signature strings
        with self.assertRaises(ValueError):
            poet.deserialize_wait_certificate(serialized_wait_cert, None)
        with self.assertRaises(TypeError):
            poet.deserialize_wait_certificate(serialized_wait_cert, [])
        with self.assertRaises(TypeError):
            poet.deserialize_wait_certificate(serialized_wait_cert, 7)
        with self.assertRaises(TypeError):
            poet.deserialize_wait_certificate(8, wait_cert.signature)
    def test_serialize(self):
        addr = random_name(34)
        signup_info = poet.create_signup_info(
            originator_public_key_hash=self._originator_public_key_hash,
            nonce=poet.NULL_IDENTIFIER)
        sealed_data = signup_info.sealed_signup_data

        previous_cert_id = poet.NULL_IDENTIFIER
        wait_timer = poet.create_wait_timer(
            sealed_data, addr, previous_cert_id, 5)
        serialized_wait_timer = wait_timer.serialize()

        wait_timer2 = poet.deserialize_wait_timer(
            serialized_wait_timer,
            wait_timer.signature)

        self.assertAlmostEqual(wait_timer.duration, wait_timer2.duration)
        self.assertEqual(wait_timer.request_time, wait_timer2.request_time)
        self.assertEqual(wait_timer.previous_certificate_id,
                         wait_timer2.previous_certificate_id)
        self.assertEqual(wait_timer.signature, wait_timer2.signature)

        # Bad serialized strings
        with self.assertRaises(TypeError):
            poet.deserialize_wait_timer([], wait_timer.signature)
        with self.assertRaises(TypeError):
            poet.deserialize_wait_timer({}, wait_timer.signature)
        with self.assertRaises(ValueError):
            poet.deserialize_wait_timer(None, wait_timer.signature)
        with self.assertRaises(TypeError):
            poet.deserialize_wait_timer(8, wait_timer.signature)
        with self.assertRaises(ValueError):
            poet.deserialize_wait_timer(
                random_name(len(serialized_wait_timer)),
                wait_timer.signature)
        with self.assertRaises(ValueError):
            poet.deserialize_wait_timer(
                serialized_wait_timer[:int(len(serialized_wait_timer) / 2)],
                wait_timer.signature)

        # Bad signatures
        with self.assertRaises(TypeError):
            poet.deserialize_wait_timer(serialized_wait_timer, [])
        with self.assertRaises(TypeError):
            poet.deserialize_wait_timer(serialized_wait_timer, {})
        with self.assertRaises(ValueError):
            poet.deserialize_wait_timer(serialized_wait_timer, None)
        with self.assertRaises(TypeError):
            poet.deserialize_wait_timer(serialized_wait_timer, 7)
Пример #10
0
    def test_serialize(self):
        addr = random_name(34)
        signup_info = poet.create_signup_info(
            originator_public_key_hash=self._originator_public_key_hash,
            nonce=poet.NULL_IDENTIFIER)
        sealed_data = signup_info.sealed_signup_data

        previous_cert_id = poet.NULL_IDENTIFIER
        wait_timer = poet.create_wait_timer(
            sealed_data, addr, previous_cert_id, 5)
        serialized_wait_timer = wait_timer.serialize()

        wait_timer2 = poet.deserialize_wait_timer(
            serialized_wait_timer,
            wait_timer.signature)

        self.assertAlmostEqual(wait_timer.duration, wait_timer2.duration)
        self.assertEqual(wait_timer.request_time, wait_timer2.request_time)
        self.assertEqual(wait_timer.previous_certificate_id,
                         wait_timer2.previous_certificate_id)
        self.assertEqual(wait_timer.signature, wait_timer2.signature)

        # Bad serialized strings
        with self.assertRaises(TypeError):
            poet.deserialize_wait_timer([], wait_timer.signature)
        with self.assertRaises(TypeError):
            poet.deserialize_wait_timer({}, wait_timer.signature)
        with self.assertRaises(ValueError):
            poet.deserialize_wait_timer(None, wait_timer.signature)
        with self.assertRaises(TypeError):
            poet.deserialize_wait_timer(8, wait_timer.signature)
        with self.assertRaises(ValueError):
            poet.deserialize_wait_timer(
                random_name(len(serialized_wait_timer)),
                wait_timer.signature)
        with self.assertRaises(ValueError):
            poet.deserialize_wait_timer(
                serialized_wait_timer[:int(len(serialized_wait_timer) / 2)],
                wait_timer.signature)

        # Bad signatures
        with self.assertRaises(TypeError):
            poet.deserialize_wait_timer(serialized_wait_timer, [])
        with self.assertRaises(TypeError):
            poet.deserialize_wait_timer(serialized_wait_timer, {})
        with self.assertRaises(ValueError):
            poet.deserialize_wait_timer(serialized_wait_timer, None)
        with self.assertRaises(TypeError):
            poet.deserialize_wait_timer(serialized_wait_timer, 7)
 def test_before_creating_signup_info(self):
     # If we have not created signup information, an exception should be
     # thrown if we try to create a wait timer.
     with self.assertRaises(ValueError):
         addr = random_name(34)
         previous_cert_id = poet.NULL_IDENTIFIER
         poet.create_wait_timer(addr, previous_cert_id, 100)
 def test_before_creating_signup_info(self):
     # If we have not created signup information, an exception should be
     # thrown if we try to create a wait timer.
     with self.assertRaises(ValueError):
         addr = random_name(34)
         previous_cert_id = poet.NULL_IDENTIFIER
         poet.create_wait_timer(None, addr, previous_cert_id, 100)
Пример #13
0
 def get_wait_cert(self, addr=None):
     block_hash = random_name(32)
     wait_timer = self.get_wait_timer(addr=addr)
     return \
         poet.create_wait_certificate(
             wait_timer,
             block_hash)
Пример #14
0
 def get_wait_cert(self, addr=None):
     block_hash = random_name(32)
     wait_timer = self.get_wait_timer(addr=addr)
     return \
         poet.create_wait_certificate(
             wait_timer,
             block_hash)
    def test_verify(self):
        addr = random_name(34)
        signup_info = \
            poet.create_signup_info(
                originator_public_key_hash=self._originator_public_key_hash,
                nonce=poet.NULL_IDENTIFIER)
        sealed_data = signup_info.sealed_signup_data

        wait_cert = self.get_wait_cert(sealed_data, addr=addr)
        poet.verify_wait_certificate(
            wait_cert,
            signup_info.poet_public_key)

        # Bad wait certificate types
        with self.assertRaises(TypeError):
            poet.verify_wait_certificate([], signup_info.poet_public_key)

        with self.assertRaises(TypeError):
            poet.verify_wait_certificate({}, signup_info.poet_public_key)

        with self.assertRaises(ValueError):
            poet.verify_wait_certificate(None, signup_info.poet_public_key)

        with self.assertRaises(TypeError):
            poet.verify_wait_certificate("3", signup_info.poet_public_key)

        with self.assertRaises(TypeError):
            poet.verify_wait_certificate(3, signup_info.poet_public_key)

        # Bad public key types
        with self.assertRaises(TypeError):
            poet.verify_wait_certificate(wait_cert, [])

        with self.assertRaises(TypeError):
            poet.verify_wait_certificate(wait_cert, {})

        with self.assertRaises(ValueError):
            poet.verify_wait_certificate(wait_cert, None)

        with self.assertRaises(TypeError):
            poet.verify_wait_certificate(wait_cert, 3)

        # A different public key
        other_signup_info = \
            poet.create_signup_info(
                originator_public_key_hash=create_random_public_key_hash(),
                nonce=poet.NULL_IDENTIFIER)

        with self.assertRaises(ValueError):
            poet.verify_wait_certificate(
                wait_cert,
                other_signup_info.poet_public_key)
    def test_is_expired(self):
        addr = random_name(34)
        poet.create_signup_info(
            originator_public_key_hash=self._originator_public_key_hash,
            nonce=poet.NULL_IDENTIFIER)

        previous_cert_id = poet.NULL_IDENTIFIER
        start = time.time()
        wait_timer = poet.create_wait_timer(addr, previous_cert_id, 5)
        while not wait_timer.has_expired():
            time.sleep(1)
        end = time.time()
        self.assertLessEqual(wait_timer.duration, end - start)
Пример #17
0
    def test_is_expired(self):
        addr = random_name(34)
        poet.create_signup_info(
            originator_public_key_hash=self._originator_public_key_hash,
            nonce=poet.NULL_IDENTIFIER)

        previous_cert_id = poet.NULL_IDENTIFIER
        start = time.time()
        wait_timer = poet.create_wait_timer(addr, previous_cert_id, 5)
        while not wait_timer.has_expired():
            time.sleep(1)
        end = time.time()
        self.assertLessEqual(wait_timer.duration, end - start)
    def test_create(self):
        addr = random_name(34)
        signup_info = poet.create_signup_info(
            originator_public_key_hash=self._originator_public_key_hash,
            nonce=poet.NULL_IDENTIFIER)
        sealed_data = signup_info.sealed_signup_data
        block_hash = random_name(32)

        # with expired timer -- positive case
        wait_timer = self.get_wait_timer(sealed_data, addr=addr)
        wait_cert = poet.create_wait_certificate(
            sealed_data, wait_timer, block_hash)
        self.assertEqual(wait_timer.duration, wait_cert.duration)
        self.assertEqual(wait_timer.local_mean, wait_cert.local_mean)
        self.assertNotEqual(wait_cert.nonce, '')
        self.assertEqual(wait_timer.previous_certificate_id,
                         wait_cert.previous_certificate_id)
        self.assertEqual(len(wait_cert.identifier()),
                         poet.IDENTIFIER_LENGTH)

        # We should not be able to create another wait certificate with the
        # same wait timer.
        with self.assertRaises(ValueError):
            poet.create_wait_certificate(sealed_data, wait_timer, block_hash)

        # When we create a new wait timer, it should not be possible to use
        # another, otherwise valid, wait timer to create a wait certificate.
        wait_timer = self.get_wait_timer(sealed_data, addr=addr)
        poet.create_wait_timer(sealed_data, addr, poet.NULL_IDENTIFIER, 1)

        with self.assertRaises(ValueError):
            poet.create_wait_certificate(sealed_data, wait_timer, block_hash)

        # the initial block does not need to wait, to accelerate
        # validator launch
        wait_timer = poet.create_wait_timer(
            sealed_data, addr, poet.NULL_IDENTIFIER, 1)
        wait_cert = poet.create_wait_certificate(
            sealed_data, wait_timer, block_hash)
        self.assertEqual(wait_timer.duration, wait_cert.duration)
        self.assertEqual(wait_timer.local_mean, wait_cert.local_mean)
        self.assertEqual(wait_timer.previous_certificate_id,
                         wait_cert.previous_certificate_id)

        # with unexpired timer
        wait_timer = \
            poet.create_wait_timer(
                sealed_data, addr, random_name(poet.IDENTIFIER_LENGTH), 10)
        with self.assertRaises(ValueError):
            poet.create_wait_certificate(sealed_data, wait_timer, block_hash)

        # With timed out timer
        wait_timer = self.get_wait_timer(sealed_data, addr=addr)
        time.sleep(10)
        with self.assertRaises(ValueError):
            wait_cert = poet.create_wait_certificate(
                sealed_data, wait_timer, block_hash)

        # verify that new wait certificate gets a different nonce.  In reality
        # we should test a statistically significant number of wait
        # certificates to verify that each gets a unique nonce, but we have to
        # wait for wait timers to expire and we want the test to finish
        # sometime this century.
        wait_timer = self.get_wait_timer(sealed_data, addr=addr)
        wait_cert2 = poet.create_wait_certificate(
            sealed_data, wait_timer, block_hash)
        self.assertNotEqual(wait_cert.nonce, wait_cert2.nonce)
 def get_wait_cert(self, sealed_data, addr=None):
     block_hash = random_name(32)
     wait_timer = self.get_wait_timer(sealed_data, addr)
     return poet.create_wait_certificate(
         sealed_data, wait_timer, block_hash)