diff options
Diffstat (limited to 'test/src/gtest_dynamic_fieldstat_output.cpp')
| -rw-r--r-- | test/src/gtest_dynamic_fieldstat_output.cpp | 185 |
1 files changed, 185 insertions, 0 deletions
diff --git a/test/src/gtest_dynamic_fieldstat_output.cpp b/test/src/gtest_dynamic_fieldstat_output.cpp index fab3dc8..5e86372 100644 --- a/test/src/gtest_dynamic_fieldstat_output.cpp +++ b/test/src/gtest_dynamic_fieldstat_output.cpp @@ -117,6 +117,191 @@ TEST(FeildStatDynamicAPI, FieldStatDynamicInstanceMultiIncrby) fieldstat_dynamic_instance_free(instance); } +void _worker_thread_table_incrby(void *arg) +{ + struct thread_para *para = (struct thread_para*)arg; + int loops = para->loops; + int table_id = para->table_id; + + const char *row_name = "security_rule_hits"; + struct fieldstat_dynamic_instance *instance = para->instance; + int ret = 0; + struct fieldstat_tag tags[14]; + long long values[20]; + + + tags[0].key = "policy_id"; + tags[0].value_int = 1; + tags[0].value_type = 0; + + tags[1].key = "quanlity"; + tags[1].value_double = 0.50; + tags[1].value_type = 1; + + tags[2].key = "device_id"; + tags[2].value_str = "xxg-cabinet0"; + tags[2].value_type = 2; + + tags[3].key = "device_id333333333333333333333333333333333333333333333333333" + "333333333333333333333333333333333333333"; + tags[3].value_str = "device_id_3"; + tags[3].value_type = 2; + + tags[4].key = "quanlity_444444444444444444444444444444444444444444444444444" + "444444444444444444444444444444444444444"; + tags[4].value_str = "quanlity_4"; + tags[4].value_type = 2; + + tags[5].key = "policy_id_55555555555555555555555555555555555555555555555555" + "555555555555555555555555555555555555555"; + tags[5].value_str = "policy_id_5"; + tags[5].value_type = 2; + + tags[6].key = "vsys_id_6666666666666666666666666666666666666666666666666666" + "666666666666666666666666666666666666666"; + tags[6].value_str = "vsys_id_6"; + tags[6].value_type = 2; + + tags[7].key = "system_id_77777777777777777777777777777777777777777777777777" + "777777777777777777777777777777777777777"; + tags[7].value_int = 0; + tags[7].value_type = 0; + + + tags[8].key = "vsys_id_8666666666666666666666666666666666666666666666666666" + "666666666666666666666666666666666666666"; + tags[8].value_str = "vsys_id_6"; + tags[8].value_type = 2; + + tags[9].key = "system_id_97777777777777777777777777777777777777777777777777" + "777777777777777777777777777777777777777"; + tags[9].value_int = 0; + tags[9].value_type = 0; + + tags[10].key = "vsys_id_106666666666666666666666666666666666666666666666666" + "6666666666666666666666666666666666666666"; + tags[10].value_str = "vsys_id_6"; + tags[10].value_type = 2; + + tags[11].key = "system_id_1177777777777777777777777777777777777777777777777" + "7777777777777777777777777777777777777777"; + tags[11].value_int = 0; + tags[11].value_type = 0; + + + tags[12].key = "system_id_1277777777777777777777777777777777777777777777777" + "7777777777777777777777777777777777777777"; + tags[12].value_int = 0; + tags[12].value_type = 0; + + + tags[13].key = "system_id_1377777777777777777777777777777777777777777777777" + "7777777777777777777777777777777777777777"; + tags[13].value_int = 0; + tags[13].value_type = 0; + + + for(int i = 0; i < loops; i++) + { + for(int j = 0; j < 20; j++) + { + values[j] = 0; + values[j] = j + i; + } + tags[0].value_int = i; + + if(i % 2 == 0) + { + ret = fieldstat_dynamic_table_row_metric_values_decrby( + instance, table_id, + row_name, values, + 20, tags, 14, 0); + EXPECT_EQ(-1, ret); + } + else + { + ret = fieldstat_dynamic_table_row_metric_values_decrby( + instance, table_id, + row_name, values, + 20, tags, 3, 0); + EXPECT_EQ(0, ret); + } + + usleep(1000); + } + return; +} + +void * worker_thread_table_incrby(void *arg) +{ + _worker_thread_table_incrby(arg); + usleep(1000 * 100); + return NULL; +} + +TEST(DynamicOutput, HashKeyOutOfSize) +{ + int ret = 0; + int n_thread = 1; + int n_loops = 1000; + unsigned int out_column_ids[20]; + int table_id = -1; + struct fieldstat_dynamic_instance *instance = NULL; + + const char *column_name[] = { + "packages01", "packages02", "packages03", "packages04", "packages05", + "packages06", "packages07", "packages08", "packages09", "packages10", + "packages11", "packages12", "packages13", "packages14", "packages15", + "packages16", "packages17", "packages18", "packages19", "packages20"}; + + enum field_type column_type[] = { + FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER, + FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER, + FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER, + FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER, + FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER, FIELD_TYPE_COUNTER}; + + + struct thread_para para[n_thread]; + pthread_t thread_ids[n_thread]; + + instance = fieldstat_dynamic_instance_new("firewall", n_thread); + ret = fieldstat_dynamic_set_line_protocol_server(instance, "127.0.0.1", 8700); + EXPECT_EQ(0, ret); + + table_id = fieldstat_register_dynamic_table(instance, "shaping", column_name, + column_type, 20, out_column_ids); + EXPECT_EQ(0, table_id); + + fieldstat_dynamic_set_output_interval(instance, 1); + system("cat /dev/null > /tmp/metrics.out"); + fieldstat_dynamic_instance_start(instance); + + for(int i = 0; i < n_thread; i++) + { + para[i].loops = n_loops; + para[i].instance = instance; + para[i].thread_id = i; + para[i].table_id = table_id; + para[i].out_column_ids = out_column_ids; + } + + for(int i = 0; i < n_thread; i++) + { + ret = pthread_create(&(thread_ids[i]), NULL, worker_thread_table_incrby, + &(para[i])); + EXPECT_EQ(0, ret); + } + + void *temp; + for(int i = 0; i < n_thread; i++) + { + pthread_join(thread_ids[i], (void**)&temp); + } + sleep(6); + fieldstat_dynamic_instance_free(instance); +} + int main(int argc, char *argv[]) { testing::InitGoogleTest(&argc, argv); |
