Ejemplo n.º 1
0
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);
}
Ejemplo n.º 2
0
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);

}
Ejemplo n.º 3
0
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);
}
Ejemplo n.º 5
0
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);
}
Ejemplo n.º 6
0
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);
}
Ejemplo n.º 7
0
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);
}
Ejemplo n.º 8
0
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();
}
Ejemplo n.º 9
0
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;
}
Ejemplo n.º 10
0
} 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
Ejemplo n.º 11
0
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);
}
Ejemplo n.º 12
0
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);
}
Ejemplo n.º 13
0
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);
}
Ejemplo n.º 14
0
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);
}
Ejemplo n.º 15
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));
}
Ejemplo n.º 16
0
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);
}
Ejemplo n.º 17
0
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);
     }
Ejemplo n.º 18
0
} 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
Ejemplo n.º 19
0
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");
}
Ejemplo n.º 20
0
} 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
Ejemplo n.º 21
0
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");
}
Ejemplo n.º 22
0
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;
	}
}
Ejemplo n.º 23
0
static void _next(struct httpc *hc, const gchar *msg)
{
	gchar *next = _next_msg(hc);
	ck_assert_str_eq(msg, next);
	g_free(next);
}
Ejemplo n.º 24
0
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);

}
Ejemplo n.º 25
0
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;
}
Ejemplo n.º 26
0
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);
}
Ejemplo n.º 27
0
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);
}
Ejemplo n.º 28
0
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);
}