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  }