@@ -49,12 +49,14 @@ class SmokeTestCacheSuite : public CppUnit::TestFixture, public TestBase {
4949 void smoke_test_cache_09 (); // TC 09
5050 void smoke_test_cache_10 (); // TC 10
5151 void smoke_test_cache_11 (); // TC 11
52+ void smoke_test_cache_12 (); // TC 12
5253
5354 int StoreCacheLargeObj (MDBM *cache_db, int xobjNum = 0 );
5455 void FetchCacheLargeObj (MDBM *cache_db, int key);
5556 void DeleteCacheLargeObj (MDBM *cache_db, int key);
5657 void cache_common_tests (MDBM *cache_db, bool modify);
5758 MDBM* create_mdbm_cache (const string& cache_name, int openflags, int mode);
59+ MDBM* create_mdbm_cache_40m (const string& cache_name, int openflags, int mode);
5860private:
5961 static string _basePath;
6062 static int _pageSize;
@@ -282,6 +284,28 @@ void SmokeTestCacheSuite::smoke_test_cache_11() {
282284 CPPUNIT_ASSERT ((ret = mdbm_set_cachemode (cache_db, MDBM_CACHEMODE_LRU)) != 0 );
283285}
284286
287+ void SmokeTestCacheSuite::smoke_test_cache_12 () {
288+ string trprefix = " TC 12 : Smoke Test DB Caching: " ;
289+ TRACE_TEST_CASE (trprefix);
290+ const string mdbm_name = _basePath + " /smoke_test_cache_12.mdbm" ;
291+ int ret = -1 , i;
292+ int openflags = MDBM_O_RDWR | MDBM_O_CREAT | MDBM_O_TRUNC | MDBM_CREATE_V3 | MDBM_CACHE_MODIFY | MDBM_LARGE_OBJECTS | MDBM_DBSIZE_MB;
293+
294+ // create mdbm as cache
295+ MdbmHolder cache_db = create_mdbm_cache_40m (mdbm_name, openflags, MDBM_CACHEMODE_LRU);
296+
297+ // store large objects
298+ for (i = 0 ; i < 1024 ; ++i) {
299+ ret = StoreCacheLargeObj (cache_db, i);
300+ if (ret == 0 ) {
301+ CPPUNIT_ASSERT_EQUAL (0 , ret);
302+ FetchCacheLargeObj (cache_db, i);
303+ } else {
304+ CPPUNIT_ASSERT_EQUAL (-1 , ret);
305+ }
306+ }
307+ }
308+
285309void SmokeTestCacheSuite::cache_common_tests (MDBM* cache_db, bool modify) {
286310 kvpair kv;
287311
@@ -334,6 +358,27 @@ MDBM* SmokeTestCacheSuite::create_mdbm_cache(const string& cache_name, int openf
334358 return cache_db;
335359}
336360
361+ MDBM* SmokeTestCacheSuite::create_mdbm_cache_40m (const string& cache_name, int openflags, int mode) {
362+ MDBM *cache_db = NULL ;
363+ int ret = -1 ;
364+
365+ CPPUNIT_ASSERT ((cache_db = mdbm_open (cache_name.c_str (), openflags, 0644 , 4096 , 40 )) != NULL );
366+
367+ if (!cache_db) {
368+ stringstream msg;
369+ msg << cache_name << " Failed to mdbm_open DB(errno=" << errno;
370+ msg << endl;
371+ cerr << msg.str ();
372+ assert (cache_db);
373+ return NULL ;
374+ }
375+
376+ CPPUNIT_ASSERT ((ret = mdbm_sethash (cache_db, MDBM_HASH_MD5)) == 1 );
377+ CPPUNIT_ASSERT ((ret = mdbm_limit_size_v3 (cache_db, mdbm_get_size (cache_db) / mdbm_get_page_size (cache_db), NULL , NULL )) == 0 );
378+ CPPUNIT_ASSERT ((ret = mdbm_set_cachemode (cache_db, mode)) == 0 );
379+
380+ return cache_db;
381+ }
337382
338383int SmokeTestCacheSuite::StoreCacheLargeObj (MDBM *cache_db, int objNum) {
339384 char kbuf[32 ], buf[256 ];
@@ -396,6 +441,7 @@ class MdbmSmokeTest : public SmokeTestCacheSuite {
396441 CPPUNIT_TEST (smoke_test_cache_09); // TC 09
397442 CPPUNIT_TEST (smoke_test_cache_10); // TC 10
398443 CPPUNIT_TEST (smoke_test_cache_11); // TC 11
444+ CPPUNIT_TEST (smoke_test_cache_12); // TC 12
399445 CPPUNIT_TEST_SUITE_END ();
400446
401447public:
0 commit comments