From 9dbf78fc832322e8e54737e359edb6422c85dfb2 Mon Sep 17 00:00:00 2001 From: Neer Friedman Date: Thu, 3 Apr 2025 11:10:40 +0300 Subject: [PATCH 1/3] add tests for issue kubernetes/ingress-nginx#13081 --- rootfs/etc/nginx/lua/test/balancer_test.lua | 34 +++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/rootfs/etc/nginx/lua/test/balancer_test.lua b/rootfs/etc/nginx/lua/test/balancer_test.lua index 2d42ad3306..95a854ca67 100644 --- a/rootfs/etc/nginx/lua/test/balancer_test.lua +++ b/rootfs/etc/nginx/lua/test/balancer_test.lua @@ -439,6 +439,40 @@ describe("Balancer", function() assert.stub(mock_instance.sync).was_called_with(mock_instance, expected_backend) end) + it("sets balancer to nil when service is of type External name and DNS could not resolve", function() + backend = { + name = "example-com", service = { spec = { ["type"] = "ExternalName" } }, + endpoints = { + { address = "example.com", port = "80", maxFails = 0, failTimeout = 0 } + } + } + + helpers.mock_resty_dns_query("example.com", nil, "Mock was instructed to return error") + local mock_instance = { sync = function(backend) end } + setmetatable(mock_instance, implementation) + implementation.new = function(self, backend) return mock_instance end + local s = spy.on(implementation, "new") + assert.has_no.errors(function() balancer.sync_backend(backend) end) + assert.spy(s).was.not.called() + assert.is_nil(balancer.get_balancer_by_upstream_name(backend.name)) + end) + + it("sets balancer to nil when service is of type External name and endpoints in nil (omitted by go calling POST /configuration/backends)", function() + backend = { + name = "example-com", service = { spec = { ["type"] = "ExternalName" } }, + endpoints = nil + } + + helpers.mock_resty_dns_query("example.com", nil, "Mock was instructed to return error") + local mock_instance = { sync = function(backend) end } + setmetatable(mock_instance, implementation) + implementation.new = function(self, backend) return mock_instance end + local s = spy.on(implementation, "new") + assert.has_no.errors(function() balancer.sync_backend(backend) end) + assert.spy(s).was.not.called() + assert.is_nil(balancer.get_balancer_by_upstream_name(backend.name)) + end) + it("wraps IPv6 addresses into square brackets", function() local backend = { name = "example-com", From 61f317f1c1aa29ab49afd7b05ca4e264ad6eb64e Mon Sep 17 00:00:00 2001 From: Neer Friedman Date: Thu, 3 Apr 2025 15:33:36 +0300 Subject: [PATCH 2/3] making test fail on purpose to check if tests work properly --- test/e2e/servicebackend/service_externalname.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/servicebackend/service_externalname.go b/test/e2e/servicebackend/service_externalname.go index fccd1cd194..a273dff59c 100644 --- a/test/e2e/servicebackend/service_externalname.go +++ b/test/e2e/servicebackend/service_externalname.go @@ -142,7 +142,7 @@ var _ = framework.IngressNginxDescribe("[Service] Type ExternalName", func() { GET("/get"). WithHeader("Host", host). Expect(). - Status(http.StatusOK) + Status(http.StatusCreated) }) ginkgo.It("should return status 502 for service type=ExternalName with an invalid host", func() { From 07260bf31b210ce70b332ab9fe179195795fe3b9 Mon Sep 17 00:00:00 2001 From: Neer Friedman Date: Thu, 3 Apr 2025 21:41:39 +0300 Subject: [PATCH 3/3] Revert "making test fail on purpose to check if tests work properly" This reverts commit 61f317f1c1aa29ab49afd7b05ca4e264ad6eb64e. --- test/e2e/servicebackend/service_externalname.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/servicebackend/service_externalname.go b/test/e2e/servicebackend/service_externalname.go index a273dff59c..fccd1cd194 100644 --- a/test/e2e/servicebackend/service_externalname.go +++ b/test/e2e/servicebackend/service_externalname.go @@ -142,7 +142,7 @@ var _ = framework.IngressNginxDescribe("[Service] Type ExternalName", func() { GET("/get"). WithHeader("Host", host). Expect(). - Status(http.StatusCreated) + Status(http.StatusOK) }) ginkgo.It("should return status 502 for service type=ExternalName with an invalid host", func() {