This is an automated email from the ASF dual-hosted git repository.

ashishtiwari pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/apisix-ingress-controller.git


The following commit(s) were added to refs/heads/master by this push:
     new 476783aa chore: add skip_mtls_uril_regex test for ApisixTLS (#2555)
476783aa is described below

commit 476783aab6090dbfb1051fc2ad021de5f490aada
Author: Ashish Tiwari <ashishjaitiwari15112...@gmail.com>
AuthorDate: Fri Sep 12 11:17:29 2025 +0530

    chore: add skip_mtls_uril_regex test for ApisixTLS (#2555)
---
 test/e2e/crds/v2/tls.go | 90 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 90 insertions(+)

diff --git a/test/e2e/crds/v2/tls.go b/test/e2e/crds/v2/tls.go
index 7f4069c2..1564fb15 100644
--- a/test/e2e/crds/v2/tls.go
+++ b/test/e2e/crds/v2/tls.go
@@ -245,6 +245,96 @@ spec:
                        assert.Equal(GinkgoT(), caCert, tls[0].Client.CA, 
"client CA should be test-ca-secret")
                        assert.Equal(GinkgoT(), int64(1), *tls[0].Client.Depth, 
"client depth should be 1")
                })
+               It("ApisixTls with skip_mtls_uri_regex test", func() {
+                       const host = "api6.com"
+                       const skipMtlsUriRegex = "/ip.*"
+
+                       By("generate mTLS certificates")
+                       caCertBytes, serverCertBytes, serverKeyBytes, _, _ := 
s.GenerateMACert(GinkgoT(), []string{host})
+                       caCert := caCertBytes.String()
+                       serverCert := serverCertBytes.String()
+                       serverKey := serverKeyBytes.String()
+
+                       By("create server TLS secret")
+                       err := s.NewKubeTlsSecret("test-mtls-server-secret", 
serverCert, serverKey)
+                       Expect(err).NotTo(HaveOccurred(), "creating server TLS 
secret")
+
+                       By("create client CA secret")
+                       err = s.NewClientCASecret("test-client-ca-secret", 
caCert, "")
+                       Expect(err).NotTo(HaveOccurred(), "creating client CA 
secret")
+
+                       const apisixTlsSpec = `
+apiVersion: apisix.apache.org/v2
+kind: ApisixTls
+metadata:
+  name: test-mtls-skip-regex
+spec:
+  ingressClassName: %s
+  hosts:
+  - %s
+  secret:
+    name: test-mtls-server-secret
+    namespace: %s
+  client:
+    caSecret:
+      name: test-client-ca-secret
+      namespace: %s
+    depth: 10
+    skip_mtls_uri_regex:
+    - %s
+`
+
+                       By("apply ApisixTls with mTLS and skip_mtls_uri_regex")
+                       var apisixTls apiv2.ApisixTls
+                       tlsSpec := fmt.Sprintf(apisixTlsSpec, s.Namespace(), 
host, s.Namespace(), s.Namespace(), skipMtlsUriRegex)
+                       applier.MustApplyAPIv2(types.NamespacedName{Namespace: 
s.Namespace(), Name: "test-mtls-skip-regex"}, &apisixTls, tlsSpec)
+
+                       By("verify mTLS configuration with skip_mtls_uri_regex")
+                       Eventually(func() bool {
+                               tls, err := 
s.DefaultDataplaneResource().SSL().List(context.Background())
+                               if err != nil {
+                                       return false
+                               }
+                               if len(tls) != 1 {
+                                       return false
+                               }
+                               return tls[0].Client != nil &&
+                                       tls[0].Client.CA != "" &&
+                                       len(tls[0].Client.SkipMtlsURIRegex) > 0 
&&
+                                       tls[0].Client.SkipMtlsURIRegex[0] == 
skipMtlsUriRegex
+                       }).WithTimeout(30 * time.Second).ProbeEvery(1 * 
time.Second).Should(BeTrue())
+
+                       By("test HTTPS request to path matching 
skip_mtls_uri_regex without client cert")
+                       Eventually(func() int {
+                               return s.NewAPISIXHttpsClient(host).
+                                       GET("/ip").
+                                       WithHost(host).
+                                       Expect().
+                                       Raw().StatusCode
+                       }).WithTimeout(30 * time.Second).ProbeEvery(1 * 
time.Second).Should(Equal(http.StatusOK))
+
+                       By("test HTTPS request to non-matching path without 
client cert should fail")
+                       Eventually(func() bool {
+                               resp := s.NewAPISIXHttpsClient(host).
+                                       GET("/get").
+                                       WithHost(host).
+                                       Expect().
+                                       Raw()
+                               return resp.StatusCode == http.StatusBadRequest 
||
+                                       resp.StatusCode == http.StatusForbidden 
||
+                                       resp.StatusCode >= 500
+                       }).WithTimeout(30 * time.Second).ProbeEvery(1 * 
time.Second).Should(BeTrue())
+
+                       // Verify the configuration details
+                       tls, err := 
s.DefaultDataplaneResource().SSL().List(context.Background())
+                       assert.Nil(GinkgoT(), err, "list tls error")
+                       assert.Len(GinkgoT(), tls, 1, "tls number not expect")
+                       assert.NotNil(GinkgoT(), tls[0].Client, "client 
configuration should not be nil")
+                       assert.NotEmpty(GinkgoT(), tls[0].Client.CA, "client CA 
should not be empty")
+                       assert.Equal(GinkgoT(), caCert, tls[0].Client.CA, 
"client CA should match")
+                       assert.Equal(GinkgoT(), int64(10), 
*tls[0].Client.Depth, "client depth should be 10")
+                       assert.Contains(GinkgoT(), 
tls[0].Client.SkipMtlsURIRegex, skipMtlsUriRegex, "skip_mtls_uri_regex should 
be set")
+               })
 
        })
 })

Reply via email to