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

Commit 731e650

Browse files
author
Michael Sauter
committed
Check Bitbucket build status in E2E test
Closes #187.
1 parent 7f96ec9 commit 731e650

File tree

9 files changed

+53
-45
lines changed

9 files changed

+53
-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

+4
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,10 @@ func TestWebhookInterceptor(t *testing.T) {
148148
t.Log(logs)
149149
t.Fatal()
150150
}
151+
t.Log("Pipeline run succeeded.")
152+
t.Log("Sleeping for 2s to make it work - unsure why needed ...")
153+
time.Sleep(2 * time.Second)
154+
tasktesting.CheckBitbucketBuildStatus(t, bitbucketClient, odsContext.GitCommitSHA, bitbucket.BuildStatusSuccessful)
151155
}
152156

153157
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
@@ -11,7 +11,6 @@ import (
1111
"time"
1212

1313
"github.com/opendevstack/pipeline/internal/kubernetes"
14-
"github.com/opendevstack/pipeline/pkg/bitbucket"
1514
"github.com/opendevstack/pipeline/pkg/config"
1615
"github.com/opendevstack/pipeline/pkg/pipelinectxt"
1716
"github.com/opendevstack/pipeline/pkg/sonar"
@@ -184,14 +183,3 @@ func createODSYML(wsDir string, o *config.ODS) error {
184183
filename := filepath.Join(wsDir, "ods.yaml")
185184
return ioutil.WriteFile(filename, y, 0644)
186185
}
187-
188-
func checkBuildStatus(t *testing.T, c *bitbucket.Client, gitCommit, wantBuildStatus string) {
189-
buildStatus, err := c.BuildStatusGet(gitCommit)
190-
if err != nil {
191-
t.Fatal(err)
192-
}
193-
if buildStatus.State != wantBuildStatus {
194-
t.Fatalf("Got: %s, want: %s", buildStatus.State, wantBuildStatus)
195-
}
196-
197-
}

test/tasks/ods-finish_test.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ func TestTaskODSFinish(t *testing.T) {
3434
WantRunSuccess: true,
3535
PostRunFunc: func(t *testing.T, ctxt *tasktesting.TaskRunContext) {
3636
bitbucketClient := tasktesting.BitbucketClientOrFatal(t, ctxt.Clients.KubernetesClientSet, ctxt.Namespace)
37-
checkBuildStatus(t, bitbucketClient, ctxt.ODS.GitCommitSHA, bitbucket.BuildStatusFailed)
37+
tasktesting.CheckBitbucketBuildStatus(t, bitbucketClient, ctxt.ODS.GitCommitSHA, bitbucket.BuildStatusFailed)
3838
},
3939
},
4040
"set bitbucket build status to successful and upload artifacts to temporary Nexus repository": {
@@ -83,7 +83,7 @@ func TestTaskODSFinish(t *testing.T) {
8383
WantRunSuccess: true,
8484
PostRunFunc: func(t *testing.T, ctxt *tasktesting.TaskRunContext) {
8585
bitbucketClient := tasktesting.BitbucketClientOrFatal(t, ctxt.Clients.KubernetesClientSet, ctxt.Namespace)
86-
checkBuildStatus(t, bitbucketClient, ctxt.ODS.GitCommitSHA, bitbucket.BuildStatusSuccessful)
86+
tasktesting.CheckBitbucketBuildStatus(t, bitbucketClient, ctxt.ODS.GitCommitSHA, bitbucket.BuildStatusSuccessful)
8787
checkArtifactsAreInNexus(t, ctxt, nexus.TemporaryRepositoryDefault)
8888

8989
wantLogMsg := "Artifact coverage.out is already present in Nexus repository"
@@ -111,7 +111,7 @@ func TestTaskODSFinish(t *testing.T) {
111111
WantRunSuccess: true,
112112
PostRunFunc: func(t *testing.T, ctxt *tasktesting.TaskRunContext) {
113113
bitbucketClient := tasktesting.BitbucketClientOrFatal(t, ctxt.Clients.KubernetesClientSet, ctxt.Namespace)
114-
checkBuildStatus(t, bitbucketClient, ctxt.ODS.GitCommitSHA, bitbucket.BuildStatusSuccessful)
114+
tasktesting.CheckBitbucketBuildStatus(t, bitbucketClient, ctxt.ODS.GitCommitSHA, bitbucket.BuildStatusSuccessful)
115115
checkArtifactsAreInNexus(t, ctxt, nexus.PermanentRepositoryDefault)
116116
},
117117
},

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
checkFileExists(t, filepath.Join(wsDir, pipelinectxt.PipelineRunsPath, "foo-zh9gt0.json"))
6363
checkFileExists(t, filepath.Join(wsDir, pipelinectxt.ArtifactsPath, pipelinectxt.ArtifactsManifestFilename))
@@ -141,7 +141,7 @@ func TestTaskODSStart(t *testing.T) {
141141
checkFileExists(t, filepath.Join(destinationArtifactsBaseDir, pipelinectxt.ArtifactsManifestFilename))
142142

143143
bitbucketClient := tasktesting.BitbucketClientOrFatal(t, ctxt.Clients.KubernetesClientSet, ctxt.Namespace)
144-
checkBuildStatus(t, bitbucketClient, ctxt.ODS.GitCommitSHA, bitbucket.BuildStatusInProgress)
144+
tasktesting.CheckBitbucketBuildStatus(t, bitbucketClient, ctxt.ODS.GitCommitSHA, bitbucket.BuildStatusInProgress)
145145

146146
},
147147
},

0 commit comments

Comments
 (0)