1
0
mirror of https://github.com/stefanocasazza/ULib.git synced 2025-09-28 19:05:55 +08:00
ULib/tests/ulib/test_file_config.cpp
stefanocasazza 350944c675 sync
2017-10-24 17:13:56 +02:00

186 lines
6.0 KiB
C++

// test_file_config.cpp
#include <ulib/file_config.h>
#include <ulib/debug/crono.h>
#include <iostream>
extern "C" {
#include "file_config.gperf"
}
static bool setIndex(UHashMap<void*>* pthis)
{
U_TRACE(5, "setIndex(%p)", pthis)
UHashMap<void*>::index = (UHashMap<void*>::lhash = gperf_hash(U_STRING_TO_PARAM(*UHashMap<void*>::lkey))) & pthis->getMask();
U_RETURN(false);
}
static void check(UFileConfig& y)
{
U_TRACE_NO_PARAM(5, "check()")
U_ASSERT( y[U_STRING_FROM_CONSTANT("LOG_FILE")] == U_STRING_FROM_CONSTANT("ldap_update.log") )
U_ASSERT( y[U_STRING_FROM_CONSTANT("LDAP_SERVER_ADDRESS")] == U_STRING_FROM_CONSTANT("10.10.15.1:389") )
U_ASSERT( y[U_STRING_FROM_CONSTANT("ROOT_DN")] == U_STRING_FROM_CONSTANT("o=BNL,c=IT") )
U_ASSERT( y[U_STRING_FROM_CONSTANT("ADMIN_DN")] == U_STRING_FROM_CONSTANT("cn=Manager,o=BNL,c=IT") )
U_ASSERT( y[U_STRING_FROM_CONSTANT("PASSWORD")] == U_STRING_FROM_CONSTANT("secret") )
U_ASSERT( y[U_STRING_FROM_CONSTANT("LDAP_SERVER_ADDRESS_MAIL")] == U_STRING_FROM_CONSTANT("10.10.15.1:389") )
U_ASSERT( y[U_STRING_FROM_CONSTANT("ROOT_DN_MAIL")] == U_STRING_FROM_CONSTANT("ou=Utenti,ou=e-family.it,o=BNL,c=IT") )
U_ASSERT( y[U_STRING_FROM_CONSTANT("ADMIN_DN_MAIL")] == U_STRING_FROM_CONSTANT("cn=Manager,o=BNL,c=IT") )
U_ASSERT( y[U_STRING_FROM_CONSTANT("PASSWORD_MAIL")] == U_STRING_FROM_CONSTANT("secret") )
U_ASSERT( y[U_STRING_FROM_CONSTANT("MAILHOST")] == U_STRING_FROM_CONSTANT("mailsrv.bf.bnl.it") )
U_ASSERT( y[U_STRING_FROM_CONSTANT("MAILDELIVERYOPTION")] == U_STRING_FROM_CONSTANT("mailbox") )
U_ASSERT( y[U_STRING_FROM_CONSTANT("FILE_WRONG_MESSAGE")] == U_STRING_FROM_CONSTANT("ldap_update.wrg") )
U_ASSERT( y[U_STRING_FROM_CONSTANT("MESSAGE_QUEUE_NAME")] == U_STRING_FROM_CONSTANT("LDAP.UPDATE.QUEUE") )
U_ASSERT( y[U_STRING_FROM_CONSTANT("MESSAGE_QUEUE_SERVER")] == U_STRING_FROM_CONSTANT("JAVA.CHANNEL/TCP/lobelia(1414)") )
U_ASSERT( y[U_STRING_FROM_CONSTANT("MESSAGE_QUEUE_MANAGER")] == U_STRING_FROM_CONSTANT("frontend") )
U_ASSERT( y[U_STRING_FROM_CONSTANT("MAX_ERROR_FOR_CONNECT")] == U_STRING_FROM_CONSTANT("2") )
U_ASSERT( y[U_STRING_FROM_CONSTANT("TIME_SLEEP_LDAP_ERROR")] == U_STRING_FROM_CONSTANT("10") )
U_ASSERT( y[U_STRING_FROM_CONSTANT("TIME_SLEEP_MQSERIES_ERROR")] == U_STRING_FROM_CONSTANT("60") )
U_ASSERT( y[U_STRING_FROM_CONSTANT("CHECK_QUOTING")] == U_STRING_FROM_CONSTANT("str = \"Manager of my caz\"...") )
}
static void check1(UFileConfig& y)
{
U_TRACE_NO_PARAM(5, "check1()")
UString value = y.erase(U_STRING_FROM_CONSTANT("LDAP_SERVER_ADDRESS"));
U_ASSERT( value == U_STRING_FROM_CONSTANT("10.10.15.1:389") )
U_ASSERT( y[U_STRING_FROM_CONSTANT("LDAP_SERVER_ADDRESS")] == UString::getStringNull() )
U_ASSERT( y.erase(U_STRING_FROM_CONSTANT("ROOT_DN")) == U_STRING_FROM_CONSTANT("o=BNL,c=IT") )
U_ASSERT( y[U_STRING_FROM_CONSTANT("ROOT_DN")] == UString::getStringNull() )
U_ASSERT( y.erase(U_STRING_FROM_CONSTANT("ADMIN_DN")) == U_STRING_FROM_CONSTANT("cn=Manager,o=BNL,c=IT") )
U_ASSERT( y[U_STRING_FROM_CONSTANT("ADMIN_DN")] == UString::getStringNull() )
y.table.clear();
U_ASSERT( y.empty() == true )
U_ASSERT( y[U_STRING_FROM_CONSTANT("TIME_SLEEP_MQSERIES_ERROR")] == UString::getStringNull() )
}
static void check2(UFileConfig& y)
{
U_TRACE_NO_PARAM(5, "check2()")
U_ASSERT( y.erase(U_STRING_FROM_CONSTANT("NOT_PRESENT")) == UString::getStringNull() )
U_ASSERT( y[U_STRING_FROM_CONSTANT("NOT_PRESENT")] == UString::getStringNull() )
y.table.insert(U_STRING_FROM_CONSTANT("NOT_PRESENT"), U_STRING_FROM_CONSTANT("60M"));
U_ASSERT( y[U_STRING_FROM_CONSTANT("NOT_PRESENT")] == U_STRING_FROM_CONSTANT("60M") )
UString value = y[U_STRING_FROM_CONSTANT("NOT_PRESENT")];
U_ASSERT( y.erase(U_STRING_FROM_CONSTANT("NOT_PRESENT")) == U_STRING_FROM_CONSTANT("60M") )
U_ASSERT( value == U_STRING_FROM_CONSTANT("60M") )
U_ASSERT( value.strtoul(true) == 60 * 1024 * 1024 )
U_ASSERT( value.strtoull(true) == 60LL * 1024LL * 1024LL )
}
static bool print(UStringRep* key, void* value)
{
U_TRACE(5, "print(%V,%p)", key, value)
cout << '\n';
cout.write(key->data(), key->size());
cout << " -> ";
cout.write(((UStringRep*)value)->data(), ((UStringRep*)value)->size());
U_RETURN(true);
}
static bool cancella(UStringRep* key, void* value)
{
U_TRACE(5, "cancella(%V,%p)", key, value)
static int cnt;
if (++cnt & 1) U_RETURN(true);
U_RETURN(false);
}
int U_EXPORT main (int argc, char* argv[], char* env[])
{
U_ULIB_INIT(argv);
U_TRACE(5,"main(%d)",argc)
UFileConfig y;
y.load(U_STRING_FROM_CONSTANT("inp/nodog.conf"));
y.destroy();
y.table.setIndexFunction(setIndex);
y.table.allocate(64);
y.load(U_STRING_FROM_CONSTANT("file_config.cf"));
U_ASSERT( y.table.size() == TOTAL_KEYWORDS )
uint32_t n = 1;
(void) y.table.first();
while (y.table.next()) ++n;
U_ASSERT( n == TOTAL_KEYWORDS )
check(y);
check1(y);
y.table.setIgnoreCase(false);
cin >> y.table;
cout << y.table;
UHashMap<UString> z, x;
z.assign(y.table);
cout << "\n" << z;
x.assign(z);
cout << "\n---------------------------";
z.callForAllEntrySorted(print);
z.callWithDeleteForAllEntry(cancella);
cout << "\n---------------------------";
z.callForAllEntrySorted(print);
cout << "\n---------------------------";
z.clear();
check1(y);
check2(y);
y.destroy();
y.table.assign(x);
x.clear();
U_ASSERT( y.table.invariant() )
// Time Consumed with num_iteration(10) = 543 ms
n = (argc > 1 ? u_atoi(argv[1]) : 5);
UCrono crono;
crono.start();
for (int i = 0; i < (int)n; ++i) check(y);
crono.stop();
check1(y);
if (argc > 1) printf("\n# Time Consumed with num_iteration(%d) = %ld ms\n", n, crono.getTimeElapsed());
}