github.com/kiali/kiali@v1.84.0/business/checkers/virtualservices/route_checker_test.go (about) 1 package virtualservices 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/assert" 7 networking_v1beta1 "istio.io/client-go/pkg/apis/networking/v1beta1" 8 9 "github.com/kiali/kiali/models" 10 "github.com/kiali/kiali/tests/data" 11 "github.com/kiali/kiali/tests/testutils/validations" 12 ) 13 14 // VirtualService has two routes that all the weights sum 100 15 func TestServiceWellVirtualServiceValidation(t *testing.T) { 16 assert := assert.New(t) 17 18 // Setup mocks 19 vals, valid := RouteChecker{ 20 Namespaces: []string{"test"}, 21 VirtualService: fakeValidVirtualService(), 22 }.Check() 23 24 // Well configured object 25 assert.True(valid) 26 assert.Empty(vals) 27 } 28 29 // VirtualService with one route and a weight between 0 and 100 30 func TestServiceMultipleChecks(t *testing.T) { 31 assert := assert.New(t) 32 33 vals, valid := RouteChecker{ 34 Namespaces: []string{"test"}, 35 VirtualService: fakeOneRouteUnder100(), 36 }.Check() 37 38 // wrong weight'ed route rule 39 assert.True(valid) 40 assert.NotEmpty(vals) 41 assert.Len(vals, 1) 42 assert.NoError(validations.ConfirmIstioCheckMessage("virtualservices.route.singleweight", vals[0])) 43 assert.Equal(vals[0].Severity, models.WarningSeverity) 44 assert.Equal(vals[0].Path, "spec/http[0]/route[0]/weight") 45 } 46 47 func TestVSWithRepeatingSubsets(t *testing.T) { 48 assert := assert.New(t) 49 50 vals, valid := RouteChecker{ 51 Namespaces: []string{"test"}, 52 VirtualService: fakeRepeatedSubset(), 53 }.Check() 54 assert.True(valid) 55 assert.NotEmpty(vals) 56 assert.Len(vals, 4) 57 assert.NoError(validations.ConfirmIstioCheckMessage("virtualservices.route.repeatedsubset", vals[0])) 58 assert.Equal(vals[0].Severity, models.WarningSeverity) 59 assert.Regexp(`spec\/http\[0\]\/route\[[0,2]\]\/host`, vals[0].Path) 60 assert.NoError(validations.ConfirmIstioCheckMessage("virtualservices.route.repeatedsubset", vals[3])) 61 assert.Equal(vals[3].Severity, models.WarningSeverity) 62 assert.Regexp(`spec\/http\[0\]\/route\[[1,3]\]\/host`, vals[3].Path) 63 } 64 65 func TestVSWithRepeatingHostsNoSubsets(t *testing.T) { 66 assert := assert.New(t) 67 68 vals, valid := RouteChecker{ 69 Namespaces: []string{"test"}, 70 VirtualService: fakeRepeatedHosts(), 71 }.Check() 72 assert.True(valid) 73 assert.NotEmpty(vals) 74 assert.Len(vals, 4) 75 assert.NoError(validations.ConfirmIstioCheckMessage("virtualservices.route.repeatedsubset", vals[0])) 76 assert.Equal(vals[0].Severity, models.WarningSeverity) 77 assert.Regexp(`spec\/http\[0\]\/route\[[0,2]\]\/host`, vals[0].Path) 78 assert.NoError(validations.ConfirmIstioCheckMessage("virtualservices.route.repeatedsubset", vals[3])) 79 assert.Equal(vals[3].Severity, models.WarningSeverity) 80 assert.Regexp(`spec\/http\[0\]\/route\[[1,3]\]\/host`, vals[3].Path) 81 } 82 83 func fakeValidVirtualService() *networking_v1beta1.VirtualService { 84 validVirtualService := data.AddHttpRoutesToVirtualService(data.CreateHttpRouteDestination("reviews", "v1", 55), 85 data.AddHttpRoutesToVirtualService(data.CreateHttpRouteDestination("reviews", "v2", 45), 86 data.CreateEmptyVirtualService("reviews-well", "test", []string{"reviews"}), 87 ), 88 ) 89 90 return validVirtualService 91 } 92 93 func fakeOneRouteUnder100() *networking_v1beta1.VirtualService { 94 virtualService := data.AddHttpRoutesToVirtualService(data.CreateHttpRouteDestination("reviews", "v1", 45), 95 data.CreateEmptyVirtualService("reviews-multiple", "test", []string{"reviews"}), 96 ) 97 98 return virtualService 99 } 100 101 func fakeRepeatedSubset() *networking_v1beta1.VirtualService { 102 validVirtualService := data.AddHttpRoutesToVirtualService(data.CreateHttpRouteDestination("reviews", "v1", 55), 103 data.AddHttpRoutesToVirtualService(data.CreateHttpRouteDestination("reviews", "v1", 45), 104 data.AddHttpRoutesToVirtualService(data.CreateHttpRouteDestination("reviews", "v2", 55), 105 data.AddHttpRoutesToVirtualService(data.CreateHttpRouteDestination("reviews", "v2", 45), 106 data.CreateEmptyVirtualService("reviews-repeated", "test", []string{"reviews"}), 107 ), 108 ), 109 ), 110 ) 111 112 return validVirtualService 113 } 114 115 func fakeRepeatedHosts() *networking_v1beta1.VirtualService { 116 validVirtualService := data.AddHttpRoutesToVirtualService(data.CreateHttpRouteDestination("reviews.test.svc.cluster.local", "", 55), 117 data.AddHttpRoutesToVirtualService(data.CreateHttpRouteDestination("reviews.test.svc.cluster.local", "", 45), 118 data.AddHttpRoutesToVirtualService(data.CreateHttpRouteDestination("reviews.test.svc.cluster.local", "", 55), 119 data.AddHttpRoutesToVirtualService(data.CreateHttpRouteDestination("reviews.test.svc.cluster.local", "", 45), 120 data.CreateEmptyVirtualService("reviews-repeated", "test", []string{"reviews"}), 121 ), 122 ), 123 ), 124 ) 125 126 return validVirtualService 127 }