libamxp  1.4.0
Patterns C Implementation
test_var_search.c File Reference
#include <sys/signalfd.h>
#include <signal.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <stdarg.h>
#include <stddef.h>
#include <setjmp.h>
#include <fcntl.h>
#include <cmocka.h>
#include <errno.h>
#include <yajl/yajl_gen.h>
#include <amxc/amxc.h>
#include <amxp/amxp_expression.h>
#include <amxj/amxj_variant.h>
#include "test_var_search.h"

Go to the source code of this file.

Functions

static int read_data (const char *file, amxc_var_t **data)
 
int test_var_search_setup (UNUSED void **state)
 
int test_var_search_teardown (UNUSED void **state)
 
void test_can_filter_values (UNUSED void **state)
 
void test_can_use_paths (UNUSED void **state)
 
void test_can_get_filtered_value (UNUSED void **state)
 
void test_get_filtered_value_fails_when_multiple_matches_found (UNUSED void **state)
 
void test_filter_fails_if_on_simple_type (UNUSED void **state)
 

Variables

static amxc_var_t * test_set1 = NULL
 
static amxc_var_t * test_set2 = NULL
 

Function Documentation

◆ read_data()

static int read_data ( const char *  file,
amxc_var_t **  data 
)
static

Definition at line 80 of file test_var_search.c.

80  {
81  int fd = -1;
82  variant_json_t* reader = NULL;
83  // create a json reader
84  if(amxj_reader_new(&reader) != 0) {
85  printf("Failed to create json file reader");
86  return 1;
87  }
88 
89  // open the json file
90  fd = open(file, O_RDONLY);
91  if(fd == -1) {
92  amxj_reader_delete(&reader);
93  printf("File open file %s - error 0x%8.8X", file, errno);
94  return 2;
95  }
96 
97  // read the json file and parse the json text
98  amxj_read(reader, fd);
99 
100  // get the variant
101  *data = amxj_reader_result(reader);
102 
103  // delete the reader and close the file
104  amxj_reader_delete(&reader);
105  close(fd);
106 
107  return 0;
108 }
static void reader(UNUSED int fd, UNUSED void *priv)

◆ test_can_filter_values()

void test_can_filter_values ( UNUSED void **  state)

Definition at line 122 of file test_var_search.c.

122  {
123  const char* sp1 = "94:83:c4:06:da:66.[MACAddress == '00:01:02:03:44:f0'].Extender";
124  const char* sp2 = "['Foundation' in Science-fiction].Author";
125  const char* sp3 = "*.Awards.*.[year == 1980]";
126  const char* sp4 = "0.[Age > 50]";
127  const char* sp5 = "0.[Age > 60]";
128  const char* sp6 = "0.[Age > 10]";
129 
130  amxc_htable_it_t* it = NULL;
131  amxc_var_t* data = NULL;
132  amxc_htable_t results;
133  amxc_htable_init(&results, 5);
134 
135  assert_int_equal(amxp_expr_find_var_values(test_set1, &results, sp1), 0);
136  assert_int_equal(amxc_htable_size(&results), 1);
137  it = amxc_htable_get(&results, "'94:83:c4:06:da:66'.0.'Extender'");
138  assert_non_null(it);
139  data = amxc_var_from_htable_it(it);
140  assert_non_null(data);
141  assert_int_equal(amxc_var_type_of(data), AMXC_VAR_ID_BOOL);
142  amxc_htable_clean(&results, variant_htable_it_free);
143 
144  amxc_htable_init(&results, 5);
145  assert_int_equal(amxp_expr_find_var_values(test_set2, &results, sp2), 0);
146  assert_int_equal(amxc_htable_size(&results), 1);
147  it = amxc_htable_get(&results, "1.'Author'");
148  assert_non_null(it);
149  data = amxc_var_from_htable_it(it);
150  assert_non_null(data);
151  assert_int_equal(amxc_var_type_of(data), AMXC_VAR_ID_CSTRING);
152  amxc_htable_clean(&results, variant_htable_it_free);
153 
154  amxc_htable_init(&results, 5);
155  assert_int_equal(amxp_expr_find_var_values(test_set2, &results, sp3), 0);
156  assert_int_equal(amxc_htable_size(&results), 1);
157  it = amxc_htable_get(&results, "2.'Awards'.'Hugo'.1");
158  assert_non_null(it);
159  data = amxc_var_from_htable_it(it);
160  assert_non_null(data);
161  assert_int_equal(amxc_var_type_of(data), AMXC_VAR_ID_HTABLE);
162  amxc_htable_clean(&results, variant_htable_it_free);
163 
164  amxc_htable_init(&results, 5);
165  assert_int_equal(amxp_expr_find_var_values(test_set2, &results, sp4), 0);
166  assert_int_equal(amxc_htable_size(&results), 1);
167  it = amxc_htable_get(&results, "0.'John Doe'");
168  assert_non_null(it);
169  data = amxc_var_from_htable_it(it);
170  assert_non_null(data);
171  assert_int_equal(amxc_var_type_of(data), AMXC_VAR_ID_HTABLE);
172  amxc_htable_clean(&results, variant_htable_it_free);
173 
174  amxc_htable_init(&results, 5);
175  assert_int_equal(amxp_expr_find_var_values(test_set2, &results, sp5), 0);
176  assert_int_equal(amxc_htable_size(&results), 0);
177  amxc_htable_clean(&results, variant_htable_it_free);
178 
179  amxc_htable_init(&results, 5);
180  assert_int_equal(amxp_expr_find_var_values(test_set2, &results, sp6), 0);
181  assert_int_equal(amxc_htable_size(&results), 2);
182  amxc_htable_clean(&results, variant_htable_it_free);
183 }
int amxp_expr_find_var_values(const amxc_var_t *const var, amxc_htable_t *values, const char *path)
Search matching variant paths in a composite variant.
static amxc_var_t * test_set1
static amxc_var_t * test_set2

◆ test_can_get_filtered_value()

void test_can_get_filtered_value ( UNUSED void **  state)

Definition at line 202 of file test_var_search.c.

202  {
203  const char* sp1 = "2.'Awards'.'Hugo'.1";
204  const char* sp2 = "*.Awards.*.[year == 1980]";
205  amxc_var_t* data = NULL;
206 
207  data = amxp_expr_find_var(test_set2, sp1);
208  assert_non_null(data);
209 
210  data = amxp_expr_find_var(test_set2, sp2);
211  assert_non_null(data);
212 }
amxc_var_t * amxp_expr_find_var(const amxc_var_t *const var, const char *path)
Search a matching variant and returns a pointer to that variant.

◆ test_can_use_paths()

void test_can_use_paths ( UNUSED void **  state)

Definition at line 185 of file test_var_search.c.

185  {
186  const char* sp1 = "2.'Awards'.'Hugo'.1";
187  amxc_llist_it_t* it = NULL;
188  amxc_string_t* path = NULL;
189  amxc_llist_t results;
190  amxc_llist_init(&results);
191 
192  assert_int_equal(amxp_expr_find_var_paths(test_set2, &results, sp1), 0);
193  assert_int_equal(amxc_llist_size(&results), 1);
194  it = amxc_llist_get_first(&results);
195  assert_non_null(it);
196  path = amxc_string_from_llist_it(it);
197  assert_non_null(path);
198  assert_string_equal(amxc_string_get(path, 0), sp1);
199  amxc_llist_clean(&results, amxc_string_list_it_free);
200 }
int amxp_expr_find_var_paths(const amxc_var_t *const var, amxc_llist_t *paths, const char *path)
Search matching variant paths in a composite variant.
static amxc_string_t path

◆ test_filter_fails_if_on_simple_type()

void test_filter_fails_if_on_simple_type ( UNUSED void **  state)

Definition at line 222 of file test_var_search.c.

222  {
223  const char* sp1 = "0.Age.[Age > 10]";
224  amxc_var_t* data = NULL;
225 
226  data = amxp_expr_find_var(test_set2, sp1);
227  assert_null(data);
228 }

◆ test_get_filtered_value_fails_when_multiple_matches_found()

void test_get_filtered_value_fails_when_multiple_matches_found ( UNUSED void **  state)

Definition at line 214 of file test_var_search.c.

214  {
215  const char* sp1 = "0.[Age > 10]";
216  amxc_var_t* data = NULL;
217 
218  data = amxp_expr_find_var(test_set2, sp1);
219  assert_null(data);
220 }

◆ test_var_search_setup()

int test_var_search_setup ( UNUSED void **  state)

Definition at line 110 of file test_var_search.c.

110  {
111  assert_int_equal(read_data("./test_set1.data", &test_set1), 0);
112  assert_int_equal(read_data("./test_set2.data", &test_set2), 0);
113  return 0;
114 }
static int read_data(const char *file, amxc_var_t **data)

◆ test_var_search_teardown()

int test_var_search_teardown ( UNUSED void **  state)

Definition at line 116 of file test_var_search.c.

116  {
117  amxc_var_delete(&test_set1);
118  amxc_var_delete(&test_set2);
119  return 0;
120 }

Variable Documentation

◆ test_set1

amxc_var_t* test_set1 = NULL
static

Definition at line 77 of file test_var_search.c.

◆ test_set2

amxc_var_t* test_set2 = NULL
static

Definition at line 78 of file test_var_search.c.