@@ -152,7 +152,7 @@ void all_filter(uint8_t *filter) {
152152}
153153
154154// Filter no fields from template
155- TEST_F (Filter, ZeroTFields ) {
155+ TEST_F (Filter, TemplateFields_None ) {
156156 ASSERT_EQ (ipx_modifier_filter (&rec, filter), IPX_OK);
157157 fds_template *t = (fds_template *)(rec.tmplt );
158158
@@ -170,7 +170,7 @@ TEST_F(Filter, ZeroTFields) {
170170}
171171
172172// Filter out starting fields from template
173- TEST_F (Filter, StartTFields ) {
173+ TEST_F (Filter, TemplateFields_Start ) {
174174 // Set filter
175175 start_filter (filter);
176176
@@ -192,7 +192,7 @@ TEST_F(Filter, StartTFields) {
192192}
193193
194194// Filter out last 2 fields from template
195- TEST_F (Filter, EndTFields ) {
195+ TEST_F (Filter, TemplateFields_End ) {
196196 // Set filter
197197 end_filter (filter);
198198
@@ -216,7 +216,7 @@ TEST_F(Filter, EndTFields) {
216216}
217217
218218// Filter out random fields from template (start, middle, end fields)
219- TEST_F (Filter, MixedTFields ) {
219+ TEST_F (Filter, TemplateFields_MixedPosition ) {
220220 // Set filter
221221 mixed_filter (filter);
222222
@@ -238,7 +238,7 @@ TEST_F(Filter, MixedTFields) {
238238}
239239
240240// Filter out all fields from template
241- TEST_F (Filter, AllTFields ) {
241+ TEST_F (Filter, TemplateFields_All ) {
242242 // Set filter
243243 memset (filter, 1 , tmplt->fields_cnt_total );
244244
@@ -254,7 +254,7 @@ TEST_F(Filter, AllTFields) {
254254}
255255
256256// Filtering zero fields from original data record
257- TEST_F (Filter, NoneDrecs ) {
257+ TEST_F (Filter, DataRecords_None ) {
258258 uint16_t rec_prev_size = rec.size ;
259259 uint8_t *orig_raw = new uint8_t [rec.size ];
260260 memcpy (orig_raw, rec.data , rec.size );
@@ -272,7 +272,7 @@ TEST_F(Filter, NoneDrecs) {
272272
273273// Filtering out static (non variable length) fields from original data record
274274// Also tests filtering last data record
275- TEST_F (Filter, StaticLengthDrecs ) {
275+ TEST_F (Filter, DataRecords_StaticLength ) {
276276 uint16_t rec_prev_size = rec.size ;
277277 static_filter (filter);
278278
@@ -329,7 +329,7 @@ TEST_F(Filter, StaticLengthDrecs) {
329329
330330// Filtering out dynamic (variable length) fields from original data record
331331// Also tests filtering first data record
332- TEST_F (Filter, DynamicLengthDrecs ) {
332+ TEST_F (Filter, DataRecords_VariableLength ) {
333333 uint16_t rec_prev_size = rec.size ;
334334 dynamic_filter (filter);
335335
@@ -388,11 +388,6 @@ TEST_F(Filter, DynamicLengthDrecs) {
388388 fds_template_destroy ((fds_template *)rec.tmplt );
389389}
390390
391- TEST_F (Filter, InvalidArguments) {
392- EXPECT_EQ (ipx_modifier_filter (NULL , filter), IPX_ERR_ARG);
393- EXPECT_EQ (ipx_modifier_filter (&rec, NULL ), IPX_ERR_ARG);
394- }
395-
396391/* * ------------------------- ADDING TESTS ------------------------- **/
397392
398393#define STATIC_CNT 4
@@ -447,7 +442,7 @@ class Adder : public Modifier {
447442 static_fields[i-1 ].en = i % 2 ;
448443 static_fields[i-1 ].id = i * 10 ;
449444 static_fields[i-1 ].length = i * 2 ;
450- static_output[i-1 ].length = - 1 ;
445+ static_output[i-1 ].length = IPX_MODIFIER_SKIP ;
451446 }
452447 }
453448
@@ -540,18 +535,42 @@ class Adder : public Modifier {
540535
541536};
542537
543- // Just copy template and drec, do not change anything
538+ // Append zero fields to record
544539TEST_F (Adder, ZeroFields) {
545- // " Modify" record
540+ // Modify record
546541 ASSERT_EQ (ipx_modifier_append (&rec, static_fields, static_output, STATIC_CNT), IPX_OK);
547542
548543 // Check template and record
549544 cmp_template_overall (0 , 0 , 0 );
550545 cmp_data_overall (0 );
551546}
552547
548+ // Append zero fields to record but keep them in template and records as 0
549+ TEST_F (Adder, Static_ZeroFields_KeepEmptyOutputs) {
550+ for (struct ipx_modifier_output &i : static_output) {
551+ i.length = -1 ;
552+ }
553+ // Modify record
554+ ASSERT_EQ (ipx_modifier_append (&rec, static_fields, static_output, STATIC_CNT), IPX_OK);
555+
556+ // Check template
557+ cmp_template_overall (20 , 4 , 24 );
558+
559+ // Check record
560+ cmp_data_overall (20 );
561+
562+ uint64_t zero = 0 ;
563+ int p = 8 ;
564+
565+ for (auto i : static_fields) {
566+ ASSERT_EQ (fds_drec_find (&rec, i.en , i.id , &field), p++);
567+ cmp_data_record (field, &zero, i.length );
568+ }
569+
570+ }
571+
553572// Append single value to data record and template
554- TEST_F (Adder, StaticSingleField ) {
573+ TEST_F (Adder, Static_SingleField ) {
555574 // Add single value to output buffer
556575 uint8_t pos = 1 ;
557576 uint32_t value = 422322 ;
@@ -572,7 +591,7 @@ TEST_F(Adder, StaticSingleField) {
572591}
573592
574593// Append single value (EN specific) to data record and template
575- TEST_F (Adder, StaticSingleFieldEN ) {
594+ TEST_F (Adder, Static_SingleField_WithEN ) {
576595 // Add single value (with EN) to output buffer
577596 uint8_t pos = 0 ;
578597 uint16_t value = 15213 ;
@@ -593,12 +612,11 @@ TEST_F(Adder, StaticSingleFieldEN) {
593612}
594613
595614// Append multiple values (EN and non-EN specific) to data record and template
596- TEST_F (Adder, StaticMultipleFields ) {
615+ TEST_F (Adder, Static_MultipleFields ) {
597616 // Add all values to output buffer
598617 int used_length = 0 ;
599- long value = 0 ;
618+ long value = 0x123456789ABCDEF ;
600619 for (uint8_t pos = 0 ; pos < STATIC_CNT; pos++) {
601- value = 0x123456789ABCDEF ;
602620 ipx_modifier_field used = static_fields[pos];
603621 set_value (used, static_output[pos], &value, used.length );
604622 used_length += used.length ;
@@ -627,8 +645,65 @@ TEST_F(Adder, StaticMultipleFields) {
627645 } while (fds_drec_iter_next (&it) != FDS_EOC);
628646}
629647
648+ // Append multiple values, some of which are kept in template and records with no values
649+ TEST_F (Adder, Static_MultipleFields_KeepEmptyOutputs) {
650+ long value = 0x123456789ABCDEF ;
651+
652+ // Keep first field (length = 2)
653+ static_output[0 ].length = -1 ;
654+ // Use second and third field (lengths = {4, 6})
655+ set_value (static_fields[1 ], static_output[1 ], &value, 4 );
656+ set_value (static_fields[2 ], static_output[2 ], &value, 6 );
657+ // Do not use fourth field
658+ static_output[3 ].length = IPX_MODIFIER_SKIP;
659+
660+ // Modify template
661+ ASSERT_EQ (ipx_modifier_append (&rec, static_fields, static_output, STATIC_CNT), IPX_OK);
662+
663+ // Check modified template
664+ cmp_template_overall (12 , 3 , 20 ); // 4 (non-EN) + 16 (2x8=EN)
665+ for (int i = 0 ; i < 3 ; i++) {
666+ cmp_template_field (rec.tmplt ->fields_cnt_total - (3 - i), static_fields[i]);
667+ }
668+
669+ // Check modified record
670+ cmp_data_overall (12 );
671+ fds_drec_iter_init (&it, &rec, 0 );
672+ // Set iterator to first appended field
673+ ASSERT_EQ (fds_drec_iter_find (&it, static_fields[0 ].en , static_fields[0 ].id ), 8 );
674+ EXPECT_EQ (*(uint16_t *)it.field .data , 0 );
675+ ASSERT_EQ (fds_drec_iter_next (&it), 9 );
676+
677+ // Iterate through all remaining data records and compare them
678+ int size = 4 ;
679+ do {
680+ cmp_data_record (it.field , &value, size);
681+ size += 2 ;
682+ } while (fds_drec_iter_next (&it) != FDS_EOC);
683+ }
684+
685+ // Append zero fields to record but keep them in template and records as 0
686+ TEST_F (Adder, Dynamic_ZeroFields_KeepEmptyOutputs) {
687+ // Modify record
688+ ASSERT_EQ (ipx_modifier_append (&rec, dynamic_fields, dynamic_output, DYNAMIC_CNT), IPX_OK);
689+
690+ // Check template
691+ cmp_template_overall (2 , 2 , 8 );
692+
693+ // Check record
694+ cmp_data_overall (2 );
695+
696+ uint64_t zero = 0 ;
697+ int p = 8 ;
698+
699+ for (auto i : dynamic_fields) {
700+ ASSERT_EQ (fds_drec_find (&rec, i.en , i.id , &field), p++);
701+ cmp_data_record (field, &zero, 0 );
702+ }
703+ }
704+
630705// Append values with variable length (one with single prefix octet, second with 3 prefix octets)
631- TEST_F (Adder, DynamicFields ) {
706+ TEST_F (Adder, Dynamic_MultipleFields ) {
632707 // Add all values to output buffer
633708 uint8_t values[1000 ] = {0x12 , 0x34 , 0x56 , };
634709 values[678 ] = 0x78 ;
@@ -658,10 +733,4 @@ TEST_F(Adder, DynamicFields) {
658733 cmp_data_record (it.field , &values, 1000 );
659734
660735 EXPECT_EQ (fds_drec_iter_next (&it), FDS_EOC);
661- }
662-
663- TEST_F (Adder, InvalidArguments) {
664- EXPECT_EQ (ipx_modifier_append (NULL , static_fields, static_output, 0 ), IPX_ERR_ARG);
665- EXPECT_EQ (ipx_modifier_append (&rec, NULL , static_output, 0 ), IPX_ERR_ARG);
666- EXPECT_EQ (ipx_modifier_append (&rec, static_fields, NULL , 0 ), IPX_ERR_ARG);
667736}
0 commit comments