Files
fx-serverless/deploy/kubernetes/service_pod_test.go
Minghe 047fac2a0a Docker image build in Cluster (#327)
* * image build in cluster now
  use InitContainer to do the image building inside pods, which invoke
  docker again node's docker daemon
* create a docker build image tool fx/contrib/docker_packer
* clean up no need env in GitHub action workflow
* bump version
2019-10-16 23:37:52 +08:00

103 lines
2.3 KiB
Go

package kubernetes
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)
}
}