github.com/kiali/kiali@v1.84.0/business/checkers/k8shttproutes/no_host_checker_test.go (about) 1 package k8shttproutes 2 3 import ( 4 "testing" 5 6 k8s_networking_v1beta1 "sigs.k8s.io/gateway-api/apis/v1beta1" 7 8 "github.com/stretchr/testify/assert" 9 10 "github.com/kiali/kiali/config" 11 "github.com/kiali/kiali/models" 12 "github.com/kiali/kiali/tests/data" 13 "github.com/kiali/kiali/tests/testutils/validations" 14 ) 15 16 func TestValidRefHost(t *testing.T) { 17 c := config.Get() 18 c.ExternalServices.Istio.IstioIdentityDomain = "svc.cluster.local" 19 config.Set(c) 20 21 assert := assert.New(t) 22 23 registryService1 := data.CreateFakeRegistryServices("other.bookinfo.svc.cluster.local", "bookinfo", "*") 24 registryService2 := data.CreateFakeRegistryServices("reviews.bookinfo.svc.cluster.local", "bookinfo", "*") 25 26 vals, valid := NoHostChecker{ 27 RegistryServices: append(registryService1, registryService2...), 28 K8sReferenceGrants: []*k8s_networking_v1beta1.ReferenceGrant{data.CreateReferenceGrant("grant", "bookinfo", "bookinfo2")}, 29 K8sHTTPRoute: data.AddBackendRefToHTTPRoute("reviews", "bookinfo", data.CreateHTTPRoute("route", "bookinfo2", "gatewayapi", []string{"bookinfo"})), 30 }.Check() 31 32 assert.True(valid) 33 assert.Empty(vals) 34 } 35 36 func TestMissingGrant(t *testing.T) { 37 c := config.Get() 38 c.ExternalServices.Istio.IstioIdentityDomain = "svc.cluster.local" 39 config.Set(c) 40 41 assert := assert.New(t) 42 43 registryService1 := data.CreateFakeRegistryServices("other.bookinfo.svc.cluster.local", "bookinfo", "*") 44 registryService2 := data.CreateFakeRegistryServices("reviews.bookinfo.svc.cluster.local", "bookinfo", "*") 45 46 vals, valid := NoHostChecker{ 47 RegistryServices: append(registryService1, registryService2...), 48 K8sHTTPRoute: data.AddBackendRefToHTTPRoute("reviews", "bookinfo", data.CreateHTTPRoute("route", "bookinfo2", "gatewayapi", []string{"bookinfo"})), 49 }.Check() 50 51 assert.False(valid) 52 assert.NotEmpty(vals) 53 assert.Len(vals, 1) 54 assert.Equal(models.ErrorSeverity, vals[0].Severity) 55 assert.NoError(validations.ConfirmIstioCheckMessage("k8shttproutes.nohost.namenotfound", vals[0])) 56 assert.Equal("spec/rules[0]/backendRefs[0]/name", vals[0].Path) 57 } 58 59 func TestWrongGrant(t *testing.T) { 60 c := config.Get() 61 c.ExternalServices.Istio.IstioIdentityDomain = "svc.cluster.local" 62 config.Set(c) 63 64 assert := assert.New(t) 65 66 registryService1 := data.CreateFakeRegistryServices("other.bookinfo.svc.cluster.local", "bookinfo", "*") 67 registryService2 := data.CreateFakeRegistryServices("reviews.bookinfo.svc.cluster.local", "bookinfo", "*") 68 69 vals, valid := NoHostChecker{ 70 RegistryServices: append(registryService1, registryService2...), 71 K8sReferenceGrants: []*k8s_networking_v1beta1.ReferenceGrant{data.CreateReferenceGrant("grant", "bookinfo", "bookinfo")}, 72 K8sHTTPRoute: data.AddBackendRefToHTTPRoute("reviews", "bookinfo", data.CreateHTTPRoute("route", "bookinfo2", "gatewayapi", []string{"bookinfo"})), 73 }.Check() 74 75 assert.False(valid) 76 assert.NotEmpty(vals) 77 assert.Len(vals, 1) 78 assert.Equal(models.ErrorSeverity, vals[0].Severity) 79 assert.NoError(validations.ConfirmIstioCheckMessage("k8shttproutes.nohost.namenotfound", vals[0])) 80 assert.Equal("spec/rules[0]/backendRefs[0]/name", vals[0].Path) 81 } 82 83 func TestValidRefHostDefaultNs(t *testing.T) { 84 c := config.Get() 85 c.ExternalServices.Istio.IstioIdentityDomain = "svc.cluster.local" 86 config.Set(c) 87 88 assert := assert.New(t) 89 90 registryService1 := data.CreateFakeRegistryServices("other.bookinfo.svc.cluster.local", "bookinfo", "*") 91 registryService2 := data.CreateFakeRegistryServices("reviews.bookinfo.svc.cluster.local", "bookinfo", "*") 92 93 vals, valid := NoHostChecker{ 94 RegistryServices: append(registryService1, registryService2...), 95 K8sReferenceGrants: []*k8s_networking_v1beta1.ReferenceGrant{data.CreateReferenceGrant("grant", "bookinfo", "bookinfo2")}, 96 K8sHTTPRoute: data.AddBackendRefToHTTPRoute("reviews", "", data.CreateHTTPRoute("route", "bookinfo", "gatewayapi", []string{"bookinfo"})), 97 }.Check() 98 99 assert.True(valid) 100 assert.Empty(vals) 101 } 102 103 func TestInvalidRefHostDefaultNs(t *testing.T) { 104 c := config.Get() 105 c.ExternalServices.Istio.IstioIdentityDomain = "svc.cluster.local" 106 config.Set(c) 107 108 assert := assert.New(t) 109 110 registryService1 := data.CreateFakeRegistryServices("other.bookinfo.svc.cluster.local", "bookinfo", "*") 111 registryService2 := data.CreateFakeRegistryServices("reviews.bookinfo.svc.cluster.local", "bookinfo", "*") 112 113 vals, valid := NoHostChecker{ 114 RegistryServices: append(registryService1, registryService2...), 115 K8sReferenceGrants: []*k8s_networking_v1beta1.ReferenceGrant{data.CreateReferenceGrant("grant", "bookinfo", "bookinfo2")}, 116 K8sHTTPRoute: data.AddBackendRefToHTTPRoute("reviews", "", data.CreateHTTPRoute("route", "bookinfo2", "gatewayapi", []string{"bookinfo"})), 117 }.Check() 118 119 assert.False(valid) 120 assert.NotEmpty(vals) 121 assert.Len(vals, 1) 122 assert.Equal(models.ErrorSeverity, vals[0].Severity) 123 assert.NoError(validations.ConfirmIstioCheckMessage("k8shttproutes.nohost.namenotfound", vals[0])) 124 assert.Equal("spec/rules[0]/backendRefs[0]/name", vals[0].Path) 125 } 126 127 func TestNoValidRefHost(t *testing.T) { 128 c := config.Get() 129 c.ExternalServices.Istio.IstioIdentityDomain = "svc.cluster.local" 130 config.Set(c) 131 132 registryService1 := data.CreateFakeRegistryServices("other.bookinfo.svc.cluster.local", "bookinfo", "*") 133 registryService2 := data.CreateFakeRegistryServices("details.bookinfo.svc.cluster.local", "bookinfo", "*") 134 135 assert := assert.New(t) 136 137 vals, valid := NoHostChecker{ 138 RegistryServices: append(registryService1, registryService2...), 139 K8sReferenceGrants: []*k8s_networking_v1beta1.ReferenceGrant{data.CreateReferenceGrant("grant", "bookinfo", "bookinfo2")}, 140 K8sHTTPRoute: data.AddBackendRefToHTTPRoute("ratings", "bookinfo", data.AddBackendRefToHTTPRoute("reviews", "bookinfo", data.CreateHTTPRoute("route", "bookinfo2", "gatewayapi", []string{"bookinfo2"}))), 141 }.Check() 142 143 assert.False(valid) 144 assert.NotEmpty(vals) 145 assert.Len(vals, 2) 146 assert.Equal(models.ErrorSeverity, vals[0].Severity) 147 assert.NoError(validations.ConfirmIstioCheckMessage("k8shttproutes.nohost.namenotfound", vals[0])) 148 assert.Equal("spec/rules[0]/backendRefs[0]/name", vals[0].Path) 149 150 assert.Equal(models.ErrorSeverity, vals[1].Severity) 151 assert.NoError(validations.ConfirmIstioCheckMessage("k8shttproutes.nohost.namenotfound", vals[1])) 152 assert.Equal("spec/rules[1]/backendRefs[0]/name", vals[1].Path) 153 } 154 155 func TestInvalidRefHostFQDN(t *testing.T) { 156 c := config.Get() 157 c.ExternalServices.Istio.IstioIdentityDomain = "svc.cluster.local" 158 config.Set(c) 159 160 assert := assert.New(t) 161 162 registryService1 := data.CreateFakeRegistryServices("other.bookinfo.svc.cluster.local", "bookinfo", "*") 163 registryService2 := data.CreateFakeRegistryServices("reviews.bookinfo.svc.cluster.local", "bookinfo", "*") 164 165 vals, valid := NoHostChecker{ 166 RegistryServices: append(registryService1, registryService2...), 167 K8sReferenceGrants: []*k8s_networking_v1beta1.ReferenceGrant{data.CreateReferenceGrant("grant", "bookinfo", "bookinfo2")}, 168 K8sHTTPRoute: data.AddBackendRefToHTTPRoute("reviews.bookinfo.svc.cluster.local", "", data.CreateHTTPRoute("route", "bookinfo2", "gatewayapi", []string{"bookinfo"})), 169 }.Check() 170 171 assert.False(valid) 172 assert.NotEmpty(vals) 173 assert.Len(vals, 1) 174 assert.Equal(models.ErrorSeverity, vals[0].Severity) 175 assert.NoError(validations.ConfirmIstioCheckMessage("k8shttproutes.nohost.namenotfound", vals[0])) 176 assert.Equal("spec/rules[0]/backendRefs[0]/name", vals[0].Path) 177 }