2017-09-21 22:26:06 +03:00
/*
2015-03-05 17:40:52 +03:00
* Copyright ( C ) 2015 Red Hat , Inc .
*
2018-01-30 22:26:26 +03:00
* SPDX - License - Identifier : LGPL - 2.0 +
*
2015-03-05 17:40:52 +03:00
* This library is free software ; you can redistribute it and / or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation ; either
* version 2 of the License , or ( at your option ) any later version .
*
* This library 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
* Lesser General Public License for more details .
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library ; if not , write to the
* Free Software Foundation , Inc . , 59 Temple Place - Suite 330 ,
* Boston , MA 02111 - 1307 , USA .
*/
# include "config.h"
2015-05-05 01:08:49 +03:00
# include "libglnx.h"
2015-03-05 17:40:52 +03:00
# include <glib.h>
# include <stdlib.h>
# include <gio/gio.h>
# include <string.h>
# include "ot-keyfile-utils.h"
static GKeyFile * g_keyfile ;
static void
test_get_boolean_with_default ( void )
{
2016-11-29 06:03:53 +03:00
g_autoptr ( GError ) error = NULL ;
2015-03-05 17:40:52 +03:00
gboolean out = FALSE ;
g_assert ( ot_keyfile_get_boolean_with_default ( g_keyfile ,
" section " ,
" a_boolean_true " ,
FALSE ,
& out ,
& error ) ) ;
g_assert_true ( out ) ;
g_assert ( ot_keyfile_get_boolean_with_default ( g_keyfile ,
" section " ,
" a_boolean_false " ,
TRUE ,
& out ,
& error ) ) ;
g_assert_false ( out ) ;
g_assert ( ot_keyfile_get_boolean_with_default ( g_keyfile ,
" section " ,
" a_not_existing_boolean " ,
TRUE ,
& out ,
& error ) ) ;
g_assert_true ( out ) ;
2016-11-29 06:03:53 +03:00
g_clear_error ( & error ) ;
2015-03-05 17:40:52 +03:00
g_assert_false ( ot_keyfile_get_boolean_with_default ( g_keyfile ,
" a_fake_section " ,
" a_boolean_true " ,
FALSE ,
& out ,
& error ) ) ;
}
static void
test_get_value_with_default ( void )
{
2016-11-29 06:03:53 +03:00
g_autoptr ( GError ) error = NULL ;
g_autofree char * out = NULL ;
2015-03-05 17:40:52 +03:00
GLogLevelFlags always_fatal_mask ;
const char * section = " section " ;
/* Avoid that g_return_val_if_fail causes the test to fail. */
always_fatal_mask = g_log_set_always_fatal ( 0 ) ;
g_assert_false ( ot_keyfile_get_value_with_default ( g_keyfile ,
NULL ,
" value_foo " ,
" none " ,
& out ,
& error ) ) ;
2016-11-29 06:03:53 +03:00
g_clear_pointer ( & out , g_free ) ;
2015-03-05 17:40:52 +03:00
g_assert_false ( ot_keyfile_get_value_with_default ( g_keyfile ,
section ,
NULL ,
" none " ,
& out ,
& error ) ) ;
2016-11-29 06:03:53 +03:00
g_clear_pointer ( & out , g_free ) ;
2015-03-05 17:40:52 +03:00
g_assert_false ( ot_keyfile_get_value_with_default ( g_keyfile ,
section ,
NULL ,
" something " ,
& out ,
& error ) ) ;
2016-11-29 06:03:53 +03:00
g_clear_pointer ( & out , g_free ) ;
2015-03-05 17:40:52 +03:00
/* Restore the old mask. */
g_log_set_always_fatal ( always_fatal_mask ) ;
g_assert ( ot_keyfile_get_value_with_default ( g_keyfile ,
section ,
" value_foo " ,
" none " ,
& out ,
& error ) ) ;
g_assert_cmpstr ( out , = = , " foo " ) ;
2016-11-29 06:03:53 +03:00
g_clear_pointer ( & out , g_free ) ;
2015-03-05 17:40:52 +03:00
g_assert ( ot_keyfile_get_value_with_default ( g_keyfile ,
section ,
" a_not_existing_value " ,
" correct " ,
& out ,
& error ) ) ;
g_assert_cmpstr ( out , = = , " correct " ) ;
2016-11-29 06:03:53 +03:00
g_clear_pointer ( & out , g_free ) ;
2015-03-05 17:40:52 +03:00
g_assert_false ( ot_keyfile_get_value_with_default ( g_keyfile ,
" a_fake_section " ,
" a_value_true " ,
" no value " ,
& out ,
& error ) ) ;
2016-11-29 06:03:53 +03:00
g_clear_error ( & error ) ;
g_clear_pointer ( & out , g_free ) ;
2015-03-05 17:40:52 +03:00
}
static void
test_copy_group ( void )
{
2015-05-05 19:13:09 +03:00
g_auto ( GStrv ) keys = NULL ;
g_auto ( GStrv ) keys2 = NULL ;
2015-03-05 17:40:52 +03:00
gsize length , length2 , ii ;
GKeyFile * tmp = g_key_file_new ( ) ;
const char * section = " section " ;
GLogLevelFlags always_fatal_mask ;
/* Avoid that g_return_val_if_fail causes the test to fail. */
always_fatal_mask = g_log_set_always_fatal ( 0 ) ;
g_assert_false ( ot_keyfile_copy_group ( NULL , tmp , section ) ) ;
g_assert_false ( ot_keyfile_copy_group ( g_keyfile , NULL , section ) ) ;
g_assert_false ( ot_keyfile_copy_group ( g_keyfile , tmp , NULL ) ) ;
/* Restore the old mask. */
g_log_set_always_fatal ( always_fatal_mask ) ;
g_assert_true ( ot_keyfile_copy_group ( g_keyfile , tmp , section ) ) ;
keys = g_key_file_get_keys ( g_keyfile , section , & length , NULL ) ;
keys2 = g_key_file_get_keys ( tmp , section , & length2 , NULL ) ;
g_assert_cmpint ( length , = = , length2 ) ;
for ( ii = 0 ; ii < length ; ii + + )
{
2015-05-05 00:58:26 +03:00
g_autofree char * value = NULL ;
g_autofree char * value2 = NULL ;
2015-03-05 17:40:52 +03:00
value = g_key_file_get_value ( g_keyfile , section , keys [ ii ] , NULL ) ;
value2 = g_key_file_get_value ( g_keyfile , section , keys [ ii ] , NULL ) ;
g_assert_cmpstr ( value , = = , value2 ) ;
}
g_key_file_free ( tmp ) ;
}
static void
fill_keyfile ( GKeyFile * file )
{
g_key_file_set_boolean ( file , " section " , " a_boolean_true " , TRUE ) ;
g_key_file_set_boolean ( file , " section " , " a_boolean_false " , FALSE ) ;
g_key_file_set_value ( file , " section " , " value_foo " , " foo " ) ;
g_key_file_set_value ( file , " section " , " value_bar " , " bar " ) ;
}
int main ( int argc , char * * argv )
{
int ret ;
g_test_init ( & argc , & argv , NULL ) ;
g_keyfile = g_key_file_new ( ) ;
fill_keyfile ( g_keyfile ) ;
g_test_add_func ( " /keyfile-utils/get-boolean-with-default " , test_get_boolean_with_default ) ;
g_test_add_func ( " /keyfile-utils/get-value-with-default " , test_get_value_with_default ) ;
g_test_add_func ( " /keyfile-utils/copy-group " , test_copy_group ) ;
ret = g_test_run ( ) ;
g_key_file_free ( g_keyfile ) ;
return ret ;
}