You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ffdb/test.c

141 lines
3.1 KiB
C

#include "test.h"
#include "trie.h"
#include <sys/stat.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define TEST_DB "/tmp/ffdb-test"
static bool test_result( bool result, const char* test_name )
{
if( result ) {
printf( "[ PASS ] %s\n", test_name );
} else {
printf( "[ FAIL ] %s\n", test_name );
}
return result;
}
#define TEST( cond ) if( ((cond)) ) { printf( "\t[TEST] %s passed\n", #cond ); } else { printf( "\t[TEST] %s failed at " __FILE__ ":%d\n", #cond, __LINE__ ); result &= false; }
static void reset()
{
system( "rm -Rf " TEST_DB );
mkdir( TEST_DB, 0755 );
};
static bool test_1_simple_set()
{
bool result = true;
reset();
result &= ffdb_trie_set( TEST_DB, "https://example.com/actor", "T" );
result &= ffdb_trie_set( TEST_DB, "https://apogee.polaris-1.work/owner/actor", "T" );
return test_result( result, "ffdb test 1: simple set" );
}
static bool test_2_check_overwrite()
{
bool result = true;
reset();
TEST( ffdb_trie_set( TEST_DB, "633", "T" ) );
TEST( ffdb_trie_set( TEST_DB, "632", "T" ) );
TEST( ffdb_trie_set( TEST_DB, "633", "T" ) );
char* value;
TEST( value = ffdb_trie_get( TEST_DB, "633" ) );
TEST( 0 == strcmp(value,"T") );
free(value);
return test_result( result, "ffdb test 2: overwrite test" );
}
static bool test_3_consolidation_on_get()
{
reset();
bool result = true;
FILE* f = fopen(TEST_DB "/%ROOT|", "w");
fprintf(f,"{\"1\":2}\n");
fclose(f);
f = fopen( TEST_DB "/%ROOT|1", "w" );
fprintf(f,"{\"1\":\"T\",\"2\":\"F\"}\n");
fclose(f);
char* value = ffdb_trie_get( TEST_DB, "11" );
TEST( 0 == strcmp(value,"T") );
free(value);
value = ffdb_trie_get( TEST_DB, "12" );
TEST( 0 == strcmp(value,"F") );
free(value);
struct stat s = {0};
TEST( 0 != stat( TEST_DB "/%ROOT|1", &s ) );
TEST( 0 == stat( TEST_DB "/%ROOT|", &s ) );
return test_result( result, "ffdb test 3: consolidation on get" );
}
bool test_4_apogee_stub_corruption()
{
reset();
bool result = true;
TEST( ffdb_trie_set( TEST_DB, "992", "T" ) );
for( int i = 0; i < 3; ++i ) {
TEST( ffdb_trie_set( TEST_DB, "992", NULL ) );
}
TEST( ffdb_trie_set( TEST_DB, "993", NULL ) );
TEST( ffdb_trie_set( TEST_DB, "994", NULL ) );
TEST( ffdb_trie_set( TEST_DB, "995", "T" ) );
for( int i = 0; i < 5; ++i ) {
TEST( ffdb_trie_set( TEST_DB, "995", NULL ) );
}
for( int i = 0; i < 2; ++i ) {
TEST( ffdb_trie_set( TEST_DB, "994", NULL ) );
}
for( int i = 0; i < 2; ++i ) {
TEST( ffdb_trie_set( TEST_DB, "996", "T" ) );
}
TEST( ffdb_trie_set( TEST_DB, "997", NULL ) );
TEST( ffdb_trie_set( TEST_DB, "998", "T" ) );
char* value;
TEST( !( value = ffdb_trie_get( TEST_DB, "9966" ) ) );
free(value);
TEST( ffdb_trie_set( TEST_DB, "998", NULL ) );
TEST( !( value = ffdb_trie_get( TEST_DB, "9966" ) ) );
free(value);
return test_result( result, "ffdb test 4: apogee stub corruption" );
}
bool ffdb_test()
{
return true
&& test_1_simple_set()
&& test_2_check_overwrite()
&& test_3_consolidation_on_get()
&& test_4_apogee_stub_corruption()
;
}
#ifdef STANDALONE_TEST
int main()
{
return ffdb_test() ? EXIT_SUCCESS : EXIT_FAILURE;
}
#endif