Branch data Line data Source code
1 : : #include "test_libmem_all.h"
2 : :
3 : : /**
4 : : * @brief Capture negative cases for data helpers on inconsistent descriptors
5 : : *
6 : : * @return Return describing success or failure
7 : : */
8 : 1 : static Return capture_libmem_inconsistent_data_descriptor(void)
9 : : {
10 : 1 : INITTEST;
11 : :
12 : 1 : m_create(int,valid_destination);
13 : :
14 : 1 : const int sample_values[] = {11,22};
15 : 1 : int sample_storage[2] = {7,9};
16 : 1 : memory invalid_descriptor = m_init(int,MEMORY_DATA);
17 : 1 : memory zero_sized_descriptor = m_init(int,MEMORY_DATA);
18 : 1 : memory phantom_reserve_descriptor = m_init(int,MEMORY_DATA);
19 : 1 : memory undersized_reserve_descriptor = m_init(int,MEMORY_DATA);
20 : :
21 : 1 : invalid_descriptor.length = 2;
22 : 1 : invalid_descriptor.is_string = true;
23 : 1 : invalid_descriptor.string_length = 1;
24 : 1 : zero_sized_descriptor.single_element_size = 0;
25 : 1 : phantom_reserve_descriptor.actually_allocated_bytes = sizeof(sample_values);
26 : 1 : undersized_reserve_descriptor.data = sample_storage;
27 : 1 : undersized_reserve_descriptor.length = 2;
28 : 1 : undersized_reserve_descriptor.actually_allocated_bytes = sizeof(int);
29 : :
30 : 1 : ASSERT(NULL == m_data_ro(int,NULL));
31 : 1 : ASSERT(NULL == m_data(int,NULL));
32 : 1 : ASSERT(NULL == m_raw_data_ro(NULL));
33 : 1 : ASSERT(NULL == m_raw_data(NULL));
34 : :
35 : 1 : ASSERT(NULL == m_data_ro(int,&invalid_descriptor));
36 : 1 : ASSERT(NULL == m_data(int,&invalid_descriptor));
37 : 1 : ASSERT(NULL == m_raw_data_ro(&invalid_descriptor));
38 : 1 : ASSERT(NULL == m_raw_data(&invalid_descriptor));
39 : :
40 : 1 : ASSERT(NULL == m_data_ro(int,&zero_sized_descriptor));
41 : 1 : ASSERT(NULL == m_data(int,&zero_sized_descriptor));
42 : 1 : ASSERT(NULL == m_raw_data_ro(&zero_sized_descriptor));
43 : 1 : ASSERT(NULL == m_raw_data(&zero_sized_descriptor));
44 : :
45 : 1 : ASSERT(NULL == m_data_ro(int,&phantom_reserve_descriptor));
46 : 1 : ASSERT(NULL == m_data(int,&phantom_reserve_descriptor));
47 : 1 : ASSERT(NULL == m_raw_data_ro(&phantom_reserve_descriptor));
48 : 1 : ASSERT(NULL == m_raw_data(&phantom_reserve_descriptor));
49 : :
50 : 1 : ASSERT(NULL == m_data_ro(int,&undersized_reserve_descriptor));
51 : 1 : ASSERT(NULL == m_data(int,&undersized_reserve_descriptor));
52 : 1 : ASSERT(sample_storage == m_raw_data_ro(&undersized_reserve_descriptor));
53 : 1 : ASSERT(sample_storage == m_raw_data(&undersized_reserve_descriptor));
54 : :
55 : 1 : ASSERT(FAILURE == m_copy_buffer(&invalid_descriptor,sizeof(sample_values),sample_values));
56 : 1 : ASSERT(FAILURE == m_resize(&invalid_descriptor,1));
57 : 1 : ASSERT(FAILURE == m_copy(valid_destination,&invalid_descriptor));
58 : 1 : ASSERT(FAILURE == m_concat_data(valid_destination,&invalid_descriptor));
59 : 1 : ASSERT(FAILURE == m_del(&invalid_descriptor));
60 : 1 : ASSERT(invalid_descriptor.length == 2);
61 : 1 : ASSERT(invalid_descriptor.data == NULL);
62 : 1 : ASSERT(invalid_descriptor.is_string == true);
63 : 1 : ASSERT(invalid_descriptor.string_length == 1);
64 : 1 : ASSERT(invalid_descriptor.actually_allocated_bytes == 0);
65 : :
66 : 1 : call(m_del(valid_destination));
67 : :
68 : 1 : deliver(status);
69 : : }
70 : :
71 : : /**
72 : : * @brief Check data-facing helpers reject descriptors with NULL data and non-zero length
73 : : *
74 : : * @return Return describing success or failure
75 : : */
76 : 1 : Return test_libmem_0055(void)
77 : : {
78 : 1 : INITTEST;
79 : :
80 : : static const char expected_stderr_pattern_libmem_0055[] =
81 : : "\\A.*Descriptor is NULL"
82 : : ".*Descriptor has non-zero length with NULL data pointer"
83 : : ".*Descriptor element size is zero \\(uninitialized\\)"
84 : : ".*Descriptor has reserved bytes with NULL data pointer"
85 : : ".*Descriptor reserve is smaller than logical payload.*\\Z";
86 : :
87 : 1 : m_create(int,graceful_descriptor);
88 : :
89 : 1 : ASSERT(SUCCESS == match_function_output(NULL,expected_stderr_pattern_libmem_0055,capture_libmem_inconsistent_data_descriptor));
90 : :
91 : 1 : IF(SUCCESS == status)
92 : : {
93 : 1 : Return saved_global_status = SUCCESS;
94 : 1 : int *writable_view = NULL;
95 : 1 : const int *readonly_view = NULL;
96 : :
97 : 1 : ASSERT(SUCCESS == m_resize(graceful_descriptor,2));
98 : 1 : saved_global_status = atomic_exchange(&global_return_status,INFO);
99 : 1 : writable_view = m_data(int,graceful_descriptor);
100 : 1 : readonly_view = m_data_ro(int,graceful_descriptor);
101 : 1 : atomic_store(&global_return_status,saved_global_status);
102 : :
103 : 1 : ASSERT(writable_view != NULL);
104 : 1 : ASSERT(readonly_view != NULL);
105 : : }
106 : :
107 : 1 : call(m_del(graceful_descriptor));
108 : :
109 : 1 : RETURN_STATUS;
110 : : }
|