def run(self):
        communication_service = Communication(host=self._master_hostname, port=self._master_port, service_name=self._name, server=False)
        communication_service.startup()
        self._services['CommunicationService'] = communication_service
        communication_service.register('CommunicationService', communication_service.get_queue())

        #heartbeat_service = HeartBeatService(communication_service=communication_service, interval=10)
        #communication_service.register('HeartBeatService', heartbeat_service.get_queue())
        #heartbeat_service.startup()
        #self._services['HeartBeatService'] = heartbeat_service

        storage_service = StorageService(directory=self._data_directory, communication_service=communication_service)
        communication_service.register('StorageService', storage_service.get_queue())
        storage_service.startup()
        self._services['StorageService'] = storage_service

        index_service = IndexService(block_size=1024, index_directory=self._index_directory, communication_service=communication_service)
        communication_service.register('IndexService', index_service.get_queue())
        index_service.startup()
        self._services['IndexService'] = index_service


        node = Node()
        node._id = 1
        node._type = 'Person'
        node._properties['Name'] = 'Sagar'
        node._properties['Age'] = 21
        add_node = AddNode(node)
 def setUp(self):
     #logging.basicConfig(format='%(asctime)s\t%(levelname)-10s\t%(threadName)-32s\t%(name)-32s\t%(message)s', level=logging.DEBUG, datefmt='%Y-%m-%d %H:%M:%S')
     self.index_service = IndexService(block_size=2048, index_directory="C:\\Users\\Sagar\\PycharmProjects\\pygraphdb\\pygraphdb\\index")
     self.index_service.startup()
     self._keys = []
class IndexServiceTest(unittest.TestCase):
    def setUp(self):
        #logging.basicConfig(format='%(asctime)s\t%(levelname)-10s\t%(threadName)-32s\t%(name)-32s\t%(message)s', level=logging.DEBUG, datefmt='%Y-%m-%d %H:%M:%S')
        self.index_service = IndexService(block_size=2048, index_directory="C:\\Users\\Sagar\\PycharmProjects\\pygraphdb\\pygraphdb\\index")
        self.index_service.startup()
        self._keys = []

    def large_index(self):
        file = "C:\\Users\\Sagar\\PycharmProjects\\pygraphdb\\pygraphdb\\index\\keys"
        fd = open(file, 'wb+')
        for i in range(10):
            key = self.random_key_generator()
            value = self.get_value_from_key(key)
            #fd.write(bytes(key, 'UTF-8'))
            #fd.write(bytes("\n", 'UTF-8'))
            self._keys.append(key)
            index_node = IndexNode(key, value)
            index = AddIndex('name', index_node, 'Movie')
            self.index_service._queue.put(('Master', 'IndexService', index))
        while self.index_service._queue.qsize() > 0:
            time.sleep(1)
            print(self.index_service._queue.qsize())

    def read_from_file(self):
        file = "C:\\Users\\Sagar\\PycharmProjects\\pygraphdb\\pygraphdb\\index\\keys"
        fd = open(file, 'rb+')
        for i in range(10000):
            c = fd.read(1).decode('utf-8')
            key = ''
            while c != '\n':
                key += c
                c = fd.read(1).decode('utf-8')
            self._keys.append(key)

        for i in range(10000):
            key = self._keys[i]
            value = self.get_value_from_key(key)
            index_node = IndexNode(key, value)
            index = AddIndex('name', index_node)
            self.index_service._queue.put(('Master', 'IndexService', index))

        while self.index_service._queue.qsize() > 0:
            time.sleep(1)
            print(self.index_service._queue.qsize())

    def read(self):
        for i in range(10000):
            key = 'ivrnfckfuzsjfknwpsg'
            find = FindIndex('name', key)
            self.index_service._queue.put(('Master', 'IndexService', find))
        while self.index_service._queue.qsize() > 0:
            time.sleep(1)
            print(self.index_service._queue.qsize())

    def find_index(self):
        self.large_index()
        count = 0
        for key in self._keys:
            find = FindIndex('name', key)
            self.index_service._queue.put(('Master', 'IndexService', find))
            index_node = IndexNode(key, None, None)
            delete = DeleteIndex('name', index_node)
            self.index_service._queue.put(('Master', 'IndexService', delete))
            self.index_service._queue.put(('Master', 'IndexService', find))
            count += 1
        while self.index_service._queue.qsize() > 0:
            time.sleep(1)
            print(self.index_service._queue.qsize())

    def test_find_all_index(self):
        #self.large_index()
        find = FindAllIndex('name', None, 'Movie', None)
        self.index_service._queue.put(('Master', 'IndexService', find))
        while self.index_service._queue.qsize() > 0:
            time.sleep(1)
            print("Finding...")

    def index(self):
        key = 'adbquwjzsvlvooy'
        find = FindIndex('name', key)
        self.index_service._queue.put(find)
        index_node = IndexNode(key, None, None)
        delete = DeleteIndex('name', index_node)
        self.index_service._queue.put(delete)
        self.index_service._queue.put(find)
        while self.index_service._queue.qsize() > 0:
            time.sleep(1)
        #print(self.index_service._queue.qsize())
        #print(self.get_value_from_key(key))
        #self.index_service.join()


    def random_key_generator(self):
        no_of_chars = random.randint(10,20)
        s = ''
        chars = 'abcdefghijklmnopqrstuvwxyz'
        for i in range(no_of_chars):
            s += random.choice(chars)
        return s

    def get_value_from_key(self, s):
        key = 0
        for i in s :
            key += ord(i)
        return key

    def tearDown(self):
        self.index_service.shutdown()