istio.io/istio@v0.0.0-20240520182934-d79c90f27776/pkg/config/analysis/diag/messages_test.go (about) 1 // Copyright Istio Authors 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package diag 16 17 import ( 18 "testing" 19 20 . "github.com/onsi/gomega" 21 22 "istio.io/istio/pkg/url" 23 ) 24 25 func TestMessages_Sort(t *testing.T) { 26 g := NewWithT(t) 27 28 firstMsg := NewMessage( 29 NewMessageType(Error, "B1", "Template: %q"), 30 MockResource("B"), 31 "B", 32 ) 33 secondMsg := NewMessage( 34 NewMessageType(Warning, "A1", "Template: %q"), 35 MockResource("B"), 36 "B", 37 ) 38 thirdMsg := NewMessage( 39 NewMessageType(Warning, "B1", "Template: %q"), 40 MockResource("A"), 41 "B", 42 ) 43 fourthMsg := NewMessage( 44 NewMessageType(Warning, "B1", "Template: %q"), 45 MockResource("B"), 46 "A", 47 ) 48 fifthMsg := NewMessage( 49 NewMessageType(Warning, "B1", "Template: %q"), 50 MockResource("B"), 51 "B", 52 ) 53 54 msgs := Messages{fifthMsg, fourthMsg, thirdMsg, secondMsg, firstMsg} 55 expectedMsgs := Messages{firstMsg, secondMsg, thirdMsg, fourthMsg, fifthMsg} 56 57 msgs.Sort() 58 59 g.Expect(msgs).To(Equal(expectedMsgs)) 60 } 61 62 func TestMessages_SortWithNilOrigin(t *testing.T) { 63 g := NewWithT(t) 64 65 firstMsg := NewMessage( 66 NewMessageType(Error, "B1", "Template: %q"), 67 nil, 68 "B", 69 ) 70 secondMsg := NewMessage( 71 NewMessageType(Error, "B1", "Template: %q"), 72 nil, 73 "C", 74 ) 75 thirdMsg := NewMessage( 76 NewMessageType(Error, "B1", "Template: %q"), 77 MockResource("B"), 78 "B", 79 ) 80 81 msgs := Messages{thirdMsg, secondMsg, firstMsg} 82 expectedMsgs := Messages{firstMsg, secondMsg, thirdMsg} 83 84 msgs.Sort() 85 86 g.Expect(msgs).To(Equal(expectedMsgs)) 87 } 88 89 func TestMessages_SortedCopy(t *testing.T) { 90 g := NewWithT(t) 91 92 firstMsg := NewMessage( 93 NewMessageType(Error, "B1", "Template: %q"), 94 MockResource("B"), 95 "B", 96 ) 97 secondMsg := NewMessage( 98 NewMessageType(Warning, "A1", "Template: %q"), 99 MockResource("B"), 100 "B", 101 ) 102 // Oops, we have a duplicate (identical to firstMsg) - it should be removed. 103 thirdMsg := NewMessage( 104 NewMessageType(Error, "B1", "Template: %q"), 105 MockResource("B"), 106 "B", 107 ) 108 109 msgs := Messages{thirdMsg, secondMsg, firstMsg} 110 expectedMsgs := Messages{firstMsg, secondMsg} 111 112 newMsgs := msgs.SortedDedupedCopy() 113 114 g.Expect(newMsgs).To(Equal(expectedMsgs)) 115 } 116 117 func TestMessages_SetRefDoc(t *testing.T) { 118 g := NewWithT(t) 119 120 firstMsg := NewMessage( 121 NewMessageType(Error, "B1", "Template: %q"), 122 MockResource("B"), 123 "B", 124 ) 125 secondMsg := NewMessage( 126 NewMessageType(Info, "C1", "Template: %q"), 127 MockResource("B"), 128 "B", 129 ) 130 131 msgs := Messages{firstMsg, secondMsg} 132 msgs.SetDocRef("istioctl-awesome") 133 134 getDocURL := func(msg Message) string { 135 return msg.Unstructured(false)["documentationUrl"].(string) 136 } 137 138 g.Expect(getDocURL(msgs[0])).To(Equal(url.ConfigAnalysis + "/b1/?ref=istioctl-awesome")) 139 g.Expect(getDocURL(msgs[1])).To(Equal(url.ConfigAnalysis + "/c1/?ref=istioctl-awesome")) 140 } 141 142 func TestMessages_Filter(t *testing.T) { 143 g := NewWithT(t) 144 145 firstMsg := NewMessage( 146 NewMessageType(Error, "B1", "Template: %q"), 147 MockResource("B"), 148 "B", 149 ) 150 secondMsg := NewMessage( 151 NewMessageType(Info, "A1", "Template: %q"), 152 MockResource("B"), 153 "B", 154 ) 155 thirdMsg := NewMessage( 156 NewMessageType(Warning, "C1", "Template: %q"), 157 MockResource("B"), 158 "B", 159 ) 160 161 msgs := Messages{firstMsg, secondMsg, thirdMsg} 162 filteredMsgs := msgs.FilterOutLowerThan(Warning) 163 expectedMsgs := Messages{firstMsg, thirdMsg} 164 165 g.Expect(filteredMsgs).To(Equal(expectedMsgs)) 166 } 167 168 func TestMessages_FilterOutAll(t *testing.T) { 169 g := NewWithT(t) 170 171 firstMsg := NewMessage( 172 NewMessageType(Info, "A1", "Template: %q"), 173 MockResource("B"), 174 "B", 175 ) 176 secondMsg := NewMessage( 177 NewMessageType(Warning, "C1", "Template: %q"), 178 MockResource("B"), 179 "B", 180 ) 181 182 msgs := Messages{firstMsg, secondMsg} 183 filteredMsgs := msgs.FilterOutLowerThan(Error) 184 expectedMsgs := Messages{} 185 186 g.Expect(filteredMsgs).To(Equal(expectedMsgs)) 187 }