Skip to content

Commit 52fc819

Browse files
authored
Fix parsing AcquireJob MessageQueueTokenExpiredError (#2837)
1 parent 215b245 commit 52fc819

File tree

2 files changed

+46
-1
lines changed

2 files changed

+46
-1
lines changed

github/actions/client.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -634,7 +634,18 @@ func (c *Client) AcquireJobs(ctx context.Context, runnerScaleSetId int, messageQ
634634
}
635635

636636
if resp.StatusCode != http.StatusOK {
637-
return nil, ParseActionsErrorFromResponse(resp)
637+
if resp.StatusCode != http.StatusUnauthorized {
638+
return nil, ParseActionsErrorFromResponse(resp)
639+
}
640+
641+
defer resp.Body.Close()
642+
body, err := io.ReadAll(resp.Body)
643+
body = trimByteOrderMark(body)
644+
if err != nil {
645+
return nil, err
646+
}
647+
648+
return nil, &MessageQueueTokenExpiredError{msg: string(body)}
638649
}
639650

640651
var acquiredJobs *Int64List

github/actions/client_job_acquisition_test.go

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package actions_test
22

33
import (
44
"context"
5+
"errors"
56
"net/http"
67
"strings"
78
"testing"
@@ -84,6 +85,39 @@ func TestAcquireJobs(t *testing.T) {
8485
assert.NotNil(t, err)
8586
assert.Equalf(t, actualRetry, expectedRetry, "A retry was expected after the first request but got: %v", actualRetry)
8687
})
88+
89+
t.Run("Should return MessageQueueTokenExpiredError when http error is not Unauthorized", func(t *testing.T) {
90+
want := []int64{1}
91+
92+
session := &actions.RunnerScaleSetSession{
93+
RunnerScaleSet: &actions.RunnerScaleSet{Id: 1},
94+
MessageQueueAccessToken: "abc",
95+
}
96+
requestIDs := want
97+
98+
server := newActionsServer(t, http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
99+
if strings.HasSuffix(r.URL.Path, "/acquirablejobs") {
100+
w.Write([]byte(`{"count": 1}`))
101+
return
102+
}
103+
if r.Method == http.MethodPost {
104+
http.Error(w, "Session expired", http.StatusUnauthorized)
105+
return
106+
}
107+
}))
108+
109+
client, err := actions.NewClient(server.configURLForOrg("my-org"), auth)
110+
require.NoError(t, err)
111+
112+
_, err = client.GetAcquirableJobs(ctx, 1)
113+
require.NoError(t, err)
114+
115+
got, err := client.AcquireJobs(ctx, session.RunnerScaleSet.Id, session.MessageQueueAccessToken, requestIDs)
116+
require.Error(t, err)
117+
assert.Nil(t, got)
118+
var expectedErr *actions.MessageQueueTokenExpiredError
119+
assert.True(t, errors.As(err, &expectedErr))
120+
})
87121
}
88122

89123
func TestGetAcquirableJobs(t *testing.T) {

0 commit comments

Comments
 (0)