blob: 86009ff2678ff2be082e45d81a6babb7426df7eb [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_test
import (
"strconv"
"testing"
)
import (
"github.com/apache/dubbo-go-pixiu/pkg/test"
"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/echo/match"
"github.com/apache/dubbo-go-pixiu/pkg/test/framework/components/namespace"
"github.com/apache/dubbo-go-pixiu/pkg/test/framework/resource"
)
var (
// 2 clusters on 2 networks
cls1 = &cluster.FakeCluster{Topology: cluster.Topology{ClusterName: "cls1", Network: "n1", Index: 0, ClusterKind: cluster.Fake}}
// simple pod
a1 = &fakeInstance{Cluster: cls1, Namespace: namespace.Static("echo"), Service: "a"}
// simple pod with different svc
b1 = &fakeInstance{Cluster: cls1, Namespace: namespace.Static("echo"), Service: "b"}
// virtual machine
vm1 = &fakeInstance{Cluster: cls1, Namespace: namespace.Static("echo"), Service: "vm", DeployAsVM: true}
// headless
headless1 = &fakeInstance{Cluster: cls1, Namespace: namespace.Static("echo"), Service: "headless", Headless: true}
// naked pod (uninjected)
naked1 = &fakeInstance{Cluster: cls1, Namespace: namespace.Static("echo"), Service: "naked", Subsets: []echo.SubsetConfig{{
Annotations: echo.NewAnnotations().SetBool(echo.SidecarInject, false),
}}}
// external svc
external1 = &fakeInstance{
Cluster: cls1, Namespace: namespace.Static("echo"), Service: "external", DefaultHostHeader: "external.com", Subsets: []echo.SubsetConfig{{
Annotations: map[echo.Annotation]*echo.AnnotationValue{echo.SidecarInject: {Value: strconv.FormatBool(false)}},
}},
}
)
func TestRegularPod(t *testing.T) {
tests := []struct {
app echo.Instance
expect bool
}{
{app: a1, expect: true},
{app: b1, expect: true},
{app: vm1, expect: false},
{app: naked1, expect: false},
{app: external1, expect: false},
{app: headless1, expect: false},
}
for _, tt := range tests {
t.Run(tt.app.Config().Service, func(t *testing.T) {
if got := match.RegularPod(tt.app); got != tt.expect {
t.Errorf("got %v expected %v", got, tt.expect)
}
})
}
}
func TestNaked(t *testing.T) {
tests := []struct {
app echo.Instance
expect bool
}{
{app: a1, expect: false},
{app: headless1, expect: false},
{app: naked1, expect: true},
{app: external1, expect: true},
}
for _, tt := range tests {
t.Run(tt.app.Config().Service, func(t *testing.T) {
if got := tt.app.Config().IsNaked(); got != tt.expect {
t.Errorf("got %v expected %v", got, tt.expect)
}
})
}
}
var _ echo.Instance = fakeInstance{}
// fakeInstance wraps echo.Config for test-framework internals tests where we don't actually make calls
type fakeInstance echo.Config
func (f fakeInstance) WithWorkloads(wl ...echo.Workload) echo.Instance {
// TODO implement me
panic("implement me")
}
func (f fakeInstance) Instances() echo.Instances {
return echo.Instances{f}
}
func (f fakeInstance) ID() resource.ID {
panic("implement me")
}
func (f fakeInstance) NamespacedName() echo.NamespacedName {
return f.Config().NamespacedName()
}
func (f fakeInstance) PortForName(name string) echo.Port {
return f.Config().Ports.MustForName(name)
}
func (f fakeInstance) Config() echo.Config {
cfg := echo.Config(f)
_ = cfg.FillDefaults(nil)
return cfg
}
func (f fakeInstance) Address() string {
panic("implement me")
}
func (f fakeInstance) Addresses() []string {
panic("implement me")
}
func (f fakeInstance) Workloads() (echo.Workloads, error) {
panic("implement me")
}
func (f fakeInstance) WorkloadsOrFail(test.Failer) echo.Workloads {
panic("implement me")
}
func (f fakeInstance) MustWorkloads() echo.Workloads {
panic("implement me")
}
func (f fakeInstance) Clusters() cluster.Clusters {
panic("implement me")
}
func (f fakeInstance) Call(echo.CallOptions) (echo.CallResult, error) {
panic("implement me")
}
func (f fakeInstance) CallOrFail(test.Failer, echo.CallOptions) echo.CallResult {
panic("implement me")
}
func (f fakeInstance) Restart() error {
panic("implement me")
}