platform/tests: add unit test checking consistency of NMPClass

This commit is contained in:
Thomas Haller 2022-11-04 12:24:08 +01:00
parent 8feeb199ad
commit 5da0d18fbe
No known key found for this signature in database
GPG key ID: 29C2366E4DFC5728

View file

@ -6,19 +6,12 @@
#include "libnm-platform/nm-netlink.h"
#include "libnm-platform/nmp-netns.h"
#include "libnm-platform/nm-platform-utils.h"
#include "libnm-platform/nmp-object.h"
#include "libnm-glib-aux/nm-test-utils.h"
/*****************************************************************************/
void
_nm_logging_clear_platform_logging_cache(void)
{
/* this symbols is required by nm-log-core library. */
}
/*****************************************************************************/
static void
test_use_symbols(void)
{
@ -140,6 +133,53 @@ test_nmp_link_mode_all_advertised_modes_bits(void)
/*****************************************************************************/
static void
test_nmpclass_consistency(void)
{
NMPObjectType obj_type;
NMPObjectType obj_type2;
G_STATIC_ASSERT(G_N_ELEMENTS(_nmp_classes) == NMP_OBJECT_TYPE_MAX);
for (obj_type = 1; obj_type <= NMP_OBJECT_TYPE_MAX; obj_type++) {
const NMPClass *klass = nmp_class_from_type(obj_type);
gboolean is_lnk;
g_assert(klass);
g_assert(klass == &_nmp_classes[obj_type - 1]);
g_assert_cmpint(klass->obj_type, ==, obj_type);
g_assert(klass->obj_type_name);
g_assert((!!klass->cmd_obj_cmp) == (!!klass->cmd_obj_hash_update));
g_assert((!!klass->cmd_plobj_cmp) == (!!klass->cmd_plobj_hash_update));
g_assert((!!klass->cmd_obj_cmp) != (!!klass->cmd_plobj_cmp));
g_assert((!!klass->cmd_obj_hash_update) != (!!klass->cmd_plobj_hash_update));
g_assert_cmpint(klass->sizeof_public, >, 0);
g_assert_cmpint(klass->sizeof_data, >=, klass->sizeof_public);
g_assert((!!klass->cmd_obj_to_string) != (!!klass->cmd_plobj_to_string));
g_assert(!klass->cmd_plobj_to_string_id || klass->cmd_plobj_to_string);
is_lnk = (obj_type >= NMP_OBJECT_TYPE_LNK_BRIDGE && obj_type <= NMP_OBJECT_TYPE_LNK_BOND);
if (klass->lnk_link_type == NM_LINK_TYPE_NONE) {
G_STATIC_ASSERT(NM_LINK_TYPE_NONE == 0);
g_assert(!is_lnk);
} else
g_assert(is_lnk);
for (obj_type2 = 1; obj_type2 < obj_type; obj_type2++) {
const NMPClass *klass2 = nmp_class_from_type(obj_type2);
g_assert_cmpstr(klass->obj_type_name, !=, klass2->obj_type_name);
}
}
}
/*****************************************************************************/
NMTST_DEFINE();
int
@ -150,6 +190,7 @@ main(int argc, char **argv)
g_test_add_func("/nm-platform/test_use_symbols", test_use_symbols);
g_test_add_func("/nm-platform/test_nmp_link_mode_all_advertised_modes_bits",
test_nmp_link_mode_all_advertised_modes_bits);
g_test_add_func("/nm-platform/test_nmpclass_consistency", test_nmpclass_consistency);
return g_test_run();
}