def test_invalid_free_mem_map(self): """ Attempt to free a shared memory map that does not exist in the list of allocated/tracked shared memory maps and verify that it fails. """ manager = SharedMemoryManager() mem_map_name = self.get_new_mem_map_name() free_success = manager.free_mem_map(mem_map_name) self.assertFalse(free_success)
def test_put_bytes(self): """ Verify that the given input was successfully put into shared memory. The input is bytes. """ manager = SharedMemoryManager() content_size = consts.MIN_BYTES_FOR_SHARED_MEM_TRANSFER + 10 content = self.get_random_bytes(content_size) shared_mem_meta = manager.put_bytes(content) self.assertIsNotNone(shared_mem_meta) self.assertTrue(self.is_valid_uuid(shared_mem_meta.mem_map_name)) self.assertEqual(content_size, shared_mem_meta.count_bytes) free_success = manager.free_mem_map(shared_mem_meta.mem_map_name) self.assertTrue(free_success)
def test_put_string(self): """ Verify that the given input was successfully put into shared memory. The input is string. """ manager = SharedMemoryManager() content_size = consts.MIN_BYTES_FOR_SHARED_MEM_TRANSFER + 10 num_chars = math.floor(content_size / consts.SIZE_OF_CHAR_BYTES) content = self.get_random_string(num_chars) expected_size = len(content.encode('utf-8')) shared_mem_meta = manager.put_string(content) self.assertIsNotNone(shared_mem_meta) self.assertTrue(self.is_valid_uuid(shared_mem_meta.mem_map_name)) self.assertEqual(expected_size, shared_mem_meta.count_bytes) free_success = manager.free_mem_map(shared_mem_meta.mem_map_name) self.assertTrue(free_success)
def test_get_bytes(self): """ Verify that the output object was successfully gotten from shared memory. The output is bytes. """ manager = SharedMemoryManager() content_size = consts.MIN_BYTES_FOR_SHARED_MEM_TRANSFER + 10 content = self.get_random_bytes(content_size) shared_mem_meta = manager.put_bytes(content) mem_map_name = shared_mem_meta.mem_map_name num_bytes_written = shared_mem_meta.count_bytes read_content = manager.get_bytes(mem_map_name, offset=0, count=num_bytes_written) self.assertEqual(content, read_content) free_success = manager.free_mem_map(mem_map_name) self.assertTrue(free_success)
def test_do_not_free_resources_on_dispose(self): """ Verify that when the allocated shared memory maps are freed, their backing resources are not freed. Note: The shared memory map should no longer be tracked by the SharedMemoryManager, though. """ manager = SharedMemoryManager() content_size = consts.MIN_BYTES_FOR_SHARED_MEM_TRANSFER + 10 content = self.get_random_bytes(content_size) shared_mem_meta = manager.put_bytes(content) self.assertIsNotNone(shared_mem_meta) mem_map_name = shared_mem_meta.mem_map_name is_mem_map_found = mem_map_name in manager.allocated_mem_maps self.assertTrue(is_mem_map_found) self.assertEqual(1, len(manager.allocated_mem_maps.keys())) free_success = manager.free_mem_map(mem_map_name, False) self.assertTrue(free_success) is_mem_map_found = mem_map_name in manager.allocated_mem_maps self.assertFalse(is_mem_map_found) self.assertEqual(0, len(manager.allocated_mem_maps.keys()))
def test_allocated_mem_maps(self): """ Verify that the SharedMemoryManager is tracking the shared memory maps it has allocated after put operations. Verify that those shared memory maps are freed and no longer tracked after attempting to free them. """ manager = SharedMemoryManager() content_size = consts.MIN_BYTES_FOR_SHARED_MEM_TRANSFER + 10 content = self.get_random_bytes(content_size) shared_mem_meta = manager.put_bytes(content) self.assertIsNotNone(shared_mem_meta) mem_map_name = shared_mem_meta.mem_map_name is_mem_map_found = mem_map_name in manager.allocated_mem_maps self.assertTrue(is_mem_map_found) self.assertEqual(1, len(manager.allocated_mem_maps.keys())) free_success = manager.free_mem_map(mem_map_name) self.assertTrue(free_success) is_mem_map_found = mem_map_name in manager.allocated_mem_maps self.assertFalse(is_mem_map_found) self.assertEqual(0, len(manager.allocated_mem_maps.keys()))