equal
deleted
inserted
replaced
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 |