Skip to content

Commit 3d682e2

Browse files
committed
create some common funcs
1 parent d6b2137 commit 3d682e2

File tree

2 files changed

+87
-73
lines changed

2 files changed

+87
-73
lines changed

tests/integration/actions_job_test.go

Lines changed: 76 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -121,86 +121,98 @@ jobs:
121121
},
122122
}
123123
onGiteaRun(t, func(t *testing.T, u *url.URL) {
124-
runner := newMockRunner(t)
125-
runner.registerAsGlobalRunner(t, "mock-runner", []string{"ubuntu-latest"})
126-
127124
user2 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
128125
session := loginUser(t, user2.Name)
129126
token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeWriteRepository, auth_model.AccessTokenScopeWriteUser)
130127

131-
// create the repo
132-
req := NewRequestWithJSON(t, "POST", "/api/v1/user/repos", &api.CreateRepoOption{
133-
Name: "actions-jobs-with-needs",
134-
Description: "test jobs with needs",
135-
Private: false,
136-
Readme: "Default",
137-
AutoInit: true,
138-
DefaultBranch: "main",
139-
}).AddTokenAuth(token)
140-
resp := MakeRequest(t, req, http.StatusCreated)
141-
var apiRepo api.Repository
142-
DecodeJSON(t, resp, &apiRepo)
128+
apiRepo := createActionsTestRepo(t, token, "actions-jobs-with-needs", false)
129+
130+
runner := newMockRunner()
131+
runner.registerAsRepoRunner(t, user2.Name, apiRepo.Name, "mock-runner", []string{"ubuntu-latest"})
143132

144133
for _, tc := range testCases {
145-
// create the workflow file
146-
createFileOptions := &api.CreateFileOptions{
147-
FileOptions: api.FileOptions{
148-
BranchName: "main",
149-
Message: fmt.Sprintf("create %s", tc.treePath),
150-
Author: api.Identity{
151-
Name: user2.Name,
152-
Email: user2.Email,
153-
},
154-
Committer: api.Identity{
155-
Name: user2.Name,
156-
Email: user2.Email,
157-
},
158-
Dates: api.CommitDateOptions{
159-
Author: time.Now(),
160-
Committer: time.Now(),
161-
},
162-
},
163-
ContentBase64: base64.StdEncoding.EncodeToString([]byte(tc.fileContent)),
164-
}
165-
req = NewRequestWithJSON(t, "POST", fmt.Sprintf("/api/v1/repos/%s/%s/contents/%s", user2.Name, apiRepo.Name, tc.treePath), createFileOptions).
166-
AddTokenAuth(token)
167-
var fileResponse api.FileResponse
168-
resp = MakeRequest(t, req, http.StatusCreated)
169-
DecodeJSON(t, resp, &fileResponse)
134+
t.Run(fmt.Sprintf("test %s", tc.treePath), func(t *testing.T) {
135+
// create the workflow file
136+
opts := getWorkflowCreateFileOptions(user2, apiRepo.DefaultBranch, fmt.Sprintf("create %s", tc.treePath), tc.fileContent)
137+
fileResp := createWorkflowFile(t, token, user2.Name, apiRepo.Name, tc.treePath, opts)
170138

171-
// fetch and execute task
172-
for i := 0; i < len(tc.execPolicies); i++ {
173-
task := runner.fetchTask(t)
174-
assert.NotNil(t, task)
175-
jobName := getTaskJobNameByTaskID(t, token, user2.Name, apiRepo.Name, task.Id)
176-
policy := tc.execPolicies[jobName]
177-
assert.NotNil(t, policy)
178-
runner.execTask(t, task, policy)
179-
}
139+
// fetch and execute task
140+
for i := 0; i < len(tc.execPolicies); i++ {
141+
task := runner.fetchTask(t)
142+
jobName := getTaskJobNameByTaskID(t, token, user2.Name, apiRepo.Name, task.Id)
143+
policy := tc.execPolicies[jobName]
144+
assert.NotNil(t, policy)
145+
runner.execTask(t, task, policy)
146+
}
180147

181-
// check result
182-
req = NewRequest(t, "GET", fmt.Sprintf("/api/v1/repos/%s/%s/actions/tasks", user2.Name, apiRepo.Name)).
183-
AddTokenAuth(token)
184-
resp = MakeRequest(t, req, http.StatusOK)
185-
var actionTaskRespAfter api.ActionTaskResponse
186-
DecodeJSON(t, resp, &actionTaskRespAfter)
187-
for _, apiTask := range actionTaskRespAfter.Entries {
188-
if apiTask.HeadSHA != fileResponse.Commit.SHA {
189-
continue
148+
// check result
149+
req := NewRequest(t, "GET", fmt.Sprintf("/api/v1/repos/%s/%s/actions/tasks", user2.Name, apiRepo.Name)).
150+
AddTokenAuth(token)
151+
resp := MakeRequest(t, req, http.StatusOK)
152+
var actionTaskRespAfter api.ActionTaskResponse
153+
DecodeJSON(t, resp, &actionTaskRespAfter)
154+
for _, apiTask := range actionTaskRespAfter.Entries {
155+
if apiTask.HeadSHA != fileResp.Commit.SHA {
156+
continue
157+
}
158+
status := apiTask.Status
159+
assert.Equal(t, status, tc.expectedStatuses[apiTask.Name])
190160
}
191-
status := apiTask.Status
192-
assert.Equal(t, status, tc.expectedStatuses[apiTask.Name])
193-
}
161+
})
194162
}
195163
})
196164
}
197165

166+
func createActionsTestRepo(t *testing.T, authToken, repoName string, isPrivate bool) *api.Repository {
167+
req := NewRequestWithJSON(t, "POST", "/api/v1/user/repos", &api.CreateRepoOption{
168+
Name: repoName,
169+
Private: isPrivate,
170+
Readme: "Default",
171+
AutoInit: true,
172+
DefaultBranch: "main",
173+
}).AddTokenAuth(authToken)
174+
resp := MakeRequest(t, req, http.StatusCreated)
175+
var apiRepo api.Repository
176+
DecodeJSON(t, resp, &apiRepo)
177+
return &apiRepo
178+
}
179+
180+
func getWorkflowCreateFileOptions(u *user_model.User, branch, msg, content string) *api.CreateFileOptions {
181+
return &api.CreateFileOptions{
182+
FileOptions: api.FileOptions{
183+
BranchName: branch,
184+
Message: msg,
185+
Author: api.Identity{
186+
Name: u.Name,
187+
Email: u.Email,
188+
},
189+
Committer: api.Identity{
190+
Name: u.Name,
191+
Email: u.Email,
192+
},
193+
Dates: api.CommitDateOptions{
194+
Author: time.Now(),
195+
Committer: time.Now(),
196+
},
197+
},
198+
ContentBase64: base64.StdEncoding.EncodeToString([]byte(content)),
199+
}
200+
}
201+
202+
func createWorkflowFile(t *testing.T, authToken, ownerName, repoName, treePath string, opts *api.CreateFileOptions) *api.FileResponse {
203+
req := NewRequestWithJSON(t, "POST", fmt.Sprintf("/api/v1/repos/%s/%s/contents/%s", ownerName, repoName, treePath), opts).
204+
AddTokenAuth(authToken)
205+
resp := MakeRequest(t, req, http.StatusCreated)
206+
var fileResponse api.FileResponse
207+
DecodeJSON(t, resp, &fileResponse)
208+
return &fileResponse
209+
}
210+
198211
// getTaskJobNameByTaskID get the job name of the task by task ID
199212
// there is currently not an API for querying a task by ID so we have to list all the tasks
200-
func getTaskJobNameByTaskID(t *testing.T, authToken, repoOwner, repoName string, taskID int64) string {
201-
t.Helper()
213+
func getTaskJobNameByTaskID(t *testing.T, authToken, ownerName, repoName string, taskID int64) string {
202214
// FIXME: we may need to query several pages
203-
req := NewRequest(t, "GET", fmt.Sprintf("/api/v1/repos/%s/%s/actions/tasks", repoOwner, repoName)).
215+
req := NewRequest(t, "GET", fmt.Sprintf("/api/v1/repos/%s/%s/actions/tasks", ownerName, repoName)).
204216
AddTokenAuth(authToken)
205217
resp := MakeRequest(t, req, http.StatusOK)
206218
var taskRespBefore api.ActionTaskResponse

tests/integration/actions_runner_test.go

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,7 @@ type mockRunnerClient struct {
3535
runnerServiceClient runnerv1connect.RunnerServiceClient
3636
}
3737

38-
func newMockRunner(t testing.TB) *mockRunner {
39-
t.Helper()
38+
func newMockRunner() *mockRunner {
4039
client := newMockRunnerClient("", "")
4140
return &mockRunner{client: client}
4241
}
@@ -86,16 +85,16 @@ func (r *mockRunner) doRegister(t *testing.T, name, token string, labels []strin
8685
r.client = newMockRunnerClient(resp.Msg.Runner.Uuid, resp.Msg.Runner.Token)
8786
}
8887

89-
func (r *mockRunner) registerAsGlobalRunner(t *testing.T, name string, labels []string) {
90-
session := loginUser(t, "user1")
91-
token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeWriteAdmin)
92-
req := NewRequest(t, "GET", "/api/v1/admin/runners/registration-token").AddTokenAuth(token)
88+
func (r *mockRunner) registerAsRepoRunner(t *testing.T, ownerName, repoName, runnerName string, labels []string) {
89+
session := loginUser(t, ownerName)
90+
token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeWriteRepository)
91+
req := NewRequest(t, "GET", fmt.Sprintf("/api/v1/repos/%s/%s/actions/runners/registration-token", ownerName, repoName)).AddTokenAuth(token)
9392
resp := MakeRequest(t, req, http.StatusOK)
9493
var registrationToken struct {
9594
Token string `json:"token"`
9695
}
9796
DecodeJSON(t, resp, &registrationToken)
98-
r.doRegister(t, name, registrationToken.Token, labels)
97+
r.doRegister(t, runnerName, registrationToken.Token, labels)
9998
}
10099

101100
func (r *mockRunner) fetchTask(t *testing.T, timeout ...time.Duration) *runnerv1.Task {
@@ -104,17 +103,20 @@ func (r *mockRunner) fetchTask(t *testing.T, timeout ...time.Duration) *runnerv1
104103
fetchTimeout = timeout[0]
105104
}
106105
ddl := time.Now().Add(fetchTimeout)
106+
var task *runnerv1.Task
107107
for time.Now().Before(ddl) {
108108
resp, err := r.client.runnerServiceClient.FetchTask(context.Background(), connect.NewRequest(&runnerv1.FetchTaskRequest{
109109
TasksVersion: 0,
110110
}))
111111
assert.NoError(t, err)
112112
if resp.Msg.Task != nil {
113-
return resp.Msg.Task
113+
task = resp.Msg.Task
114+
break
114115
}
115116
time.Sleep(time.Second)
116117
}
117-
return nil
118+
assert.NotNil(t, task, "failed to fetch a task")
119+
return task
118120
}
119121

120122
type taskExecPolicy struct {

0 commit comments

Comments
 (0)