216 lines
6.1 KiB
Go
216 lines
6.1 KiB
Go
package actions_test
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"net/http"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/actions/actions-runner-controller/github/actions"
|
|
"github.com/google/uuid"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestCreateMessageSession(t *testing.T) {
|
|
ctx := context.Background()
|
|
auth := &actions.ActionsAuth{
|
|
Token: "token",
|
|
}
|
|
|
|
t.Run("CreateMessageSession unmarshals correctly", func(t *testing.T) {
|
|
owner := "foo"
|
|
runnerScaleSet := actions.RunnerScaleSet{
|
|
Id: 1,
|
|
Name: "ScaleSet",
|
|
CreatedOn: time.Date(1, time.January, 1, 0, 0, 0, 0, time.UTC),
|
|
RunnerSetting: actions.RunnerSetting{},
|
|
}
|
|
|
|
want := &actions.RunnerScaleSetSession{
|
|
OwnerName: "foo",
|
|
RunnerScaleSet: &actions.RunnerScaleSet{
|
|
Id: 1,
|
|
Name: "ScaleSet",
|
|
},
|
|
MessageQueueUrl: "http://fake.actions.github.com/123",
|
|
MessageQueueAccessToken: "fake.jwt.here",
|
|
}
|
|
|
|
server := newActionsServer(t, http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) {
|
|
resp := []byte(`{
|
|
"ownerName": "foo",
|
|
"runnerScaleSet": {
|
|
"id": 1,
|
|
"name": "ScaleSet"
|
|
},
|
|
"messageQueueUrl": "http://fake.actions.github.com/123",
|
|
"messageQueueAccessToken": "fake.jwt.here"
|
|
}`)
|
|
w.Write(resp)
|
|
}))
|
|
|
|
client, err := actions.NewClient(server.configURLForOrg("my-org"), auth)
|
|
require.NoError(t, err)
|
|
|
|
got, err := client.CreateMessageSession(ctx, runnerScaleSet.Id, owner)
|
|
require.NoError(t, err)
|
|
assert.Equal(t, want, got)
|
|
})
|
|
|
|
t.Run("CreateMessageSession unmarshals errors into ActionsError", func(t *testing.T) {
|
|
owner := "foo"
|
|
runnerScaleSet := actions.RunnerScaleSet{
|
|
Id: 1,
|
|
Name: "ScaleSet",
|
|
CreatedOn: time.Date(1, time.January, 1, 0, 0, 0, 0, time.UTC),
|
|
RunnerSetting: actions.RunnerSetting{},
|
|
}
|
|
|
|
want := &actions.ActionsError{
|
|
ExceptionName: "CSharpExceptionNameHere",
|
|
Message: "could not do something",
|
|
StatusCode: http.StatusBadRequest,
|
|
}
|
|
|
|
server := newActionsServer(t, http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) {
|
|
w.Header().Set("Content-Type", "application/json")
|
|
w.WriteHeader(http.StatusBadRequest)
|
|
resp := []byte(`{"typeName": "CSharpExceptionNameHere","message": "could not do something"}`)
|
|
w.Write(resp)
|
|
}))
|
|
|
|
client, err := actions.NewClient(server.configURLForOrg("my-org"), auth)
|
|
require.NoError(t, err)
|
|
|
|
_, err = client.CreateMessageSession(ctx, runnerScaleSet.Id, owner)
|
|
require.NotNil(t, err)
|
|
|
|
errorTypeForComparison := &actions.ActionsError{}
|
|
assert.True(
|
|
t,
|
|
errors.As(err, &errorTypeForComparison),
|
|
"CreateMessageSession expected to be able to parse the error into ActionsError type: %v",
|
|
err,
|
|
)
|
|
|
|
gotErr := err.(*actions.ActionsError)
|
|
assert.Equal(t, want, gotErr)
|
|
})
|
|
|
|
t.Run("CreateMessageSession call is retried the correct amount of times", func(t *testing.T) {
|
|
owner := "foo"
|
|
runnerScaleSet := actions.RunnerScaleSet{
|
|
Id: 1,
|
|
Name: "ScaleSet",
|
|
CreatedOn: time.Date(1, time.January, 1, 0, 0, 0, 0, time.UTC),
|
|
RunnerSetting: actions.RunnerSetting{},
|
|
}
|
|
|
|
gotRetries := 0
|
|
server := newActionsServer(t, http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) {
|
|
w.WriteHeader(http.StatusInternalServerError)
|
|
gotRetries++
|
|
}))
|
|
|
|
retryMax := 3
|
|
retryWaitMax := 1 * time.Microsecond
|
|
|
|
wantRetries := retryMax + 1
|
|
|
|
client, err := actions.NewClient(
|
|
server.configURLForOrg("my-org"),
|
|
auth,
|
|
actions.WithRetryMax(retryMax),
|
|
actions.WithRetryWaitMax(retryWaitMax),
|
|
)
|
|
require.NoError(t, err)
|
|
|
|
_, err = client.CreateMessageSession(ctx, runnerScaleSet.Id, owner)
|
|
assert.NotNil(t, err)
|
|
assert.Equalf(t, gotRetries, wantRetries, "CreateMessageSession got unexpected retry count: got=%v, want=%v", gotRetries, wantRetries)
|
|
})
|
|
}
|
|
|
|
func TestDeleteMessageSession(t *testing.T) {
|
|
ctx := context.Background()
|
|
auth := &actions.ActionsAuth{
|
|
Token: "token",
|
|
}
|
|
|
|
t.Run("DeleteMessageSession call is retried the correct amount of times", func(t *testing.T) {
|
|
runnerScaleSet := actions.RunnerScaleSet{
|
|
Id: 1,
|
|
Name: "ScaleSet",
|
|
CreatedOn: time.Date(1, time.January, 1, 0, 0, 0, 0, time.UTC),
|
|
RunnerSetting: actions.RunnerSetting{},
|
|
}
|
|
|
|
gotRetries := 0
|
|
server := newActionsServer(t, http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) {
|
|
w.WriteHeader(http.StatusInternalServerError)
|
|
gotRetries++
|
|
}))
|
|
|
|
retryMax := 3
|
|
retryWaitMax := 1 * time.Microsecond
|
|
|
|
wantRetries := retryMax + 1
|
|
|
|
client, err := actions.NewClient(
|
|
server.configURLForOrg("my-org"),
|
|
auth,
|
|
actions.WithRetryMax(retryMax),
|
|
actions.WithRetryWaitMax(retryWaitMax),
|
|
)
|
|
require.NoError(t, err)
|
|
|
|
sessionId := uuid.New()
|
|
|
|
err = client.DeleteMessageSession(ctx, runnerScaleSet.Id, &sessionId)
|
|
assert.NotNil(t, err)
|
|
assert.Equalf(t, gotRetries, wantRetries, "CreateMessageSession got unexpected retry count: got=%v, want=%v", gotRetries, wantRetries)
|
|
})
|
|
}
|
|
|
|
func TestRefreshMessageSession(t *testing.T) {
|
|
auth := &actions.ActionsAuth{
|
|
Token: "token",
|
|
}
|
|
|
|
t.Run("RefreshMessageSession call is retried the correct amount of times", func(t *testing.T) {
|
|
runnerScaleSet := actions.RunnerScaleSet{
|
|
Id: 1,
|
|
Name: "ScaleSet",
|
|
CreatedOn: time.Date(1, time.January, 1, 0, 0, 0, 0, time.UTC),
|
|
RunnerSetting: actions.RunnerSetting{},
|
|
}
|
|
|
|
gotRetries := 0
|
|
server := newActionsServer(t, http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) {
|
|
w.WriteHeader(http.StatusInternalServerError)
|
|
gotRetries++
|
|
}))
|
|
|
|
retryMax := 3
|
|
retryWaitMax := 1 * time.Microsecond
|
|
|
|
wantRetries := retryMax + 1
|
|
|
|
client, err := actions.NewClient(
|
|
server.configURLForOrg("my-org"),
|
|
auth,
|
|
actions.WithRetryMax(retryMax),
|
|
actions.WithRetryWaitMax(retryWaitMax),
|
|
)
|
|
require.NoError(t, err)
|
|
|
|
sessionId := uuid.New()
|
|
|
|
_, err = client.RefreshMessageSession(context.Background(), runnerScaleSet.Id, &sessionId)
|
|
assert.NotNil(t, err)
|
|
assert.Equalf(t, gotRetries, wantRetries, "CreateMessageSession got unexpected retry count: got=%v, want=%v", gotRetries, wantRetries)
|
|
})
|
|
}
|