diff --git a/test/storage/slab_pmem/check_slab_pmem.c b/test/storage/slab_pmem/check_slab_pmem.c index aeff4c7bc..5bf40247d 100644 --- a/test/storage/slab_pmem/check_slab_pmem.c +++ b/test/storage/slab_pmem/check_slab_pmem.c @@ -1112,6 +1112,61 @@ START_TEST(test_metrics_reserve_backfill_link) } END_TEST +START_TEST(test_metrics_flush_basic) +{ +#define KEY1 "key1" +#define VAL1 "val1" +#define KEY2 "key2" +#define VAL2 "val2" + + struct bstring key1, val1, key2, val2; + item_rstatus_e status; + struct item *it; + + test_reset(1); + + key1 = str2bstr(KEY1); + val1 = str2bstr(VAL1); + + key2 = str2bstr(KEY2); + val2 = str2bstr(VAL2); + + time_update(); + status = item_reserve(&it, &key1, &val1, val1.len, 0, INT32_MAX); + ck_assert_msg(status == ITEM_OK, "item_reserve not OK - return status %d", status); + item_insert(it, &key1); + + time_update(); + status = item_reserve(&it, &key2, &val2, val2.len, 0, INT32_MAX); + ck_assert_msg(status == ITEM_OK, "item_reserve not OK - return status %d", status); + item_insert(it, &key2); + + item_flush(); + + it = item_get(&key1); + ck_assert_msg(it == NULL, "item with key %.*s still exists after flush", key1.len, key1.data); + it = item_get(&key2); + ck_assert_msg(it == NULL, "item with key %.*s still exists after flush", key2.len, key2.data); + + slab_metrics_st copy = metrics; + + metric_reset((struct metric *)&metrics, METRIC_CARDINALITY(metrics)); + test_reset(0); + + test_assert_metrics((struct metric *)©, (struct metric *)&metrics, METRIC_CARDINALITY(metrics)); + + it = item_get(&key1); + ck_assert_msg(it == NULL, "item with key %.*s still exists after flush", key1.len, key1.data); + it = item_get(&key2); + ck_assert_msg(it == NULL, "item with key %.*s still exists after flush", key2.len, key2.data); + +#undef KEY1 +#undef VAL1 +#undef KEY2 +#undef VAL2 +} +END_TEST + START_TEST(test_metrics_lruq_rebuild) { #define NUM_ITEMS 3 @@ -1232,6 +1287,7 @@ slab_suite(void) tcase_add_test(tc_smetrics, test_metrics_insert_basic); tcase_add_test(tc_smetrics, test_metrics_insert_large); tcase_add_test(tc_smetrics, test_metrics_reserve_backfill_link); + tcase_add_test(tc_smetrics, test_metrics_flush_basic); tcase_add_test(tc_smetrics, test_metrics_lruq_rebuild); return s;