2018-10-03 23:18:55 +03:00
/*
* Ensure lmdb backend is disabled
*
* Copyright ( C ) Mathieu Parent < math . parent @ gmail . com > 2019
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation ; either version 3 of the License , or
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program . If not , see < http : //www.gnu.org/licenses/>.
*
*/
/*
* Ensure lmdb backend is disabled
*
* Setup and tear down code copied from ldb_lmdb_test . c
*/
/*
* from cmocka . c :
* These headers or their equivalents should be included prior to
* including
* this header file .
*
* # include < stdarg . h >
* # include < stddef . h >
* # include < setjmp . h >
*
* This allows test applications to use custom definitions of C standard
* library functions and types .
*
*/
# include <stdarg.h>
# include <stddef.h>
2019-12-15 19:08:24 +03:00
# include <stdint.h>
2018-10-03 23:18:55 +03:00
# include <setjmp.h>
# include <cmocka.h>
# include <errno.h>
# include <unistd.h>
# include <talloc.h>
# include <tevent.h>
# include <ldb.h>
# define TEST_BE "mdb"
struct ldbtest_ctx {
struct tevent_context * ev ;
struct ldb_context * ldb ;
const char * dbfile ;
const char * lockfile ; /* lockfile is separate */
const char * dbpath ;
} ;
static void unlink_old_db ( struct ldbtest_ctx * test_ctx )
{
int ret ;
errno = 0 ;
ret = unlink ( test_ctx - > lockfile ) ;
if ( ret = = - 1 & & errno ! = ENOENT ) {
fail ( ) ;
}
errno = 0 ;
ret = unlink ( test_ctx - > dbfile ) ;
if ( ret = = - 1 & & errno ! = ENOENT ) {
fail ( ) ;
}
}
static int ldbtest_noconn_setup ( void * * state )
{
struct ldbtest_ctx * test_ctx ;
test_ctx = talloc_zero ( NULL , struct ldbtest_ctx ) ;
assert_non_null ( test_ctx ) ;
test_ctx - > ev = tevent_context_init ( test_ctx ) ;
assert_non_null ( test_ctx - > ev ) ;
test_ctx - > ldb = ldb_init ( test_ctx , test_ctx - > ev ) ;
assert_non_null ( test_ctx - > ldb ) ;
test_ctx - > dbfile = talloc_strdup ( test_ctx , " apitest.ldb " ) ;
assert_non_null ( test_ctx - > dbfile ) ;
test_ctx - > lockfile = talloc_asprintf ( test_ctx , " %s-lock " ,
test_ctx - > dbfile ) ;
assert_non_null ( test_ctx - > lockfile ) ;
test_ctx - > dbpath = talloc_asprintf ( test_ctx ,
TEST_BE " ://%s " , test_ctx - > dbfile ) ;
assert_non_null ( test_ctx - > dbpath ) ;
unlink_old_db ( test_ctx ) ;
* state = test_ctx ;
return 0 ;
}
static int ldbtest_noconn_teardown ( void * * state )
{
struct ldbtest_ctx * test_ctx = talloc_get_type_abort ( * state ,
struct ldbtest_ctx ) ;
unlink_old_db ( test_ctx ) ;
talloc_free ( test_ctx ) ;
return 0 ;
}
static int ldbtest_setup ( void * * state )
{
struct ldbtest_ctx * test_ctx ;
int ret ;
ldbtest_noconn_setup ( ( void * * ) & test_ctx ) ;
ret = ldb_connect ( test_ctx - > ldb , test_ctx - > dbpath , 0 , NULL ) ;
assert_int_equal ( ret , LDB_ERR_OTHER ) ;
* state = test_ctx ;
return 0 ;
}
static int ldbtest_teardown ( void * * state )
{
struct ldbtest_ctx * test_ctx = talloc_get_type_abort ( * state ,
struct ldbtest_ctx ) ;
ldbtest_noconn_teardown ( ( void * * ) & test_ctx ) ;
return 0 ;
}
static void test_ldb_lmdb_not_found ( void * * state )
{
// Actual test in ldbtest_setup
assert_int_equal ( 0 , 0 ) ;
}
int main ( int argc , const char * * argv )
{
const struct CMUnitTest tests [ ] = {
cmocka_unit_test_setup_teardown (
test_ldb_lmdb_not_found ,
ldbtest_setup ,
ldbtest_teardown ) ,
} ;
2024-02-05 05:28:50 +03:00
cmocka_set_message_output ( CM_OUTPUT_SUBUNIT ) ;
2018-10-03 23:18:55 +03:00
return cmocka_run_group_tests ( tests , NULL , NULL ) ;
}