Skip to content
This repository was archived by the owner on Mar 21, 2025. It is now read-only.

Commit 51d13ac

Browse files
author
Michael Sauter
committed
Check Bitbucket build status in E2E test
Closes #187.
1 parent c41cb49 commit 51d13ac

File tree

9 files changed

+51
-45
lines changed

9 files changed

+51
-45
lines changed

pkg/bitbucket/branches.go

+5-5
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,11 @@ type Branch struct {
1616
}
1717

1818
type BranchPage struct {
19-
Size int `json:"size"`
20-
Limit int `json:"limit"`
21-
IsLastPage bool `json:"isLastPage"`
22-
Values []Branch
23-
Start int `json:"start"`
19+
Size int `json:"size"`
20+
Limit int `json:"limit"`
21+
IsLastPage bool `json:"isLastPage"`
22+
Values []Branch `json:"values"`
23+
Start int `json:"start"`
2424
}
2525

2626
type BranchListParams struct {

pkg/bitbucket/build_status.go

+12-11
Original file line numberDiff line numberDiff line change
@@ -41,25 +41,26 @@ func (c *Client) BuildStatusCreate(gitCommit string, payload BuildStatusCreatePa
4141
return nil
4242
}
4343

44-
type BuildStatusPage struct {
45-
Size int `json:"size"`
46-
Limit int `json:"limit"`
47-
Islastpage bool `json:"isLastPage"`
48-
BuildStatus []BuildStatus `json:"values"`
49-
Start int `json:"start"`
50-
}
5144
type BuildStatus struct {
5245
State string `json:"state"`
5346
Key string `json:"key"`
5447
Name string `json:"name"`
5548
URL string `json:"url"`
5649
Description string `json:"description"`
57-
Dateadded int64 `json:"dateAdded"`
50+
DateAdded int64 `json:"dateAdded"`
51+
}
52+
53+
type BuildStatusPage struct {
54+
Size int `json:"size"`
55+
Limit int `json:"limit"`
56+
IsLastPage bool `json:"isLastPage"`
57+
Values []BuildStatus `json:"values"` // newest build status appears first
58+
Start int `json:"start"`
5859
}
5960

60-
// BuildStatusGet gets the build statuses associated with a commit.
61+
// BuildStatusList gets the build statuses associated with a commit.
6162
// https://docs.atlassian.com/bitbucket-server/rest/7.13.0/bitbucket-build-rest.html#idp8
62-
func (c *Client) BuildStatusGet(gitCommit string) (*BuildStatus, error) {
63+
func (c *Client) BuildStatusList(gitCommit string) (*BuildStatusPage, error) {
6364
urlPath := fmt.Sprintf("/rest/build-status/1.0/commits/%s", gitCommit)
6465
statusCode, response, err := c.get(urlPath)
6566
if err != nil {
@@ -75,7 +76,7 @@ func (c *Client) BuildStatusGet(gitCommit string) (*BuildStatus, error) {
7576
"could not unmarshal response: %w. status code: %d, body: %s", err, statusCode, string(response),
7677
)
7778
}
78-
return &BuildStatusPage.BuildStatus[0], nil // return the newest by default
79+
return &BuildStatusPage, nil
7980
case 401:
8081
return nil, fmt.Errorf("you are not permitted to get the build status of git commit %s", gitCommit)
8182
default:

pkg/bitbucket/commits.go

+7-7
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,13 @@ type Commit struct {
2727
}
2828

2929
type CommitPage struct {
30-
Size int `json:"size"`
31-
Limit int `json:"limit"`
32-
IsLastPage bool `json:"isLastPage"`
33-
Values []Commit
34-
Start int `json:"start"`
35-
AuthorCount int `json:"authorCount"`
36-
TotalCount int `json:"totalCount"`
30+
Size int `json:"size"`
31+
Limit int `json:"limit"`
32+
IsLastPage bool `json:"isLastPage"`
33+
Values []Commit `json:"values"`
34+
Start int `json:"start"`
35+
AuthorCount int `json:"authorCount"`
36+
TotalCount int `json:"totalCount"`
3737
}
3838

3939
type PullRequestPage struct {

pkg/bitbucket/tags.go

+5-5
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,11 @@ type Tag struct {
1616
}
1717

1818
type TagPage struct {
19-
Size int `json:"size"`
20-
Limit int `json:"limit"`
21-
IsLastPage bool `json:"isLastPage"`
22-
Values []Tag
23-
Start int `json:"start"`
19+
Size int `json:"size"`
20+
Limit int `json:"limit"`
21+
IsLastPage bool `json:"isLastPage"`
22+
Values []Tag `json:"values"`
23+
Start int `json:"start"`
2424
}
2525

2626
type TagCreatePayload struct {

pkg/tasktesting/bitbucket.go

+15
Original file line numberDiff line numberDiff line change
@@ -33,3 +33,18 @@ func BitbucketClientOrFatal(t *testing.T, c *kclient.Clientset, namespace string
3333
})
3434
return bitbucketClient
3535
}
36+
37+
func CheckBitbucketBuildStatus(t *testing.T, c *bitbucket.Client, gitCommit, wantBuildStatus string) {
38+
buildStatusPage, err := c.BuildStatusList(gitCommit)
39+
if err != nil {
40+
t.Fatal(err)
41+
}
42+
if buildStatusPage == nil || len(buildStatusPage.Values) == 0 {
43+
t.Fatal("no build status found")
44+
}
45+
buildStatus := buildStatusPage.Values[0]
46+
if buildStatus.State != wantBuildStatus {
47+
t.Fatalf("Got: %s, want: %s", buildStatus.State, wantBuildStatus)
48+
}
49+
50+
}

test/e2e/e2e_test.go

+2
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,8 @@ func TestWebhookInterceptor(t *testing.T) {
148148
t.Log(logs)
149149
t.Fatal()
150150
}
151+
152+
tasktesting.CheckBitbucketBuildStatus(t, bitbucketClient, odsContext.GitCommitSHA, bitbucket.BuildStatusSuccessful)
151153
}
152154

153155
func waitForServiceToBeReady(t *testing.T, clientset *k8s.Clientset, ns, name string, timeout time.Duration) error {

test/tasks/common_test.go

-12
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import (
1010
"time"
1111

1212
"github.com/opendevstack/pipeline/internal/kubernetes"
13-
"github.com/opendevstack/pipeline/pkg/bitbucket"
1413
"github.com/opendevstack/pipeline/pkg/config"
1514
"github.com/opendevstack/pipeline/pkg/pipelinectxt"
1615
"github.com/opendevstack/pipeline/pkg/sonar"
@@ -177,14 +176,3 @@ func createODSYML(wsDir string, o *config.ODS) error {
177176
filename := filepath.Join(wsDir, "ods.yaml")
178177
return ioutil.WriteFile(filename, y, 0644)
179178
}
180-
181-
func checkBuildStatus(t *testing.T, c *bitbucket.Client, gitCommit, wantBuildStatus string) {
182-
buildStatus, err := c.BuildStatusGet(gitCommit)
183-
if err != nil {
184-
t.Fatal(err)
185-
}
186-
if buildStatus.State != wantBuildStatus {
187-
t.Fatalf("Got: %s, want: %s", buildStatus.State, wantBuildStatus)
188-
}
189-
190-
}

test/tasks/ods-finish_test.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ func TestTaskODSFinish(t *testing.T) {
3232
WantRunSuccess: true,
3333
PostRunFunc: func(t *testing.T, ctxt *tasktesting.TaskRunContext) {
3434
bitbucketClient := tasktesting.BitbucketClientOrFatal(t, ctxt.Clients.KubernetesClientSet, ctxt.Namespace)
35-
checkBuildStatus(t, bitbucketClient, ctxt.ODS.GitCommitSHA, bitbucket.BuildStatusFailed)
35+
tasktesting.CheckBitbucketBuildStatus(t, bitbucketClient, ctxt.ODS.GitCommitSHA, bitbucket.BuildStatusFailed)
3636
},
3737
},
3838
"set bitbucket build status to successful and upload artifacts to temporary Nexus repository": {
@@ -50,7 +50,7 @@ func TestTaskODSFinish(t *testing.T) {
5050
WantRunSuccess: true,
5151
PostRunFunc: func(t *testing.T, ctxt *tasktesting.TaskRunContext) {
5252
bitbucketClient := tasktesting.BitbucketClientOrFatal(t, ctxt.Clients.KubernetesClientSet, ctxt.Namespace)
53-
checkBuildStatus(t, bitbucketClient, ctxt.ODS.GitCommitSHA, bitbucket.BuildStatusSuccessful)
53+
tasktesting.CheckBitbucketBuildStatus(t, bitbucketClient, ctxt.ODS.GitCommitSHA, bitbucket.BuildStatusSuccessful)
5454
checkArtifactsAreInNexus(t, ctxt, nexus.TemporaryRepositoryDefault)
5555
},
5656
},
@@ -73,7 +73,7 @@ func TestTaskODSFinish(t *testing.T) {
7373
WantRunSuccess: true,
7474
PostRunFunc: func(t *testing.T, ctxt *tasktesting.TaskRunContext) {
7575
bitbucketClient := tasktesting.BitbucketClientOrFatal(t, ctxt.Clients.KubernetesClientSet, ctxt.Namespace)
76-
checkBuildStatus(t, bitbucketClient, ctxt.ODS.GitCommitSHA, bitbucket.BuildStatusSuccessful)
76+
tasktesting.CheckBitbucketBuildStatus(t, bitbucketClient, ctxt.ODS.GitCommitSHA, bitbucket.BuildStatusSuccessful)
7777
checkArtifactsAreInNexus(t, ctxt, nexus.PermanentRepositoryDefault)
7878
},
7979
},

test/tasks/ods-start_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ func TestTaskODSStart(t *testing.T) {
5757
checkODSContext(t, wsDir, ctxt.ODS)
5858

5959
bitbucketClient := tasktesting.BitbucketClientOrFatal(t, ctxt.Clients.KubernetesClientSet, ctxt.Namespace)
60-
checkBuildStatus(t, bitbucketClient, ctxt.ODS.GitCommitSHA, bitbucket.BuildStatusInProgress)
60+
tasktesting.CheckBitbucketBuildStatus(t, bitbucketClient, ctxt.ODS.GitCommitSHA, bitbucket.BuildStatusInProgress)
6161

6262
downloadedArtifact := filepath.Join(wsDir, pipelinectxt.PipelineRunsPath, "foo-zh9gt0.json")
6363
if _, err := os.Stat(downloadedArtifact); os.IsNotExist(err) {
@@ -142,7 +142,7 @@ func TestTaskODSStart(t *testing.T) {
142142
checkFileContent(t, destinationArtifactsBaseDir, xUnitFileSource, xUnitContent)
143143

144144
bitbucketClient := tasktesting.BitbucketClientOrFatal(t, ctxt.Clients.KubernetesClientSet, ctxt.Namespace)
145-
checkBuildStatus(t, bitbucketClient, ctxt.ODS.GitCommitSHA, bitbucket.BuildStatusInProgress)
145+
tasktesting.CheckBitbucketBuildStatus(t, bitbucketClient, ctxt.ODS.GitCommitSHA, bitbucket.BuildStatusInProgress)
146146

147147
},
148148
},

0 commit comments

Comments
 (0)