github.com/iter8-tools/iter8@v1.1.2/driver/kubedriver_test.go (about) 1 package driver 2 3 import ( 4 "context" 5 "encoding/json" 6 "fmt" 7 "io" 8 "net/http" 9 "os" 10 "testing" 11 12 "fortio.org/fortio/fhttp" 13 "github.com/iter8-tools/iter8/base" 14 "github.com/stretchr/testify/assert" 15 "helm.sh/helm/v3/pkg/cli" 16 corev1 "k8s.io/api/core/v1" 17 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 18 ) 19 20 const ( 21 myName = "myName" 22 myNamespace = "myNamespace" 23 ) 24 25 func TestKubeRun(t *testing.T) { 26 // define METRICS_SERVER_URL 27 metricsServerURL := "http://iter8.default:8080" 28 err := os.Setenv(base.MetricsServerURL, metricsServerURL) 29 assert.NoError(t, err) 30 31 // create and configure HTTP endpoint for testing 32 mux, addr := fhttp.DynamicHTTPServer(false) 33 url := fmt.Sprintf("http://127.0.0.1:%d/get", addr.Port) 34 var verifyHandlerCalled bool 35 mux.HandleFunc("/get", base.GetTrackingHandler(&verifyHandlerCalled)) 36 37 // mock metrics server 38 base.StartHTTPMock(t) 39 metricsServerCalled := false 40 base.MockMetricsServer(base.MockMetricsServerInput{ 41 MetricsServerURL: metricsServerURL, 42 ExperimentResultCallback: func(req *http.Request) { 43 metricsServerCalled = true 44 45 // check query parameters 46 assert.Equal(t, myName, req.URL.Query().Get("test")) 47 assert.Equal(t, myNamespace, req.URL.Query().Get("namespace")) 48 49 // check payload 50 body, err := io.ReadAll(req.Body) 51 assert.NoError(t, err) 52 assert.NotNil(t, body) 53 54 // check payload content 55 bodyExperimentResult := base.ExperimentResult{} 56 err = json.Unmarshal(body, &bodyExperimentResult) 57 assert.NoError(t, err) 58 assert.NotNil(t, body) 59 60 // no experiment failure 61 assert.False(t, bodyExperimentResult.Failure) 62 }, 63 }) 64 65 _ = os.Chdir(t.TempDir()) 66 67 // create experiment.yaml 68 base.CreateExperimentYaml(t, base.CompletePath("../testdata/drivertests", "experiment.tpl"), url, base.ExperimentFile) 69 70 kd := NewFakeKubeDriver(cli.New()) 71 kd.revision = 1 72 73 byteArray, _ := os.ReadFile(base.ExperimentFile) 74 _, _ = kd.Clientset.CoreV1().Secrets("default").Create(context.TODO(), &corev1.Secret{ 75 ObjectMeta: metav1.ObjectMeta{ 76 Name: "default", 77 Namespace: "default", 78 }, 79 StringData: map[string]string{base.ExperimentFile: string(byteArray)}, 80 }, metav1.CreateOptions{}) 81 82 err = base.RunExperiment(kd) 83 assert.NoError(t, err) 84 // sanity check -- handler was called 85 assert.True(t, verifyHandlerCalled) 86 assert.True(t, metricsServerCalled) 87 }