blob: 4ad4bb2bbeba76967354cafdc3c6f3f15e439e17 [file] [log] [blame]
// Copyright Istio Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package match
import (
"github.com/apache/dubbo-go-pixiu/pkg/test/framework/components/cluster"
"github.com/apache/dubbo-go-pixiu/pkg/test/framework/components/echo"
"github.com/apache/dubbo-go-pixiu/pkg/test/framework/components/namespace"
)
// Any doesn't filter out any echos.
var Any Matcher = func(_ echo.Instance) bool {
return true
}
// And is an aggregate Matcher that requires all matches return true.
func And(ms ...Matcher) Matcher {
return func(i echo.Instance) bool {
for _, m := range ms {
if !m(i) {
return false
}
}
return true
}
}
// Or is an aggregate Matcher that requires at least one matches return true.
func Or(ms ...Matcher) Matcher {
return func(i echo.Instance) bool {
for _, m := range ms {
if m(i) {
return true
}
}
return false
}
}
// Not negates the given matcher. Example:
//
// Not(Naked())
func Not(m Matcher) Matcher {
return func(i echo.Instance) bool {
return !m(i)
}
}
// ServiceName matches instances with the given namespace and service name.
func ServiceName(n echo.NamespacedName) Matcher {
return func(i echo.Instance) bool {
return n == i.NamespacedName()
}
}
// AnyServiceName matches instances if they have the same Service and Namespace as any of the provided instances.
func AnyServiceName(expected echo.NamespacedNames) Matcher {
return func(instance echo.Instance) bool {
serviceName := instance.NamespacedName()
for _, expectedName := range expected {
if serviceName == expectedName {
return true
}
}
return false
}
}
// Namespace matches instances within the given namespace name.
func Namespace(n namespace.Instance) Matcher {
return NamespaceName(n.Name())
}
// NamespaceName matches instances within the given namespace name.
func NamespaceName(ns string) Matcher {
return func(i echo.Instance) bool {
return i.Config().Namespace.Name() == ns
}
}
// Cluster matches instances deployed on the given cluster.
func Cluster(c cluster.Cluster) Matcher {
return func(i echo.Instance) bool {
return c.Name() == i.Config().Cluster.Name()
}
}
// Network matches instances deployed in the given network.
func Network(n string) Matcher {
return func(i echo.Instance) bool {
return i.Config().Cluster.NetworkName() == n
}
}
// VM matches instances with DeployAsVM
var VM Matcher = func(i echo.Instance) bool {
return i.Config().IsVM()
}
// NotVM is matches against instances that are NOT VMs.
var NotVM = Not(VM)
// External matches instances that have a custom DefaultHostHeader defined
var External Matcher = func(i echo.Instance) bool {
return i.Config().IsExternal()
}
// NotExternal is equivalent to Not(External)
var NotExternal = Not(External)
// Naked matches instances that are Pods with a SidecarInject annotation equal to false.
var Naked Matcher = func(i echo.Instance) bool {
return i.Config().IsNaked()
}
// NotNaked is equivalent to Not(Naked)
var NotNaked = Not(Naked)
// Headless matches instances that are backed by headless services.
var Headless Matcher = func(i echo.Instance) bool {
return i.Config().Headless
}
// NotHeadless is equivalent to Not(Headless)
var NotHeadless = Not(Headless)
// ProxylessGRPC matches instances that are Pods with a SidecarInjectTemplate annotation equal to grpc.
var ProxylessGRPC Matcher = func(i echo.Instance) bool {
return i.Config().IsProxylessGRPC()
}
// NotProxylessGRPC is equivalent to Not(ProxylessGRPC)
var NotProxylessGRPC = Not(ProxylessGRPC)
var TProxy Matcher = func(i echo.Instance) bool {
return i.Config().IsTProxy()
}
var NotTProxy = Not(TProxy)
// RegularPod matches echos that don't meet any of the following criteria:
// - VM
// - Naked
// - Headless
// - TProxy
// - Multi-Subset
var RegularPod Matcher = func(instance echo.Instance) bool {
return instance.Config().IsRegularPod()
}
var NotRegularPod = Not(RegularPod)