Files
fx-serverless/infra/k8s/service_pod_test.go

103 lines
2.3 KiB
Go

package k8s
import (
"os"
"reflect"
"testing"
"github.com/metrue/fx/types"
)
func TestK8S(t *testing.T) {
namespace := "default"
// TODO image is ready on hub.docker.com
image := "metrue/kube-hello"
bindings := []types.PortBinding{
types.PortBinding{
ServiceBindingPort: 80,
ContainerExposePort: 3000,
},
types.PortBinding{
ServiceBindingPort: 443,
ContainerExposePort: 3000,
},
}
podName := "test-fx-pod"
kubeconfig := os.Getenv("KUBECONFIG")
if kubeconfig == "" {
t.Skip("skip test since no KUBECONFIG given in environment variable")
}
k8s, err := Create("")
if err != nil {
t.Fatal(err)
}
labels := map[string]string{
"fx-app": "fx-app",
}
newPod, err := k8s.CreatePod(namespace, podName, image, labels)
if err != nil {
t.Fatal(err)
}
if newPod.Name != podName {
t.Fatalf("should get %s but got %s", podName, newPod.Name)
}
podList, err := k8s.ListPods()
if err != nil {
t.Fatal(err)
}
if len(podList.Items) <= 0 {
t.Fatal("pod number should > 0")
}
pod := podList.Items[0]
p, err := k8s.GetPod("default", pod.Name)
if err != nil {
t.Fatal(err)
}
if p.Name != pod.Name {
t.Fatalf("should get %s but got %s", pod.Name, p.Name)
}
serviceName := podName + "-svc"
if _, err := k8s.GetService(namespace, serviceName); err == nil {
t.Fatalf("should get no service name %s", serviceName)
}
svc, err := k8s.CreateService(namespace, serviceName, "NodePort", bindings, labels)
if err != nil {
t.Fatal(err)
}
if svc.Name != serviceName {
t.Fatalf("should get %s but got %s", serviceName, svc.Name)
}
svc, err = k8s.GetService(namespace, serviceName)
if err != nil {
t.Fatal(err)
}
if svc.Name != serviceName {
t.Fatalf("should get %s but got %v", serviceName, svc.Name)
}
selector := map[string]string{"hello": "world"}
svc, err = k8s.UpdateService(namespace, serviceName, "NodePort", bindings, selector)
if err != nil {
t.Fatal(err)
}
if svc.Name != serviceName {
t.Fatalf("should get %s but got %v", serviceName, svc.Name)
}
if !reflect.DeepEqual(svc.Spec.Selector, selector) {
t.Fatalf("should get %v but got %v", selector, svc.Spec.Selector)
}
// TODO check service status
if err := k8s.DeleteService(namespace, serviceName); err != nil {
t.Fatal(err)
}
if err := k8s.DeletePod(namespace, podName); err != nil {
t.Fatal(err)
}
}