From cec42466c4f35c108303e620bd672c5cf97c4253 Mon Sep 17 00:00:00 2001 From: "gordon%netscape.com" Date: Tue, 23 Jan 2001 04:16:27 +0000 Subject: [PATCH] Separate tests for reading and writing. --- netwerk/test/TestDBMAccess.cpp | 264 ++++++++++++++++++++------------- 1 file changed, 158 insertions(+), 106 deletions(-) diff --git a/netwerk/test/TestDBMAccess.cpp b/netwerk/test/TestDBMAccess.cpp index 3418396e813c..d3adad380e94 100644 --- a/netwerk/test/TestDBMAccess.cpp +++ b/netwerk/test/TestDBMAccess.cpp @@ -1,13 +1,26 @@ /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- -Subject: - Date: - Thu, 11 Jan 2001 16:38:10 -0800 - From: - Doug Turner - To: - gordon@netscape.com -*/ - + * + * The contents of this file are subject to the Mozilla Public + * License Version 1.1 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or + * implied. See the License for the specific language governing + * rights and limitations under the License. + * + * The Original Code is nsCacheManager.h, released January 22, 2001. + * + * The Initial Developer of the Original Code is Netscape Communications + * Corporation. Portions created by Netscape are + * Copyright (C) 2001 Netscape Communications Corporation. All + * Rights Reserved. + * + * Contributor(s): + * Doug Turner + * Gordon Sheridan + */ #include "nscore.h" @@ -15,83 +28,90 @@ Subject: #include "mcom_db.h" #include "nsString.h" -DB* myDB; - #define DATASIZE 512 #define ENTRYCOUNT 512 #define USE_ENTRY_ID 1 +#define EXTRA_LOOKUP 1 + +DB* myDB; +HASHINFO hash_info = { + 16*1024 , /* bucket size */ + 0 , /* fill factor */ + 0 , /* number of elements */ + 0 , /* bytes to cache */ + 0 , /* hash function */ + 0} ; /* byte order */ + + + + +int writeDBM(int cycles) +{ + DBT db_key, db_data ; + PRIntervalTime time = PR_IntervalNow(); + + while (cycles--) { + // create database file + myDB = dbopen("/tmp/foodb", + O_RDWR | O_CREAT , + 0600 , + DB_HASH , + &hash_info) ; + + if (!myDB) { + printf("no db!\n"); + return -1; + } + + // initalize data to write + int x; + char * data = (char*) malloc(DATASIZE); + for (x=0; xput)(myDB, &db_key, &db_data, 0)) { + printf("--> Error putting\n"); + return -1; + } +#if USE_ENTRY_ID + db_key.data = (void*)&x; + db_key.size = sizeof(x); + db_data.data = (char*)keyName; + db_data.size = keyName.Length(); + + if(0 != (*myDB->put)(myDB, &db_key, &db_data, 0)) { + printf("--> Error putting\n"); + return -1; + } +#endif + } + + (*myDB->sync)(myDB, 0); + free(data); + } + return PR_IntervalToMilliseconds( PR_IntervalNow() - time); +} + int -testDBM(int cycles) +readDBM(int cycles) { - - // create database file - HASHINFO hash_info = { - 16*1024 , /* bucket size */ - 0 , /* fill factor */ - 0 , /* number of elements */ - 0 , /* bytes to cache */ - 0 , /* hash function */ - 0} ; /* byte order */ - - - myDB = dbopen("/tmp/foodb", - O_RDWR | O_CREAT , - 0600 , - DB_HASH , - &hash_info) ; - - if (!myDB) { - printf("no db!\n"); - return -1; - } - - // initalize data to write - int x; - char * data = (char*) malloc(DATASIZE); - for (x=0; xput)(myDB, &db_key, &db_data, 0)) { - printf("--> Error putting\n"); - return -1; - } -#if USE_ENTRY_ID - db_key.data = (void*)&x; - db_key.size = sizeof(x); - db_data.data = (char*)keyName; - db_data.size = keyName.Length(); - - if(0 != (*myDB->put)(myDB, &db_key, &db_data, 0)) { - printf("--> Error putting\n"); - return -1; - } -#endif - } - - (*myDB->sync)(myDB, 0); - free(data); - // begin timing "lookups" int status = 0 ; + DBT db_key, db_data ; PRIntervalTime time = PR_IntervalNow(); while (cycles--) { - for (x=1; x<=ENTRYCOUNT; x++) { + for (int x=1; x<=ENTRYCOUNT; x++) { #if USE_ENTRY_ID DBT entry_data; @@ -116,6 +136,17 @@ testDBM(int cycles) printf("Bad Status %d\n", status); return -1; } +#if EXTRA_LOOKUP + db_key.data = (void*)&x; + db_key.size = sizeof(x); + + status = (*myDB->get)(myDB, &db_key, &entry_data, 0); + if(status != 0) { + printf("Bad Status %d\n", status); + return -1; + } + +#endif } } (*myDB->sync)(myDB, 0); @@ -126,7 +157,7 @@ testDBM(int cycles) int -testFile(int cycles) +writeFile(int cycles) { FILE* file; int fStatus; @@ -134,39 +165,51 @@ testFile(int cycles) char * data = (char*) malloc(DATASIZE); for (x=0; x (%d) milliseconds\n", totalDBMTime); - printf("total file IO ---- > (%d) milliseconds\n", totalFileTime); + printf("total write dbm IO ---- > (%d) milliseconds\n", totalDBMTime); + printf("total write file IO ---- > (%d) milliseconds\n", totalFileTime); + + totalDBMTime = readDBM(32); + totalFileTime = readFile(32); + + printf("\n"); + printf("total read dbm IO ---- > (%d) milliseconds\n", totalDBMTime); + printf("total read file IO ---- > (%d) milliseconds\n", totalFileTime); + + return 0; }