blob: ef9af75c83e31442e70d45ca08973946e359ea10 [file]
package cmd
import (
"strings"
"testing"
"time"
"github.com/apache/dubbo-kubernetes/pkg/kube/inject"
"github.com/kdubbo/api/annotation"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
func TestIsInjectedPod(t *testing.T) {
tests := []struct {
name string
pod corev1.Pod
want bool
}{
{
name: "template annotation",
pod: corev1.Pod{
ObjectMeta: metav1.ObjectMeta{
Annotations: map[string]string{
annotation.OrgApacheDubboInjectTemplates.Name: inject.ProxylessGRPCTemplateName,
},
},
},
want: true,
},
{
name: "grpc-inbound container",
pod: corev1.Pod{
Spec: corev1.PodSpec{
Containers: []corev1.Container{{Name: inject.ProxylessGRPCInboundContainerName}},
},
},
want: true,
},
{
name: "proxyless env",
pod: corev1.Pod{
Spec: corev1.PodSpec{
Containers: []corev1.Container{{
Name: "app",
Env: []corev1.EnvVar{{Name: "GRPC_XDS_BOOTSTRAP", Value: inject.ProxylessGRPCBootstrapPath}},
}},
},
},
want: true,
},
{
name: "plain pod",
pod: corev1.Pod{
Spec: corev1.PodSpec{
Containers: []corev1.Container{{Name: "app"}},
},
},
},
}
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
if got := isInjectedPod(test.pod); got != test.want {
t.Fatalf("isInjectedPod() = %v, want %v", got, test.want)
}
})
}
}
func TestPrintInjectedPods(t *testing.T) {
pod := corev1.Pod{
ObjectMeta: metav1.ObjectMeta{
Name: "app-1",
Namespace: "app",
CreationTimestamp: metav1.NewTime(time.Unix(100, 0)),
Annotations: map[string]string{
annotation.OrgApacheDubboInjectTemplates.Name: inject.ProxylessGRPCTemplateName,
},
},
Spec: corev1.PodSpec{
NodeName: "node-a",
Containers: []corev1.Container{{Name: "app"}, {Name: inject.ProxylessGRPCInboundContainerName}},
},
Status: corev1.PodStatus{
Phase: corev1.PodRunning,
PodIP: "10.0.0.7",
ContainerStatuses: []corev1.ContainerStatus{
{Name: "app", Ready: true, RestartCount: 1},
{Name: inject.ProxylessGRPCInboundContainerName, Ready: true},
},
},
}
var out strings.Builder
if err := printInjectedPods(&out, []corev1.Pod{pod}, time.Unix(160, 0)); err != nil {
t.Fatalf("printInjectedPods() returned error: %v", err)
}
got := out.String()
for _, want := range []string{"NAMESPACE", "app-1", "2/2", "Running", "10.0.0.7", inject.ProxylessGRPCTemplateName} {
if !strings.Contains(got, want) {
t.Fatalf("output %q missing %q", got, want)
}
}
}