jiri-test: Add vanadium-vkube-integration-test
Change-Id: I52510307b1d44f66877743e8c765f2006fd87b82
diff --git a/jiri-test/internal/test/run.go b/jiri-test/internal/test/run.go
index d3f8288..69abecf 100644
--- a/jiri-test/internal/test/run.go
+++ b/jiri-test/internal/test/run.go
@@ -152,6 +152,7 @@
 	"vanadium-signup-welcome-1-new":           vanadiumSignupWelcomeStepOneNew,
 	"vanadium-signup-welcome-2-new":           vanadiumSignupWelcomeStepTwoNew,
 	"vanadium-travel-test":                    vanadiumTravelTest,
+	"vanadium-vkube-integration-test":         vanadiumVkubeIntegrationTest,
 	"vanadium-website-deploy":                 vanadiumWebsiteDeploy,
 	"vanadium-website-site":                   vanadiumWebsiteSite,
 	"vanadium-website-tutorials-core":         vanadiumWebsiteTutorialsCore,
diff --git a/jiri-test/internal/test/vkube.go b/jiri-test/internal/test/vkube.go
new file mode 100644
index 0000000..896b1a1
--- /dev/null
+++ b/jiri-test/internal/test/vkube.go
@@ -0,0 +1,54 @@
+// Copyright 2016 The Vanadium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package test
+
+import (
+	"errors"
+	"fmt"
+	"os"
+
+	"v.io/jiri"
+	"v.io/jiri/collect"
+	"v.io/x/devtools/internal/test"
+)
+
+const projectEnvVar = "VKUBE_TEST_PROJECT"
+
+func vanadiumVkubeIntegrationTest(jirix *jiri.X, testName string, opts ...Opt) (_ *test.Result, e error) {
+	project := os.Getenv(projectEnvVar)
+	if project == "" {
+		return nil, newInternalError(fmt.Errorf("project not defined in %s environment variable", projectEnvVar), "Env")
+	}
+	s := jirix.NewSeq()
+	if err := s.Last("gcloud", "projects", "describe", project); err != nil {
+		return nil, newInternalError(errors.New("this test requires gcloud"), err.Error())
+	}
+	if err := s.Last("kubectl", "cluster-info"); err != nil {
+		return nil, newInternalError(errors.New("this test requires kubectl"), err.Error())
+	}
+	if err := s.Last("gsutil", "ls", "-p", project); err != nil {
+		return nil, newInternalError(errors.New("this test requires gsutil"), err.Error())
+	}
+	if err := s.Last("docker", "info"); err != nil {
+		return nil, newInternalError(errors.New("this test requires docker"), err.Error())
+	}
+
+	cleanup, err := initTest(jirix, testName, []string{"v23:base"})
+	if err != nil {
+		return nil, newInternalError(err, "Init")
+	}
+	defer collect.Error(cleanup, &e)
+
+	args := []string{
+		"go", "test", "-v=1", "-run=TestV23Vkube", "-timeout=30m",
+		"v.io/x/ref/services/cluster/vkube",
+		"--v23.tests", "--project=" + project, "--get-credentials=false",
+	}
+	if err := s.Capture(jirix.Stdout(), jirix.Stderr()).Last("jiri", args...); err != nil {
+		return nil, newInternalError(err, err.Error())
+	}
+
+	return &test.Result{Status: test.Passed}, nil
+}