END_TEST START_TEST (test_cometd_new_publish_message) { cometd_conn_set_client_id(g_instance->conn, "testid"); const char* expected_channel = "/baz/bar"; JsonNode* node = cometd_json_str2node("{ \"hey\": \"now\" }"); JsonNode* message = cometd_new_publish_message(g_instance, expected_channel, node); JsonObject* obj = json_node_get_object(message); const gchar* actual_channel = json_object_get_string_member(obj, COMETD_MSG_CHANNEL_FIELD); ck_assert_str_eq(expected_channel, actual_channel); JsonObject* data = json_object_get_object_member(obj, COMETD_MSG_DATA_FIELD); const char* value = json_object_get_string_member(data, "hey"); ck_assert_str_eq("now", value); json_node_free(message); json_node_free(node); }
END_TEST START_TEST (test_cometd_process_connect_takes_advice_when_it_exists) { cometd_conn* conn = g_instance->conn; cometd_conn_set_client_id(conn, "testid"); cometd_conn_set_transport(conn, &TEST_TRANSPORT); // set advice JsonNode* msg = cometd_msg_connect_new(g_instance); cometd_advice* advice = cometd_advice_new(); cometd_msg_set_advice(msg, advice); cometd_process_connect(g_instance, msg); // no advice JsonNode* bad_connect = cometd_msg_bad_connect_new(g_instance); cometd_process_connect(g_instance, bad_connect); // assert advice exists fail_unless(cometd_conn_advice(conn)->reconnect == COMETD_RECONNECT_NONE); cometd_advice_destroy(advice); json_node_free(msg); json_node_free(bad_connect); }
END_TEST START_TEST (test_cometd_meta_subscriptions) { cometd_conn_set_client_id(g_instance->conn, "testid"); cometd_conn_set_transport(g_instance->conn, &TEST_TRANSPORT); cometd_subscription *s1; s1 = cometd_subscribe(g_instance, "/meta/connect", test_empty_handler); ck_assert_int_eq(0, test_transport_send_calls); cometd_unsubscribe(g_instance, s1); ck_assert_int_eq(0, test_transport_send_calls); }
END_TEST START_TEST (test_cometd_process_connect_unsuccessful) { cometd_conn* conn = g_instance->conn; cometd_conn_set_client_id(conn, "testid"); cometd_conn_set_transport(conn, &TEST_TRANSPORT); fail_unless(cometd_conn_is_state(conn, COMETD_UNINITIALIZED)); JsonNode* msg = cometd_msg_connect_new(g_instance); cometd_msg_set_boolean_member(msg, "successful", FALSE); int code = cometd_process_connect(g_instance, msg); fail_unless(cometd_conn_is_state(conn, COMETD_UNCONNECTED)); ck_assert_int_eq(COMETD_SUCCESS, code); }
END_TEST START_TEST (test_cometd_new_subscribe_message) { cometd_conn_set_client_id(g_instance->conn, "testid"); const char* expected_channel = "/foo/bar/baz"; JsonNode* msg = cometd_new_subscribe_message(g_instance, expected_channel); JsonObject* obj = json_node_get_object(msg); const gchar* actual_channel = json_object_get_string_member(obj, COMETD_MSG_SUBSCRIPTION_FIELD); ck_assert_str_eq(expected_channel, actual_channel); json_node_free(msg); }
END_TEST START_TEST (test_cometd_unsubscribe) { cometd_conn_set_client_id(g_instance->conn, "testid"); cometd_conn_set_transport(g_instance->conn, &TEST_TRANSPORT); cometd_subscription *s1, *s2; s1 = cometd_subscribe(g_instance, "/foo/bar/baz", test_empty_handler); s2 = cometd_subscribe(g_instance, "/foo/bar/baz", test_empty_handler); ck_assert_int_eq(2, test_transport_send_calls); cometd_unsubscribe(g_instance, s1); cometd_unsubscribe(g_instance, s2); ck_assert_int_eq(3, test_transport_send_calls); }
END_TEST START_TEST (test_cometd_msg_bad_connect_new) { cometd* h = cometd_new(); cometd_conn* conn = h->conn; cometd_conn_set_client_id(conn, "testid"); cometd_conn_set_transport(conn, &TEST_TRANSPORT); JsonNode* msg = cometd_msg_bad_connect_new(h); JsonObject* obj = json_node_get_object(msg); const gboolean successful = json_object_get_boolean_member(obj, COMETD_MSG_SUCCESSFUL_FIELD); fail_if(successful); json_node_free(msg); cometd_destroy(h); }
END_TEST START_TEST (test_cometd_msg_connect_new) { cometd* h = cometd_new(); cometd_conn* conn = h->conn; cometd_conn_set_client_id(conn, "testid"); cometd_conn_set_transport(conn, &TEST_TRANSPORT); JsonNode* msg = cometd_msg_connect_new(h); JsonObject* obj = json_node_get_object(msg); const gchar* channel = json_object_get_string_member(obj, COMETD_MSG_CHANNEL_FIELD); fail_unless(strcmp(channel, COMETD_CHANNEL_META_CONNECT) == 0); json_node_free(msg); cometd_destroy(h); }
int cometd_process_handshake(const cometd* h, JsonNode* msg) { cometd_conn* conn = h->conn; cometd_config* config = h->config; cometd_transport* t = cometd_transport_negotiate(config->transports, msg); int code = COMETD_SUCCESS; if (t) { gchar* client_id = cometd_msg_client_id(msg); cometd_conn_set_transport(conn, t); cometd_conn_set_client_id(conn, client_id); cometd_conn_set_state(conn, COMETD_HANDSHAKE_SUCCESS); g_free(client_id); } else { code = ECOMETD_NO_TRANSPORT; } cometd_conn_take_advice(conn, cometd_msg_advice(msg)); return code; }