Path: blob/main/components/image-builder-mk3/pkg/orchestrator/monitor_test.go
2500 views
// Copyright (c) 2021 Gitpod GmbH. All rights reserved.1// Licensed under the GNU Affero General Public License (AGPL).2// See License.AGPL.txt in the project root for license information.34package orchestrator56import (7"testing"8"time"910"github.com/google/go-cmp/cmp"11"github.com/google/go-cmp/cmp/cmpopts"12"google.golang.org/protobuf/types/known/timestamppb"1314"github.com/gitpod-io/gitpod/image-builder/api"15wsmanapi "github.com/gitpod-io/gitpod/ws-manager/api"16)1718func TestExtractBuildResponse(t *testing.T) {19const (20buildID = "build-id"21ref = "ref"22baseref = "base-ref"23startedAt int64 = 1234524url = "https://some-url.some-domain.com"25ownerToken = "super-secret-owner-token"26)27tests := []struct {28Name string29Mod func(*wsmanapi.WorkspaceStatus)30Expectation func(*api.BuildResponse)31}{32{33Name: "running",34Mod: func(ws *wsmanapi.WorkspaceStatus) {},35Expectation: func(br *api.BuildResponse) {},36},37{38Name: "done",39Mod: func(ws *wsmanapi.WorkspaceStatus) {40ws.Phase = wsmanapi.WorkspacePhase_STOPPING41},42Expectation: func(br *api.BuildResponse) {43br.Status = api.BuildStatus_done_success44br.Info.Status = br.Status45},46},47{48Name: "done stopped",49Mod: func(ws *wsmanapi.WorkspaceStatus) {50ws.Phase = wsmanapi.WorkspacePhase_STOPPED51},52Expectation: func(br *api.BuildResponse) {53br.Status = api.BuildStatus_done_success54br.Info.Status = br.Status55},56},57{58Name: "done task failed",59Mod: func(ws *wsmanapi.WorkspaceStatus) {60ws.Phase = wsmanapi.WorkspacePhase_STOPPING61ws.Conditions.HeadlessTaskFailed = "image build failed"62},63Expectation: func(br *api.BuildResponse) {64br.Status = api.BuildStatus_done_failure65br.Info.Status = br.Status66br.Message = "image build failed"67},68},69{70Name: "done workspace failed",71Mod: func(ws *wsmanapi.WorkspaceStatus) {72ws.Phase = wsmanapi.WorkspacePhase_STOPPING73ws.Conditions.Failed = "image build failed"74},75Expectation: func(br *api.BuildResponse) {76br.Status = api.BuildStatus_done_failure77br.Info.Status = br.Status78br.Message = "image build failed"79},80},81}8283for _, test := range tests {84t.Run(test.Name, func(t *testing.T) {85status := &wsmanapi.WorkspaceStatus{86Id: buildID,87Metadata: &wsmanapi.WorkspaceMetadata{88MetaId: buildID,89Annotations: map[string]string{90annotationRef: ref,91annotationBaseRef: baseref,92},93StartedAt: timestamppb.New(time.Unix(startedAt, 0)),94},95Conditions: &wsmanapi.WorkspaceConditions{},96Phase: wsmanapi.WorkspacePhase_RUNNING,97Auth: &wsmanapi.WorkspaceAuthentication{98OwnerToken: ownerToken,99},100Spec: &wsmanapi.WorkspaceSpec{101Url: url,102},103}104test.Mod(status)105act := extractBuildResponse(status)106107exp := &api.BuildResponse{108Ref: ref,109BaseRef: baseref,110Status: api.BuildStatus_running,111Info: &api.BuildInfo{112BuildId: buildID,113Ref: ref,114BaseRef: baseref,115Status: api.BuildStatus_running,116StartedAt: startedAt,117LogInfo: &api.LogInfo{118Url: url,119Headers: map[string]string{120"x-gitpod-owner-token": status.Auth.OwnerToken,121},122},123},124}125test.Expectation(exp)126127if diff := cmp.Diff(exp, act, cmpopts.IgnoreUnexported(api.BuildResponse{}, api.BuildInfo{}, api.LogInfo{})); diff != "" {128t.Errorf("extractBuildResponse() mismatch (-want +got):\n%s", diff)129}130})131}132}133134135