From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server-vie001.gnuweeb.org X-Spam-Level: X-Spam-Status: No, score=-1.2 required=5.0 tests=ALL_TRUSTED,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,URIBL_DBL_BLOCKED_OPENDNS, URIBL_ZEN_BLOCKED_OPENDNS autolearn=ham autolearn_force=no version=3.4.6 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gnuweeb.org; s=new2025; t=1756391862; bh=FjNtEbvNuN/limivwamFfZUM3LQ9WKWJSTA0Q96h/+c=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Transfer-Encoding:Message-ID:Date:From: Reply-To:Subject:To:Cc:In-Reply-To:References:Resent-Date: Resent-From:Resent-To:Resent-Cc:User-Agent:Content-Type: Content-Transfer-Encoding; b=sgrX82Lxww15tN2vgzm/b7Dpy68PGlH4JQopirJgTtjX1OBPNQzYNPxr7DlLOHnH6 koKE5BfYbZs18g48u+0VyFfn6xz/q1AkSV8lOMbmdA8/yYcf4NfbIzUcrfaep2Gf2l Q7C18h1FlAdOBkqz+RQYCEVAK9zEM3dfPfS5LXMAn1gP4GxdctlOInu7HdnXh436UP rJdCKPt+qCBEPHPDUmp8EojA0ics5apUYqovWKwP7evOTnhe66EtjJhsyoQHlYDdwA L7cYehOVKbHSvKj3QIOkOgw0d20C21iiNHkoRSuDFqBBjNVXUV64AdiJcI5DLaTxYy sBDRQymdmlyig== Received: from zero (unknown [182.253.228.107]) by server-vie001.gnuweeb.org (Postfix) with ESMTPSA id 2B9973127F76; Thu, 28 Aug 2025 14:37:39 +0000 (UTC) From: Ahmad Gani To: Ammar Faizi Cc: Ahmad Gani , Alviro Iskandar Setiawan , GNU/Weeb Mailing List Subject: [PATCH gwproxy v6 09/11] test: revert DNS test-case Date: Thu, 28 Aug 2025 21:34:31 +0700 Message-ID: <20250828143444.540247-10-reyuki@gnuweeb.org> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20250828143444.540247-1-reyuki@gnuweeb.org> References: <20250828143444.540247-1-reyuki@gnuweeb.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit List-Id: The raw DNS test case will be added later once we've solved the known problem. Signed-off-by: Ahmad Gani --- src/gwproxy/ev/epoll.c | 1 - src/gwproxy/tests/dns.c | 110 +++++++++++++++++++++++----------------- 2 files changed, 63 insertions(+), 48 deletions(-) diff --git a/src/gwproxy/ev/epoll.c b/src/gwproxy/ev/epoll.c index a4ea80359236..cd8fd8752473 100644 --- a/src/gwproxy/ev/epoll.c +++ b/src/gwproxy/ev/epoll.c @@ -847,7 +847,6 @@ static int handle_ev_dns_query(struct gwp_wrk *w, struct gwp_conn_pair *gcp) int r, ct = gcp->conn_state; assert(gde); - assert(gde->ev_fd >= 0); assert(ct == CONN_STATE_SOCKS5_DNS_QUERY || ct == CONN_STATE_HTTP_DNS_QUERY); diff --git a/src/gwproxy/tests/dns.c b/src/gwproxy/tests/dns.c index 130ccfec59b6..7735d24afdd2 100644 --- a/src/gwproxy/tests/dns.c +++ b/src/gwproxy/tests/dns.c @@ -20,30 +20,25 @@ struct req_template { const char *domain, *service; }; -struct poll_map { - struct gwp_dns_entry *e; - int fd; -}; - static const struct req_template req_template[] = { + { "localhost", "80" }, { "facebook.com", "80" }, + { "google.com", "443" }, + { "github.com", "443" }, + { "example.com", "80" }, + { "twitter.com", "443" }, + { "reddit.com", "80" }, + { "youtube.com", "443" }, + { "wikipedia.org", "80" }, + { "stackoverflow.com", "443" }, + { "amazon.com", "80" }, + { "microsoft.com", "443" }, + { "apple.com", "80" }, + { "linkedin.com", "443" }, + { "bing.com", "80" }, }; -static struct gwp_dns_entry *find_item(struct poll_map *map, int n, int fd) -{ - struct gwp_dns_entry *e; - int i; - - e = NULL; - for (i = 0; i < n; i++) { - if (map[i].fd == fd) - e = map[i].e; - } - - return e; -} - -static int poll_all_in(struct gwp_dns_ctx *ctx, struct poll_map *map, struct pollfd *pfd, int n, int timeout) +static int poll_all_in(struct pollfd *pfd, int n, int timeout) { int ret, i, t = 0; @@ -59,12 +54,7 @@ static int poll_all_in(struct gwp_dns_ctx *ctx, struct poll_map *map, struct pol } for (i = 0; i < n; i++) { - struct gwp_dns_entry *e; - if (pfd[i].revents & POLLIN) { - e = find_item(map, n, pfd[i].fd); - assert(e); - ret = gwp_dns_process(ctx, e); - assert(!ret); + if (pfd[i].revents & (POLLIN | POLLERR | POLLHUP)) { pfd[i].events = 0; t++; } @@ -77,14 +67,12 @@ static int poll_all_in(struct gwp_dns_ctx *ctx, struct poll_map *map, struct pol static void test_basic_dns_multiple_requests(void) { - struct gwp_dns_cfg cfg = { .nr_workers = 1, .ns_addr_str = "1.1.1.1" }; - struct poll_map pollfd_map[ARRAY_SIZE(req_template)]; + struct gwp_dns_cfg cfg = { .nr_workers = 1 }; + struct gwp_dns_entry *earr[ARRAY_SIZE(req_template)]; struct pollfd pfd[ARRAY_SIZE(req_template)]; - struct gwp_sockaddr addr; struct gwp_dns_ctx *ctx; - uint8_t addrlen; - ssize_t r; int i, n; + int r; r = gwp_dns_ctx_init(&ctx, &cfg); assert(!r); @@ -93,37 +81,65 @@ static void test_basic_dns_multiple_requests(void) n = (int)ARRAY_SIZE(req_template); for (i = 0; i < n; i++) { const struct req_template *rt = &req_template[i]; - struct gwp_dns_entry *e; - e = gwp_dns_queue(ctx, rt->domain, rt->service); - assert(e); - assert(e->udp_fd >= 0); - pfd[i].fd = e->udp_fd; + earr[i] = gwp_dns_queue(ctx, rt->domain, rt->service); + assert(earr[i]); + assert(earr[i]->ev_fd >= 0); + pfd[i].fd = earr[i]->ev_fd; pfd[i].events = POLLIN; - cp_nsaddr(ctx, &addr, &addrlen); - r = __sys_sendto( - e->udp_fd, e->payload, e->payloadlen, MSG_NOSIGNAL, - &addr.sa, addrlen - ); - assert(r > 0); - pollfd_map[i].fd = e->udp_fd; - pollfd_map[i].e = e; } - r = poll_all_in(ctx, pollfd_map, pfd, n, 5000); + r = poll_all_in(pfd, n, 5000); assert(!r); for (i = 0; i < n; i++) { - assert(pollfd_map[i].e->res == 0); - r = pollfd_map[i].e->addr.sa.sa_family; + assert(earr[i]->res == 0); + r = earr[i]->addr.sa.sa_family; assert(r == AF_INET || r == AF_INET6); } + for (i = 0; i < n; i++) + gwp_dns_entry_put(earr[i]); + gwp_dns_ctx_free(ctx); +} + +static void test_dns_cache(void) +{ + struct gwp_dns_cfg cfg = { .nr_workers = 1, .cache_expiry = 10 }; + struct gwp_sockaddr addr; + struct gwp_dns_ctx *ctx; + struct gwp_dns_entry *e; + struct pollfd pfd; + int r; + + r = gwp_dns_ctx_init(&ctx, &cfg); + assert(!r); + assert(ctx != NULL); + + e = gwp_dns_queue(ctx, "localhost", "80"); + assert(e != NULL); + assert(e->ev_fd >= 0); + pfd.fd = e->ev_fd; + pfd.events = POLLIN; + r = poll_all_in(&pfd, 1, 5000); + assert(r == 0); + assert(e->res == 0); + r = e->addr.sa.sa_family; + assert(r == AF_INET || r == AF_INET6); + gwp_dns_entry_put(e); + + r = gwp_dns_cache_lookup(ctx, "localhost", "80", &addr); + assert(!r); + r = addr.sa.sa_family; + assert(r == AF_INET || r == AF_INET6); + r = gwp_dns_cache_lookup(ctx, "aaaa.com", "80", &addr); + assert(r == -ENOENT); gwp_dns_ctx_free(ctx); } int main(void) { test_basic_dns_multiple_requests(); + test_dns_cache(); printf("All tests passed.\n"); return 0; } -- Ahmad Gani