コード例 #1
0
ファイル: test_wpas.c プロジェクト: Al3n/miraclecast
END_TEST

START_TEST(bus_open)
{
	char spath[128];
	struct wpas *w, *s;
	int r;

	sprintf(spath, "/tmp/miracle-test-sock-%d", getpid());

	/* test client connection */

	s = TEST_INVALID_PTR;
	w = TEST_INVALID_PTR;

	r = wpas_create(spath, &s);
	ck_assert_int_ge(r, 0);

	ck_assert_int_ge(access(spath, F_OK), 0);

	r = wpas_open(spath, &w);
	ck_assert_int_ge(r, 0);

	wpas_unref(w);
	wpas_unref(s);

	ck_assert_int_lt(access(spath, F_OK), 0);
}
コード例 #2
0
ファイル: udev.c プロジェクト: jadahl/libinput
END_TEST

START_TEST(udev_double_resume)
{
	struct libinput *li;
	struct libinput_event *event;
	struct udev *udev;
	int fd;

	udev = udev_new();
	ck_assert(udev != NULL);

	li = libinput_create_from_udev(&simple_interface, NULL, udev, "seat0");
	ck_assert(li != NULL);

	fd = libinput_get_fd(li);
	ck_assert_int_ge(fd, 0);

	/* expect at least one event */
	ck_assert_int_ge(libinput_dispatch(li), 0);
	event = libinput_get_event(li);
	ck_assert(event != NULL);

	libinput_suspend(li);
	libinput_resume(li);
	libinput_resume(li);

	libinput_event_destroy(event);
	libinput_destroy(li);
	udev_unref(udev);
}
コード例 #3
0
ファイル: test_os_net.c プロジェクト: AndrewKant/ossec-hids
END_TEST

START_TEST(test_tcpv4_inet)
{
    int server_root_socket, server_client_socket, client_socket;
    char buffer[BUFFERSIZE];
    char *msg;
    char ipbuffer[BUFFERSIZE];

    ck_assert_int_ge((server_root_socket = OS_Bindporttcp(PORT, NULL, 0)), 0);

    ck_assert_int_ge((client_socket = OS_ConnectTCP(PORT, IPV4, 0, NULL)) , 0);

    ck_assert_int_ge((server_client_socket = OS_AcceptTCP(server_root_socket, ipbuffer, BUFFERSIZE)), 0);

    ck_assert_str_eq(ipbuffer, IPV4);

    ck_assert_int_eq(OS_SendTCP(client_socket, SENDSTRING), 0);

    ck_assert_int_eq(OS_RecvTCPBuffer(server_client_socket, buffer, BUFFERSIZE), 0);

    ck_assert_str_eq(buffer, SENDSTRING);

    ck_assert_int_eq(OS_SendTCPbySize(server_client_socket, 5, SENDSTRING), 0);

    ck_assert_ptr_ne((msg = OS_RecvTCP(client_socket, BUFFERSIZE)), NULL);

    ck_assert_str_eq(msg, "Hello"); /* only 5 bytes send */

    free(msg);

    OS_CloseSocket(client_socket);
    OS_CloseSocket(server_client_socket);
    OS_CloseSocket(server_root_socket);
}
コード例 #4
0
ファイル: test_os_net.c プロジェクト: AndrewKant/ossec-hids
END_TEST

START_TEST(test_udpv6)
{
    int server_socket, client_socket;
    char buffer[BUFFERSIZE];
    char *msg;

    ck_assert_int_ge((server_socket = OS_Bindportudp(PORT, IPV6, 1)), 0);

    ck_assert_int_ge((client_socket = OS_ConnectUDP(PORT, IPV6, 1, NULL)) , 0);

    //TODO: ck_assert_int_eq(OS_SendUDP(client_socket, SENDSTRING), 0);
    ck_assert_int_eq(OS_SendUDPbySize(client_socket, strlen(SENDSTRING), SENDSTRING), 0);

    //TODO: not null-terminated
    ck_assert_int_eq(OS_RecvConnUDP(server_socket, buffer, BUFFERSIZE), strlen(SENDSTRING));

    ck_assert_str_eq(buffer, SENDSTRING);

    ck_assert_int_eq(OS_SendUDPbySize(client_socket, 5, SENDSTRING), 0);

    ck_assert_ptr_ne((msg = OS_RecvUDP(server_socket, BUFFERSIZE)), NULL);

    ck_assert_str_eq(msg, "Hello"); /* only 5 bytes send */

    free(msg);

    OS_CloseSocket(client_socket);
    OS_CloseSocket(server_socket);
}
コード例 #5
0
ファイル: test_wpas.c プロジェクト: ValentinCupif/MiraCle
END_TEST

START_TEST(bus_open)
{
	const char *spath = "/tmp/miracle-test-sock";
	struct wpas *w, *s;
	int r;

	/* test client connection */

	s = TEST_INVALID_PTR;
	w = TEST_INVALID_PTR;

	r = wpas_create(spath, &s);
	ck_assert_int_ge(r, 0);

	ck_assert_int_ge(access(spath, F_OK), 0);

	r = wpas_open(spath, &w);
	ck_assert_int_ge(r, 0);

	wpas_unref(w);
	wpas_unref(s);

	ck_assert_int_lt(access(spath, F_OK), 0);
}
コード例 #6
0
ファイル: hid_utils_tests.c プロジェクト: baberthal/oclink
END_TEST

START_TEST(test_clx_hid_write)
{
    check_init();
    res = clx_hid_write(handle, buf, 17);
    ck_assert_int_ge(res, 0);

    buf[0] = 0x01;
    buf[1] = 0x81;
    res = clx_hid_write(handle, buf, 17);
    ck_assert_int_ge(res, 0);

    res = 0;
    while (res == 0) {
        res = clx_hid_read(handle, buf, sizeof(buf));
        if (res == 0) {
            printf("Waiting...\n");
        }
        if (res < 0) {
            printf("Unable to read()\n");
        }
        usleep(500 * 1000);
    }

    printf("Data read:\n");
    int i;
    for (i = 0; i < res; i++) {
        printf("%02hhx ", buf[i]);
    }
    printf("\n");
}
コード例 #7
0
ファイル: check_check_sub.c プロジェクト: hugo303/check-ci
END_TEST

START_TEST(test_ck_assert_int_ge)
{
  int x = 2;
  int y = 3;
  ck_assert_int_ge(y, x);
  ck_assert_int_ge(y, x);
  ck_assert_int_ge(x, y);
  #define LINENO_ck_assert_int_ge _STR(__LINE__)
}
コード例 #8
0
ファイル: test_rtsp.c プロジェクト: Al3n/miraclecast
static struct rtsp *start_test_client(void)
{
	int r, fds[2] = { };

	r = sd_event_default(&event);
	ck_assert_int_ge(r, 0);

	r = socketpair(AF_UNIX, SOCK_STREAM, 0, fds);
	ck_assert_int_ge(r, 0);
	ck_assert_int_ge(fds[0], 0);
	ck_assert_int_ge(fds[1], 0);

	r = rtsp_open(&server, fds[0]);
	ck_assert_int_ge(r, 0);

	r = rtsp_attach_event(server, event, 0);
	ck_assert_int_ge(r, 0);

	r = rtsp_open(&client, fds[1]);
	ck_assert_int_ge(r, 0);

	r = rtsp_attach_event(client, event, 0);
	ck_assert_int_ge(r, 0);

	return client;
}
コード例 #9
0
ファイル: test_wpas.c プロジェクト: Al3n/miraclecast
END_TEST

START_TEST(msg_new_reply)
{
	struct wpas_message *m;
	struct wpas *w;
	int r;

	w = start_test_client();

	m = TEST_INVALID_PTR;

	r = wpas_message_new_reply(w, &m);
	ck_assert_int_ge(r, 0);
	ck_assert(m != TEST_INVALID_PTR);
	ck_assert(m != NULL);

	ck_assert_int_eq(wpas_message_is_reply(m), 1);
	ck_assert_int_eq(wpas_message_is_event(m, NULL), 0);
	ck_assert_int_eq(wpas_message_is_request(m, NULL), 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_REPLY);
	ck_assert_int_eq(wpas_message_get_level(m), 0);
	ck_assert_ptr_eq((void*)wpas_message_get_name(m), NULL);
	ck_assert_ptr_eq((void*)wpas_message_get_raw(m), NULL);

	wpas_message_unref(m);

	stop_test_client();
}
コード例 #10
0
static void
test_bt_value_group_range_randomize_column (BT_TEST_ARGS)
{
  BT_TEST_START;
  GST_INFO ("-- arrange --");
  BtValueGroup *vg = get_mono_value_group ();
  bt_value_group_set_event (vg, 0, 0, "5");
  bt_value_group_set_event (vg, 3, 0, "50");

  GST_INFO ("-- act --");
  bt_value_group_transform_colum (vg, BT_VALUE_GROUP_OP_RANGE_RANDOMIZE, 0, 3,
      0);

  GST_INFO ("-- assert --");
  gchar *str;
  gint v, i;
  for (i = 0; i < 4; i++) {
    GST_DEBUG ("value[%d]", i);
    str = bt_value_group_get_event (vg, i, 0);
    fail_unless (str != NULL, NULL);
    v = atoi (str);
    ck_assert_int_ge (v, 5);
    ck_assert_int_le (v, 50);
    g_free (str);
  }

  GST_INFO ("-- cleanup --");
  BT_TEST_END;
}
コード例 #11
0
END_TEST

START_TEST(udev_create_seat0)
{
	struct libinput *li;
	struct libinput_event *event;
	struct udev *udev;
	int fd;

	udev = udev_new();
	ck_assert(udev != NULL);

	li = libinput_udev_create_context(&simple_interface, NULL, udev);
	ck_assert(li != NULL);
	ck_assert_int_eq(libinput_udev_assign_seat(li, "seat0"), 0);

	fd = libinput_get_fd(li);
	ck_assert_int_ge(fd, 0);

	/* expect at least one event */
	libinput_dispatch(li);
	event = libinput_get_event(li);
	ck_assert(event != NULL);

	libinput_event_destroy(event);
	libinput_unref(li);
	udev_unref(udev);
}
コード例 #12
0
ファイル: udev.c プロジェクト: jadahl/libinput
END_TEST

START_TEST(udev_create_empty_seat)
{
	struct libinput *li;
	struct libinput_event *event;
	struct udev *udev;
	int fd;

	udev = udev_new();
	ck_assert(udev != NULL);

	/* expect a libinput reference, but no events */
	li = libinput_create_from_udev(&simple_interface, NULL, udev, "seatdoesntexist");
	ck_assert(li != NULL);

	fd = libinput_get_fd(li);
	ck_assert_int_ge(fd, 0);

	libinput_dispatch(li);
	event = libinput_get_event(li);
	ck_assert(event == NULL);

	libinput_event_destroy(event);
	libinput_destroy(li);
	udev_unref(udev);
}
コード例 #13
0
ファイル: test-path.c プロジェクト: bentiss/libinput
END_TEST

START_TEST(path_create_invalid_file)
{
	struct libinput *li;
	struct libinput_device *device;
	char path[] = "/tmp/litest_path_XXXXXX";
	int fd;

	umask(002);
	fd = mkstemp(path);
	ck_assert_int_ge(fd, 0);
	close(fd);

	open_func_count = 0;
	close_func_count = 0;

	li = libinput_path_create_context(&simple_interface, NULL);
	unlink(path);

	ck_assert(li != NULL);
	device = libinput_path_add_device(li, path);
	ck_assert(device == NULL);

	ck_assert_int_eq(open_func_count, 0);
	ck_assert_int_eq(close_func_count, 0);

	libinput_unref(li);
	ck_assert_int_eq(close_func_count, 0);

	open_func_count = 0;
	close_func_count = 0;
}
コード例 #14
0
ファイル: test_rtsp.c プロジェクト: Al3n/miraclecast
static struct rtsp_message *create_from_recipe_and_verify(struct rtsp *bus,
							  struct recipe *rec)
{
	struct rtsp_message *m, *eq;
	const void *e;
	size_t i;
	int r;

	m = create_from_recipe(bus, rec);

	for (i = 0; i < SHL_ARRAY_LENGTH(rec->equivalents); ++i) {
		e = rec->equivalents[i];
		if (!e)
			break;

		r = rtsp_message_new_from_raw(bus,
					      &eq,
					      e,
					      rec->eq_sizes[i] ? : strlen(e));
		ck_assert_int_ge(r, 0);

		verify_recipe(rec, eq);

		rtsp_message_unref(eq);
	}

	return m;
}
コード例 #15
0
END_TEST

START_TEST(test_serialize_sender_key_record_with_states)
{
    int result = 0;
    sender_key_record *record = 0;
    axolotl_buffer *buffer = 0;
    ec_key_pair *key_pair = 0;

    /* Create the record */
    result = sender_key_record_create(&record, global_context);
    ck_assert_int_eq(result, 0);

    /* Create and set state id=1000, iteration=1 */
    result = axolotl_key_helper_generate_sender_key(&buffer, global_context);
    ck_assert_int_eq(result, 0);
    result = axolotl_key_helper_generate_sender_signing_key(&key_pair, global_context);
    ck_assert_int_eq(result, 0);

    result = sender_key_record_set_sender_key_state(record, 1000, 1, buffer, key_pair);
    ck_assert_int_eq(result, 0);

    axolotl_buffer_free(buffer);
    AXOLOTL_UNREF(key_pair);

    /* Create and add state id=1001, iteration=2 */
    result = axolotl_key_helper_generate_sender_key(&buffer, global_context);
    ck_assert_int_eq(result, 0);
    result = axolotl_key_helper_generate_sender_signing_key(&key_pair, global_context);
    ck_assert_int_eq(result, 0);

    sender_key_record_add_sender_key_state(record, 1001, 2, buffer, ec_key_pair_get_public(key_pair));
    ck_assert_int_eq(result, 0);

    axolotl_buffer_free(buffer);
    AXOLOTL_UNREF(key_pair);

    /* Serialize the record */
    result = sender_key_record_serialize(&buffer, record);
    ck_assert_int_ge(result, 0);

    /* Deserialize the record */
    uint8_t *data = axolotl_buffer_data(buffer);
    int len = axolotl_buffer_len(buffer);
    sender_key_record *record_deserialized = 0;
    result = sender_key_record_deserialize(&record_deserialized, data, len, global_context);
    ck_assert_int_eq(result, 0);

    /* Verify that the initial and deserialized records match */
    compare_sender_key_records(record, record_deserialized);
    compare_sender_key_record_states(record, record_deserialized, 1000);
    compare_sender_key_record_states(record, record_deserialized, 1001);

    /* Cleanup */
    AXOLOTL_UNREF(record);
    axolotl_buffer_free(buffer);
    AXOLOTL_UNREF(record_deserialized);
}
コード例 #16
0
ファイル: test_wpas.c プロジェクト: ValentinCupif/MiraCle
static struct wpas *start_test_client(void)
{
	const char *spath = "/tmp/miracle-test-sock";
	int r;

	r = sd_event_default(&event);
	ck_assert_int_ge(r, 0);

	r = wpas_create(spath, &server);
	ck_assert_int_ge(r, 0);
	r = wpas_attach_event(server, NULL, 0);
	ck_assert_int_ge(r, 0);

	r = wpas_open(spath, &client);
	ck_assert_int_ge(r, 0);
	r = wpas_attach_event(client, NULL, 0);
	ck_assert_int_ge(r, 0);

	return client;
}
コード例 #17
0
ファイル: test_wpas.c プロジェクト: Al3n/miraclecast
static struct wpas *start_test_client(void)
{
	char spath[128];
	int r;

	sprintf(spath, "/tmp/miracle-test-sock-%d", getpid());

	r = sd_event_default(&event);
	ck_assert_int_ge(r, 0);

	r = wpas_create(spath, &server);
	ck_assert_int_ge(r, 0);
	r = wpas_attach_event(server, NULL, 0);
	ck_assert_int_ge(r, 0);

	r = wpas_open(spath, &client);
	ck_assert_int_ge(r, 0);
	r = wpas_attach_event(client, NULL, 0);
	ck_assert_int_ge(r, 0);

	return client;
}
コード例 #18
0
ファイル: test_os_net.c プロジェクト: AndrewKant/ossec-hids
END_TEST

START_TEST(test_unix)
{
    int fd;

    /* create socket path */
    char socket_path[256];
    strncpy(socket_path, "/tmp/tmp_file-XXXXXX", 256);
    fd = mkstemp(socket_path);
    close(fd);

    int server_socket, client_socket;
    const int msg_size = 2048;
    char buffer[BUFFERSIZE];

    ck_assert_int_ge((server_socket = OS_BindUnixDomain(socket_path, 0660, msg_size)), 0);

    ck_assert_int_ge(OS_getsocketsize(server_socket), msg_size);

    ck_assert_int_ge((client_socket = OS_ConnectUnixDomain(socket_path, msg_size)), 0);

    ck_assert_int_eq(OS_SendUnix(client_socket, SENDSTRING, 5), 0);

    ck_assert_int_eq(OS_RecvUnix(server_socket, BUFFERSIZE, buffer), 5);

    ck_assert_str_eq(buffer, "Hello");

    ck_assert_int_eq(OS_SendUnix(client_socket, SENDSTRING, 0), 0);

    ck_assert_int_eq(OS_RecvUnix(server_socket, BUFFERSIZE, buffer), strlen(SENDSTRING) + 1);

    ck_assert_str_eq(buffer, SENDSTRING);

    OS_CloseSocket(client_socket);
    OS_CloseSocket(server_socket);

    unlink(socket_path);
}
コード例 #19
0
ファイル: common_tests.c プロジェクト: vergoh/vnstat
END_TEST

#if defined(__clang__)
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wused-but-marked-unused"
#endif
START_TEST(dmonth_return_within_range)
{
	int m;
	m = dmonth(_i);
	ck_assert_int_ge(m, 28);
	ck_assert_int_le(m, 31);
}
コード例 #20
0
ファイル: test_wpas.c プロジェクト: Al3n/miraclecast
END_TEST

START_TEST(bus_create)
{
	char spath[128];
	struct wpas *w, *s;
	int r;

	sprintf(spath, "/tmp/miracle-test-sock-%d", getpid());

	/* test server creation */

	s = TEST_INVALID_PTR;
	w = TEST_INVALID_PTR;

	unlink(spath);
	ck_assert_int_lt(access(spath, F_OK), 0);

	r = wpas_create(spath, &s);
	ck_assert_int_ge(r, 0);
	ck_assert(s != TEST_INVALID_PTR);
	ck_assert(s != NULL);

	ck_assert_int_ge(access(spath, F_OK), 0);

	r = wpas_create(spath, &w);
	ck_assert_int_eq(r, -EADDRINUSE);
	ck_assert(w == TEST_INVALID_PTR);

	ck_assert_int_ge(access(spath, F_OK), 0);

	wpas_unref(s);
	s = TEST_INVALID_PTR;

	ck_assert_int_lt(access(spath, F_OK), 0);

	/* test again with pre-existing but unused file */
	ck_assert_int_ge(open(spath, O_RDWR | O_CREAT | O_CLOEXEC, S_IRWXU), 0);
	ck_assert_int_ge(access(spath, F_OK), 0);

	r = wpas_create(spath, &s);
	ck_assert_int_ge(r, 0);
	ck_assert(s != TEST_INVALID_PTR);
	ck_assert(s != NULL);

	ck_assert_int_ge(access(spath, F_OK), 0);

	wpas_unref(s);
	s = TEST_INVALID_PTR;

	ck_assert_int_lt(access(spath, F_OK), 0);
}
コード例 #21
0
ファイル: hid_utils_tests.c プロジェクト: baberthal/oclink
END_TEST

START_TEST(test_clx_hid_read)
{
    int i;
    clx_hid_set_nonblocking(handle, 1);

    res = clx_hid_read(handle, buf, 17);
    ck_assert_int_ge(res, 0);
    printf("Feature Report\n    ");
    for (i = 0; i < res; i++) {
        printf("%02hhx ", buf[i]);
    }
    printf("\n");
}
コード例 #22
0
ファイル: test_wpas.c プロジェクト: Al3n/miraclecast
END_TEST

START_TEST(msg_peer)
{
	struct wpas_message *m;
	struct wpas *w;
	char *t;
	int r;

	w = start_test_client();

	r = wpas_message_new_event(w, "name", 5, &m);
	ck_assert_int_ge(r, 0);

	ck_assert_ptr_eq((void*)wpas_message_get_peer(m), NULL);
	t = wpas_message_get_escaped_peer(m);
	ck_assert_str_eq(t, "<none>");
	free(t);

	wpas_message_set_peer(m, "/some/path");
	ck_assert_str_eq(wpas_message_get_peer(m), "/some/path");
	t = wpas_message_get_escaped_peer(m);
	ck_assert_str_eq(t, "/some/path");
	free(t);

	wpas_message_set_peer(m, "\0/some/path");
	ck_assert_str_eq(wpas_message_get_peer(m), "");
	ck_assert_str_eq(wpas_message_get_peer(m) + 1, "/some/path");
	t = wpas_message_get_escaped_peer(m);
	ck_assert_str_eq(t, "@abstract:/some/path");
	free(t);

	wpas_message_set_peer(m, NULL);
	ck_assert_ptr_eq((void*)wpas_message_get_peer(m), NULL);
	t = wpas_message_get_escaped_peer(m);
	ck_assert_str_eq(t, "<none>");
	free(t);

	wpas_message_unref(m);

	stop_test_client();
}
コード例 #23
0
ファイル: test_pdb.c プロジェクト: harryjubb/freesasa
END_TEST

START_TEST (test_get_chains)
{
    // Test a non PDB file
    FILE *pdb = fopen(DATADIR "err.config", "r");
    struct file_range whole_file = freesasa_whole_file(pdb), *it = NULL;
    int nc = freesasa_pdb_get_chains(pdb, whole_file, &it, 0);
    fclose(pdb);
    ck_assert_int_eq(nc,0);
    ck_assert_ptr_eq(it,NULL);

    // This file only has one chain
    pdb = fopen(DATADIR "1ubq.pdb", "r");
    whole_file = freesasa_whole_file(pdb);
    nc = freesasa_pdb_get_chains(pdb,whole_file,&it,0);
    fclose(pdb);
    ck_assert_int_eq(nc,1);
    ck_assert_ptr_ne(it,NULL);
    free(it);

    // This file has 4 chains
    pdb = fopen(DATADIR "2jo4.pdb","r");
    int nm = freesasa_pdb_get_models(pdb,&it);
    ck_assert_int_eq(nm,10);
    ck_assert_ptr_ne(it,NULL);
    for (int i = 0; i < nm; ++i) {
        struct file_range *jt = NULL;
        nc = freesasa_pdb_get_chains(pdb,it[i],&jt,0);
        ck_assert_int_eq(nc,4);
        ck_assert_ptr_ne(jt,NULL);
        for (int j = 1; j < nc; ++j) {
            ck_assert_int_ge(jt[j].begin, jt[j-1].end);
        }
        free(jt);
    }
    free(it);
}
コード例 #24
0
ファイル: test_wpas.c プロジェクト: Al3n/miraclecast
END_TEST

START_TEST(msg_append)
{
	struct wpas_message *m;
	struct wpas *w;
	int r;

	w = start_test_client();

	r = wpas_message_new_event(w, "name", 5, &m);
	ck_assert_int_ge(r, 0);

	r = wpas_message_seal(m);
	ck_assert_int_ge(r, 0);

	ck_assert_str_eq(wpas_message_get_raw(m), "<5>name");

	wpas_message_unref(m);

	r = wpas_message_new_event(w, "name", 5, &m);
	ck_assert_int_ge(r, 0);

	r = wpas_message_append(m,
				"suie",
				"string",
				(uint32_t)5,
				(int32_t)1,
				"key",
				"value");
	ck_assert_int_ge(r, 0);

	r = wpas_message_seal(m);
	ck_assert_int_ge(r, 0);

	ck_assert_str_eq(wpas_message_get_raw(m),
			 "<5>name string 5 1 key=value");

	r = wpas_message_skip(m, "suie");
	ck_assert_int_ge(r, 0);

	wpas_message_unref(m);

	stop_test_client();
}
コード例 #25
0
ファイル: public_server.c プロジェクト: c-mauderer/civetweb
END_TEST


START_TEST(test_mg_server_and_client_tls)
{
#ifndef NO_SSL

	struct mg_context *ctx;

	int ports_cnt;
	struct mg_server_ports ports[16];
	struct mg_callbacks callbacks;
	char errmsg[256];

	struct mg_connection *client_conn;
	char client_err[256];
	const struct mg_request_info *client_ri;
	int client_res;
	struct mg_client_options client_options;

	const char *OPTIONS[32]; /* initializer list here is rejected by CI test */
	int opt_idx = 0;
	char server_cert[256];
	char client_cert[256];
	const char *res_dir = locate_resources();

	ck_assert(res_dir != NULL);
	strcpy(server_cert, res_dir);
	strcpy(client_cert, res_dir);
#ifdef _WIN32
	strcat(server_cert, "cert\\server.pem");
	strcat(client_cert, "cert\\client.pem");
#else
	strcat(server_cert, "cert/server.pem");
	strcat(client_cert, "cert/client.pem");
#endif

	memset((void *)OPTIONS, 0, sizeof(OPTIONS));
#if !defined(NO_FILES)
	OPTIONS[opt_idx++] = "document_root";
	OPTIONS[opt_idx++] = ".";
#endif
	OPTIONS[opt_idx++] = "listening_ports";
	OPTIONS[opt_idx++] = "8080r,8443s";
	OPTIONS[opt_idx++] = "ssl_certificate";
	OPTIONS[opt_idx++] = server_cert;
	OPTIONS[opt_idx++] = "ssl_verify_peer";
	OPTIONS[opt_idx++] = "yes";
	OPTIONS[opt_idx++] = "ssl_ca_file";
	OPTIONS[opt_idx++] = client_cert;

	ck_assert_int_le(opt_idx, (int)(sizeof(OPTIONS) / sizeof(OPTIONS[0])));
	ck_assert(OPTIONS[sizeof(OPTIONS) / sizeof(OPTIONS[0]) - 1] == NULL);
	ck_assert(OPTIONS[sizeof(OPTIONS) / sizeof(OPTIONS[0]) - 2] == NULL);

	memset(ports, 0, sizeof(ports));
	memset(&callbacks, 0, sizeof(callbacks));
	memset(errmsg, 0, sizeof(errmsg));

	callbacks.log_message = log_msg_func;

	ctx = mg_start(&callbacks, (void *)errmsg, OPTIONS);
	mark_point();
	test_sleep(1);
	ck_assert_str_eq(errmsg, "");
	ck_assert(ctx != NULL);

	ports_cnt = mg_get_server_ports(ctx, 16, ports);
	ck_assert_int_eq(ports_cnt, 2);
	ck_assert_int_eq(ports[0].protocol, 1);
	ck_assert_int_eq(ports[0].port, 8080);
	ck_assert_int_eq(ports[0].is_ssl, 0);
	ck_assert_int_eq(ports[0].is_redirect, 1);
	ck_assert_int_eq(ports[1].protocol, 1);
	ck_assert_int_eq(ports[1].port, 8443);
	ck_assert_int_eq(ports[1].is_ssl, 1);
	ck_assert_int_eq(ports[1].is_redirect, 0);
	ck_assert_int_eq(ports[2].protocol, 0);
	ck_assert_int_eq(ports[2].port, 0);
	ck_assert_int_eq(ports[2].is_ssl, 0);
	ck_assert_int_eq(ports[2].is_redirect, 0);

	test_sleep(1);
	mark_point();

	memset(client_err, 0, sizeof(client_err));
	client_conn =
	    mg_connect_client("127.0.0.1", 8443, 1, client_err, sizeof(client_err));
	ck_assert(client_conn == NULL);
	ck_assert_str_ne(client_err, "");

	memset(client_err, 0, sizeof(client_err));
	memset(&client_options, 0, sizeof(client_options));
	client_options.host = "127.0.0.1";
	client_options.port = 8443;
	client_options.client_cert = client_cert;
	client_options.server_cert = server_cert;

	client_conn = mg_connect_client_secure(&client_options,
	                                       client_err,
	                                       sizeof(client_err));
	ck_assert(client_conn != NULL);
	ck_assert_str_eq(client_err, "");
	mg_printf(client_conn, "GET / HTTP/1.0\r\n\r\n");
	client_res =
	    mg_get_response(client_conn, client_err, sizeof(client_err), 10000);
	ck_assert_int_ge(client_res, 0);
	ck_assert_str_eq(client_err, "");
	client_ri = mg_get_request_info(client_conn);
	ck_assert(client_ri != NULL);

#if defined(NO_FILES)
	ck_assert_str_eq(client_ri->uri, "404");
#else
	ck_assert_str_eq(client_ri->uri, "200");
	/* TODO: ck_assert_str_eq(client_ri->request_method, "HTTP/1.0"); */
	client_res = (int)mg_read(client_conn, client_err, sizeof(client_err));
	ck_assert_int_gt(client_res, 0);
	ck_assert_int_le(client_res, sizeof(client_err));
#endif
	mg_close_connection(client_conn);

	/* TODO: A client API using a client certificate is missing */

	mark_point();
	test_sleep(1);
	mark_point();

	mg_stop(ctx);
#endif
}
コード例 #26
0
ファイル: public_server.c プロジェクト: c-mauderer/civetweb
END_TEST


START_TEST(test_mg_start_stop_https_server)
{
#ifndef NO_SSL

	struct mg_context *ctx;

	size_t ports_cnt;
	int ports[16];
	int ssl[16];
	struct mg_callbacks callbacks;
	char errmsg[256];

	const char *OPTIONS[8]; /* initializer list here is rejected by CI test */
	int opt_idx = 0;
	const char *ssl_cert = locate_ssl_cert();

	struct mg_connection *client_conn;
	char client_err[256];
	const struct mg_request_info *client_ri;
	int client_res;

	ck_assert(ssl_cert != NULL);

	memset((void *)OPTIONS, 0, sizeof(OPTIONS));
#if !defined(NO_FILES)
	OPTIONS[opt_idx++] = "document_root";
	OPTIONS[opt_idx++] = ".";
#endif
	OPTIONS[opt_idx++] = "listening_ports";
	OPTIONS[opt_idx++] = "8080r,8443s";
	OPTIONS[opt_idx++] = "ssl_certificate";
	OPTIONS[opt_idx++] = ssl_cert;

	ck_assert_int_le(opt_idx, (int)(sizeof(OPTIONS) / sizeof(OPTIONS[0])));
	ck_assert(OPTIONS[sizeof(OPTIONS) / sizeof(OPTIONS[0]) - 1] == NULL);
	ck_assert(OPTIONS[sizeof(OPTIONS) / sizeof(OPTIONS[0]) - 2] == NULL);

	memset(ports, 0, sizeof(ports));
	memset(ssl, 0, sizeof(ssl));
	memset(&callbacks, 0, sizeof(callbacks));
	memset(errmsg, 0, sizeof(errmsg));

	callbacks.log_message = log_msg_func;

	ctx = mg_start(&callbacks, (void *)errmsg, OPTIONS);
	mark_point();
	test_sleep(1);
	ck_assert_str_eq(errmsg, "");
	ck_assert(ctx != NULL);

	ports_cnt = mg_get_ports(ctx, 16, ports, ssl);
	ck_assert_uint_eq(ports_cnt, 2);
	ck_assert_int_eq(ports[0], 8080);
	ck_assert_int_eq(ssl[0], 0);
	ck_assert_int_eq(ports[1], 8443);
	ck_assert_int_eq(ssl[1], 1);
	ck_assert_int_eq(ports[2], 0);
	ck_assert_int_eq(ssl[2], 0);

	test_sleep(1);
	mark_point();

	memset(client_err, 0, sizeof(client_err));
	client_conn =
	    mg_connect_client("127.0.0.1", 8443, 1, client_err, sizeof(client_err));
	ck_assert(client_conn != NULL);
	ck_assert_str_eq(client_err, "");
	mg_printf(client_conn, "GET / HTTP/1.0\r\n\r\n");
	client_res =
	    mg_get_response(client_conn, client_err, sizeof(client_err), 10000);
	ck_assert_int_ge(client_res, 0);
	ck_assert_str_eq(client_err, "");
	client_ri = mg_get_request_info(client_conn);
	ck_assert(client_ri != NULL);

#if defined(NO_FILES)
	ck_assert_str_eq(client_ri->uri, "404");
#else
	ck_assert_str_eq(client_ri->uri, "200");
	/* TODO: ck_assert_str_eq(client_ri->request_method, "HTTP/1.0"); */
	client_res = (int)mg_read(client_conn, client_err, sizeof(client_err));
	ck_assert_int_gt(client_res, 0);
	ck_assert_int_le(client_res, sizeof(client_err));
#endif
	mg_close_connection(client_conn);

	mark_point();
	test_sleep(1);
	mark_point();

	mg_stop(ctx);
#endif
}
コード例 #27
0
ファイル: test_rtsp.c プロジェクト: Al3n/miraclecast
static struct rtsp_message *create_from_recipe(struct rtsp *bus,
					       struct recipe *rec)
{
	struct rtsp_message *m;
	void *raw;
	size_t i, rawlen;
	char t;
	int r;

	ck_assert(!!rec);

	switch (rec->type) {
	case RTSP_MESSAGE_REQUEST:
		r = rtsp_message_new_request(bus,
					     &m,
					     rec->request.method,
					     rec->request.uri);
		ck_assert_int_ge(r, 0);
		break;
	case RTSP_MESSAGE_REPLY:
		r = rtsp_message_new_reply(bus,
					   &m,
					   rec->reply.cookie ? : 1,
					   rec->reply.code,
					   rec->reply.phrase);
		ck_assert_int_ge(r, 0);
		break;
	case RTSP_MESSAGE_DATA:
		r = rtsp_message_new_data(bus,
					  &m,
					  rec->data.channel,
					  rec->data.payload,
					  rec->data.size);
		ck_assert_int_ge(r, 0);
		break;
	default:
		ck_assert(false);
		abort();
	}

	for (i = 0; rec->types && rec->types[i]; ++i) {
		t = rec->types[i];
		switch (t) {
		case RTSP_TYPE_INT32:
			r = rtsp_message_append_basic(m,
						      t,
						      rec->args[i].i32);
			break;
		case RTSP_TYPE_UINT32:
			r = rtsp_message_append_basic(m,
						      t,
						      rec->args[i].u32);
			break;
		default:
			r = rtsp_message_append_basic(m,
						      t,
						      rec->args[i].ptr);
			break;
		}

		ck_assert_int_ge(r, 0);
	}

	r = rtsp_message_set_cookie(m, 1);
	ck_assert_int_ge(r, 0);
	r = rtsp_message_seal(m);
	ck_assert_int_ge(r, 0);

	/* compare to @raw */

	raw = rtsp_message_get_raw(m);
	ck_assert(!!raw);
	rawlen = rtsp_message_get_raw_size(m);

	if (debug)
		fprintf(stderr, "---------EXPECT---------\n%s\n----------GOT-----------\n%s\n-----------END----------\n", (char*)rec->raw, (char*)raw);

	ck_assert_int_eq(rawlen, rec->rawlen ? : strlen(rec->raw));
	ck_assert(!memcmp(raw, rec->raw, rawlen));

	return m;
}
コード例 #28
0
ファイル: test_rtsp.c プロジェクト: Al3n/miraclecast
static void verify_recipe(struct recipe *rec, struct rtsp_message *m)
{
	size_t i;
	int32_t i32;
	uint32_t u32;
	const char *str;
	char t;
	int r;
	bool in_header = false;

	ck_assert_int_eq(rtsp_message_get_type(m), rec->type);

	switch (rec->type) {
	case RTSP_MESSAGE_REQUEST:
		ck_assert_str_eq(rtsp_message_get_method(m),
				 rec->request.method);
		ck_assert_str_eq(rtsp_message_get_uri(m),
				 rec->request.uri);
		break;
	case RTSP_MESSAGE_REPLY:
		ck_assert_int_eq(rtsp_message_get_code(m), rec->reply.code);
		ck_assert_str_eq(rtsp_message_get_phrase(m), rec->reply.phrase);
		break;
	case RTSP_MESSAGE_DATA:
		ck_assert_int_eq(rtsp_message_get_channel(m),
				 rec->data.channel);
		ck_assert_int_eq(rtsp_message_get_payload_size(m),
				 rec->data.size);
		ck_assert(!memcmp(rtsp_message_get_payload(m),
				  rec->data.payload,
				  rec->data.size));
		break;
	default:
		ck_assert(false);
		abort();
	}

	for (i = 0; rec->types && rec->types[i]; ++i) {
		t = rec->types[i];
		switch (t) {
		case RTSP_TYPE_STRING:
			r = rtsp_message_read_basic(m, t, &str);
			ck_assert_int_ge(r, 0);
			ck_assert(!!str);
			ck_assert_str_eq(str, rec->args[i].ptr);
			break;
		case RTSP_TYPE_INT32:
			r = rtsp_message_read_basic(m, t, &i32);
			ck_assert_int_ge(r, 0);
			ck_assert_int_eq(i32, rec->args[i].i32);
			break;
		case RTSP_TYPE_UINT32:
			r = rtsp_message_read_basic(m, t, &u32);
			ck_assert_int_ge(r, 0);
			ck_assert_int_eq(u32, rec->args[i].u32);
			break;
		case RTSP_TYPE_RAW:
			/* we cannot read TYPE_RAW outside headers */
			if (in_header) {
				r = rtsp_message_read_basic(m, t, &str);
				ck_assert_int_ge(r, 0);
				ck_assert(!!str);
				ck_assert_str_eq(str, rec->args[i].ptr);
			}

			break;
		case RTSP_TYPE_HEADER_START:
			in_header = true;
			r = rtsp_message_read_basic(m, t, rec->args[i].ptr);
			ck_assert_int_ge(r, 0);
			break;
		case RTSP_TYPE_HEADER_END:
			in_header = false;
			/* fallthrough */
		case RTSP_TYPE_BODY_START:
		case RTSP_TYPE_BODY_END:
			r = rtsp_message_read_basic(m, t, NULL);
			ck_assert_int_ge(r, 0);
			break;
		default:
			ck_assert(false);
			abort();
		}
	}
}
コード例 #29
0
ファイル: test_rtsp.c プロジェクト: Al3n/miraclecast
TEST_END_CASE

START_TEST(msg_new_invalid)
{
	char data[128] = { };
	struct rtsp *bus;
	struct rtsp_message *m;
	int r, fd;

	fd = dup(0);
	ck_assert_int_ge(fd, 0);
	r = rtsp_open(&bus, fd);
	ck_assert_int_ge(r, 0);

	/* request messages */

	m = TEST_INVALID_PTR;
	r = rtsp_message_new_request(NULL, &m, "method", "uri");
	ck_assert_int_lt(r, 0);
	ck_assert(m == TEST_INVALID_PTR);
	r = rtsp_message_new_request(bus, NULL, "method", "uri");
	ck_assert_int_lt(r, 0);
	ck_assert(m == TEST_INVALID_PTR);
	r = rtsp_message_new_request(bus, &m, "", "uri");
	ck_assert_int_lt(r, 0);
	ck_assert(m == TEST_INVALID_PTR);
	r = rtsp_message_new_request(bus, &m, NULL, "uri");
	ck_assert_int_lt(r, 0);
	ck_assert(m == TEST_INVALID_PTR);
	r = rtsp_message_new_request(bus, &m, "method", "");
	ck_assert_int_lt(r, 0);
	ck_assert(m == TEST_INVALID_PTR);
	r = rtsp_message_new_request(bus, &m, "method", NULL);
	ck_assert_int_lt(r, 0);
	ck_assert(m == TEST_INVALID_PTR);

	r = rtsp_message_new_request(bus, &m, "method", "uri");
	ck_assert_int_ge(r, 0);
	ck_assert(m != TEST_INVALID_PTR);
	rtsp_message_unref(m);

	/* reply-for messages */

	m = TEST_INVALID_PTR;
	r = rtsp_message_new_reply(NULL, &m, 1, 200, "OK");
	ck_assert_int_lt(r, 0);
	ck_assert(m == TEST_INVALID_PTR);
	r = rtsp_message_new_reply(bus, NULL, 1, 200, "OK");
	ck_assert_int_lt(r, 0);
	ck_assert(m == TEST_INVALID_PTR);
	r = rtsp_message_new_reply(bus, &m, 0, 200, "OK");
	ck_assert_int_lt(r, 0);
	ck_assert(m == TEST_INVALID_PTR);
	r = rtsp_message_new_reply(bus, &m, 1, RTSP_ANY_CODE, "OK");
	ck_assert_int_lt(r, 0);
	ck_assert(m == TEST_INVALID_PTR);

	r = rtsp_message_new_reply(bus, &m, 1, 200, "OK");
	ck_assert_int_ge(r, 0);
	ck_assert(m != TEST_INVALID_PTR);
	rtsp_message_unref(m);

	/* data messages */

	m = TEST_INVALID_PTR;
	r = rtsp_message_new_data(NULL, &m, 0, data, sizeof(data));
	ck_assert_int_lt(r, 0);
	ck_assert(m == TEST_INVALID_PTR);
	r = rtsp_message_new_data(bus, NULL, 0, data, sizeof(data));
	ck_assert_int_lt(r, 0);
	ck_assert(m == TEST_INVALID_PTR);
	r = rtsp_message_new_data(bus, &m, RTSP_ANY_CHANNEL, data, sizeof(data));
	ck_assert_int_lt(r, 0);
	ck_assert(m == TEST_INVALID_PTR);
	r = rtsp_message_new_data(bus, &m, 0, NULL, sizeof(data));
	ck_assert_int_lt(r, 0);
	ck_assert(m == TEST_INVALID_PTR);

	r = rtsp_message_new_data(bus, &m, 0, data, sizeof(data));
	ck_assert_int_ge(r, 0);
	ck_assert(m != TEST_INVALID_PTR);
	rtsp_message_unref(m);

	/* invalid ops */

	rtsp_message_ref(NULL);
	rtsp_message_unref(NULL);

	ck_assert_int_eq(rtsp_message_get_type(NULL), 0);
	ck_assert(!rtsp_message_get_method(NULL));
	ck_assert(!rtsp_message_get_uri(NULL));
	ck_assert_int_eq(rtsp_message_get_code(NULL), RTSP_ANY_CODE);
	ck_assert(!rtsp_message_get_phrase(NULL));
	ck_assert_int_eq(rtsp_message_get_channel(NULL), RTSP_ANY_CHANNEL);
	ck_assert(!rtsp_message_get_payload(NULL));
	ck_assert_int_eq(rtsp_message_get_payload_size(NULL), 0);

	ck_assert(!rtsp_message_is_request(NULL, NULL, NULL));
	ck_assert(!rtsp_message_is_reply(NULL, RTSP_ANY_CODE, NULL));
	ck_assert(!rtsp_message_is_data(NULL, RTSP_ANY_CHANNEL));

	ck_assert(!rtsp_message_get_bus(NULL));
	ck_assert(!rtsp_message_get_cookie(NULL));
	ck_assert(!rtsp_message_is_sealed(NULL));

	rtsp_unref(bus);
}
コード例 #30
0
ファイル: test_wpas.c プロジェクト: Al3n/miraclecast
END_TEST

START_TEST(run_msg)
{
	struct wpas_message *m;
	int r;

	start_test_client();

	r = wpas_message_new_reply(client, &m);
	ck_assert_int_ge(r, 0);
	r = wpas_send(client, m, 0);
	ck_assert_int_ge(r, 0);
	r = wpas_send(client, m, 0);
	ck_assert_int_lt(r, 0);
	wpas_message_unref(m);

	r = wpas_message_new_reply(client, &m);
	ck_assert_int_ge(r, 0);
	wpas_message_set_peer(m, "/some/peer");
	r = wpas_send(client, m, 0);
	ck_assert_int_ge(r, 0);
	r = wpas_send(client, m, 0);
	ck_assert_int_lt(r, 0);
	wpas_message_unref(m);

	r = wpas_message_new_reply(server, &m);
	ck_assert_int_ge(r, 0);
	r = wpas_send(server, m, 0);
	ck_assert_int_lt(r, 0);
	wpas_message_set_peer(m, "/some/peer");
	r = wpas_send(server, m, 0);
	ck_assert_int_ge(r, 0);
	r = wpas_send(server, m, 0);
	ck_assert_int_lt(r, 0);
	wpas_message_unref(m);

	r = wpas_message_new_request(server, "sth", &m);
	ck_assert_int_ge(r, 0);
	r = wpas_call_async(server, m, NULL, NULL, 0, NULL);
	ck_assert_int_lt(r, 0);
	r = wpas_send(server, m, 0);
	ck_assert_int_lt(r, 0);
	wpas_message_set_peer(m, "/some/peer");
	r = wpas_call_async(server, m, NULL, NULL, 0, NULL);
	ck_assert_int_lt(r, 0);
	r = wpas_send(server, m, 0);
	ck_assert_int_ge(r, 0);
	r = wpas_send(server, m, 0);
	ck_assert_int_lt(r, 0);
	wpas_message_unref(m);

	r = wpas_message_new_request(client, "sth", &m);
	ck_assert_int_ge(r, 0);
	r = wpas_call_async(client, m, NULL, NULL, 0, NULL);
	ck_assert_int_ge(r, 0);
	r = wpas_call_async(client, m, NULL, NULL, 0, NULL);
	ck_assert_int_lt(r, 0);
	wpas_message_unref(m);

	stop_test_client();
}