src/test.c
changeset 49 96e0f703a58c
parent 47 7d4094eb3117
child 50 46c3983638d3
equal deleted inserted replaced
48:4841f4398fd2 49:96e0f703a58c
   239     // cleanup
   239     // cleanup
   240     line_proto_release(lp);
   240     line_proto_release(lp);
   241 }
   241 }
   242 
   242 
   243 struct _test_irc_conn_ctx {
   243 struct _test_irc_conn_ctx {
   244     bool on_registered, on_TEST;
   244     bool on_registered, on_TEST, on_error, on_quit;
   245 };
   245 };
   246 
   246 
   247 static void _conn_on_registered (struct irc_conn *conn, void *arg)
   247 static void _conn_on_registered (struct irc_conn *conn, void *arg)
   248 {
   248 {
   249     struct _test_irc_conn_ctx *ctx = arg;
   249     struct _test_irc_conn_ctx *ctx = arg;
   251     (void) conn;
   251     (void) conn;
   252 
   252 
   253     if (ctx) ctx->on_registered = true;
   253     if (ctx) ctx->on_registered = true;
   254 
   254 
   255     log_debug("registered");
   255     log_debug("registered");
       
   256 }
       
   257 
       
   258 static void _conn_on_error (struct irc_conn *conn, struct error_info *err, void *arg)
       
   259 {
       
   260     struct _test_irc_conn_ctx *ctx = arg;
       
   261     
       
   262     (void) conn;
       
   263     (void) err;
       
   264 
       
   265     if (ctx) ctx->on_error = true;
       
   266 
       
   267     log_debug("on_error");
       
   268 }
       
   269 
       
   270 static void _conn_on_quit (struct irc_conn *conn, void *arg)
       
   271 {
       
   272     struct _test_irc_conn_ctx *ctx = arg;
       
   273 
       
   274     (void) conn;
       
   275 
       
   276     if (ctx) ctx->on_quit = true;
       
   277 
       
   278     log_debug("on_quit");
   256 }
   279 }
   257 
   280 
   258 static void _conn_on_TEST (const struct irc_line *line, void *arg)
   281 static void _conn_on_TEST (const struct irc_line *line, void *arg)
   259 {
   282 {
   260     struct _test_irc_conn_ctx *ctx = arg;
   283     struct _test_irc_conn_ctx *ctx = arg;
   269     log_debug("on_TEST");
   292     log_debug("on_TEST");
   270 }
   293 }
   271 
   294 
   272 static struct irc_conn_callbacks _conn_callbacks = {
   295 static struct irc_conn_callbacks _conn_callbacks = {
   273     .on_registered      = &_conn_on_registered,
   296     .on_registered      = &_conn_on_registered,
       
   297     .on_error           = &_conn_on_error,
       
   298     .on_quit            = &_conn_on_quit,
   274 };
   299 };
   275 
   300 
   276 static struct irc_cmd_handler _conn_handlers[] = {
   301 static struct irc_cmd_handler _conn_handlers[] = {
   277     {   "TEST",         &_conn_on_TEST  },
   302     {   "TEST",         &_conn_on_TEST  },
   278     {   NULL,           NULL            }
   303     {   NULL,           NULL            }
   306 
   331 
   307 void test_irc_conn (void)
   332 void test_irc_conn (void)
   308 {
   333 {
   309     struct sock_test *sock;
   334     struct sock_test *sock;
   310     struct irc_conn *conn;
   335     struct irc_conn *conn;
   311     struct _test_irc_conn_ctx ctx = { false, false };
   336     struct _test_irc_conn_ctx ctx = { false, false, false, false };
   312 
   337 
   313     // create the test socket
   338     // create the test socket
   314     assert((sock = sock_test_create()));
   339     assert((sock = sock_test_create()));
   315 
   340 
   316     // setup the basic irc_conn
   341     // setup the basic irc_conn
   326 
   351 
   327     // test PING/PONG
   352     // test PING/PONG
   328     log_info("test PING/PONG");
   353     log_info("test PING/PONG");
   329     sock_test_add_recv_str(sock, "PING foo\r\n");
   354     sock_test_add_recv_str(sock, "PING foo\r\n");
   330     assert_sock_data(sock, "PONG foo\r\n");
   355     assert_sock_data(sock, "PONG foo\r\n");
       
   356 
       
   357     // quit nicely
       
   358     log_info("test QUIT");
       
   359     assert_success(irc_conn_QUIT(conn, "bye now"));
       
   360     assert_sock_data(sock, "QUIT :bye now\r\n");
       
   361     assert(conn->quitting);
       
   362 
       
   363     sock_test_add_recv_str(sock, "ERROR :Closing Link: Quit\r\n");
       
   364     sock_test_set_recv_eof(sock);
       
   365     assert(conn->quit && !conn->quitting && !conn->registered);
       
   366     assert(ctx.on_quit);
       
   367     assert(!ctx.on_error);
   331 
   368 
   332     // destroy it
   369     // destroy it
   333     irc_conn_destroy(conn);
   370     irc_conn_destroy(conn);
   334 }
   371 }
   335 
   372