AjayTripathy 6 лет назад
Родитель
Сommit
a9ec99cf87
3 измененных файлов с 52 добавлено и 44 удалено
  1. 1 1
      Dockerfile
  2. 0 28
      test/cluster_test.go
  3. 51 15
      test/historical_pod_test.go

+ 1 - 1
Dockerfile

@@ -22,7 +22,7 @@ RUN set -e ;\
         -ldflags "-X main.gitCommit=${GIT_COMMIT}${GIT_DIRTY}" \
         -o /go/bin/app
 
-FROM alpine:3.9.4
+FROM alpine:3.10.2
 RUN apk add --update --no-cache ca-certificates
 COPY --from=build-env /go/bin/app /go/bin/app
 ADD ./cloud/default.json /models/default.json

+ 0 - 28
test/cluster_test.go

@@ -8,8 +8,6 @@ import (
 	//	"math"
 	//	"net"
 	"net/http"
-	"os"
-	"path/filepath"
 	"strconv"
 
 	//	"testing"
@@ -21,8 +19,6 @@ import (
 
 	//	v1 "k8s.io/api/core/v1"
 	//	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	"k8s.io/client-go/kubernetes"
-	"k8s.io/client-go/tools/clientcmd"
 
 	_ "k8s.io/client-go/plugin/pkg/client/auth"
 
@@ -35,30 +31,6 @@ const apiPrefix = "/api/v1"
 
 const epQuery = apiPrefix + "/query"
 
-func homeDir() string {
-	if h := os.Getenv("HOME"); h != "" {
-		return h
-	}
-	return os.Getenv("USERPROFILE") // windows
-}
-
-func getKubernetesClient() (*kubernetes.Clientset, error) {
-	var kubeconfig string
-
-	if home := homeDir(); home != "" {
-		kubeconfig = filepath.Join(home, ".kube", "config")
-	} else {
-		return nil, fmt.Errorf("Unable to find home directory")
-	}
-	config, err := clientcmd.BuildConfigFromFlags("", kubeconfig)
-	if err != nil {
-		return nil, err
-	}
-
-	return kubernetes.NewForConfig(config)
-
-}
-
 // The integration test assumes a GKE cluster in us-central-1 or an AWS cluster in us-east-2, with the following instance types
 // and storage classes.
 var prices = map[string]float64{

+ 51 - 15
test/historical_pod_test.go

@@ -5,10 +5,13 @@ import (
 	"log"
 	"net"
 	"net/http"
+	"os"
 	"path/filepath"
 	"testing"
 	"time"
 
+	"k8s.io/klog"
+
 	"gotest.tools/assert"
 
 	"github.com/kubecost/cost-model/cloud"
@@ -18,6 +21,8 @@ import (
 	"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
 	"k8s.io/apimachinery/pkg/runtime/schema"
 	"k8s.io/client-go/dynamic"
+	"k8s.io/client-go/kubernetes"
+	"k8s.io/client-go/rest"
 	"k8s.io/client-go/tools/clientcmd"
 
 	prometheusClient "github.com/prometheus/client_golang/api"
@@ -25,23 +30,51 @@ import (
 	_ "k8s.io/client-go/plugin/pkg/client/auth"
 )
 
-func getDynamicKubernetesClient() (dynamic.Interface, error) {
-	var kubeconfig string
+var PrometheusEndpoint string
 
-	if home := homeDir(); home != "" {
-		kubeconfig = filepath.Join(home, ".kube", "config")
-	} else {
-		return nil, fmt.Errorf("Unable to find home directory")
+const PROMETHEUS_SERVER_ENDPOINT = "PROMETHEUS_SERVER_ENDPOINT"
+
+func homeDir() string {
+	if h := os.Getenv("HOME"); h != "" {
+		return h
 	}
-	config, err := clientcmd.BuildConfigFromFlags("", kubeconfig)
+	return os.Getenv("USERPROFILE") // windows
+}
+
+func getKubernetesClient() (*kubernetes.Clientset, error) {
+	var kubeconfig string
+	config, err := rest.InClusterConfig()
 	if err != nil {
-		return nil, err
+
+		if home := homeDir(); home != "" {
+			kubeconfig = filepath.Join(home, ".kube", "config")
+		} else {
+			return nil, fmt.Errorf("Unable to find home directory")
+		}
+		config, err = clientcmd.BuildConfigFromFlags("", kubeconfig)
+		if err != nil {
+			return nil, err
+		}
 	}
+	return kubernetes.NewForConfig(config)
 
+}
+func getDynamicKubernetesClient() (dynamic.Interface, error) {
+	config, err := rest.InClusterConfig()
+	if err != nil {
+		var kubeconfig string
+		if home := homeDir(); home != "" {
+			kubeconfig = filepath.Join(home, ".kube", "config")
+		} else {
+			return nil, fmt.Errorf("Unable to find home directory")
+		}
+		config, err = clientcmd.BuildConfigFromFlags("", kubeconfig)
+		if err != nil {
+			return nil, err
+		}
+	}
 	return dynamic.NewForConfig(config)
-
 }
-
 func TestPodUpDown(t *testing.T) {
 	client, err := getDynamicKubernetesClient()
 	if err != nil {
@@ -59,9 +92,9 @@ func TestPodUpDown(t *testing.T) {
 		}).DialContext,
 		TLSHandshakeTimeout: 10 * time.Second,
 	}
-
+	a := os.Getenv(PROMETHEUS_SERVER_ENDPOINT)
 	pc := prometheusClient.Config{
-		Address:      address,
+		Address:      a,
 		RoundTripper: LongTimeoutRoundTripper,
 	}
 	promCli, err := prometheusClient.NewClient(pc)
@@ -122,15 +155,18 @@ func TestPodUpDown(t *testing.T) {
 	labels["testaggregation"] = "foo"
 	namespace := &v1.Namespace{
 		ObjectMeta: metav1.ObjectMeta{
-			Name:   "test",
+			Name:   "test2",
 			Labels: labels,
 		},
 	}
+	klog.Infof("Creating namespace test2")
 	rclient.CoreV1().Namespaces().Create(namespace)
-	_, err = client.Resource(deploymentRes).Namespace("test").Create(deployment, metav1.CreateOptions{})
+	klog.Infof("Creating deployments in test2")
+	_, err = client.Resource(deploymentRes).Namespace("test2").Create(deployment, metav1.CreateOptions{})
 	if err != nil {
 		panic(err)
 	}
+	klog.Infof("Sleeping 5 minutes to wait for steady state.")
 	time.Sleep(5 * time.Minute)
 
 	qr := `label_replace(label_replace(container_cpu_allocation{container='web',namespace='test'}, "container_name", "$1", "container","(.+)"), "pod_name", "$1", "pod","(.+)")`
@@ -161,7 +197,7 @@ func TestPodUpDown(t *testing.T) {
 	deleteOptions := &metav1.DeleteOptions{
 		PropagationPolicy: &deletePolicy,
 	}
-	if err := client.Resource(deploymentRes).Namespace("test").Delete("demo-deployment", deleteOptions); err != nil {
+	if err := client.Resource(deploymentRes).Namespace("test2").Delete("demo-deployment", deleteOptions); err != nil {
 		panic(err)
 	}