103 lines
2.3 KiB
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)
|
|
}
|
|
}
|