def test_container_details_cached_miss_dir_list(self): mc = SimMemcache() the_path = "/tmp/bar" def mock_get_container_details_from_fs(cont_path, bu_p=5): bu = bu_p oc = 1 ol = ['foo',] dl = [] return utils.ContainerDetails(bu, oc, ol, dl) def mock_do_stat(path): # Be sure we don't miss due to mtimes not matching self.fail("do_stat should not have been called") cd = mock_get_container_details_from_fs(the_path, bu_p=6) mc.set(utils.MEMCACHE_CONTAINER_DETAILS_KEY_PREFIX + utils.strip_obj_storage_path(the_path), cd) orig_gcdff = utils._get_container_details_from_fs utils._get_container_details_from_fs = mock_get_container_details_from_fs orig_ds = utils.do_stat utils.do_stat = mock_do_stat try: retval = utils.get_container_details(the_path, memcache=mc) cd = mock_get_container_details_from_fs(the_path) assert retval == (cd.obj_list, cd.object_count, cd.bytes_used) mkey = utils.MEMCACHE_CONTAINER_DETAILS_KEY_PREFIX + utils.strip_obj_storage_path(the_path) assert mkey in mc._d assert 5 == mc._d[mkey].bytes_used finally: utils._get_container_details_from_fs = orig_gcdff utils.do_stat = orig_ds
def test_container_details_cached_miss_mtime(self): mc = SimMemcache() the_path = "/tmp/bar" def mock_get_container_details_from_fs(cont_path, bu_p=5): bu = bu_p oc = 1 ol = ['foo',] dl = [('a',100),] return utils.ContainerDetails(bu, oc, ol, dl) def mock_do_stat(path): # Be sure we miss due to mtimes not matching class MockStat(object): def __init__(self, mtime): self.st_mtime = mtime return MockStat(200) cd = mock_get_container_details_from_fs(the_path, bu_p=6) mc.set(utils.MEMCACHE_CONTAINER_DETAILS_KEY_PREFIX + utils.strip_obj_storage_path(the_path), cd) orig_gcdff = utils._get_container_details_from_fs utils._get_container_details_from_fs = mock_get_container_details_from_fs orig_ds = utils.do_stat utils.do_stat = mock_do_stat try: retval = utils.get_container_details(the_path, memcache=mc) cd = mock_get_container_details_from_fs(the_path) assert retval == (cd.obj_list, cd.object_count, cd.bytes_used) mkey = utils.MEMCACHE_CONTAINER_DETAILS_KEY_PREFIX + utils.strip_obj_storage_path(the_path) assert mkey in mc._d assert 5 == mc._d[mkey].bytes_used finally: utils._get_container_details_from_fs = orig_gcdff utils.do_stat = orig_ds
def test_account_details_cached_miss_mtime(self): mc = SimMemcache() the_path = "/tmp/bar" def mock_get_account_details_from_fs(acc_path, acc_stats): mt = 100 cc = 2 cl = ['a', 'b'] return utils.AccountDetails(mt, cc, cl) def mock_do_stat(path): class MockStat(object): def __init__(self, mtime): self.st_mtime = mtime return MockStat(100) ad = mock_get_account_details_from_fs(the_path, None) ad.container_list = ['x', 'y'] ad.mtime = 200 mc.set(utils.MEMCACHE_ACCOUNT_DETAILS_KEY_PREFIX + utils.strip_obj_storage_path(the_path), ad) orig_gcdff = utils._get_account_details_from_fs orig_ds = utils.do_stat utils._get_account_details_from_fs = mock_get_account_details_from_fs utils.do_stat = mock_do_stat try: retval = utils.get_account_details(the_path, memcache=mc) correct_ad = mock_get_account_details_from_fs(the_path, None) assert retval == (correct_ad.container_list, correct_ad.container_count) assert correct_ad != ad finally: utils._get_account_details_from_fs = orig_gcdff utils.do_stat = orig_ds
def test_container_details_cached_hit(self): mc = SimMemcache() the_path = "/tmp/bar" def mock_get_container_details_from_fs(cont_path, bu_p=5): bu = bu_p oc = 1 ol = ['foo',] dl = [('a',100),] return utils.ContainerDetails(bu, oc, ol, dl) def mock_do_stat(path): class MockStat(object): def __init__(self, mtime): self.st_mtime = mtime return MockStat(100) cd = mock_get_container_details_from_fs(the_path, bu_p=6) mc.set(utils.MEMCACHE_CONTAINER_DETAILS_KEY_PREFIX + utils.strip_obj_storage_path(the_path), cd) orig_gcdff = utils._get_container_details_from_fs utils._get_container_details_from_fs = mock_get_container_details_from_fs orig_ds = utils.do_stat utils.do_stat = mock_do_stat try: retval = utils.get_container_details(the_path, memcache=mc) # If it did not properly use memcache, the default mocked version # of get details from fs would return 5 bytes used instead of the # 6 we specified above. cd = mock_get_container_details_from_fs(the_path, bu_p=6) assert retval == (cd.obj_list, cd.object_count, cd.bytes_used) finally: utils._get_container_details_from_fs = orig_gcdff utils.do_stat = orig_ds