Skip to content

Commit

Permalink
Add e2e visualization tests (#1981)
Browse files Browse the repository at this point in the history
* Created visualization_api_test.go

* Updated BUILD.bazel files

* Removed clean_up from e2e test

* Revert "Removed clean_up from e2e test"

This reverts commit 82fd4f5.

* Update e2e tests to build visualizationserver and viewer-crd

* Fix bug where wrong image is set

* Fixed incorrect image names

* Fixed additional instance of incorrect image names
  • Loading branch information
ajchili authored and k8s-ci-robot committed Aug 30, 2019
1 parent dbb0544 commit 41b394b
Show file tree
Hide file tree
Showing 8 changed files with 176 additions and 3 deletions.
5 changes: 5 additions & 0 deletions backend/src/common/client/api_server/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ go_library(
"run_client.go",
"run_client_fake.go",
"util.go",
"visualization_client.go",
"visualization_client_fake.go",
],
importpath = "github.com/kubeflow/pipelines/backend/src/common/client/api_server",
visibility = ["//visibility:public"],
Expand All @@ -33,6 +35,9 @@ go_library(
"//backend/api/go_http_client/run_client:go_default_library",
"//backend/api/go_http_client/run_client/run_service:go_default_library",
"//backend/api/go_http_client/run_model:go_default_library",
"//backend/api/go_http_client/visualization_client:go_default_library",
"//backend/api/go_http_client/visualization_client/visualization_service:go_default_library",
"//backend/api/go_http_client/visualization_model:go_default_library",
"//backend/src/common/util:go_default_library",
"@com_github_argoproj_argo//pkg/apis/workflow/v1alpha1:go_default_library",
"@com_github_ghodss_yaml//:go_default_library",
Expand Down
62 changes: 62 additions & 0 deletions backend/src/common/client/api_server/visualization_client.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
package api_server

import (
"fmt"

"github.com/go-openapi/strfmt"
apiclient "github.com/kubeflow/pipelines/backend/api/go_http_client/visualization_client"
params "github.com/kubeflow/pipelines/backend/api/go_http_client/visualization_client/visualization_service"
model "github.com/kubeflow/pipelines/backend/api/go_http_client/visualization_model"
"github.com/kubeflow/pipelines/backend/src/common/util"
"golang.org/x/net/context"
_ "k8s.io/client-go/plugin/pkg/client/auth/gcp"
"k8s.io/client-go/tools/clientcmd"
)

type VisualizationInterface interface {
Create(params *params.CreateVisualizationParams) (*model.APIVisualization, error)
}

type VisualizationClient struct {
apiClient *apiclient.Visualization
}

func NewVisualizationClient(clientConfig clientcmd.ClientConfig, debug bool) (
*VisualizationClient, error) {

runtime, err := NewHTTPRuntime(clientConfig, debug)
if err != nil {
return nil, err
}

apiClient := apiclient.New(runtime, strfmt.Default)

// Creating upload client
return &VisualizationClient{
apiClient: apiClient,
}, nil
}

func (c *VisualizationClient) Create(parameters *params.CreateVisualizationParams) (*model.APIVisualization,
error) {
// Create context with timeout
ctx, cancel := context.WithTimeout(context.Background(), apiServerDefaultTimeout)
defer cancel()

// Make service call
parameters.Context = ctx
response, err := c.apiClient.VisualizationService.CreateVisualization(parameters, PassThroughAuth)
if err != nil {
if defaultError, ok := err.(*params.CreateVisualizationDefault); ok {
err = CreateErrorFromAPIStatus(defaultError.Payload.Error, defaultError.Payload.Code)
} else {
err = CreateErrorCouldNotRecoverAPIStatus(err)
}

return nil, util.NewUserError(err,
fmt.Sprintf("Failed to create visualizaiton. Params: '%+v'. Body: '%+v'", parameters, parameters.Body),
fmt.Sprintf("Failed to create visualization '%v'", parameters.Body.Type))
}

return response.Payload, nil
}
31 changes: 31 additions & 0 deletions backend/src/common/client/api_server/visualization_client_fake.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package api_server

import (
"encoding/json"
"fmt"
params "github.com/kubeflow/pipelines/backend/api/go_http_client/visualization_client/visualization_service"
model "github.com/kubeflow/pipelines/backend/api/go_http_client/visualization_model"
)

type VisualizationArguments struct {
fail bool
}

type VisualizationClientFake struct{}

func NewVisualizationClientFake() *VisualizationClientFake {
return &VisualizationClientFake{}
}

func (c *VisualizationClientFake) Create(params *params.CreateVisualizationParams) (
*model.APIVisualization, error) {
var arguments VisualizationArguments
err := json.Unmarshal([]byte(params.Body.Arguments), &arguments)
if err != nil {
return nil, err
}
if arguments.fail {
return nil, fmt.Errorf(ClientErrorString)
}
return params.Body, nil
}
3 changes: 3 additions & 0 deletions backend/test/integration/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ go_test(
"job_api_test.go",
"pipeline_api_test.go",
"run_api_test.go",
"visualization_api_test.go",
],
embed = [":go_default_library"],
deps = [
Expand All @@ -20,6 +21,8 @@ go_test(
"//backend/api/go_http_client/pipeline_upload_client/pipeline_upload_service:go_default_library",
"//backend/api/go_http_client/run_client/run_service:go_default_library",
"//backend/api/go_http_client/run_model:go_default_library",
"//backend/api/go_http_client/visualization_client/visualization_service:go_default_library",
"//backend/api/go_http_client/visualization_model:go_default_library",
"//backend/src/common/client/api_server:go_default_library",
"//backend/src/common/util:go_default_library",
"//backend/test:go_default_library",
Expand Down
57 changes: 57 additions & 0 deletions backend/test/integration/visualization_api_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package integration

import (
"github.com/stretchr/testify/assert"
"testing"

"github.com/golang/glog"
params "github.com/kubeflow/pipelines/backend/api/go_http_client/visualization_client/visualization_service"
"github.com/kubeflow/pipelines/backend/api/go_http_client/visualization_model"
"github.com/kubeflow/pipelines/backend/src/common/client/api_server"
"github.com/kubeflow/pipelines/backend/test"
"github.com/stretchr/testify/suite"
)

type VisualizationApiTest struct {
suite.Suite
namespace string
visualizationClient *api_server.VisualizationClient
}

// Check the namespace have ML job installed and ready
func (s *VisualizationApiTest) SetupTest() {
if !*runIntegrationTests {
s.T().SkipNow()
return
}

err := test.WaitForReady(*namespace, *initializeTimeout)
if err != nil {
glog.Exitf("Failed to initialize test. Error: %v", err)
}
s.namespace = *namespace
clientConfig := test.GetClientConfig(*namespace)
s.visualizationClient, err = api_server.NewVisualizationClient(clientConfig, false)
if err != nil {
glog.Exitf("Failed to get experiment client. Error: %v", err)
}
}

func (s *VisualizationApiTest) TestVisualizationAPI() {
t := s.T()

/* ---------- Generate custom visualization --------- */
visualization := &visualization_model.APIVisualization{
Arguments: `{"code": ["print(2)"]}`,
Type: visualization_model.APIVisualizationTypeCUSTOM,
}
customVisualization, err := s.visualizationClient.Create(&params.CreateVisualizationParams{
Body: visualization,
})
assert.Nil(t, err)
assert.NotNil(t, customVisualization.HTML)
}

func TestVisualizationAPI(t *testing.T) {
suite.Run(t, new(VisualizationApiTest))
}
9 changes: 6 additions & 3 deletions test/build-images.sh
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,13 @@ if
echo "$BUILT_IMAGES" | grep api-server && \
echo "$BUILT_IMAGES" | grep frontend && \
echo "$BUILT_IMAGES" | grep scheduledworkflow && \
echo "$BUILT_IMAGES" | grep persistenceagent;
echo "$BUILT_IMAGES" | grep persistenceagent && \
echo "$BUILT_IMAGES" | grep viewer-crd-controller && \
echo "$BUILT_IMAGES" | grep visualization-server;
then
echo "docker images for api-server, frontend, scheduledworkflow and \
persistenceagent are already built in ${GCR_IMAGE_BASE_DIR}."
echo "docker images for api-server, frontend, scheduledworkflow, \
persistenceagent, viewer-crd-controller, and visualization-server \
are already built in ${GCR_IMAGE_BASE_DIR}."
else
echo "submitting cloud build to build docker images for commit ${PULL_PULL_SHA}..."
IMAGES_BUILDING=true
Expand Down
10 changes: 10 additions & 0 deletions test/cloudbuild/batch_build.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,20 @@ steps:
args:
["build", "-t", "$_GCR_BASE/frontend", "-f", "frontend/Dockerfile", "."]
waitFor: ["-"]
- name: "gcr.io/cloud-builders/docker"
args:
["build", "-t", "$_GCR_BASE/viewer-crd-controller", "-f", "backend/Dockerfile.viewercontroller", "."]
waitFor: ["-"]
- name: "gcr.io/cloud-builders/docker"
args:
["build", "-t", "$_GCR_BASE/visualization-server", "-f", "backend/Dockerfile.visualization", "."]
waitFor: ["-"]
options:
machineType: N1_HIGHCPU_8 # use a fast machine to build because there a lot of work
images:
- "$_GCR_BASE/frontend"
- "$_GCR_BASE/scheduledworkflow"
- "$_GCR_BASE/persistenceagent"
- "$_GCR_BASE/viewer-crd-controller"
- "$_GCR_BASE/visualization-server"
timeout: 1800s # 30min
2 changes: 2 additions & 0 deletions test/deploy-pipeline-lite.sh
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@ kustomize edit set image gcr.io/ml-pipeline/api-server=${GCR_IMAGE_BASE_DIR}/api
kustomize edit set image gcr.io/ml-pipeline/persistenceagent=${GCR_IMAGE_BASE_DIR}/persistenceagent:${GCR_IMAGE_TAG}
kustomize edit set image gcr.io/ml-pipeline/scheduledworkflow=${GCR_IMAGE_BASE_DIR}/scheduledworkflow:${GCR_IMAGE_TAG}
kustomize edit set image gcr.io/ml-pipeline/frontend=${GCR_IMAGE_BASE_DIR}/frontend:${GCR_IMAGE_TAG}
kustomize edit set image gcr.io/ml-pipeline/viewer-crd-controller=${GCR_IMAGE_BASE_DIR}/viewer-crd-controller:${GCR_IMAGE_TAG}
kustomize edit set image gcr.io/ml-pipeline/visualization-server=${GCR_IMAGE_BASE_DIR}/visualization-server:${GCR_IMAGE_TAG}
cat kustomization.yaml

kustomize build . | kubectl apply -f -
Expand Down

0 comments on commit 41b394b

Please sign in to comment.