/* @COPYRIGHT_TAG@ */ /** * @file */ #include "gtest/gtest.h" #include "dlt_user.h" #include "dlt_common.h" /* needed for dlt_set_id */ /* simply include the whole file to allow testing it */ #include "src/lib/dlt_env_ll.c" int main(int argc, char* argv[]) { ::testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); } TEST(DltExtensionTests, extract_id) { /* testing valid input */ char id[4u]; char env0[] = "abcd:1234:3"; char *tmp = &env0[0]; ASSERT_EQ(dlt_env_extract_id(&tmp, id), 0); ASSERT_EQ(tmp - &env0[0], 4); // moved 4 bytes ASSERT_EQ(id[0], 'a'); ASSERT_EQ(id[1], 'b'); ASSERT_EQ(id[2], 'c'); ASSERT_EQ(id[3], 'd'); char env1[] = "abc:1234:3"; tmp = &env1[0]; ASSERT_EQ(dlt_env_extract_id(&tmp, id), 0); ASSERT_EQ(tmp - &env1[0], 3); // moved 3 bytes ASSERT_EQ(id[0], 'a'); ASSERT_EQ(id[1], 'b'); ASSERT_EQ(id[2], 'c'); ASSERT_EQ(id[3], 0); char env2[] = "ab:1234:3"; tmp = &env2[0]; ASSERT_EQ(dlt_env_extract_id(&tmp, id), 0); ASSERT_EQ(tmp - &env2[0], 2); // moved 2 bytes ASSERT_EQ(id[0], 'a'); ASSERT_EQ(id[1], 'b'); ASSERT_EQ(id[2], 0); ASSERT_EQ(id[3], 0); char env3[] = "a:1234:3"; tmp = &env3[0]; ASSERT_EQ(dlt_env_extract_id(&tmp, id), 0); ASSERT_EQ(tmp - &env3[0], 1); // moved 1 byte ASSERT_EQ(id[0], 'a'); ASSERT_EQ(id[1], 0); ASSERT_EQ(id[2], 0); ASSERT_EQ(id[3], 0); char env4[] = ":1234:3"; tmp = &env4[0]; ASSERT_EQ(dlt_env_extract_id(&tmp, id), 0); ASSERT_EQ(tmp - &env4[0], 0); // moved 1 byte ASSERT_EQ(id[0], 0); ASSERT_EQ(id[1], 0); ASSERT_EQ(id[2], 0); ASSERT_EQ(id[3], 0); char env5[] = "abcd:1234:3;"; tmp = &env5[0]; ASSERT_EQ(dlt_env_extract_id(&tmp, id), 0); ASSERT_EQ(tmp - &env5[0], 4); // moved 4 bytes ASSERT_EQ(id[0], 'a'); ASSERT_EQ(id[1], 'b'); ASSERT_EQ(id[2], 'c'); ASSERT_EQ(id[3], 'd'); /* testing invalid input */ /* - string too long: abcde: * - string too short/missing end: abc * - NULL string: */ tmp = NULL; ASSERT_EQ(dlt_env_extract_id(&tmp, id), -1); char env6[] = "abcd:1234:3"; tmp = &env6[0]; ASSERT_EQ(dlt_env_extract_id(&tmp, NULL), -1); char invalid0[] = ""; tmp = &invalid0[0]; ASSERT_EQ(dlt_env_extract_id(&tmp, id), -1); char invalid1[] = "abcd"; /* missing delimiter */ tmp = &invalid1[0]; ASSERT_EQ(dlt_env_extract_id(&tmp, id), -1); char invalid2[] = "abcde"; /* id too long */ tmp = &invalid2[0]; ASSERT_EQ(dlt_env_extract_id(&tmp, id), -1); } TEST(DltExtensionTests, extract_ll) { /* testing valid input */ int8_t ll; char env_1[] = "-1"; char *tmp = &env_1[0]; ASSERT_EQ(dlt_env_extract_ll(&tmp, &ll), 0); ASSERT_EQ(tmp - &env_1[0], 2); // moved 2 bytes ASSERT_EQ(ll, -1); char env0[] = "0;"; tmp = &env0[0]; ASSERT_EQ(dlt_env_extract_ll(&tmp, &ll), 0); ASSERT_EQ(tmp - &env0[0], 1); // moved 1 byte ASSERT_EQ(ll, 0); char env1[] = "1;"; tmp = &env1[0]; ASSERT_EQ(dlt_env_extract_ll(&tmp, &ll), 0); ASSERT_EQ(tmp - &env1[0], 1); // moved 1 byte ASSERT_EQ(ll, 1); char env2[] = "2;"; tmp = &env2[0]; ASSERT_EQ(dlt_env_extract_ll(&tmp, &ll), 0); ASSERT_EQ(tmp - &env2[0], 1); // moved 1 byte ASSERT_EQ(ll, 2); char env3[] = "3;"; tmp = &env3[0]; ASSERT_EQ(dlt_env_extract_ll(&tmp, &ll), 0); ASSERT_EQ(tmp - &env3[0], 1); // moved 1 byte ASSERT_EQ(ll, 3); char env4[] = "4;"; tmp = &env4[0]; ASSERT_EQ(dlt_env_extract_ll(&tmp, &ll), 0); ASSERT_EQ(tmp - &env4[0], 1); // moved 1 byte ASSERT_EQ(ll, 4); char env5[] = "5;"; tmp = &env5[0]; ASSERT_EQ(dlt_env_extract_ll(&tmp, &ll), 0); ASSERT_EQ(tmp - &env5[0], 1); // moved 1 byte ASSERT_EQ(ll, 5); char env6[] = "6;"; tmp = &env6[0]; ASSERT_EQ(dlt_env_extract_ll(&tmp, &ll), 0); ASSERT_EQ(tmp - &env6[0], 1); // moved 1 byte ASSERT_EQ(ll, 6); /* testing invalid input */ /* - number outside range, e.g. -2, 103 * - missing delimiter * - NULL string: */ tmp = NULL; ASSERT_EQ(dlt_env_extract_ll(&tmp, &ll), -1); char env7[] = "abcd:1234:3"; tmp = &env7[0]; ASSERT_EQ(dlt_env_extract_id(&tmp, NULL), -1); char invalid0[] = ""; tmp = &invalid0[0]; ASSERT_EQ(dlt_env_extract_ll(&tmp, &ll), -1); char invalid1[] = "-2"; /* outside range */ tmp = &invalid1[0]; ASSERT_EQ(dlt_env_extract_ll(&tmp, &ll), -1); char invalid2[] = "8"; /* outside range */ tmp = &invalid2[0]; ASSERT_EQ(dlt_env_extract_ll(&tmp, &ll), -1); char invalid3[] = "1e"; /* missing delimiter */ tmp = &invalid3[0]; ASSERT_EQ(dlt_env_extract_ll(&tmp, &ll), -1); } TEST(DltExtensionTests, extract_ll_item) { /* testing valid input */ dlt_env_ll_item item; char env0[] = "abcd:1234:3"; char *tmp = &env0[0]; ASSERT_EQ(dlt_env_extract_ll_item(&tmp, &item), 0); ASSERT_EQ(tmp - &env0[0], 11); // moved 11 bytes ASSERT_EQ(item.appId[0], 'a'); ASSERT_EQ(item.appId[1], 'b'); ASSERT_EQ(item.appId[2], 'c'); ASSERT_EQ(item.appId[3], 'd'); ASSERT_EQ(item.ctxId[0], '1'); ASSERT_EQ(item.ctxId[1], '2'); ASSERT_EQ(item.ctxId[2], '3'); ASSERT_EQ(item.ctxId[3], '4'); ASSERT_EQ(item.ll, 3); char env1[] = "::-1;"; tmp = &env1[0]; ASSERT_EQ(dlt_env_extract_ll_item(&tmp, &item), 0); ASSERT_EQ(tmp - &env1[0], 4); // moved 4 bytes ASSERT_EQ(item.appId[0], 0); ASSERT_EQ(item.appId[1], 0); ASSERT_EQ(item.appId[2], 0); ASSERT_EQ(item.appId[3], 0); ASSERT_EQ(item.ctxId[0], 0); ASSERT_EQ(item.ctxId[1], 0); ASSERT_EQ(item.ctxId[2], 0); ASSERT_EQ(item.ctxId[3], 0); ASSERT_EQ(item.ll, -1); /* testing invalid input */ /* - string too long: abcde: * - string too short/missing end: abc * - NULL string: */ tmp = NULL; ASSERT_EQ(dlt_env_extract_ll_item(&tmp, &item), -1); char env2[] = "abcd:1234:3"; tmp = &env2[0]; ASSERT_EQ(dlt_env_extract_ll_item(&tmp, NULL), -1); char invalid0[] = ""; tmp = &invalid0[0]; ASSERT_EQ(dlt_env_extract_ll_item(&tmp, &item), -1); char invalid1[] = "abcd:1234:"; /* missing ll */ tmp = &invalid1[0]; ASSERT_EQ(dlt_env_extract_ll_item(&tmp, &item), -1); char invalid2[] = "abcd:1234"; /* missing ll, missing delimiter in ctxId */ tmp = &invalid2[0]; ASSERT_EQ(dlt_env_extract_ll_item(&tmp, &item), -1); char invalid3[] = "abcd:"; /* missing ll, missing delimiter in appId */ tmp = &invalid3[0]; ASSERT_EQ(dlt_env_extract_ll_item(&tmp, &item), -1); char invalid4[] = "abcd"; /* missing ll, missing delimiter in appId */ tmp = &invalid4[0]; ASSERT_EQ(dlt_env_extract_ll_item(&tmp, &item), -1); } TEST(DltExtensionTests, basic_ll_set_handling) { dlt_env_init_ll_set(NULL); // must not crash dlt_env_free_ll_set(NULL); // must not crash dlt_env_increase_ll_set(NULL); // must not crash dlt_env_ll_set ll_set; dlt_env_init_ll_set(&ll_set); EXPECT_TRUE(NULL != ll_set.item); EXPECT_EQ(DLT_ENV_LL_SET_INCREASE, ll_set.array_size); EXPECT_EQ(0, ll_set.num_elem); dlt_env_free_ll_set(&ll_set); EXPECT_TRUE(NULL == ll_set.item); EXPECT_EQ(0, ll_set.array_size); EXPECT_EQ(0, ll_set.num_elem); dlt_env_init_ll_set(&ll_set); for (int i = 0; i