static void test_fr_pair_find_by_da_nested(void)
{
- fr_pair_t *vp1, *vp2, *vp3, *vp_found;
+ fr_pair_t *vp1, *vp2, *vp3, *vp4, *vp5, *vp_found;
fr_pair_list_t local_pairs;
fr_pair_list_init(&local_pairs);
TEST_CASE("Find child node after third TLV");
TEST_CHECK(vp_found == NULL);
+ /*
+ * Add some "flat list" attributes
+ */
+ MEM(vp4 = fr_pair_afrom_da(autofree, fr_dict_attr_test_nested_leaf_string));
+ fr_pair_prepend(&local_pairs, vp4);
+ MEM(vp5 = fr_pair_afrom_da(autofree, fr_dict_attr_test_nested_leaf_string));
+ fr_pair_append(&local_pairs, vp5);
+
+ /*
+ * Repeat search 5 times to find all instances and then NULL
+ * fr_pair_find_by_da_nested searches nested first then flat
+ */
+ vp_found = fr_pair_find_by_da_nested(&local_pairs, NULL, fr_dict_attr_test_nested_leaf_string);
+ TEST_CASE("Find child node in first TLV");
+ TEST_CHECK(vp_found == vp1);
+
+ vp_found = fr_pair_find_by_da_nested(&local_pairs, vp_found, fr_dict_attr_test_nested_leaf_string);
+ TEST_CASE("Find child node in third TLV");
+ TEST_CHECK(vp_found == vp3);
+
+ vp_found = fr_pair_find_by_da_nested(&local_pairs, vp_found, fr_dict_attr_test_nested_leaf_string);
+ TEST_CASE("Find first entry in \"flat\" list");
+ TEST_CHECK(vp_found == vp4);
+
+ vp_found = fr_pair_find_by_da_nested(&local_pairs, vp_found, fr_dict_attr_test_nested_leaf_string);
+ TEST_CASE("Find second \"flat\" list entry");
+ TEST_CHECK(vp_found == vp5);
+
+ vp_found = fr_pair_find_by_da_nested(&local_pairs, vp_found, fr_dict_attr_test_nested_leaf_string);
+ TEST_CASE("Find NULL at end of list");
+ TEST_CHECK(vp_found == NULL);
+
fr_pair_list_free(&local_pairs);
}