istio.io/istio@v0.0.0-20240520182934-d79c90f27776/pkg/test/util/structpath/instance_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 structpath_test
    16  
    17  import (
    18  	"testing"
    19  
    20  	discovery "github.com/envoyproxy/go-control-plane/envoy/service/discovery/v3"
    21  
    22  	"istio.io/istio/pkg/test/util/structpath"
    23  )
    24  
    25  func TestContainSubstring(t *testing.T) {
    26  	testResponse := &discovery.DiscoveryResponse{
    27  		VersionInfo: "2019-07-16T10:54:41-07:00/1",
    28  		TypeUrl:     "some.Random.Type.URL",
    29  	}
    30  	validator := structpath.ForProto(testResponse)
    31  
    32  	tests := []struct {
    33  		name    string
    34  		substrs []string
    35  		err     bool
    36  	}{
    37  		{
    38  			name:    "Substring exist",
    39  			substrs: []string{"Random", "Type", "URL", "some"},
    40  			err:     false,
    41  		},
    42  		{
    43  			name:    "Substring does not exist",
    44  			substrs: []string{"RaNdOm"},
    45  			err:     true,
    46  		},
    47  		{
    48  			name:    "Substring empty",
    49  			substrs: []string{" "},
    50  			err:     true,
    51  		},
    52  	}
    53  	for _, tt := range tests {
    54  		t.Run(tt.name, func(t *testing.T) {
    55  			var instance *structpath.Instance
    56  			for _, s := range tt.substrs {
    57  				instance = validator.ContainSubstring(s, "{.typeUrl}")
    58  			}
    59  			err := instance.Check()
    60  			if tt.err && err == nil {
    61  				t.Errorf("expected err but got none for %s", tt.name)
    62  			}
    63  		})
    64  	}
    65  }