From 413110f36eaa3d904352acfb069b4872fdb677cd Mon Sep 17 00:00:00 2001 From: Dominik Loidolt <dominik.loidolt@univie.ac.at> Date: Wed, 17 Apr 2024 17:01:18 +0200 Subject: [PATCH] Update test_cmp_data_types.c --- test/cmp_data_types/test_cmp_data_types.c | 129 +++++++++++++++++++++- 1 file changed, 123 insertions(+), 6 deletions(-) diff --git a/test/cmp_data_types/test_cmp_data_types.c b/test/cmp_data_types/test_cmp_data_types.c index a09c50c..ebb8588 100644 --- a/test/cmp_data_types/test_cmp_data_types.c +++ b/test/cmp_data_types/test_cmp_data_types.c @@ -145,7 +145,24 @@ void test_cmp_col_get_and_set(void) TEST_ASSERT_EQUAL_HEX8(i, u8_p[i]); } free(col); +} + + +/** + * @test convert_subservice_to_cmp_data_type + * @test convert_cmp_data_type_to_subservice + */ +void test_convert_subservice_functions(void) +{ + enum cmp_data_type data_type; + + for (data_type = 0; data_type <= DATA_TYPE_CHUNK; data_type++) { + uint8_t sst = convert_cmp_data_type_to_subservice(data_type); + enum cmp_data_type data_type_convert = convert_subservice_to_cmp_data_type(sst); + uint8_t sst_convert = convert_cmp_data_type_to_subservice(data_type_convert); + TEST_ASSERT_EQUAL(sst_convert, sst); + } } @@ -267,22 +284,32 @@ void test_cmp_input_size_to_samples(void) size = COLLECTION_HDR_SIZE + 4*sizeof(struct s_fx_ncob) - 1; samples_get = cmp_input_size_to_samples(size, data_type); TEST_ASSERT_EQUAL(-1, samples_get); + + data_type = DATA_TYPE_UNKNOWN; + size = 32; + samples_get = cmp_input_size_to_samples(size, data_type); + TEST_ASSERT_EQUAL(-1, samples_get); } -static void check_endianness(void* data, size_t size, enum cmp_data_type data_type) +static void check_endianness(void *data, uint16_t size, enum cmp_data_type data_type) { int error; uint8_t *p_8 = data; - size_t i; + int i; + uint8_t hdr_cpy[COLLECTION_HDR_SIZE]; TEST_ASSERT_TRUE(size > COLLECTION_HDR_SIZE); - error = cmp_input_big_to_cpu_endianness(data, (uint32_t)size, data_type); + cmp_col_set_subservice(data, convert_cmp_data_type_to_subservice(data_type)); + cmp_col_set_data_length(data, size-COLLECTION_HDR_SIZE); + + memcpy(hdr_cpy, data, sizeof(hdr_cpy)); + + error = be_to_cpu_chunk(data, size); TEST_ASSERT_FALSE(error); - for (i = 0; i < COLLECTION_HDR_SIZE; i++) - TEST_ASSERT_EQUAL(0, p_8[i]); + TEST_ASSERT_EQUAL_HEX8_ARRAY(hdr_cpy, data, COLLECTION_HDR_SIZE); for (i = 0; i < size-COLLECTION_HDR_SIZE; i++) TEST_ASSERT_EQUAL((uint8_t)i, p_8[COLLECTION_HDR_SIZE+i]); @@ -296,9 +323,9 @@ static void check_endianness(void* data, size_t size, enum cmp_data_type data_ty void test_cmp_input_big_to_cpu_endianness(void) { enum cmp_data_type data_type; + int error; { - int error; uint16_t data[2] = {0x0001, 0x0203}; uint8_t data_cmp[4] = {0x00, 0x01, 0x02, 0x03}; @@ -308,6 +335,41 @@ void test_cmp_input_big_to_cpu_endianness(void) TEST_ASSERT_FALSE(error); TEST_ASSERT_EQUAL_MEMORY(data, data_cmp, sizeof(data_cmp)); } + { + struct { + uint8_t hdr[COLLECTION_HDR_SIZE]; + struct offset entry[2]; + } __attribute__((packed)) data = {0}; + size_t i; + uint8_t *p_8 = (uint8_t *)&data; + + data_type = DATA_TYPE_OFFSET; + + data.entry[0].mean = 0x00010203; + data.entry[0].variance = 0x04050607; + data.entry[1].mean = 0x08090A0B; + data.entry[1].variance = 0x0C0D0E0F; + + error = cmp_input_big_to_cpu_endianness(&data, sizeof(data), data_type); + TEST_ASSERT_FALSE(error); + + for (i = 0; i < COLLECTION_HDR_SIZE; i++) + TEST_ASSERT_EQUAL(0, p_8[i]); + for (i = 0; i < sizeof(data)-COLLECTION_HDR_SIZE; i++) + TEST_ASSERT_EQUAL((uint8_t)i, p_8[COLLECTION_HDR_SIZE+i]); + } +} + + +/** + * @test be_to_cpu_chunk + * @test cpu_to_be_chunk + */ + +void test_be_to_cpu_chunk(void) +{ + enum cmp_data_type data_type; + { struct { uint8_t hdr[COLLECTION_HDR_SIZE]; @@ -616,6 +678,61 @@ void test_cmp_input_big_to_cpu_endianness(void) } +/** + * @test be_to_cpu_chunk + */ + +void test_be_to_cpu_chunk_error_cases(void) +{ + int error; + uint8_t *chunk; + size_t chunk_size; + uint8_t chunk_hdr_cpy[COLLECTION_HDR_SIZE]; + + /* data = NULL test */ + chunk = NULL; + chunk_size = 43; + error = be_to_cpu_chunk(chunk, chunk_size); + TEST_ASSERT_FALSE(error); + + chunk = calloc(1, COLLECTION_HDR_SIZE + 3*sizeof(struct background)); + cmp_col_set_subservice((void *)chunk, SST_NCxx_S_SCIENCE_BACKGROUND); + cmp_col_set_data_length((void *)chunk, 0); + memcpy(chunk_hdr_cpy, chunk, sizeof(chunk_hdr_cpy)); + + /* size to small */ + chunk_size = COLLECTION_HDR_SIZE - 1; + error = be_to_cpu_chunk(chunk, chunk_size); + TEST_ASSERT_TRUE(error); + + /* chunk without data */ + chunk_size = COLLECTION_HDR_SIZE; + error = be_to_cpu_chunk(chunk, chunk_size); + TEST_ASSERT_FALSE(error); + TEST_ASSERT_EQUAL_HEX8_ARRAY(chunk_hdr_cpy, chunk, COLLECTION_HDR_SIZE); + + /* wrong chunk size */ + cmp_col_set_data_length((void *)chunk, 3*sizeof(struct background)); + chunk_size = COLLECTION_HDR_SIZE + 2*sizeof(struct background); + error = be_to_cpu_chunk(chunk, chunk_size); + TEST_ASSERT_TRUE(error); + + /* unknown subservice */ + cmp_col_set_subservice((void *)chunk, 43); + chunk_size = COLLECTION_HDR_SIZE + 3*sizeof(struct background); + error = be_to_cpu_chunk(chunk, chunk_size); + TEST_ASSERT_TRUE(error); + + /* unknown subservice zero data length */ + cmp_col_set_data_length((void *)chunk, 0); + chunk_size = COLLECTION_HDR_SIZE; + error = be_to_cpu_chunk(chunk, chunk_size); + TEST_ASSERT_TRUE(error); + + free(chunk); +} + + /** * @test cmp_input_big_to_cpu_endianness */ -- GitLab