def setUp(self): """ Starts a mock server for every test. """ self.buf = [] def save_to_buf(msg): self.buf.extend( [line.strip() for line in msg.split("\n") if line.strip()]) self.server = Server(save_to_buf) gevent.spawn(self.server.serve) gevent.sleep(1)
def requestDelete(cls, hddo, hash_base): print( '[App] Requesting deletion of HealthDominoDataObject with innerHash {}.' .format(hddo.innerHash)) result = Server.deleteHDDO(hddo, hash_base) print('[App] All occurences of the HealthDominoDataObject is deleted.')
def setUp(self): """ Starts a mock server for every test. """ self.buf = [] def save_to_buf(msg): self.buf.extend([line.strip() for line in msg.split("\n") if line.strip()]) self.server = Server(save_to_buf) gevent.spawn(self.server.serve) gevent.sleep(1)
def registerUser(cls): if App.user_pha == '' and App.user_private_key == '' and App.user_public_key == '': print('[App] Registering user.') pha = sha256(urandom(16)).hexdigest() print( '[App] Please stroke the rabbit to help creating a key pair just for you. Thanks.' ) key_pair = RSA.generate(2048) private_key = key_pair.exportKey() public_key = key_pair.publickey().exportKey() print('[App] The rabbit is happy. Keys generated sucessfully.') print('[App] Registering account...') while not Server.createAccountIfAvailable(pha, public_key): pha = sha256(urandom(16)).hexdigest() App.user_pha = pha App.user_private_key = private_key App.user_public_key = public_key print('[App] Your Personal Health Address is: {}'.format( App.user_pha)) print( ' You don\'t have to remember it, this App will remember.' )
def prepareTransmission(cls, inner_hash: str) -> str: print('[App] Preparing transmission of a HealthDominoDataObject...') return Server.reserveIfAvailable(inner_hash)
def transmitHDDO(cls, hddo, transmission_id): print('[App] Transmitting HealthDominoDataObject...') return Server.acceptHDDO(hddo, transmission_id)
# RawData object and transmit them all to the server. # To enabel broadcast compatibility, every HealthDominoDataObject will have a # custom script based on the user's private key. This way of scripting is not # secure at all but can demonstrate how broadcasts work. sig_key = hash(App.user_private_key) script_template = ['<SigKey>', '0', 'HD_ADD', '0'] hddo_container = [] for i in range(randrange(30, 40)): raw_datapoint = RawData('human_measure.weight.kg', round(uniform(50.0, 70.0), 2)) hddo_container.append(HealthDominoDataObject(raw_datapoint)) script_result = sig_key + i this_script = deepcopy(script_template) this_script[1] = str(i) this_script[3] = str(script_result) hddo_container[-1].addScript(this_script) hddo_container[-1].close() hddo_container[-1].transmit() # Since user applications usually doesn't initiate broadcasts let's connect the # Server directly and initiate one. Before doing this let's choice a datapoint. test_inner_hash = choice(list(Server.hddo_inner.keys())) # With the innerHash we can initiate the broadcast. test_script = Server.sendBroadcast(test_inner_hash) # In this example we can easily find the concerned datapoint but in a real-world # solution only the owner of the right signature key can accept the connection # request.
class MetricsTest(unittest.TestCase): def wait_buf(self, num_entries, timeout=10): def wait_loop(): while True: if len(self.buf) == num_entries: return gevent.sleep(0.1) greenlet = gevent.spawn(wait_loop) greenlet.join(timeout) if len(self.buf) != num_entries: raise Exception("Expected buffer size %d, got %d" % (num_entries, len(self.buf))) def setUp(self): """ Starts a mock server for every test. """ self.buf = [] def save_to_buf(msg): self.buf.extend( [line.strip() for line in msg.split("\n") if line.strip()]) self.server = Server(save_to_buf) gevent.spawn(self.server.serve) gevent.sleep(1) def tearDown(self): """ Shuts down mock server. """ self.server.stop() gevent.sleep(1) def test_add(self): logger.info("test_add") for x in xrange(10): Metric.add("test.add") self.wait_buf(lines_for_add(10)) for line in self.buf: self.assertTrue(line.startswith("stats.test.add 1.0")) def test_timing(self): logger.info("test_timing") for x in xrange(10): timer = Metric.start_timing("test.timing") primes = get_prime_list(NUM_PRIMES) timer.done() logger.debug("Got %d primes", len(primes)) self.wait_buf(lines_for_timing(10)) for line in self.buf: self.assertTrue(line.startswith("stats.timers.test.timing")) def test_timing_exact(self): Metric.timing("exact.time", 1.337) self.wait_buf(lines_for_timing(1)) stripped_timestamps = [ " ".join(line.split(" ")[:-1]) for line in self.buf ] self.assertTrue( "stats.timers.exact.time.lower 1337.0" in stripped_timestamps) self.assertTrue( "stats.timers.exact.time.count 1" in stripped_timestamps) self.assertTrue( "stats.timers.exact.time.mean 1337.0" in stripped_timestamps) self.assertTrue( "stats.timers.exact.time.upper 1337.0" in stripped_timestamps) self.assertTrue( "stats.timers.exact.time.upper_100 1337.0" in stripped_timestamps) def test_add_decorator(self): logger.info("test_add_decorator") for x in xrange(10): primes = get_prime_list_with_add(NUM_PRIMES) logger.debug("Got %d primes", len(primes)) self.wait_buf(lines_for_add(10)) for line in self.buf: self.assertTrue(line.startswith("stats.test.add.decorator 1.0")) def test_timing_decorator(self): logger.info("test_timing_decorator") for x in xrange(0, 10): primes = get_prime_list_with_timing(NUM_PRIMES) logger.debug("Got %d primes", len(primes)) self.wait_buf(lines_for_timing(10)) for line in self.buf: self.assertTrue( line.startswith("stats.timers.test.timing.decorator")) def test_nested_decorators(self): logger.info("test_nested_decorators") for x in xrange(0, 10): primes = get_prime_list_with_add_and_timing(NUM_PRIMES) logger.debug("Got %d primes", len(primes)) self.wait_buf(lines_for_add(10) + lines_for_timing(10)) for line in self.buf: self.assertTrue( line.startswith("stats.test.add.decorator.combined 1.0") or line.startswith("stats.timers.test.timing.decorator.combined"))
#!/usr/bin/env python # coding: utf-8 from mock_server import Server if __name__ == '__main__': server = Server() server.start()
class MetricsTest(unittest.TestCase): def wait_buf(self, num_entries, timeout=10): def wait_loop(): while True: if len(self.buf) == num_entries: return gevent.sleep(0.1) greenlet = gevent.spawn(wait_loop) greenlet.join(timeout) if len(self.buf) != num_entries: raise Exception("Expected buffer size %d, got %d" % (num_entries, len(self.buf))) def setUp(self): """ Starts a mock server for every test. """ self.buf = [] def save_to_buf(msg): self.buf.extend([line.strip() for line in msg.split("\n") if line.strip()]) self.server = Server(save_to_buf) gevent.spawn(self.server.serve) gevent.sleep(1) def tearDown(self): """ Shuts down mock server. """ self.server.stop() gevent.sleep(1) def test_add(self): logger.info("test_add") for x in xrange(10): Metric.add("test.add") self.wait_buf(lines_for_add(10)) for line in self.buf: self.assertTrue(line.startswith("stats.test.add 1.0")) def test_timing(self): logger.info("test_timing") for x in xrange(10): timer = Metric.start_timing("test.timing") primes = get_prime_list(NUM_PRIMES) timer.done() logger.debug("Got %d primes", len(primes)) self.wait_buf(lines_for_timing(10)) for line in self.buf: self.assertTrue(line.startswith("stats.timers.test.timing")) def test_timing_exact(self): Metric.timing("exact.time", 1.337) self.wait_buf(lines_for_timing(1)) stripped_timestamps = [" ".join(line.split(" ")[:-1]) for line in self.buf] self.assertTrue("stats.timers.exact.time.lower 1337.0" in stripped_timestamps) self.assertTrue("stats.timers.exact.time.count 1" in stripped_timestamps) self.assertTrue("stats.timers.exact.time.mean 1337.0" in stripped_timestamps) self.assertTrue("stats.timers.exact.time.upper 1337.0" in stripped_timestamps) self.assertTrue("stats.timers.exact.time.upper_100 1337.0" in stripped_timestamps) def test_add_decorator(self): logger.info("test_add_decorator") for x in xrange(10): primes = get_prime_list_with_add(NUM_PRIMES) logger.debug("Got %d primes", len(primes)) self.wait_buf(lines_for_add(10)) for line in self.buf: self.assertTrue(line.startswith("stats.test.add.decorator 1.0")) def test_timing_decorator(self): logger.info("test_timing_decorator") for x in xrange(0, 10): primes = get_prime_list_with_timing(NUM_PRIMES) logger.debug("Got %d primes", len(primes)) self.wait_buf(lines_for_timing(10)) for line in self.buf: self.assertTrue(line.startswith("stats.timers.test.timing.decorator")) def test_nested_decorators(self): logger.info("test_nested_decorators") for x in xrange(0, 10): primes = get_prime_list_with_add_and_timing(NUM_PRIMES) logger.debug("Got %d primes", len(primes)) self.wait_buf(lines_for_add(10) + lines_for_timing(10)) for line in self.buf: self.assertTrue(line.startswith("stats.test.add.decorator.combined 1.0") or line.startswith("stats.timers.test.timing.decorator.combined"))