anntp

a nntp implementation in pure C99
Log | Files | Refs | README | LICENSE

commit d44cf21f1126a13920da529945a697174dc0d671
parent ee7621ad8828e7cf9948848f9ff93ff4f630a7f6
Author: Mario Rosell R. Martinez <mario@mariorosell.es>
Date:   Sat, 28 Mar 2026 21:38:54 +0100

anntp_article: Add tests

Diffstat:
Mtests/test.c | 63+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 63 insertions(+), 0 deletions(-)

diff --git a/tests/test.c b/tests/test.c @@ -144,6 +144,67 @@ test_group(void) anntp_freeconn(c); } +void +test_article(void) +{ + AnntpConnection* c = anntp_mkconn("news.eternal-september.org", "119", false); + require(c != NULL, "connection for ARTICLE test"); + + char line[256]; + anntp_readline(c, line, sizeof(line)); + + AnntpGroup g; + int err = anntp_group(c, "eternal-september.talk", &g); + require(err == ANE_OK, "group for article"); + + AnntpArticle art; + memset(&art, 0, sizeof(art)); + + ssize_t r = anntp_article(c, g.first, &art); + + require(r > 0, "anntp_article fetch"); + require(art.body != NULL, "article body present"); + + require(art.from != NULL || art.id != NULL, "some headers parsed"); + + anntp_article_free(&art); + anntp_freeconn(c); +} + +static int +article_count_cb(const char* line, void* extra) +{ + size_t* count = (size_t*)extra; + if (line && line[0] != '\0') + (*count)++; + return 0; +} + +void +test_article_cb(void) +{ + AnntpConnection* c = anntp_mkconn("news.eternal-september.org", "119", false); + require(c != NULL, "connection for ARTICLE_CB test"); + + char line[256]; + anntp_readline(c, line, sizeof(line)); + + /* select a group */ + AnntpGroup g; + int err = anntp_group(c, "eternal-september.talk", &g); + require(err == ANE_OK, "group for article_cb"); + + size_t count = 0; + + /* try reading first available article */ + err = anntp_article_cb(c, g.first, article_count_cb, &count); + + require(err == ANE_OK, "anntp_article_cb execution"); + require(count > 0, "article_cb received lines"); + + anntp_freeconn(c); +} + /*********************************************************************************************************************/ int @@ -158,6 +219,8 @@ main(void) test_auth(); test_group(); test_list(); + test_article(); + test_article_cb(); printf("> INFO: %u out of %u tests failed (%u succeeded).\n", nfailed, ntests, ntests - nfailed);