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)
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) _ = \ 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_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_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_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_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 get_wait_timer(self, signup_info=None, addr=None): pid = random_name(poet.IDENTIFIER_LENGTH) if addr is None: addr = random_name(34) if signup_info is None: 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 # 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(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 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)
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) previous_cert_id = poet.NULL_IDENTIFIER wait_timer = poet.create_wait_timer(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([], previous_cert_id, 100) with self.assertRaises(TypeError): poet.create_wait_timer({}, previous_cert_id, 100) with self.assertRaises(ValueError): poet.create_wait_timer(None, previous_cert_id, 100) with self.assertRaises(TypeError): poet.create_wait_timer(8888, previous_cert_id, 100) # Bad local means with self.assertRaises(ValueError): poet.create_wait_timer(addr, previous_cert_id, -1) with self.assertRaises(ValueError): poet.create_wait_timer(addr, previous_cert_id, 0) with self.assertRaises(TypeError): poet.create_wait_timer(addr, previous_cert_id, []) with self.assertRaises(TypeError): poet.create_wait_timer(addr, previous_cert_id, None) with self.assertRaises(TypeError): poet.create_wait_timer(addr, previous_cert_id, "3") # Invalid types for previous certificate with self.assertRaises(TypeError): poet.create_wait_timer(addr, [], 0) with self.assertRaises(TypeError): poet.create_wait_timer(addr, {}, 0) with self.assertRaises(ValueError): poet.create_wait_timer(addr, None, 0) with self.assertRaises(TypeError): poet.create_wait_timer(addr, 8888, 0) previous_cert_id = "" # to short with self.assertRaises(ValueError): poet.create_wait_timer(addr, previous_cert_id, 100) previous_cert_id = random_name(8) # to short with self.assertRaises(ValueError): poet.create_wait_timer(addr, previous_cert_id, 100) previous_cert_id = random_name(17) # to long with self.assertRaises(ValueError): poet.create_wait_timer(addr, previous_cert_id, 100)