END_TEST START_TEST(test_osgetelementcontent) { char xml_file_name[256]; create_xml_file("<root>value</root>", xml_file_name, 256); OS_XML xml; ck_assert_int_eq(OS_ReadXML(xml_file_name, &xml), 0); ck_assert_int_eq(OS_ApplyVariables(&xml), 0); const char *xml_path[] = { "root", NULL }; char **content; ck_assert_ptr_ne(content = OS_GetElementContent(&xml, xml_path), NULL); ck_assert_str_eq(content[0], "value"); ck_assert_ptr_eq(content[1], NULL); int i = 0; while (content[i]) { free(content[i++]); } free(content); OS_ClearXML(&xml); unlink(xml_file_name); }
END_TEST START_TEST(vector_double_test_precision) { const double v[] = { 1.234567890123456, 2.345678901234567, 3.456789012345678 }; char *s = oml_malloc(1); ssize_t n = vector_double_to_json(v, sizeof(v)/sizeof(v[0]), &s); /* ensure it succeeded */ ck_assert_int_ne(-1, n); ck_assert_ptr_ne(NULL, s); /* test output is as expected */ const char *expected = "[ 1.23456789012346, 2.34567890123457, 3.45678901234568 ]"; ck_assert_int_eq(strlen(expected), n); ck_assert_uint_eq('\0', s[n]); ck_assert_str_eq(expected, s); }
END_TEST START_TEST(test_goal_install_selector) { HySelector sltr; HyGoal goal = hy_goal_create(test_globals.sack); // test arch forcing sltr = hy_selector_create(test_globals.sack); hy_selector_set(sltr, HY_PKG_NAME, HY_EQ, "semolina"); hy_selector_set(sltr, HY_PKG_ARCH, HY_EQ, "i686"); fail_if(!hy_goal_install_selector(goal, sltr, NULL)); hy_selector_free(sltr); fail_if(hy_goal_run(goal)); assert_iueo(goal, 1, 0, 0, 0); GPtrArray *plist = hy_goal_list_installs(goal, NULL); const char *nvra = dnf_package_get_nevra(g_ptr_array_index(plist, 0)); ck_assert_str_eq(nvra, "semolina-2-0.i686"); g_ptr_array_unref(plist); hy_goal_free(goal); }
END_TEST START_TEST(Server_HistorizingBackendMemory) { UA_HistoryDataBackend backend = UA_HistoryDataBackend_Memory(1, 1); UA_HistorizingNodeIdSettings setting; setting.historizingBackend = backend; setting.maxHistoryDataResponseSize = 1000; setting.historizingUpdateStrategy = UA_HISTORIZINGUPDATESTRATEGY_USER; serverMutexLock(); UA_StatusCode ret = gathering->registerNodeId(server, gathering->context, &outNodeId, setting); serverMutexUnlock(); ck_assert_str_eq(UA_StatusCode_name(ret), UA_StatusCode_name(UA_STATUSCODE_GOOD)); // empty backend should not crash UA_UInt32 retval = testHistoricalDataBackend(100); fprintf(stderr, "%d tests expected failed.\n", retval); // fill backend ck_assert_uint_eq(fillHistoricalDataBackend(backend), true); // read all in one retval = testHistoricalDataBackend(100); fprintf(stderr, "%d tests failed.\n", retval); ck_assert_uint_eq(retval, 0); // read continuous one at one request retval = testHistoricalDataBackend(1); fprintf(stderr, "%d tests failed.\n", retval); ck_assert_uint_eq(retval, 0); // read continuous two at one request retval = testHistoricalDataBackend(2); fprintf(stderr, "%d tests failed.\n", retval); ck_assert_uint_eq(retval, 0); UA_HistoryDataBackend_Memory_deleteMembers(&setting.historizingBackend); }
END_TEST START_TEST(softlockup_payload) { char *oopsfile = NULL; oopsfile = TESTOOPSDIR "/soft_lockup.txt"; setup_payload(oopsfile); telem_log(LOG_ERR, "Softlockup backtrace: %s\n", pl->str); ck_assert(pl->len > 0); ck_assert_str_eq(reason, "BUG: soft lockup - CPU#8 stuck for 22s! [ceph-osd:12347]"); ck_assert(strstr(pl->str, "Kernel Version : 3.16.6-200.el7.x86_64 #1")); ck_assert(strstr(pl->str, "Tainted : Not tainted")); ck_assert(strstr(pl->str, "Modules : vhost_net vhost macvtap macvlan tun nf_conntrack_ipv6 nf_defrag_ipv6 ip6table_filter")); ck_assert(strstr(pl->str, "it drm_kms_helper ttm uas tg3 drm ptp usb_storage pps_core i2c_core hpsa")); ck_assert(strstr(pl->str, "#1 _raw_read_lock")); ck_assert(strstr(pl->str, "#2 btrfs_tree_read_lock")); ck_assert(strstr(pl->str, "#3 btrfs_read_lock_root_node")); ck_assert(strstr(pl->str, "#4 btrfs_search_slot")); ck_assert(strstr(pl->str, "#5 ? crypto_shash_update")); ck_assert(strstr(pl->str, "#6 btrfs_lookup_xattr")); ck_assert(strstr(pl->str, "#7 __btrfs_getxattr")); ck_assert(strstr(pl->str, "#8 btrfs_getxattr")); ck_assert(strstr(pl->str, "#9 get_vfs_caps_from_disk")); ck_assert(strstr(pl->str, "#10 audit_copy_inode")); ck_assert(strstr(pl->str, "#11 __audit_inode")); ck_assert(strstr(pl->str, "#12 SyS_fgetxattr")); ck_assert(strstr(pl->str, "#13 system_call_fastpath")); nc_string_free(pl); }
END_TEST START_TEST(test_peer_connect) { char host[100] = "127.0.0.1"; char port[6] = TEST_PORT; char hostport[107]; sprintf(hostport, "%s:%s", host, port); peer * p = peer_create("local", hostport); /* creating server for test */ int server_sock = socket(AF_INET, SOCK_STREAM | SOCK_NONBLOCK, IPPROTO_TCP); struct addrinfo * ainfo, hint; memset(&hint, 0, sizeof(struct addrinfo)); hint.ai_family = AF_UNSPEC; hint.ai_socktype = SOCK_STREAM; hint.ai_flags = AI_PASSIVE; /* for NULLed host */ hint.ai_protocol = IPPROTO_TCP; hint.ai_canonname = NULL; hint.ai_addr = NULL; hint.ai_next = NULL; ck_assert_int_eq(getaddrinfo(host, port, &hint, &ainfo), 0); ck_assert_int_eq(bind(server_sock, ainfo->ai_addr, ainfo->ai_addrlen), 0); ck_assert_int_eq(listen(server_sock, 10), 0); ck_assert_int_eq(peer_connect(p), 0); int client_sock = accept(server_sock, NULL, NULL); char * msg = "testmsg"; send(p->sock, msg, 8, MSG_DONTWAIT); char buf[25]; recv(client_sock, buf, 8, MSG_DONTWAIT); ck_assert_str_eq(buf, "testmsg"); close(p->sock); close(client_sock); close(server_sock); }
END_TEST START_TEST(test_peer_split_host) { char * host; int port; ck_assert_int_eq(peer_split_host("localhost:8000", &host, &port), RET_OK); ck_assert_int_eq(port, 8000); ck_assert(host != NULL); ck_assert_str_eq(host, "localhost"); ck_assert_int_eq(peer_split_host("*:8000", &host, &port), RET_OK); ck_assert_int_eq(port, 8000); ck_assert(host == NULL); ck_assert_int_eq(peer_split_host(":8000", &host, &port), RET_OK); ck_assert_int_eq(port, 8000); ck_assert(host == NULL); ck_assert_int_eq(peer_split_host("8000", &host, &port), RET_OK); ck_assert_int_eq(port, 8000); ck_assert(host == NULL); ck_assert_int_eq(peer_split_host("8000localhost", &host, &port), RET_PEER_RESOLVE_ERROR); ck_assert_int_eq(peer_split_host("localhost", &host, &port), RET_PEER_RESOLVE_ERROR); ck_assert_int_eq(peer_split_host("localhost:http", &host, &port), RET_PEER_RESOLVE_ERROR); }
END_TEST START_TEST(msg_new_request) { struct wpas_message *m; struct wpas *w; int r; w = start_test_client(); m = TEST_INVALID_PTR; r = wpas_message_new_request(w, "name", &m); ck_assert_int_ge(r, 0); ck_assert(m != TEST_INVALID_PTR); ck_assert(m != NULL); ck_assert_int_eq(wpas_message_is_request(m, NULL), 1); ck_assert_int_eq(wpas_message_is_request(m, "name"), 1); ck_assert_int_eq(wpas_message_is_request(m, "names"), 0); ck_assert_int_eq(wpas_message_is_request(m, "nam"), 0); ck_assert_int_eq(wpas_message_is_request(m, ""), 0); ck_assert_int_eq(wpas_message_is_event(m, NULL), 0); ck_assert_int_eq(wpas_message_is_reply(m), 0); ck_assert_int_eq(wpas_message_get_cookie(m), 0); ck_assert_ptr_eq(wpas_message_get_bus(m), w); ck_assert_int_eq(wpas_message_get_type(m), WPAS_MESSAGE_REQUEST); ck_assert_int_eq(wpas_message_get_level(m), 0); ck_assert_str_eq(wpas_message_get_name(m), "name"); ck_assert_ptr_eq((void*)wpas_message_get_raw(m), NULL); wpas_message_unref(m); stop_test_client(); }
static void test_bt_wire_persistence (BT_TEST_ARGS) { BT_TEST_START; GST_INFO ("-- arrange --"); BtMachine *src = BT_MACHINE (bt_source_machine_new (song, "audiotestsrc", "audiotestsrc", 0L, NULL)); BtMachine *proc = BT_MACHINE (bt_processor_machine_new (song, "volume", "volume", 0L, NULL)); BtWire *wire = bt_wire_new (song, src, proc, NULL); GST_INFO ("-- act --"); xmlNodePtr parent = xmlNewNode (NULL, XML_CHAR_PTR ("buzztrax")); xmlNodePtr node = bt_persistence_save (BT_PERSISTENCE (wire), parent); GST_INFO ("-- assert --"); fail_unless (node != NULL, NULL); ck_assert_str_eq ((gchar *) node->name, "wire"); fail_unless (node->children != NULL, NULL); GST_INFO ("-- cleanup --"); BT_TEST_END; }
} END_TEST START_TEST (test_get_public_folder_property) { void *data; uint32_t proptag; uint64_t fid; fid = 216172782113783809ul; proptag = PidTagAttributeReadOnly; retval = openchangedb_get_folder_property(g_mem_ctx, g_oc_ctx, USER1, proptag, fid, &data); CHECK_SUCCESS; ck_assert_int_eq(0, *(int *)data); proptag = PidTagDisplayName; retval = openchangedb_get_folder_property(g_mem_ctx, g_oc_ctx, USER1, proptag, fid, &data); CHECK_SUCCESS; ck_assert_str_eq("NON_IPM_SUBTREE", (char *)data); proptag = PidTagCreationTime; retval = openchangedb_get_folder_property(g_mem_ctx, g_oc_ctx, USER1, proptag, fid, &data); CHECK_SUCCESS; ck_assert_int_eq(130264095410000000 >> 32, ((struct FILETIME *)data)->dwHighDateTime); ck_assert_int_eq(130264095410000000 & 0xffffffff, ((struct FILETIME *)data)->dwLowDateTime); } END_TEST
END_TEST START_TEST(test_lib_write_file) { int fd; bool write_file_result; char filename[] = "/tmp/test_lib_write_file-XXXXXX"; GString* text; char line[LINE_MAX] = { 0 }; FILE* file; struct stat buf; text = g_string_new("this is a test!"); fd = mkstemp(filename); ck_assert(fd != -1); write_file_result = write_file(text, filename, O_CREAT|O_WRONLY, S_IRWXU|S_IRWXG|S_IRWXO); ck_assert(write_file_result == true); file = fopen(filename, "r"); ck_assert(file != NULL); fgets(line, LINE_MAX, file); ck_assert_str_eq(line, text->str); ck_assert(fclose(file) != EOF); g_string_free(text, true); ck_assert(stat(filename, &buf) != -1); ck_assert((buf.st_mode&S_IRWXU) == S_IRWXU); ck_assert((buf.st_mode&S_IRWXG) == S_IRWXG); ck_assert((buf.st_mode&S_IRWXO) == S_IRWXO); ck_assert(remove(filename) != -1); }
END_TEST START_TEST(alsa_bug_payload) { char *oopsfile = NULL; oopsfile = TESTOOPSDIR "/ALSA.txt"; setup_payload(oopsfile); printf("ALSA payload: %s\n", pl->str); telem_log(LOG_ERR, "AlSA bug backtrace: %s\n", pl->str); ck_assert(pl->len > 0); ck_assert_str_eq(reason, "ALSA sound/core/pcm_lib.c:154: BUG: stream = 1, pos = 0x1138, buffer size = 0x1138, period size = 0x44e"); ck_assert(strstr(pl->str, "Kernel Version : 2.6.25-14.fc9.i686 #1")); ck_assert(strstr(pl->str, "Tainted : Not tainted")); ck_assert(strstr(pl->str, "#1 warn_on_slowpath")); ck_assert(strstr(pl->str, "#2 ? vsnprintf")); ck_assert(strstr(pl->str, "#3 ? _spin_unlock_irqrestore")); ck_assert(strstr(pl->str, "#10 start_kernel")); nc_string_free(pl); }
END_TEST START_TEST(test_goal_install_selector) { HySelector sltr; HyGoal goal = hy_goal_create(test_globals.sack); // test arch forcing sltr = hy_selector_create(test_globals.sack); hy_selector_set(sltr, HY_PKG_NAME, HY_EQ, "semolina"); hy_selector_set(sltr, HY_PKG_ARCH, HY_EQ, "i686"); fail_if(hy_goal_install_selector(goal, sltr)); hy_selector_free(sltr); fail_if(hy_goal_run(goal)); assert_iueo(goal, 1, 0, 0, 0); HyPackageList plist = hy_goal_list_installs(goal); char *nvra = hy_package_get_nevra(hy_packagelist_get(plist, 0)); ck_assert_str_eq(nvra, "semolina-2-0.i686"); hy_free(nvra); hy_packagelist_free(plist); hy_goal_free(goal); }
END_TEST START_TEST(test_error_double) { ck_assert(escdf_error_add(ESCDF_EFILE_CORRUPT, "test_2_1.c", 1234, "dummy21") == ESCDF_EFILE_CORRUPT); ck_assert(escdf_error_get_last(NULL) == ESCDF_EFILE_CORRUPT); ck_assert(escdf_error_len() == 1); ck_assert(escdf_error_add(ESCDF_ENOSUPPORT, "test_2_2.c", 202, "dummy22") == ESCDF_ENOSUPPORT); ck_assert(escdf_error_get_last(NULL) == ESCDF_ENOSUPPORT); ck_assert(escdf_error_len() == 2); escdf_error_fetchall(&err_str); ck_assert_str_eq(err_str, "libescdf: ERROR:\n" " * in test_2_1.c(dummy21):1234:\n" " file corrupted (ESCDF_EFILE_CORRUPT)\n" " * in test_2_2.c(dummy22):202:\n" " unsupported option in file (ESCDF_ENOSUPPORT)\n"); free(err_str); ck_assert(escdf_error_get_last(NULL) == ESCDF_SUCCESS); ck_assert(escdf_error_len() == 0); }
END_TEST START_TEST (test_recv_hello) { int err; memif_connection_t conn; memif_msg_t msg; memif_msg_hello_t *h = &msg.hello; msg.type = MEMIF_MSG_TYPE_HELLO; h->min_version = MEMIF_VERSION; h->max_version = MEMIF_VERSION; h->max_s2m_ring = 1; h->max_m2s_ring = 1; h->max_log2_ring_size = 14; strncpy ((char *) h->name, TEST_IF_NAME, strlen (TEST_IF_NAME)); memset (conn.remote_name, 0, sizeof (conn.remote_name)); conn.args.num_s2m_rings = 4; conn.args.num_m2s_rings = 6; conn.args.log2_ring_size = 10; if ((err = memif_msg_receive_hello (&conn, &msg)) != MEMIF_ERR_SUCCESS) ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); ck_assert_uint_eq (conn.run_args.num_s2m_rings, 2); ck_assert_uint_eq (conn.run_args.num_m2s_rings, 2); ck_assert_uint_eq (conn.run_args.log2_ring_size, 10); ck_assert_str_eq ((char *)conn.remote_name, TEST_IF_NAME); h->max_version = 9; if ((err = memif_msg_receive_hello (&conn, &msg)) != MEMIF_ERR_SUCCESS) ck_assert_msg (err == MEMIF_ERR_PROTO, "err code: %u, err msg: %s", err, memif_strerror (err)); }
END_TEST START_TEST (test_enq_connected) { int err; if ((err = memif_init (control_fd_update, TEST_APP_NAME, NULL, NULL, NULL)) != MEMIF_ERR_SUCCESS) ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); memif_connection_t conn; conn.msg_queue = NULL; memset (conn.args.interface_name, 0, sizeof (conn.args.interface_name)); strncpy ((char *) conn.args.interface_name, TEST_IF_NAME, strlen (TEST_IF_NAME)); if ((err = memif_msg_enq_connected (&conn)) != MEMIF_ERR_SUCCESS) ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); memif_msg_queue_elt_t *e = conn.msg_queue; ck_assert_uint_eq (e->msg.type, MEMIF_MSG_TYPE_CONNECTED); ck_assert_int_eq (e->fd, -1); ck_assert_str_eq ((char *)e->msg.connect.if_name, TEST_IF_NAME); queue_free (&conn.msg_queue); }
END_TEST START_TEST(inherits_test) { Eina_List *compare = NULL, *itr1, *itr2; Eina_List *inherits_list = NULL; char *str1, *str2; eina_init(); compare = eina_list_append(compare, "MyBaseClass1"); compare = eina_list_append(compare, "MyBaseClass2"); eolian_database_init(); eolian_eo_class_desc_parse(EO_COMMENT); inherits_list = (Eina_List*) database_class_inherits_list_get("MyClassName"); fail_if(!inherits_list); ck_assert_int_eq(eina_list_count(inherits_list), 2); itr2 = compare; EINA_LIST_FOREACH(inherits_list, itr1, str1) { str2 = eina_list_data_get(itr2); ck_assert_str_eq(str1, str2); itr2 = eina_list_next(itr2); }
} END_TEST /** * \brief Verify range pasting works correctly * * Yank and paste some image pointers from one group and paste it to another * group. Verify the image pointer references are handled correctly. */ START_TEST(test_yank_paste) { Range rng; ImageGroup* test_group = group_create("test_name", 't'); ck_assert_int_eq( 0, group_get_size(test_group) ); // yank some data from the middle of group and do initial yank buffer // allocation rng.start = 2; rng.end = 4; ck_assert( OK == group_yank_range(image_group, rng) ); ck_assert_str_eq( pointer_list[2]->name, group_yank_buffer[0]->name ); ck_assert_str_eq( pointer_list[3]->name, group_yank_buffer[1]->name ); ck_assert_str_eq( pointer_list[4]->name, group_yank_buffer[2]->name ); ck_assert_int_eq( 3, pointer_list[2]->ref ); ck_assert_int_eq( 3, pointer_list[3]->ref ); ck_assert_int_eq( 3, pointer_list[4]->ref ); ck_assert_int_eq( 3, group_buffer_size() ); ck_assert_int_eq( 3, group_buffer_max_size() ); // paste from yank buffer ck_assert( OK == group_yank_paste(test_group, 0) ); ck_assert_str_eq( pointer_list[2]->name, group_get_image(test_group, 0)->name ); ck_assert_str_eq( pointer_list[3]->name, group_get_image(test_group, 1)->name ); ck_assert_str_eq( pointer_list[4]->name, group_get_image(test_group, 2)->name ); ck_assert_int_eq( 4, pointer_list[2]->ref ); ck_assert_int_eq( 4, pointer_list[3]->ref ); ck_assert_int_eq( 4, pointer_list[4]->ref ); ck_assert_int_eq( 3, group_get_size(test_group) ); ck_assert( OK == group_destroy(test_group) ); ck_assert( ! error_is_error() ); } END_TEST
END_TEST START_TEST(test_mg_vsnprintf) { char buf[16]; int is_trunc; memset(buf, 0, sizeof(buf)); is_trunc = 777; mg_snprintf(NULL, &is_trunc, buf, 10, "%8i", 123); ck_assert_str_eq(buf, " 123"); ck_assert_int_eq(is_trunc, 0); is_trunc = 777; mg_snprintf(NULL, &is_trunc, buf, 10, "%9i", 123); ck_assert_str_eq(buf, " 123"); ck_assert_int_eq(is_trunc, 0); is_trunc = 777; mg_snprintf(NULL, &is_trunc, buf, 9, "%9i", 123); ck_assert_str_eq(buf, " 12"); ck_assert_int_eq(is_trunc, 1); is_trunc = 777; mg_snprintf(NULL, &is_trunc, buf, 8, "%9i", 123); ck_assert_str_eq(buf, " 1"); ck_assert_int_eq(is_trunc, 1); is_trunc = 777; mg_snprintf(NULL, &is_trunc, buf, 7, "%9i", 123); ck_assert_str_eq(buf, " "); ck_assert_int_eq(is_trunc, 1); strcpy(buf, "1234567890"); mg_snprintf(NULL, &is_trunc, buf, 0, "%i", 543); ck_assert_str_eq(buf, "1234567890"); }
} END_TEST START_TEST(test_es_list_remove_head) { char *e1 = "e1"; char *e2 = "e2"; char *tgt = NULL; es_ListEntry *list = es_list_append(NULL,e1); es_list_append(list,e2); list = es_list_remove_head(list,&tgt); ck_assert_str_eq("e1",tgt); ck_assert_str_eq("e1",e1); ck_assert_str_eq("e2",e2); list = es_list_remove_head(list,&tgt); ck_assert_str_eq("e2",tgt); ck_assert_str_eq("e1",e1); ck_assert_str_eq("e2",e2); ck_assert_ptr_eq(NULL, list); } END_TEST
END_TEST START_TEST(test_address) { char address[35]; uint8_t pub_key[65]; memcpy(pub_key, fromhex("0226659c1cf7321c178c07437150639ff0c5b7679c7ea195253ed9abda2e081a37"), 33); ecdsa_get_address(pub_key, 0, address); ck_assert_str_eq(address, "139MaMHp3Vjo8o4x8N1ZLWEtovLGvBsg6s"); ecdsa_get_address(pub_key, 111, address); ck_assert_str_eq(address, "mhfJsQNnrXB3uuYZqvywARTDfuvyjg4RBh"); ecdsa_get_address(pub_key, 52, address); ck_assert_str_eq(address, "MxiimznnxsqMfLKTQBL8Z2PoY9jKpjgkCu"); ecdsa_get_address(pub_key, 48, address); ck_assert_str_eq(address, "LMNJqZbe89yrPbm7JVzrcXJf28hZ1rKPaH"); memcpy(pub_key, fromhex("025b1654a0e78d28810094f6c5a96b8efb8a65668b578f170ac2b1f83bc63ba856"), 33); ecdsa_get_address(pub_key, 0, address); ck_assert_str_eq(address, "19Ywfm3witp6C1yBMy4NRYHY2347WCRBfQ"); ecdsa_get_address(pub_key, 111, address); ck_assert_str_eq(address, "mp4txp8vXvFLy8So5Y2kFTVrt2epN6YzdP"); ecdsa_get_address(pub_key, 52, address); ck_assert_str_eq(address, "N58JsQYveGueiZDgdnNwe4SSkGTAToutAY"); ecdsa_get_address(pub_key, 48, address); ck_assert_str_eq(address, "LTmtvyMmoZ49SpfLY73fhZMJEFRPdyohKh"); memcpy(pub_key, fromhex("03433f246a12e6486a51ff08802228c61cf895175a9b49ed4766ea9a9294a3c7fe"), 33); ecdsa_get_address(pub_key, 0, address); ck_assert_str_eq(address, "1FWE2bn3MWhc4QidcF6AvEWpK77sSi2cAP"); ecdsa_get_address(pub_key, 111, address); ck_assert_str_eq(address, "mv2BKes2AY8rqXCFKp4Yk9j9B6iaMfWRLN"); ecdsa_get_address(pub_key, 52, address); ck_assert_str_eq(address, "NB5bEFH2GtoAawy8t4Qk8kfj3LWvQs3MhB"); ecdsa_get_address(pub_key, 48, address); ck_assert_str_eq(address, "LZjBHp5sSAwfKDQnnP5UCFaaXKV9YheGxQ"); memcpy(pub_key, fromhex("03aeb03abeee0f0f8b4f7a5d65ce31f9570cef9f72c2dd8a19b4085a30ab033d48"), 33); ecdsa_get_address(pub_key, 0, address); ck_assert_str_eq(address, "1yrZb8dhdevoqpUEGi2tUccUEeiMKeLcs"); ecdsa_get_address(pub_key, 111, address); ck_assert_str_eq(address, "mgVoreDcWf6BaxJ5wqgQiPpwLEFRLSr8U8"); ecdsa_get_address(pub_key, 52, address); ck_assert_str_eq(address, "MwZDmEdcd1kVLP4yW62c6zmXCU3mNbveDo"); ecdsa_get_address(pub_key, 48, address); ck_assert_str_eq(address, "LLCopoSTnHtz4eWdQQhLAVgNgT1zTi4QBK"); memcpy(pub_key, fromhex("0496e8f2093f018aff6c2e2da5201ee528e2c8accbf9cac51563d33a7bb74a016054201c025e2a5d96b1629b95194e806c63eb96facaedc733b1a4b70ab3b33e3a"), 65); ecdsa_get_address(pub_key, 0, address); ck_assert_str_eq(address, "194SZbL75xCCGBbKtMsyWLE5r9s2V6mhVM"); ecdsa_get_address(pub_key, 111, address); ck_assert_str_eq(address, "moaPreR5tydT3J4wbvrMLFSQi9TjPCiZc6"); ecdsa_get_address(pub_key, 52, address); ck_assert_str_eq(address, "N4domEq61LHkniqqABCYirNzaPG5NRU8GH"); ecdsa_get_address(pub_key, 48, address); ck_assert_str_eq(address, "LTHPpodwAcSFWzHV4VsGnMHr4NEJajMnKX"); memcpy(pub_key, fromhex("0498010f8a687439ff497d3074beb4519754e72c4b6220fb669224749591dde416f3961f8ece18f8689bb32235e436874d2174048b86118a00afbd5a4f33a24f0f"), 65); ecdsa_get_address(pub_key, 0, address); ck_assert_str_eq(address, "1A2WfBD4BJFwYHFPc5KgktqtbdJLBuVKc4"); ecdsa_get_address(pub_key, 111, address); ck_assert_str_eq(address, "mpYTxEJ2zKhCKPj1KeJ4ap4DTcu39T3uzD"); ecdsa_get_address(pub_key, 52, address); ck_assert_str_eq(address, "N5bsrpi36gMW4pVtsteFyQzoKrhPE7nkxK"); ecdsa_get_address(pub_key, 48, address); ck_assert_str_eq(address, "LUFTvPWtFxVzo5wYnDJz2uueoqfcMYiuxH"); memcpy(pub_key, fromhex("04f80490839af36d13701ec3f9eebdac901b51c362119d74553a3c537faff31b17e2a59ebddbdac9e87b816307a7ed5b826b8f40b92719086238e1bebf19b77a4d"), 65); ecdsa_get_address(pub_key, 0, address); ck_assert_str_eq(address, "19J81hrPnQxg9UGx45ibTieCkb2ttm8CLL"); ecdsa_get_address(pub_key, 111, address); ck_assert_str_eq(address, "mop5JkwNbSPvvakZmegyHdrXcadbjLazww"); ecdsa_get_address(pub_key, 52, address); ck_assert_str_eq(address, "N4sVDMMNho4Eg1XTKu3AgEo7UpRwq3aNbn"); ecdsa_get_address(pub_key, 48, address); ck_assert_str_eq(address, "LTX5GvADs5CjQGy7EDhtjjhxxoQB2Uhicd"); }
END_TEST START_TEST(test_mnemonic) { static const char *vectors[] = { "00000000000000000000000000000000", "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about", "c55257c360c07c72029aebc1b53c05ed0362ada38ead3e3e9efa3708e53495531f09a6987599d18264c1e1c92f2cf141630c7a3c4ab7c81b2f001698e7463b04", "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f", "legal winner thank year wave sausage worth useful legal winner thank yellow", "2e8905819b8723fe2c1d161860e5ee1830318dbf49a83bd451cfb8440c28bd6fa457fe1296106559a3c80937a1c1069be3a3a5bd381ee6260e8d9739fce1f607", "80808080808080808080808080808080", "letter advice cage absurd amount doctor acoustic avoid letter advice cage above", "d71de856f81a8acc65e6fc851a38d4d7ec216fd0796d0a6827a3ad6ed5511a30fa280f12eb2e47ed2ac03b5c462a0358d18d69fe4f985ec81778c1b370b652a8", "ffffffffffffffffffffffffffffffff", "zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo wrong", "ac27495480225222079d7be181583751e86f571027b0497b5b5d11218e0a8a13332572917f0f8e5a589620c6f15b11c61dee327651a14c34e18231052e48c069", "000000000000000000000000000000000000000000000000", "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon agent", "035895f2f481b1b0f01fcf8c289c794660b289981a78f8106447707fdd9666ca06da5a9a565181599b79f53b844d8a71dd9f439c52a3d7b3e8a79c906ac845fa", "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f", "legal winner thank year wave sausage worth useful legal winner thank year wave sausage worth useful legal will", "f2b94508732bcbacbcc020faefecfc89feafa6649a5491b8c952cede496c214a0c7b3c392d168748f2d4a612bada0753b52a1c7ac53c1e93abd5c6320b9e95dd", "808080808080808080808080808080808080808080808080", "letter advice cage absurd amount doctor acoustic avoid letter advice cage absurd amount doctor acoustic avoid letter always", "107d7c02a5aa6f38c58083ff74f04c607c2d2c0ecc55501dadd72d025b751bc27fe913ffb796f841c49b1d33b610cf0e91d3aa239027f5e99fe4ce9e5088cd65", "ffffffffffffffffffffffffffffffffffffffffffffffff", "zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo when", "0cd6e5d827bb62eb8fc1e262254223817fd068a74b5b449cc2f667c3f1f985a76379b43348d952e2265b4cd129090758b3e3c2c49103b5051aac2eaeb890a528", "0000000000000000000000000000000000000000000000000000000000000000", "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon art", "bda85446c68413707090a52022edd26a1c9462295029f2e60cd7c4f2bbd3097170af7a4d73245cafa9c3cca8d561a7c3de6f5d4a10be8ed2a5e608d68f92fcc8", "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f", "legal winner thank year wave sausage worth useful legal winner thank year wave sausage worth useful legal winner thank year wave sausage worth title", "bc09fca1804f7e69da93c2f2028eb238c227f2e9dda30cd63699232578480a4021b146ad717fbb7e451ce9eb835f43620bf5c514db0f8add49f5d121449d3e87", "8080808080808080808080808080808080808080808080808080808080808080", "letter advice cage absurd amount doctor acoustic avoid letter advice cage absurd amount doctor acoustic avoid letter advice cage absurd amount doctor acoustic bless", "c0c519bd0e91a2ed54357d9d1ebef6f5af218a153624cf4f2da911a0ed8f7a09e2ef61af0aca007096df430022f7a2b6fb91661a9589097069720d015e4e982f", "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo vote", "dd48c104698c30cfe2b6142103248622fb7bb0ff692eebb00089b32d22484e1613912f0a5b694407be899ffd31ed3992c456cdf60f5d4564b8ba3f05a69890ad", "77c2b00716cec7213839159e404db50d", "jelly better achieve collect unaware mountain thought cargo oxygen act hood bridge", "b5b6d0127db1a9d2226af0c3346031d77af31e918dba64287a1b44b8ebf63cdd52676f672a290aae502472cf2d602c051f3e6f18055e84e4c43897fc4e51a6ff", "b63a9c59a6e641f288ebc103017f1da9f8290b3da6bdef7b", "renew stay biology evidence goat welcome casual join adapt armor shuffle fault little machine walk stumble urge swap", "9248d83e06f4cd98debf5b6f010542760df925ce46cf38a1bdb4e4de7d21f5c39366941c69e1bdbf2966e0f6e6dbece898a0e2f0a4c2b3e640953dfe8b7bbdc5", "3e141609b97933b66a060dcddc71fad1d91677db872031e85f4c015c5e7e8982", "dignity pass list indicate nasty swamp pool script soccer toe leaf photo multiply desk host tomato cradle drill spread actor shine dismiss champion exotic", "ff7f3184df8696d8bef94b6c03114dbee0ef89ff938712301d27ed8336ca89ef9635da20af07d4175f2bf5f3de130f39c9d9e8dd0472489c19b1a020a940da67", "0460ef47585604c5660618db2e6a7e7f", "afford alter spike radar gate glance object seek swamp infant panel yellow", "65f93a9f36b6c85cbe634ffc1f99f2b82cbb10b31edc7f087b4f6cb9e976e9faf76ff41f8f27c99afdf38f7a303ba1136ee48a4c1e7fcd3dba7aa876113a36e4", "72f60ebac5dd8add8d2a25a797102c3ce21bc029c200076f", "indicate race push merry suffer human cruise dwarf pole review arch keep canvas theme poem divorce alter left", "3bbf9daa0dfad8229786ace5ddb4e00fa98a044ae4c4975ffd5e094dba9e0bb289349dbe2091761f30f382d4e35c4a670ee8ab50758d2c55881be69e327117ba", "2c85efc7f24ee4573d2b81a6ec66cee209b2dcbd09d8eddc51e0215b0b68e416", "clutch control vehicle tonight unusual clog visa ice plunge glimpse recipe series open hour vintage deposit universe tip job dress radar refuse motion taste", "fe908f96f46668b2d5b37d82f558c77ed0d69dd0e7e043a5b0511c48c2f1064694a956f86360c93dd04052a8899497ce9e985ebe0c8c52b955e6ae86d4ff4449", "eaebabb2383351fd31d703840b32e9e2", "turtle front uncle idea crush write shrug there lottery flower risk shell", "bdfb76a0759f301b0b899a1e3985227e53b3f51e67e3f2a65363caedf3e32fde42a66c404f18d7b05818c95ef3ca1e5146646856c461c073169467511680876c", "7ac45cfe7722ee6c7ba84fbc2d5bd61b45cb2fe5eb65aa78", "kiss carry display unusual confirm curtain upgrade antique rotate hello void custom frequent obey nut hole price segment", "ed56ff6c833c07982eb7119a8f48fd363c4a9b1601cd2de736b01045c5eb8ab4f57b079403485d1c4924f0790dc10a971763337cb9f9c62226f64fff26397c79", "4fa1a8bc3e6d80ee1316050e862c1812031493212b7ec3f3bb1b08f168cabeef", "exile ask congress lamp submit jacket era scheme attend cousin alcohol catch course end lucky hurt sentence oven short ball bird grab wing top", "095ee6f817b4c2cb30a5a797360a81a40ab0f9a4e25ecd672a3f58a0b5ba0687c096a6b14d2c0deb3bdefce4f61d01ae07417d502429352e27695163f7447a8c", "18ab19a9f54a9274f03e5209a2ac8a91", "board flee heavy tunnel powder denial science ski answer betray cargo cat", "6eff1bb21562918509c73cb990260db07c0ce34ff0e3cc4a8cb3276129fbcb300bddfe005831350efd633909f476c45c88253276d9fd0df6ef48609e8bb7dca8", "18a2e1d81b8ecfb2a333adcb0c17a5b9eb76cc5d05db91a4", "board blade invite damage undo sun mimic interest slam gaze truly inherit resist great inject rocket museum chief", "f84521c777a13b61564234bf8f8b62b3afce27fc4062b51bb5e62bdfecb23864ee6ecf07c1d5a97c0834307c5c852d8ceb88e7c97923c0a3b496bedd4e5f88a9", "15da872c95a13dd738fbf50e427583ad61f18fd99f628c417a61cf8343c90419", "beyond stage sleep clip because twist token leaf atom beauty genius food business side grid unable middle armed observe pair crouch tonight away coconut", "b15509eaa2d09d3efd3e006ef42151b30367dc6e3aa5e44caba3fe4d3e352e65101fbdb86a96776b91946ff06f8eac594dc6ee1d3e82a42dfe1b40fef6bcc3fd", 0, 0, 0, }; const char **a, **b, **c, *m; uint8_t seed[64]; a = vectors; b = vectors + 1; c = vectors + 2; while (*a && *b && *c) { m = mnemonic_from_data(fromhex(*a), strlen(*a) / 2); ck_assert_str_eq(m, *b); mnemonic_to_seed(m, "TREZOR", seed, 0); ck_assert_mem_eq(seed, fromhex(*c), strlen(*c) / 2); a += 3; b += 3; c += 3; } }
static void _next(struct httpc *hc, const gchar *msg) { gchar *next = _next_msg(hc); ck_assert_str_eq(msg, next); g_free(next); }
END_TEST START_TEST(irq_payload) { char *oopsfile = NULL; oopsfile = TESTOOPSDIR "/irq.txt"; setup_payload(oopsfile); telem_log(LOG_ERR, "IRQ backtrace: %s\n", pl->str); ck_assert(pl->len > 0); ck_assert_str_eq(reason, "irq 11: nobody cared"); ck_assert(strstr(pl->str, "Kernel Version : 3.10.7-100.fc18.i686.PAE #1")); ck_assert(strstr(pl->str, "Tainted : Not tainted")); ck_assert(strstr(pl->str, "#1 dump_stack")); ck_assert(strstr(pl->str, "#2 __report_bad_irq")); ck_assert(strstr(pl->str, "#3 note_interrupt")); ck_assert(strstr(pl->str, "#4 ? __do_softirq")); ck_assert(strstr(pl->str, "#5 handle_irq_event_percpu")); ck_assert(strstr(pl->str, "#6 handle_irq_event")); ck_assert(strstr(pl->str, "#7 ? handle_nested_irq")); ck_assert(strstr(pl->str, "#8 handle_level_irq")); ck_assert(strstr(pl->str, "#9 ? do_IRQ")); ck_assert(strstr(pl->str, "#10 ? common_interrupt")); ck_assert(strstr(pl->str, "#11 ? __do_softirq")); ck_assert(strstr(pl->str, "#12 ? handle_irq")); ck_assert(strstr(pl->str, "#13 ? irq_exit")); ck_assert(strstr(pl->str, "#14 ? do_IRQ")); ck_assert(strstr(pl->str, "#15 ? pci_write")); ck_assert(strstr(pl->str, "#16 ? common_interrupt")); ck_assert(strstr(pl->str, "#17 ? audit_make_tree")); ck_assert(strstr(pl->str, "#18 ? usbdev_ioctl")); ck_assert(strstr(pl->str, "#19 ? _raw_spin_unlock_irqrestore")); ck_assert(strstr(pl->str, "#20 ? __setup_irq")); ck_assert(strstr(pl->str, "#21 ? kmem_cache_alloc_trace")); ck_assert(strstr(pl->str, "#22 ? vsnprintf")); ck_assert(strstr(pl->str, "#23 ? request_threaded_irq")); ck_assert(strstr(pl->str, "#24 ? usb_hcd_platform_shutdown")); ck_assert(strstr(pl->str, "#25 ? request_threaded_irq")); ck_assert(strstr(pl->str, "#26 ? usb_add_hcd")); ck_assert(strstr(pl->str, "#27 ? usb_hcd_pci_probe")); ck_assert(strstr(pl->str, "#28 ? rpm_resume")); ck_assert(strstr(pl->str, "#29 ? pci_device_probe")); ck_assert(strstr(pl->str, "#30 ? driver_probe_device")); ck_assert(strstr(pl->str, "#31 ? pci_match_device")); ck_assert(strstr(pl->str, "#32 ? __driver_attach")); ck_assert(strstr(pl->str, "#33 ? driver_probe_device")); ck_assert(strstr(pl->str, "#34 ? bus_for_each_dev")); ck_assert(strstr(pl->str, "#35 ? driver_attach")); ck_assert(strstr(pl->str, "#36 ? driver_probe_device")); ck_assert(strstr(pl->str, "#37 ? bus_add_driver")); ck_assert(strstr(pl->str, "#38 ? pci_match_id")); ck_assert(strstr(pl->str, "#39 ? driver_register")); ck_assert(strstr(pl->str, "#40 ? ohci_hcd_mod_init")); ck_assert(strstr(pl->str, "#41 ? ohci_hcd_mod_init")); ck_assert(strstr(pl->str, "#42 ? __pci_register_driver")); ck_assert(strstr(pl->str, "#43 ? uhci_hcd_init")); ck_assert(strstr(pl->str, "#44 ? do_one_initcall")); ck_assert(strstr(pl->str, "#45 ? kernel_init_freeable")); ck_assert(strstr(pl->str, "#46 ? do_early_param")); nc_string_free(pl); }
END_TEST #ifdef ENABLE_DOT1 /* This test case tests send and receive of all DOT1 TLVs(2005 and 2009): Port Valn ID, VLAN, Port Protocol VLAN ID, Protocol Identity, VID Usage Digest, Management VID, and 802.1ax Link Aggregation TLVs */ START_TEST (test_send_rcv_dot1_tlvs) { int n; struct lldpd_vlan *rvlan, vlan1, vlan2, vlan3; struct lldpd_ppvid ppvid, *rppvid; struct lldpd_pi pi1, pi2, *rpi; struct lldpd_chassis *nchassis = NULL; struct lldpd_port *nport = NULL; struct packet *pkt; /* Populate port and chassis */ hardware.h_lport.p_id_subtype = LLDP_PORTID_SUBTYPE_LLADDR; hardware.h_lport.p_id = macaddress; hardware.h_lport.p_id_len = ETHER_ADDR_LEN; hardware.h_lport.p_descr = "Fake port description"; hardware.h_lport.p_mfs = 1516; hardware.h_lport.p_pvid = 1500; chassis.c_id_subtype = LLDP_CHASSISID_SUBTYPE_LOCAL; chassis.c_id = "Chassis name"; chassis.c_id_len = strlen(chassis.c_id); chassis.c_name = "Second chassis"; chassis.c_descr = "Chassis description"; chassis.c_cap_available = LLDP_CAP_ROUTER | LLDP_CAP_BRIDGE; chassis.c_cap_enabled = LLDP_CAP_ROUTER; vlan1.v_name = "Voice"; vlan1.v_vid = 157; vlan2.v_name = "Data"; vlan2.v_vid = 1247; vlan3.v_name = "Control"; vlan3.v_vid = 741; TAILQ_INSERT_TAIL(&hardware.h_lport.p_vlans, &vlan1, v_entries); TAILQ_INSERT_TAIL(&hardware.h_lport.p_vlans, &vlan2, v_entries); TAILQ_INSERT_TAIL(&hardware.h_lport.p_vlans, &vlan3, v_entries); ppvid.p_cap_status = 3; ppvid.p_ppvid = 1500; TAILQ_INSERT_TAIL(&hardware.h_lport.p_ppvids, &ppvid, p_entries); pi1.p_pi = "IEEE Link Aggregration Control Protocol 802.3ad"; pi1.p_pi_len = strlen(pi1.p_pi); pi2.p_pi = "IEEE Link Layer Discovery Protocol 802.1ab-2005"; pi2.p_pi_len = strlen(pi2.p_pi); TAILQ_INSERT_TAIL(&hardware.h_lport.p_pids, &pi1, p_entries); TAILQ_INSERT_TAIL(&hardware.h_lport.p_pids, &pi2, p_entries); /* Build packet */ n = lldp_send(&test_lldpd, &hardware); if (n != 0) { fail("unable to build packet"); return; } if (TAILQ_EMPTY(&pkts)) { fail("no packets sent"); return; } pkt = TAILQ_FIRST(&pkts); fail_unless(TAILQ_NEXT(pkt, next) == NULL, "more than one packet sent"); /* decode the retrieved packet calling lldp_decode() */ fail_unless(lldp_decode(NULL, pkt->data, pkt->size, &hardware, &nchassis, &nport) != -1); if (!nchassis || !nport) { fail("unable to decode packet"); return; } /* verify port values */ check_received_port(&hardware.h_lport, nport); /* verify chassis values */ check_received_chassis(&chassis, nchassis); if (TAILQ_EMPTY(&nport->p_vlans)) { fail("no VLAN"); return; } rvlan = TAILQ_FIRST(&nport->p_vlans); ck_assert_int_eq(rvlan->v_vid, vlan1.v_vid); ck_assert_str_eq(rvlan->v_name, vlan1.v_name); rvlan = TAILQ_NEXT(rvlan, v_entries); if (!rvlan) { fail("no more VLAN"); return; } ck_assert_int_eq(rvlan->v_vid, vlan2.v_vid); ck_assert_str_eq(rvlan->v_name, vlan2.v_name); rvlan = TAILQ_NEXT(rvlan, v_entries); if (!rvlan) { fail("no more VLAN"); return; } ck_assert_int_eq(rvlan->v_vid, vlan3.v_vid); ck_assert_str_eq(rvlan->v_name, vlan3.v_name); rvlan = TAILQ_NEXT(rvlan, v_entries); fail_unless(rvlan == NULL); ck_assert_int_eq(nport->p_pvid, hardware.h_lport.p_pvid); if (TAILQ_EMPTY(&nport->p_ppvids)) { fail("no Port Protocal VLAN ID"); return; } rppvid = TAILQ_FIRST(&nport->p_ppvids); ck_assert_int_eq(rppvid->p_cap_status, ppvid.p_cap_status); ck_assert_int_eq(rppvid->p_ppvid, ppvid.p_ppvid); if (TAILQ_EMPTY(&nport->p_pids)) { fail("no Protocal Identity TLV"); return; } rpi = TAILQ_FIRST(&nport->p_pids); ck_assert_int_eq(rpi->p_pi_len, pi1.p_pi_len); ck_assert_str_eq_n(rpi->p_pi, pi1.p_pi, pi1.p_pi_len); rpi = TAILQ_NEXT(rpi, p_entries); if (!rpi) { fail("no more Protocol Identity TLVs"); return; } ck_assert_int_eq(rpi->p_pi_len, pi2.p_pi_len); ck_assert_str_eq_n(rpi->p_pi, pi2.p_pi, pi2.p_pi_len); rpi = TAILQ_NEXT(rpi, p_entries); fail_unless(rpi == NULL); return; }
END_TEST START_TEST (request1) { ret_t ret; chula_buffer_t raw; hpack_header_parser_t parser; hpack_header_field_t field; unsigned int offset = 0; unsigned int consumed = 0; /* 82 | == Indexed - Add == | idx = 2 | -> :method: GET 87 | == Indexed - Add == | idx = 7 | -> :scheme: http 86 | == Indexed - Add == | idx = 6 | -> :path: / 04 | == Literal indexed == | Indexed name (idx = 4) | :authority 0f | Literal value (len = 15) 7777 772e 6578 616d 706c 652e 636f 6d | www.example.com | -> :authority: www.example.com */ chula_buffer_fake_str (&raw, "\x82\x87\x86\x04\x0f\x77\x77\x77\x2e\x65\x78\x61\x6d\x70\x6c\x65\x2e\x63\x6f\x6d"); hpack_header_field_init (&field); hpack_header_parser_init (&parser); chula_print_repr (chula, buffer, &raw); /* 82 - :method: GET */ ret = hpack_header_parser_field (&parser, &raw, offset, &field, &consumed); ck_assert (ret == ret_ok); ck_assert (consumed == 1); ck_assert_str_eq (field.name.buf, ":method"); ck_assert_str_eq (field.value.buf, "GET"); chula_print_repr (hpack, header_field, &field); offset += consumed; ck_assert (offset == 1); memset (&field, 0, sizeof(field)); /* 87 - :scheme: http */ ret = hpack_header_parser_field (&parser, &raw, offset, &field, &consumed); ck_assert (ret == ret_ok); ck_assert (consumed == 1); ck_assert_str_eq (field.name.buf, ":scheme"); ck_assert_str_eq (field.value.buf, "http"); chula_print_repr (hpack, header_field, &field); offset += consumed; ck_assert (offset == 2); memset (&field, 0, sizeof(field)); /* 86 - :path: / */ ret = hpack_header_parser_field (&parser, &raw, offset, &field, &consumed); ck_assert (ret == ret_ok); ck_assert (consumed == 1); ck_assert_str_eq (field.name.buf, ":path"); ck_assert_str_eq (field.value.buf, "/"); chula_print_repr (hpack, header_field, &field); offset += consumed; ck_assert (offset == 3); memset (&field, 0, sizeof(field)); /* 04 - :authority: www.example.com */ ret = hpack_header_parser_field (&parser, &raw, offset, &field, &consumed); ck_assert (ret == ret_ok); ck_assert (consumed == 17); ck_assert_str_eq (field.name.buf, ":authority"); ck_assert_str_eq (field.value.buf, "www.example.com"); chula_print_repr (hpack, header_field, &field); hpack_header_parser_mrproper (&parser); }
END_TEST START_TEST (test_riemann_event_set) { riemann_event_t *event; ck_assert_errno (riemann_event_set (NULL), EINVAL); event = riemann_event_new (); ck_assert (riemann_event_set (event, RIEMANN_EVENT_FIELD_NONE) == 0); ck_assert (riemann_event_set (event, RIEMANN_EVENT_FIELD_TIME, (int64_t) 1234, RIEMANN_EVENT_FIELD_NONE) == 0); ck_assert_int_eq (event->has_time, 1); ck_assert_int_eq (event->time, 1234); ck_assert (riemann_event_set (event, RIEMANN_EVENT_FIELD_STATE, "ok", RIEMANN_EVENT_FIELD_NONE) == 0); ck_assert (event->state != NULL); ck_assert_str_eq (event->state, "ok"); ck_assert (riemann_event_set (event, RIEMANN_EVENT_FIELD_SERVICE, "test", RIEMANN_EVENT_FIELD_NONE) == 0); ck_assert (event->service != NULL); ck_assert_str_eq (event->service, "test"); ck_assert (riemann_event_set (event, RIEMANN_EVENT_FIELD_HOST, "localhost", RIEMANN_EVENT_FIELD_NONE) == 0); ck_assert (event->host != NULL); ck_assert_str_eq (event->host, "localhost"); ck_assert (riemann_event_set (event, RIEMANN_EVENT_FIELD_DESCRIPTION, "something", RIEMANN_EVENT_FIELD_NONE) == 0); ck_assert (event->description != NULL); ck_assert_str_eq (event->description, "something"); ck_assert_errno (riemann_event_set (event, RIEMANN_EVENT_FIELD_TAGS, "tag-1", "tag-2", NULL, RIEMANN_EVENT_FIELD_NONE), 0); ck_assert_int_eq (event->n_tags, 2); ck_assert_str_eq (event->tags[0], "tag-1"); ck_assert_str_eq (event->tags[1], "tag-2"); ck_assert (riemann_event_set (event, RIEMANN_EVENT_FIELD_TTL, (float) 1, RIEMANN_EVENT_FIELD_NONE) == 0); ck_assert_int_eq (event->has_ttl, 1); ck_assert_float_eq (event->ttl, (float) 1); ck_assert_errno (riemann_event_set (event, RIEMANN_EVENT_FIELD_ATTRIBUTES, riemann_attribute_create ("key-1", "value-1"), riemann_attribute_create ("key-2", "value-2"), NULL, RIEMANN_EVENT_FIELD_NONE), 0); ck_assert_int_eq (event->n_attributes, 2); ck_assert_str_eq (event->attributes[0]->key, "key-1"); ck_assert_str_eq (event->attributes[1]->value, "value-2"); ck_assert_errno (riemann_event_set (event, RIEMANN_EVENT_FIELD_ATTRIBUTES, riemann_attribute_create ("key-3", "value-3"), NULL, RIEMANN_EVENT_FIELD_NONE), 0); ck_assert_int_eq (event->n_attributes, 1); ck_assert_str_eq (event->attributes[0]->key, "key-3"); ck_assert_str_eq (event->attributes[0]->value, "value-3"); ck_assert_errno (riemann_event_set (event, RIEMANN_EVENT_FIELD_STRING_ATTRIBUTES, "key-4", "value-4", "key-5", "value-5", NULL, RIEMANN_EVENT_FIELD_NONE), 0); ck_assert_int_eq (event->n_attributes, 2); ck_assert_str_eq (event->attributes[0]->key, "key-4"); ck_assert_str_eq (event->attributes[1]->value, "value-5"); ck_assert (riemann_event_set (event, RIEMANN_EVENT_FIELD_METRIC_S64, (int64_t) 12345, RIEMANN_EVENT_FIELD_NONE) == 0); ck_assert_int_eq (event->has_metric_sint64, 1); ck_assert_int_eq (event->metric_sint64, 12345); ck_assert (riemann_event_set (event, RIEMANN_EVENT_FIELD_METRIC_D, (double) 1.5, RIEMANN_EVENT_FIELD_NONE) == 0); ck_assert_int_eq (event->has_metric_d, 1); ck_assert_float_eq (event->metric_d, 1.5); ck_assert (riemann_event_set (event, RIEMANN_EVENT_FIELD_METRIC_F, (float) 1.5, RIEMANN_EVENT_FIELD_NONE) == 0); ck_assert_int_eq (event->has_metric_f, 1); ck_assert_float_eq (event->metric_f, 1.5); ck_assert_errno (riemann_event_set (event, RIEMANN_EVENT_FIELD_METRIC_F * 2, 0, RIEMANN_EVENT_FIELD_NONE), EPROTO); ck_assert (riemann_event_set (event, RIEMANN_EVENT_FIELD_SERVICE, NULL, RIEMANN_EVENT_FIELD_NONE) == 0); ck_assert (event->service == NULL); riemann_event_free (event); }
END_TEST START_TEST (test_recv_lldpd) { /* This is a frame generated by lldpd */ char pkt1[] = { 0x01, 0x80, 0xc2, 0x00, 0x00, 0x0e, 0x00, 0x16, 0x17, 0x2f, 0xa1, 0xb6, 0x88, 0xcc, 0x02, 0x07, 0x04, 0x00, 0x16, 0x17, 0x2f, 0xa1, 0xb6, 0x04, 0x07, 0x03, 0x00, 0x16, 0x17, 0x2f, 0xa1, 0xb6, 0x06, 0x02, 0x00, 0x78, 0x0a, 0x1a, 0x6e, 0x61, 0x72, 0x75, 0x74, 0x6f, 0x2e, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x0c, 0x3f, 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x20, 0x32, 0x2e, 0x36, 0x2e, 0x32, 0x39, 0x2d, 0x32, 0x2d, 0x61, 0x6d, 0x64, 0x36, 0x34, 0x20, 0x23, 0x31, 0x20, 0x53, 0x4d, 0x50, 0x20, 0x53, 0x75, 0x6e, 0x20, 0x4d, 0x61, 0x79, 0x20, 0x31, 0x37, 0x20, 0x31, 0x37, 0x3a, 0x31, 0x35, 0x3a, 0x34, 0x37, 0x20, 0x55, 0x54, 0x43, 0x20, 0x32, 0x30, 0x30, 0x39, 0x20, 0x78, 0x38, 0x36, 0x5f, 0x36, 0x34, 0x0e, 0x04, 0x00, 0x1c, 0x00, 0x14, 0x10, 0x0c, 0x05, 0x01, 0x0a, 0xee, 0x50, 0x4b, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x08, 0x04, 0x65, 0x74, 0x68, 0x30, 0xfe, 0x09, 0x00, 0x12, 0x0f, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x09, 0x00, 0x12, 0x0f, 0x01, 0x03, 0x6c, 0x03, 0x00, 0x10, 0xfe, 0x06, 0x00, 0x12, 0x0f, 0x04, 0x05, 0xdc, 0xfe, 0x07, 0x00, 0x12, 0xbb, 0x01, 0x00, 0x00, 0x00, 0xfe, 0x0f, 0x00, 0x12, 0xbb, 0x05, 0x4e, 0x44, 0x39, 0x39, 0x31, 0x37, 0x38, 0x39, 0x37, 0x30, 0x32, 0xfe, 0x0b, 0x00, 0x12, 0xbb, 0x06, 0x30, 0x38, 0x30, 0x30, 0x31, 0x32, 0x20, 0xfe, 0x12, 0x00, 0x12, 0xbb, 0x07, 0x32, 0x2e, 0x36, 0x2e, 0x32, 0x39, 0x2d, 0x32, 0x2d, 0x61, 0x6d, 0x64, 0x36, 0x34, 0xfe, 0x10, 0x00, 0x12, 0xbb, 0x08, 0x31, 0x30, 0x35, 0x38, 0x32, 0x30, 0x38, 0x35, 0x30, 0x30, 0x30, 0x39, 0xfe, 0x15, 0x00, 0x12, 0xbb, 0x09, 0x4e, 0x45, 0x43, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x72, 0x73, 0x20, 0x53, 0x41, 0x53, 0xfe, 0x13, 0x00, 0x12, 0xbb, 0x0a, 0x50, 0x4f, 0x57, 0x45, 0x52, 0x4d, 0x41, 0x54, 0x45, 0x20, 0x56, 0x4c, 0x33, 0x35, 0x30, 0xfe, 0x0d, 0x00, 0x12, 0xbb, 0x0b, 0x31, 0x30, 0x30, 0x32, 0x30, 0x37, 0x31, 0x32, 0x30, 0x00, 0x00 }; /* This is: Ethernet II, Src: Msi_2f:a1:b6 (00:16:17:2f:a1:b6), Dst: LLDP_Multicast (01:80:c2:00:00:0e) Destination: LLDP_Multicast (01:80:c2:00:00:0e) Source: Msi_2f:a1:b6 (00:16:17:2f:a1:b6) Type: 802.1 Link Layer Discovery Protocol (LLDP) (0x88cc) Link Layer Discovery Protocol Chassis Subtype = MAC address 0000 001. .... .... = TLV Type: Chassis Id (1) .... ...0 0000 0111 = TLV Length: 7 Chassis Id Subtype: MAC address (4) Chassis Id: Msi_2f:a1:b6 (00:16:17:2f:a1:b6) Port Subtype = MAC address 0000 010. .... .... = TLV Type: Port Id (2) .... ...0 0000 0111 = TLV Length: 7 Port Id Subtype: MAC address (3) Port Id: Msi_2f:a1:b6 (00:16:17:2f:a1:b6) Time To Live = 120 sec 0000 011. .... .... = TLV Type: Time to Live (3) .... ...0 0000 0010 = TLV Length: 2 Seconds: 120 System Name = naruto.XXXXXXXXXXXXXXXXXXX 0000 101. .... .... = TLV Type: System Name (5) .... ...0 0001 1010 = TLV Length: 26 System Name = naruto.bureau.b1.p.fti.net System Description = Linux 2.6.29-2-amd64 #1 SMP Sun May 17 17:15:47 UTC 2009 x86_64 0000 110. .... .... = TLV Type: System Description (6) .... ...0 0011 1111 = TLV Length: 63 System Description = Linux 2.6.29-2-amd64 #1 SMP Sun May 17 17:15:47 UTC 2009 x86_64 Capabilities 0000 111. .... .... = TLV Type: System Capabilities (7) .... ...0 0000 0100 = TLV Length: 4 Capabilities: 0x001c .... .... .... .1.. = Bridge .... .... .... 1... = WLAN access point .... .... ...1 .... = Router Enabled Capabilities: 0x0014 .... .... .... .1.. = Bridge .... .... ...1 .... = Router Management Address 0001 000. .... .... = TLV Type: Management Address (8) .... ...0 0000 1100 = TLV Length: 12 Address String Length: 5 Address Subtype: IPv4 (1) Management Address: 10.238.80.75 Interface Subtype: ifIndex (2) Interface Number: 3 OID String Length: 0 Port Description = eth0 0000 100. .... .... = TLV Type: Port Description (4) .... ...0 0000 0100 = TLV Length: 4 Port Description: eth0 IEEE 802.3 - Link Aggregation 1111 111. .... .... = TLV Type: Organization Specific (127) .... ...0 0000 1001 = TLV Length: 9 Organization Unique Code: IEEE 802.3 (0x00120f) IEEE 802.3 Subtype: Link Aggregation (0x03) Aggregation Status: 0x01 .... ...1 = Aggregation Capability: Yes .... ..0. = Aggregation Status: Not Enabled Aggregated Port Id: 0 IEEE 802.3 - MAC/PHY Configuration/Status 1111 111. .... .... = TLV Type: Organization Specific (127) .... ...0 0000 1001 = TLV Length: 9 Organization Unique Code: IEEE 802.3 (0x00120f) IEEE 802.3 Subtype: MAC/PHY Configuration/Status (0x01) Auto-Negotiation Support/Status: 0x03 .... ...1 = Auto-Negotiation: Supported .... ..1. = Auto-Negotiation: Enabled PMD Auto-Negotiation Advertised Capability: 0x6C03 .... .... .... ...1 = 1000BASE-T (full duplex mode) .... .... .... ..1. = 1000BASE-T (half duplex mode) .... .1.. .... .... = 100BASE-TX (full duplex mode) .... 1... .... .... = 100BASE-TX (half duplex mode) ..1. .... .... .... = 10BASE-T (full duplex mode) .1.. .... .... .... = 10BASE-T (half duplex mode) Operational MAU Type: 100BaseTXFD - 2 pair category 5 UTP, full duplex mode (0x0010) IEEE 802.3 - Maximum Frame Size 1111 111. .... .... = TLV Type: Organization Specific (127) .... ...0 0000 0110 = TLV Length: 6 Organization Unique Code: IEEE 802.3 (0x00120f) IEEE 802.3 Subtype: Maximum Frame Size (0x04) Maximum Frame Size: 1500 TIA - Media Capabilities 1111 111. .... .... = TLV Type: Organization Specific (127) .... ...0 0000 0111 = TLV Length: 7 Organization Unique Code: TIA (0x0012bb) Media Subtype: Media Capabilities (0x01) Capabilities: 0x0000 Class Type: Type Not Defined TIA - Inventory - Hardware Revision 1111 111. .... .... = TLV Type: Organization Specific (127) .... ...0 0000 1111 = TLV Length: 15 Organization Unique Code: TIA (0x0012bb) Media Subtype: Inventory - Hardware Revision (0x05) Hardware Revision: ND991789702 TIA - Inventory - Firmware Revision 1111 111. .... .... = TLV Type: Organization Specific (127) .... ...0 0000 1011 = TLV Length: 10 Organization Unique Code: TIA (0x0012bb) Media Subtype: Inventory - Firmware Revision (0x06) Firmware Revision: 080012 TIA - Inventory - Software Revision 1111 111. .... .... = TLV Type: Organization Specific (127) .... ...0 0001 0010 = TLV Length: 18 Organization Unique Code: TIA (0x0012bb) Media Subtype: Inventory - Software Revision (0x07) Software Revision: 2.6.29-2-amd64 TIA - Inventory - Serial Number 1111 111. .... .... = TLV Type: Organization Specific (127) .... ...0 0001 0000 = TLV Length: 16 Organization Unique Code: TIA (0x0012bb) Media Subtype: Inventory - Serial Number (0x08) Serial Number: 105820850009 TIA - Inventory - Manufacturer Name 1111 111. .... .... = TLV Type: Organization Specific (127) .... ...0 0001 0101 = TLV Length: 21 Organization Unique Code: TIA (0x0012bb) Media Subtype: Inventory - Manufacturer Name (0x09) Manufacturer Name: NEC Computers SAS TIA - Inventory - Model Name 1111 111. .... .... = TLV Type: Organization Specific (127) .... ...0 0001 0011 = TLV Length: 19 Organization Unique Code: TIA (0x0012bb) Media Subtype: Inventory - Model Name (0x0a) Model Name: POWERMATE VL350 TIA - Inventory - Asset ID 1111 111. .... .... = TLV Type: Organization Specific (127) .... ...0 0000 1101 = TLV Length: 13 Organization Unique Code: TIA (0x0012bb) Media Subtype: Inventory - Asset ID (0x0b) Asset ID: 100207120 End of LLDPDU 0000 000. .... .... = TLV Type: End of LLDPDU (0) .... ...0 0000 0000 = TLV Length: 0 */ struct lldpd_chassis *nchassis = NULL; struct lldpd_port *nport = NULL; char mac1[] = { 0x00, 0x16, 0x17, 0x2f, 0xa1, 0xb6 }; fail_unless(lldp_decode(NULL, pkt1, sizeof(pkt1), &hardware, &nchassis, &nport) != -1); if (!nchassis || !nport) { fail("unable to decode packet"); return; } ck_assert_int_eq(nchassis->c_id_subtype, LLDP_CHASSISID_SUBTYPE_LLADDR); ck_assert_int_eq(nchassis->c_id_len, ETHER_ADDR_LEN); fail_unless(memcmp(mac1, nchassis->c_id, ETHER_ADDR_LEN) == 0); ck_assert_int_eq(nport->p_id_subtype, LLDP_PORTID_SUBTYPE_LLADDR); ck_assert_int_eq(nport->p_id_len, ETHER_ADDR_LEN); fail_unless(memcmp(mac1, nport->p_id, ETHER_ADDR_LEN) == 0); ck_assert_int_eq(nchassis->c_ttl, 120); ck_assert_str_eq(nchassis->c_name, "naruto.XXXXXXXXXXXXXXXXXXX"); ck_assert_str_eq(nchassis->c_descr, "Linux 2.6.29-2-amd64 #1 SMP Sun May 17 17:15:47 UTC 2009 x86_64"); ck_assert_str_eq(nport->p_descr, "eth0"); ck_assert_int_eq(nchassis->c_cap_available, LLDP_CAP_WLAN | LLDP_CAP_ROUTER | LLDP_CAP_BRIDGE); ck_assert_int_eq(nchassis->c_cap_enabled, LLDP_CAP_ROUTER | LLDP_CAP_BRIDGE); ck_assert_int_eq(nchassis->c_mgmt.tqh_first->m_addr.inet.s_addr, (u_int32_t)inet_addr("10.238.80.75")); ck_assert_int_eq(nchassis->c_mgmt.tqh_first->m_iface, 3); #ifdef ENABLE_DOT3 ck_assert_int_eq(nport->p_aggregid, 0); ck_assert_int_eq(nport->p_macphy.autoneg_enabled, 1); ck_assert_int_eq(nport->p_macphy.autoneg_support, 1); ck_assert_int_eq(nport->p_macphy.autoneg_advertised, LLDP_DOT3_LINK_AUTONEG_1000BASE_TFD | LLDP_DOT3_LINK_AUTONEG_1000BASE_T | LLDP_DOT3_LINK_AUTONEG_100BASE_TXFD | LLDP_DOT3_LINK_AUTONEG_100BASE_TX | LLDP_DOT3_LINK_AUTONEG_10BASET_FD | LLDP_DOT3_LINK_AUTONEG_10BASE_T); ck_assert_int_eq(nport->p_macphy.mau_type, LLDP_DOT3_MAU_100BASETXFD); ck_assert_int_eq(nport->p_mfs, 1500); #endif #ifdef ENABLE_LLDPMED ck_assert_int_eq(nchassis->c_med_type, 0); ck_assert_str_eq(nchassis->c_med_hw, "ND991789702"); ck_assert_str_eq(nchassis->c_med_fw, "080012 "); /* Extra space */ ck_assert_str_eq(nchassis->c_med_sw, "2.6.29-2-amd64"); ck_assert_str_eq(nchassis->c_med_sn, "105820850009"); ck_assert_str_eq(nchassis->c_med_manuf, "NEC Computers SAS"); ck_assert_str_eq(nchassis->c_med_model, "POWERMATE VL350"); ck_assert_str_eq(nchassis->c_med_asset, "100207120"); #endif }
END_TEST START_TEST(Server_HistorizingStrategyUser) { // set a data backend UA_HistorizingNodeIdSettings setting; setting.historizingBackend = UA_HistoryDataBackend_Memory(3, 100); setting.maxHistoryDataResponseSize = 100; setting.historizingUpdateStrategy = UA_HISTORIZINGUPDATESTRATEGY_USER; UA_StatusCode retval = gathering->registerNodeId(server, gathering->context, &outNodeId, setting); ck_assert_str_eq(UA_StatusCode_name(retval), UA_StatusCode_name(UA_STATUSCODE_GOOD)); // fill the data UA_DateTime start = UA_DateTime_now(); UA_DateTime end = start + (10 * UA_DATETIME_SEC); for (UA_UInt32 i = 0; i < 10; ++i) { UA_DataValue value; UA_DataValue_init(&value); value.hasValue = true; value.hasStatus = true; value.status = UA_STATUSCODE_GOOD; UA_Variant_setScalarCopy(&value.value, &i, &UA_TYPES[UA_TYPES_UINT32]); value.hasSourceTimestamp = true; value.sourceTimestamp = start + (i * UA_DATETIME_SEC); value.hasServerTimestamp = true; value.serverTimestamp = value.sourceTimestamp; retval = setting.historizingBackend.serverSetHistoryData(server, setting.historizingBackend.context, NULL, NULL, &outNodeId, UA_FALSE, &value); ck_assert_str_eq(UA_StatusCode_name(retval), UA_StatusCode_name(UA_STATUSCODE_GOOD)); UA_DataValue_deleteMembers(&value); } // request UA_HistoryReadResponse response; UA_HistoryReadResponse_init(&response); requestHistory(start, end, &response, 0, false, NULL); // test the response ck_assert_str_eq(UA_StatusCode_name(response.responseHeader.serviceResult), UA_StatusCode_name(UA_STATUSCODE_GOOD)); ck_assert_uint_eq(response.resultsSize, 1); for (size_t i = 0; i < response.resultsSize; ++i) { ck_assert_str_eq(UA_StatusCode_name(response.results[i].statusCode), UA_StatusCode_name(UA_STATUSCODE_GOOD)); ck_assert_uint_eq(response.results[i].historyData.encoding, UA_EXTENSIONOBJECT_DECODED); ck_assert(response.results[i].historyData.content.decoded.type == &UA_TYPES[UA_TYPES_HISTORYDATA]); UA_HistoryData * data = (UA_HistoryData *)response.results[i].historyData.content.decoded.data; ck_assert_uint_eq(data->dataValuesSize, 10); for (size_t j = 0; j < data->dataValuesSize; ++j) { ck_assert_uint_eq(data->dataValues[j].hasSourceTimestamp, true); ck_assert_uint_eq(data->dataValues[j].sourceTimestamp, start + (j * UA_DATETIME_SEC)); ck_assert_uint_eq(data->dataValues[j].hasStatus, true); ck_assert_str_eq(UA_StatusCode_name(data->dataValues[j].status), UA_StatusCode_name(UA_STATUSCODE_GOOD)); ck_assert_uint_eq(data->dataValues[j].hasValue, true); ck_assert(data->dataValues[j].value.type == &UA_TYPES[UA_TYPES_UINT32]); UA_UInt32 * value = (UA_UInt32 *)data->dataValues[j].value.data; ck_assert_uint_eq(*value, j); } } UA_HistoryReadResponse_deleteMembers(&response); UA_HistoryDataBackend_Memory_deleteMembers(&setting.historizingBackend); }
END_TEST START_TEST(Server_HistorizingStrategyPoll) { // init to a defined value UA_StatusCode retval = setUInt32(client, outNodeId, 43); ck_assert_str_eq(UA_StatusCode_name(retval), UA_StatusCode_name(UA_STATUSCODE_GOOD)); // set a data backend UA_HistorizingNodeIdSettings setting; setting.historizingBackend = UA_HistoryDataBackend_Memory(3, 100); setting.maxHistoryDataResponseSize = 100; setting.pollingInterval = 100; setting.historizingUpdateStrategy = UA_HISTORIZINGUPDATESTRATEGY_POLL; serverMutexLock(); retval = gathering->registerNodeId(server, gathering->context, &outNodeId, setting); serverMutexUnlock(); ck_assert_str_eq(UA_StatusCode_name(retval), UA_StatusCode_name(UA_STATUSCODE_GOOD)); // fill the data UA_DateTime start = UA_DateTime_now(); serverMutexLock(); retval = gathering->startPoll(server, gathering->context, &outNodeId); serverMutexUnlock(); ck_assert_str_eq(UA_StatusCode_name(retval), UA_StatusCode_name(UA_STATUSCODE_GOOD)); ck_assert_str_eq(UA_StatusCode_name(retval), UA_StatusCode_name(UA_STATUSCODE_GOOD)); for (size_t k = 0; k < 10; ++k) { UA_fakeSleep(50); UA_realSleep(50); if (k == 5) { serverMutexLock(); gathering->stopPoll(server, gathering->context, &outNodeId); serverMutexUnlock(); } setUInt32(client, outNodeId, (unsigned int)k); } ck_assert_str_eq(UA_StatusCode_name(retval), UA_StatusCode_name(UA_STATUSCODE_GOOD)); UA_DateTime end = UA_DateTime_now(); // request UA_HistoryReadResponse response; UA_HistoryReadResponse_init(&response); requestHistory(start, end, &response, 0, false, NULL); // test the response ck_assert_str_eq(UA_StatusCode_name(response.responseHeader.serviceResult), UA_StatusCode_name(UA_STATUSCODE_GOOD)); ck_assert_uint_eq(response.resultsSize, 1); for (size_t i = 0; i < response.resultsSize; ++i) { ck_assert_str_eq(UA_StatusCode_name(response.results[i].statusCode), UA_StatusCode_name(UA_STATUSCODE_GOOD)); ck_assert_uint_eq(response.results[i].historyData.encoding, UA_EXTENSIONOBJECT_DECODED); ck_assert(response.results[i].historyData.content.decoded.type == &UA_TYPES[UA_TYPES_HISTORYDATA]); UA_HistoryData * data = (UA_HistoryData *)response.results[i].historyData.content.decoded.data; ck_assert(data->dataValuesSize > 1); for (size_t j = 0; j < data->dataValuesSize; ++j) { ck_assert_uint_eq(data->dataValues[j].hasSourceTimestamp, true); ck_assert(data->dataValues[j].sourceTimestamp >= start); ck_assert(data->dataValues[j].sourceTimestamp < end); ck_assert_uint_eq(data->dataValues[j].hasValue, true); ck_assert(data->dataValues[j].value.type == &UA_TYPES[UA_TYPES_UINT32]); UA_UInt32 * value = (UA_UInt32 *)data->dataValues[j].value.data; // first need to be 43 if (j == 0) { ck_assert(*value == 43); } else { ck_assert(*value < 5); } } } UA_HistoryReadResponse_deleteMembers(&response); UA_HistoryDataBackend_Memory_deleteMembers(&setting.historizingBackend); }