def test_start_stop_multiple(pyocf_ctx): """Starting/stopping multiple caches. Check whether OCF allows for starting multiple caches and stopping them in random order """ caches = [] caches_no = randrange(6, 11) for i in range(1, caches_no): cache_device = Volume(Size.from_MiB(20)) cache_name = f"cache{i}" cache_mode = CacheMode(randrange(0, len(CacheMode))) size = 4096 * 2**randrange(0, len(CacheLineSize)) cache_line_size = CacheLineSize(size) cache = Cache.start_on_device( cache_device, name=cache_name, cache_mode=cache_mode, cache_line_size=cache_line_size) caches.append(cache) stats = cache.get_stats() assert stats["conf"]["cache_mode"] == cache_mode, "Cache mode" assert stats["conf"]["cache_line_size"] == cache_line_size, "Cache line size" assert stats["conf"]["cache_name"] == cache_name, "Cache name" caches.sort(key=lambda e: randrange(1000)) for cache in caches: logger.info("Getting stats before stopping cache") stats = cache.get_stats() cache_name = stats["conf"]["cache_name"] cache.stop() assert get_cache_by_name(pyocf_ctx, cache_name) != 0, "Try getting cache after stopping it"
def test_start_stop_incrementally(pyocf_ctx): """Starting/stopping multiple caches incrementally. Check whether OCF behaves correctly when few caches at a time are in turns added and removed (#added > #removed) until their number reaches limit, and then proportions are reversed and number of caches gradually falls to 0. """ counter = count() caches = [] caches_limit = 10 add = True run = True increase = True while run: if add: for i in range(0, randrange(3, 5) if increase else randrange(1, 3)): cache_device = Volume(Size.from_MiB(20)) cache_name = f"cache{next(counter)}" cache_mode = CacheMode(randrange(0, len(CacheMode))) size = 4096 * 2**randrange(0, len(CacheLineSize)) cache_line_size = CacheLineSize(size) cache = Cache.start_on_device(cache_device, name=cache_name, cache_mode=cache_mode, cache_line_size=cache_line_size) caches.append(cache) stats = cache.get_stats() assert stats["conf"]["cache_mode"] == cache_mode, "Cache mode" assert stats["conf"][ "cache_line_size"] == cache_line_size, "Cache line size" assert stats["conf"]["cache_name"] == cache_name, "Cache name" if len(caches) == caches_limit: increase = False else: for i in range(0, randrange(1, 3) if increase else randrange(3, 5)): if len(caches) == 0: run = False break cache = caches.pop() logger.info("Getting stats before stopping cache") stats = cache.get_stats() cache_name = stats["conf"]["cache_name"] cache.stop() assert get_cache_by_name(pyocf_ctx, cache_name) != 0, \ "Try getting cache after stopping it" add = not add
def test_100_start_stop(pyocf_ctx): """Starting/stopping stress test. Check OCF behaviour when cache is started and stopped continuously """ for i in range(1, 101): cache_device = Volume(Size.from_MiB(20)) cache_mode = CacheMode(randrange(0, len(CacheMode))) size = 4096 * 2**randrange(0, len(CacheLineSize)) cache_line_size = CacheLineSize(size) cache = Cache.start_on_device( cache_device, cache_mode=cache_mode, cache_line_size=cache_line_size) stats = cache.get_stats() assert stats["conf"]["cache_mode"] == cache_mode, "Cache mode" assert stats["conf"]["cache_line_size"] == cache_line_size, "Cache line size" assert stats["conf"]["cache_id"] == 1, "Cache id" cache.stop() assert get_cache_by_id(pyocf_ctx, 1) != 0, "Try getting cache after stopping it"