it2s-itss-ldm/tests/test_entity.c

267 lines
13 KiB
C

#include <entity.h>
#include <unity.h>
// static ldm_entity_storage_t entities;
void setUp(void) {
// set stuff up here
}
void tearDown(void) {
// clean stuff up here
}
static void testEntityInit(void) {
static ldm_entity_storage_t entities;
ldm_entity_storage_init(&entities);
for (int i = 0; i < ldm_entity_storage_map_size; ++i) {
TEST_ASSERT_NULL_MESSAGE(entities.providers[i], "entities.providers[i] should be NULL");
TEST_ASSERT_NULL_MESSAGE(entities.consumers[i], "entities.consumers[i] should be NULL");
}
}
static void testEntityAddDeleteSingle(void) {
int rv = 0;
static ldm_entity_storage_t entities;
ldm_entity_storage_init(&entities);
// provider configuration
ldm_its_aid_t prov_its_aid = 10;
ldm_permissions_t prov_perm;
for (int i = 0; i < ldm_data_type_total; ++i) {
prov_perm.list[i] = false;
if (i == ldm_data_type_CAM) {
prov_perm.list[i] = true;
}
}
uint64_t prov_def_val = 1000; // ms
// add a provider
rv = ldm_entity_storage_add_provider(&entities, prov_its_aid, prov_perm, prov_def_val);
TEST_ASSERT_MESSAGE(rv == 0, "Provider was not added to entities");
rv = ldm_entity_storage_get_permission_provider(&entities, prov_its_aid, ldm_data_type_CAM);
TEST_ASSERT_MESSAGE(rv == 1, "Provider was not verified correctly");
TEST_ASSERT_MESSAGE(ldm_entity_storage_get_default_validity_provider(&entities, prov_its_aid) == prov_def_val,
"Provider default validity is not correct");
rv = ldm_entity_storage_revoke(&entities, prov_its_aid);
TEST_ASSERT_MESSAGE(rv == 0, "Provider was not revoked from entities");
rv = ldm_entity_storage_get_permission_provider(&entities, prov_its_aid, ldm_data_type_CAM);
TEST_ASSERT_MESSAGE(rv == 1, "Provider was not verified correctly");
rv = ldm_entity_storage_get_revoked_provider(&entities, prov_its_aid);
TEST_ASSERT_MESSAGE(rv == 1, "Provider was not revoked correctly");
// delete a provider
rv = ldm_entity_storage_delete_provider(&entities, prov_its_aid);
TEST_ASSERT_MESSAGE(rv == 0, "Provider was not deleted from entities");
for (int i = 0; i < ldm_entity_storage_map_size; ++i) {
TEST_ASSERT_NULL_MESSAGE(entities.providers[i], "entities.providers[i] should be NULL");
TEST_ASSERT_NULL_MESSAGE(entities.consumers[i], "entities.consumers[i] should be NULL");
}
rv = ldm_entity_storage_get_permission_provider(&entities, prov_its_aid, ldm_data_type_CAM);
TEST_ASSERT_MESSAGE(rv == 0, "Provider was not deleted correctly");
rv = ldm_entity_storage_revoke(&entities, prov_its_aid);
TEST_ASSERT_MESSAGE(rv == 1, "Provider was not deleted correctly");
// consumer configuration
ldm_its_aid_t cons_its_aid = 20;
ldm_permissions_t cons_perm;
for (int i = 0; i < ldm_data_type_total; ++i) {
cons_perm.list[i] = false;
if (i == ldm_data_type_CPM) {
cons_perm.list[i] = true;
}
}
ldm_area_t cons_aoi;
cons_aoi.type = ldm_area_type_circle;
cons_aoi.shape.circle.radius = 10000; // 1000.0m
// add a consumer
rv = ldm_entity_storage_add_consumer(&entities, cons_its_aid, cons_perm, cons_aoi);
TEST_ASSERT_MESSAGE(rv == 0, "Consumer was not added to entities");
rv = ldm_entity_storage_get_permission_consumer(&entities, cons_its_aid, ldm_data_type_CPM);
TEST_ASSERT_MESSAGE(rv == 1, "Consumer was not verified correctly");
rv = ldm_entity_storage_revoke(&entities, cons_its_aid);
TEST_ASSERT_MESSAGE(rv == 0, "Consumer was not revoked from entities");
rv = ldm_entity_storage_get_permission_consumer(&entities, cons_its_aid, ldm_data_type_CPM);
TEST_ASSERT_MESSAGE(rv == 1, "Consumer was not verified correctly");
rv = ldm_entity_storage_get_revoked_consumer(&entities, cons_its_aid);
TEST_ASSERT_MESSAGE(rv == 1, "Consumer was not revoked correctly");
// delete a consumer
rv = ldm_entity_storage_delete_consumer(&entities, cons_its_aid);
TEST_ASSERT_MESSAGE(rv == 0, "Consumer was not deleted from entities");
for (int i = 0; i < ldm_entity_storage_map_size; ++i) {
TEST_ASSERT_NULL_MESSAGE(entities.providers[i], "entities.providers[i] should be NULL");
TEST_ASSERT_NULL_MESSAGE(entities.consumers[i], "entities.consumers[i] should be NULL");
}
rv = ldm_entity_storage_get_permission_consumer(&entities, cons_its_aid, ldm_data_type_CPM);
TEST_ASSERT_MESSAGE(rv == 0, "Consumer was not deleted correctly");
rv = ldm_entity_storage_revoke(&entities, cons_its_aid);
TEST_ASSERT_MESSAGE(rv == 1, "Consumer was not deleted correctly");
}
static void testEntityAddDeleteMultiple(void) {
int rv = 0;
ldm_entity_storage_t entities;
ldm_entity_storage_init(&entities);
// provider configuration
ldm_its_aid_t prov_its_aid = 10;
ldm_permissions_t prov_perm;
for (int i = 0; i < ldm_data_type_total; ++i) {
prov_perm.list[i] = false;
if (i == ldm_data_type_CAM) {
prov_perm.list[i] = true;
}
}
uint64_t prov_def_val = 1000; // ms
// consumer configuration
ldm_its_aid_t cons_its_aid = 20;
ldm_permissions_t cons_perm;
for (int i = 0; i < ldm_data_type_total; ++i) {
cons_perm.list[i] = false;
if (i == ldm_data_type_CPM) {
cons_perm.list[i] = true;
}
}
ldm_area_t cons_aoi;
cons_aoi.type = ldm_area_type_circle;
cons_aoi.shape.circle.radius = 10000; // 1000.0m
// add multiple providers and consumers
for (int i = 0; i < ldm_entity_storage_map_size * 3; ++i) {
if (i == ldm_entity_storage_map_size * 2 + 1) { // change permissions
prov_perm.list[ldm_data_type_DENM] = true;
cons_perm.list[ldm_data_type_CAM] = true;
prov_def_val = 2000;
}
rv = ldm_entity_storage_add_provider(&entities, i, prov_perm, prov_def_val);
TEST_ASSERT_MESSAGE(rv == 0, "Provider was not added to entities");
rv = ldm_entity_storage_add_consumer(&entities, i, cons_perm, cons_aoi);
TEST_ASSERT_MESSAGE(rv == 0, "Consumer was not added to entities");
}
// verify provider permissions
rv = ldm_entity_storage_get_permission_provider(&entities, ldm_entity_storage_map_size * 2, ldm_data_type_CAM);
TEST_ASSERT_MESSAGE(rv == 1, "Provider permission was not verified correctly");
rv = ldm_entity_storage_get_permission_provider(&entities, ldm_entity_storage_map_size * 2, ldm_data_type_DENM);
TEST_ASSERT_MESSAGE(rv == 0, "Provider permission was not verified correctly");
rv = ldm_entity_storage_get_permission_provider(&entities, ldm_entity_storage_map_size * 2 + 1, ldm_data_type_CAM);
TEST_ASSERT_MESSAGE(rv == 1, "Provider permission was not verified correctly");
rv = ldm_entity_storage_get_permission_provider(&entities, ldm_entity_storage_map_size * 2 + 1, ldm_data_type_DENM);
TEST_ASSERT_MESSAGE(rv == 1, "Provider permission was not verified correctly");
// check provider default validity
uint64_t val = ldm_entity_storage_get_default_validity_provider(&entities, ldm_entity_storage_map_size * 2);
TEST_ASSERT_EQUAL_MESSAGE(val, 1000, "Provider default validity was not retrieved correctly");
val = ldm_entity_storage_get_default_validity_provider(&entities, ldm_entity_storage_map_size * 2 + 1);
TEST_ASSERT_EQUAL_MESSAGE(val, 2000, "Provider default validity was not retrieved correctly");
// verify consumer permissions
rv = ldm_entity_storage_get_permission_consumer(&entities, ldm_entity_storage_map_size * 2, ldm_data_type_CPM);
TEST_ASSERT_MESSAGE(rv == 1, "Consumer permission was not verified correctly");
rv = ldm_entity_storage_get_permission_consumer(&entities, ldm_entity_storage_map_size * 2, ldm_data_type_CAM);
TEST_ASSERT_MESSAGE(rv == 0, "Consumer permission was not verified correctly");
rv = ldm_entity_storage_get_permission_consumer(&entities, ldm_entity_storage_map_size * 2 + 1, ldm_data_type_CPM);
TEST_ASSERT_MESSAGE(rv == 1, "Consumer permission was not verified correctly");
rv = ldm_entity_storage_get_permission_consumer(&entities, ldm_entity_storage_map_size * 2 + 1, ldm_data_type_CAM);
TEST_ASSERT_MESSAGE(rv == 1, "Consumer permission was not verified correctly");
// check entity revocation (occurs for the same its-aid for both providers and consumers)
rv = ldm_entity_storage_revoke(&entities, ldm_entity_storage_map_size * 2 + 1);
TEST_ASSERT_MESSAGE(rv == 0, "Consumer was not revoked from entities");
rv = ldm_entity_storage_get_permission_provider(&entities, ldm_entity_storage_map_size * 2 + 1, ldm_data_type_CPM);
TEST_ASSERT_MESSAGE(rv == 0, "Provider was not revoked correctly");
rv = ldm_entity_storage_get_revoked_provider(&entities, ldm_entity_storage_map_size * 2 + 1);
TEST_ASSERT_MESSAGE(rv == 1, "Provider was not revoked correctly");
rv = ldm_entity_storage_get_permission_consumer(&entities, ldm_entity_storage_map_size * 2 + 1, ldm_data_type_CPM);
TEST_ASSERT_MESSAGE(rv == 1, "Consumer was not revoked correctly");
rv = ldm_entity_storage_get_revoked_consumer(&entities, ldm_entity_storage_map_size * 2 + 1);
TEST_ASSERT_MESSAGE(rv == 1, "Consumer was not revoked correctly");
// delete multiple providers and consumers
rv = ldm_entity_storage_delete_provider(&entities, ldm_entity_storage_map_size * 2 + 1);
TEST_ASSERT_MESSAGE(rv == 0, "Defined provider was not deleted from entities");
rv = ldm_entity_storage_delete_consumer(&entities, ldm_entity_storage_map_size * 2 + 1);
TEST_ASSERT_MESSAGE(rv == 0, "Defined consumer was not deleted from entities");
for (int i = 0; i < ldm_entity_storage_map_size * 3; ++i) {
rv = ldm_entity_storage_delete_provider(&entities, i);
if (i == ldm_entity_storage_map_size * 2 + 1) {
TEST_ASSERT_MESSAGE(rv == 1, "Previously deleted provider was deleted again (not possible) from entities");
} else {
TEST_ASSERT_MESSAGE(rv == 0, "Provider was not deleted from entities");
}
rv = ldm_entity_storage_delete_consumer(&entities, i);
if (i == ldm_entity_storage_map_size * 2 + 1) {
TEST_ASSERT_MESSAGE(rv == 1, "Previously deleted consumer was deleted again (not possible) from entities");
} else {
TEST_ASSERT_MESSAGE(rv == 0, "Consumer was not deleted from entities");
}
}
// verify entities is empty
for (int i = 0; i < ldm_entity_storage_map_size; ++i) {
TEST_ASSERT_NULL_MESSAGE(entities.providers[i], "entities.providers[i] should be NULL");
TEST_ASSERT_NULL_MESSAGE(entities.consumers[i], "entities.consumers[i] should be NULL");
}
}
static void testEntityAddAfterRevoke(void) {
int rv = 0;
ldm_entity_storage_t entities;
ldm_entity_storage_init(&entities);
// provider configuration
ldm_its_aid_t its_aid = 10;
ldm_permissions_t permissions;
for (int i = 0; i < ldm_data_type_total; ++i) {
permissions.list[i] = false;
if (i == ldm_data_type_CAM) {
permissions.list[i] = true;
}
}
uint64_t default_validity = 1000; // ms
rv = ldm_entity_storage_add_provider(&entities, its_aid, permissions, default_validity);
TEST_ASSERT_MESSAGE(rv == 0, "Provider was not added to entities");
// retry after add
rv = ldm_entity_storage_add_provider(&entities, its_aid, permissions, default_validity);
TEST_ASSERT_MESSAGE(rv == 1, "Provider was not added to entities");
rv = ldm_entity_storage_revoke(&entities, its_aid);
TEST_ASSERT_MESSAGE(rv == 0, "Provider was not revoked from entities");
rv = ldm_entity_storage_get_permission_provider(&entities, its_aid, ldm_data_type_CAM);
TEST_ASSERT_MESSAGE(rv == 1, "Provider permission was not verified correctly");
rv = ldm_entity_storage_get_revoked_provider(&entities, its_aid);
TEST_ASSERT_MESSAGE(rv == 1, "Provider was not revoked correctly");
rv = ldm_entity_storage_add_provider(&entities, its_aid, permissions, default_validity);
TEST_ASSERT_MESSAGE(rv == 0, "Provider was not added to entities after being revoked");
rv = ldm_entity_storage_delete_provider(&entities, its_aid);
TEST_ASSERT_MESSAGE(rv == 0, "Provider was not deleted from entities");
// retry after deletion
rv = ldm_entity_storage_delete_provider(&entities, its_aid);
TEST_ASSERT_MESSAGE(rv == 1, "Provider was not deleted from entities");
// rety revoke after deletion
rv = ldm_entity_storage_revoke(&entities, its_aid);
TEST_ASSERT_MESSAGE(rv == 1, "Provider was not revoked from entities");
}
int main(void) {
UNITY_BEGIN();
RUN_TEST(testEntityInit);
RUN_TEST(testEntityAddDeleteSingle);
RUN_TEST(testEntityAddDeleteMultiple);
RUN_TEST(testEntityAddAfterRevoke);
return UNITY_END();
}