class TestDaemon(TestCase):
    def setUp(self):
        illuminant_port = random.randrange(10000, 30000)
        daemon_port = random.randrange(10000, 30000)
        self.illuminant_obj = run_illuminant(illuminant_port)
        self.daemon_obj = run_daemon(daemon_port, port_to_uri(illuminant_port))
        self.d = ServerProxy(port_to_uri(daemon_port))
        self.i = ServerProxy(port_to_uri(illuminant_port))
        while self.illuminant_obj.handler is None:
            time.sleep(0.01)
        self.illuminant_handler = self.illuminant_obj.handler
        while self.daemon_obj.handler is None:
            time.sleep(0.01)
        self.daemon_handler = self.illuminant_obj.handler

    def test_Daemon(self):
        res = self.d.registerService(CALLER_ID, SERVICE, port_to_uri(0), CALLER_API)
        self.assertEqual(res[0], 1)
        records = self.illuminant_handler.records
        self.assertEqual(len(records[SERVICE]), 1)
        res = self.d.unregisterService(CALLER_ID, SERVICE, port_to_uri(0))
        self.assertEqual(res[0], 1)

    def test_LRU(self, times=10):
        for i in range(times):
            self.d.registerService(CALLER_ID, SERVICE, port_to_uri(i), CALLER_API)
        ports = []
        for i in range(times):
            res = self.d.lookupService(CALLER_ID, SERVICE)
            ports.append(uri_to_port(res[2]))
        ports.sort()
        self.assertEqual(ports, list(range(times)))