| // 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 |
| } |