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);
}
Example #7
0
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);
}
Example #8
0
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);
}
Example #9
0
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;
}