blob: fc64e56b2a356a9dc95cf997fcb1bfbaeb4057d9 [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 staticvm
import (
"testing"
)
import (
"github.com/google/go-cmp/cmp"
"gopkg.in/yaml.v3"
)
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"
)
func TestBuild(t *testing.T) {
cfg := cluster.Config{}
if err := yaml.Unmarshal([]byte(`
kind: StaticVM
clusterName: static-vms
primaryClusterName: istio-testing
meta:
deployments:
- service: vm
namespace: echo
instances:
- ip: 172.17.0.4
instanceIP: 10.0.0.1
`), &cfg); err != nil {
t.Fatal(err)
}
got, err := build(cfg, cluster.Topology{})
if err != nil {
t.Fatal(err)
}
if diff := cmp.Diff(got.(*vmcluster).vms, []echo.Config{{
Service: "vm",
Namespace: namespace.Static("echo"),
StaticAddresses: []string{"172.17.0.4:10.0.0.1"},
}}); diff != "" {
t.Fatal(diff)
}
}
func TestVmcluster_CanDeploy(t *testing.T) {
aSvc := "a"
echoNS := namespace.Static("echo")
echoGenNS := namespace.Static("echo-1234")
ips := []string{"1.2.3.4"}
vms := vmcluster{vms: []echo.Config{{
Service: aSvc, Namespace: echoNS,
StaticAddresses: ips,
}}}
for name, tc := range map[string]struct {
given echo.Config
want echo.Config
wantOk bool
}{
"match": {
given: echo.Config{DeployAsVM: true, Service: aSvc, Namespace: echoGenNS, Ports: []echo.Port{{Name: "grpc"}}},
want: echo.Config{DeployAsVM: true, Service: aSvc, Namespace: echoGenNS, Ports: []echo.Port{{Name: "grpc"}}, StaticAddresses: ips},
wantOk: true,
},
"non vm": {
given: echo.Config{Service: aSvc, Namespace: echoGenNS, Ports: []echo.Port{{Name: "grpc"}}},
},
"namespace mismatch": {
given: echo.Config{DeployAsVM: true, Service: aSvc, Namespace: namespace.Static("other"), Ports: []echo.Port{{Name: "grpc"}}},
},
"service mismatch": {
given: echo.Config{DeployAsVM: true, Service: "b", Namespace: echoNS, Ports: []echo.Port{{Name: "grpc"}}},
},
} {
t.Run(name, func(t *testing.T) {
got, ok := vms.CanDeploy(tc.given)
if ok != tc.wantOk {
t.Errorf("got %v but wanted %v", ok, tc.wantOk)
}
if diff := cmp.Diff(tc.want, got); diff != "" {
t.Error(diff)
}
})
}
}