@@ -2,6 +2,7 @@ package actions_test
2
2
3
3
import (
4
4
"context"
5
+ "encoding/json"
5
6
"io"
6
7
"net/http"
7
8
"net/url"
@@ -152,6 +153,43 @@ func TestNewActionsServiceRequest(t *testing.T) {
152
153
assert .Equal (t , client .ActionsServiceAdminTokenExpiresAt , expiresAt )
153
154
})
154
155
156
+ t .Run ("admin token refresh retry" , func (t * testing.T ) {
157
+ newToken := defaultActionsToken (t )
158
+ errMessage := `{"message":"test"}`
159
+
160
+ srv := "http://github.com/my-org"
161
+ resp := & actions.ActionsServiceAdminConnection {
162
+ AdminToken : & newToken ,
163
+ ActionsServiceUrl : & srv ,
164
+ }
165
+ failures := 0
166
+ unauthorizedHandler := func (w http.ResponseWriter , r * http.Request ) {
167
+ if failures < 2 {
168
+ failures ++
169
+ w .Header ().Set ("Content-Type" , "application/json" )
170
+ w .WriteHeader (http .StatusUnauthorized )
171
+ w .Write ([]byte (errMessage ))
172
+ return
173
+ }
174
+
175
+ w .WriteHeader (http .StatusCreated )
176
+ _ = json .NewEncoder (w ).Encode (resp )
177
+ }
178
+ server := testserver .New (t , nil , testserver .WithActionsToken ("random-token" ), testserver .WithActionsToken (newToken ), testserver .WithActionsRegistrationTokenHandler (unauthorizedHandler ))
179
+ client , err := actions .NewClient (server .ConfigURLForOrg ("my-org" ), defaultCreds )
180
+ require .NoError (t , err )
181
+ expiringToken := "expiring-token"
182
+ expiresAt := time .Now ().Add (59 * time .Second )
183
+ client .ActionsServiceAdminToken = expiringToken
184
+ client .ActionsServiceAdminTokenExpiresAt = expiresAt
185
+
186
+ _ , err = client .NewActionsServiceRequest (ctx , http .MethodGet , "my-path" , nil )
187
+ require .NoError (t , err )
188
+ assert .Equal (t , client .ActionsServiceAdminToken , newToken )
189
+ assert .Equal (t , client .ActionsServiceURL , srv )
190
+ assert .NotEqual (t , client .ActionsServiceAdminTokenExpiresAt , expiresAt )
191
+ })
192
+
155
193
t .Run ("token is currently valid" , func (t * testing.T ) {
156
194
tokenThatShouldNotBeFetched := defaultActionsToken (t )
157
195
server := testserver .New (t , nil , testserver .WithActionsToken (tokenThatShouldNotBeFetched ))
0 commit comments