blob: 6d45f52e894121dc6e90beb4a58af625d623ede2 [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 envoy
import (
"reflect"
"testing"
)
import (
"google.golang.org/protobuf/types/known/wrapperspb"
meshconfig "istio.io/api/mesh/v1alpha1"
)
import (
"github.com/apache/dubbo-go-pixiu/pilot/pkg/model"
"github.com/apache/dubbo-go-pixiu/pkg/config/mesh"
)
func TestEnvoyArgs(t *testing.T) {
proxyConfig := (*model.NodeMetaProxyConfig)(mesh.DefaultProxyConfig())
proxyConfig.ClusterName = &meshconfig.ProxyConfig_ServiceCluster{ServiceCluster: "my-cluster"}
proxyConfig.Concurrency = &wrapperspb.Int32Value{Value: 8}
cfg := ProxyConfig{
LogLevel: "trace",
ComponentLogLevel: "misc:error",
NodeIPs: []string{"10.75.2.9", "192.168.11.18"},
BinaryPath: proxyConfig.BinaryPath,
ConfigPath: proxyConfig.ConfigPath,
ConfigCleanup: true,
AdminPort: proxyConfig.ProxyAdminPort,
DrainDuration: proxyConfig.DrainDuration,
ParentShutdownDuration: proxyConfig.ParentShutdownDuration,
Concurrency: 8,
}
test := &envoy{
ProxyConfig: cfg,
extraArgs: []string{"-l", "trace", "--component-log-level", "misc:error"},
}
testProxy := NewProxy(cfg)
if !reflect.DeepEqual(testProxy, test) {
t.Errorf("unexpected struct got\n%v\nwant\n%v", testProxy, test)
}
got := test.args("test.json", 5, "testdata/bootstrap.json")
want := []string{
"-c", "test.json",
"--restart-epoch", "5",
"--drain-time-s", "45",
"--drain-strategy", "immediate",
"--parent-shutdown-time-s", "60",
"--local-address-ip-version", "v4",
"--file-flush-interval-msec", "1000",
"--disable-hot-restart",
"--log-format", "%Y-%m-%dT%T.%fZ\t%l\tenvoy %n\t%v",
"-l", "trace",
"--component-log-level", "misc:error",
"--config-yaml", `{"key": "value"}`,
"--concurrency", "8",
}
if !reflect.DeepEqual(got, want) {
t.Errorf("envoyArgs() => got:\n%v,\nwant:\n%v", got, want)
}
}
func TestSplitComponentLog(t *testing.T) {
cases := []struct {
input string
log string
components []string
}{
{"info", "info", nil},
// A bit odd, but istio logging behaves this way so might as well be consistent
{"info,warn", "warn", nil},
{"info,misc:warn", "info", []string{"misc:warn"}},
{"misc:warn,info", "info", []string{"misc:warn"}},
{"misc:warn,info,upstream:debug", "info", []string{"misc:warn", "upstream:debug"}},
}
for _, tt := range cases {
t.Run(tt.input, func(t *testing.T) {
l, c := splitComponentLog(tt.input)
if l != tt.log {
t.Errorf("expected log level %v, got %v", tt.log, l)
}
if !reflect.DeepEqual(c, tt.components) {
t.Errorf("expected component log level %v, got %v", tt.components, c)
}
})
}
}