115 lines
3.7 KiB
Go
115 lines
3.7 KiB
Go
package nomad
|
|
|
|
import (
|
|
"errors"
|
|
nomadApi "github.com/hashicorp/nomad/api"
|
|
"github.com/stretchr/testify/mock"
|
|
"github.com/stretchr/testify/suite"
|
|
"testing"
|
|
)
|
|
|
|
func TestLoadAvailableRunnersTestSuite(t *testing.T) {
|
|
suite.Run(t, new(LoadAvailableRunnersTestSuite))
|
|
}
|
|
|
|
type LoadAvailableRunnersTestSuite struct {
|
|
suite.Suite
|
|
jobId string
|
|
mock *nomadApiQuerierMock
|
|
nomadApiClient ApiClient
|
|
availableRunner *nomadApi.AllocationListStub
|
|
anotherAvailableRunner *nomadApi.AllocationListStub
|
|
stoppedRunner *nomadApi.AllocationListStub
|
|
stoppingRunner *nomadApi.AllocationListStub
|
|
}
|
|
|
|
func (suite *LoadAvailableRunnersTestSuite) SetupTest() {
|
|
suite.jobId = "1d-0f-v3ry-sp3c14l-j0b"
|
|
|
|
suite.mock = &nomadApiQuerierMock{}
|
|
suite.nomadApiClient = ApiClient{nomadApiQuerier: suite.mock}
|
|
|
|
suite.availableRunner = &nomadApi.AllocationListStub{
|
|
ID: "s0m3-r4nd0m-1d",
|
|
ClientStatus: nomadApi.AllocClientStatusRunning,
|
|
DesiredStatus: nomadApi.AllocDesiredStatusRun,
|
|
}
|
|
|
|
suite.anotherAvailableRunner = &nomadApi.AllocationListStub{
|
|
ID: "s0m3-s1m1l4r-1d",
|
|
ClientStatus: nomadApi.AllocClientStatusRunning,
|
|
DesiredStatus: nomadApi.AllocDesiredStatusRun,
|
|
}
|
|
|
|
suite.stoppedRunner = &nomadApi.AllocationListStub{
|
|
ID: "4n0th3r-1d",
|
|
ClientStatus: nomadApi.AllocClientStatusComplete,
|
|
DesiredStatus: nomadApi.AllocDesiredStatusRun,
|
|
}
|
|
|
|
suite.stoppingRunner = &nomadApi.AllocationListStub{
|
|
ID: "th1rd-1d",
|
|
ClientStatus: nomadApi.AllocClientStatusRunning,
|
|
DesiredStatus: nomadApi.AllocDesiredStatusStop,
|
|
}
|
|
}
|
|
|
|
func (suite *LoadAvailableRunnersTestSuite) TestErrorOfUnderlyingApiCallIsPropagated() {
|
|
errorString := "api errored"
|
|
suite.mock.On("loadRunners", mock.AnythingOfType("string")).
|
|
Return(nil, errors.New(errorString))
|
|
|
|
returnedIds, err := suite.nomadApiClient.LoadAvailableRunners(suite.jobId)
|
|
suite.Nil(returnedIds)
|
|
suite.Error(err)
|
|
}
|
|
|
|
func (suite *LoadAvailableRunnersTestSuite) TestThrowsNoErrorWhenUnderlyingApiCallDoesnt() {
|
|
suite.mock.On("loadRunners", mock.AnythingOfType("string")).
|
|
Return([]*nomadApi.AllocationListStub{}, nil)
|
|
|
|
_, err := suite.nomadApiClient.LoadAvailableRunners(suite.jobId)
|
|
suite.NoError(err)
|
|
}
|
|
|
|
func (suite *LoadAvailableRunnersTestSuite) TestAvailableRunnerIsReturned() {
|
|
suite.mock.On("loadRunners", mock.AnythingOfType("string")).
|
|
Return([]*nomadApi.AllocationListStub{suite.availableRunner}, nil)
|
|
|
|
returnedIds, _ := suite.nomadApiClient.LoadAvailableRunners(suite.jobId)
|
|
suite.Len(returnedIds, 1)
|
|
suite.Equal(suite.availableRunner.ID, returnedIds[0])
|
|
}
|
|
|
|
func (suite *LoadAvailableRunnersTestSuite) TestStoppedRunnerIsNotReturned() {
|
|
suite.mock.On("loadRunners", mock.AnythingOfType("string")).
|
|
Return([]*nomadApi.AllocationListStub{suite.stoppedRunner}, nil)
|
|
|
|
returnedIds, _ := suite.nomadApiClient.LoadAvailableRunners(suite.jobId)
|
|
suite.Empty(returnedIds)
|
|
}
|
|
|
|
func (suite *LoadAvailableRunnersTestSuite) TestStoppingRunnerIsNotReturned() {
|
|
suite.mock.On("loadRunners", mock.AnythingOfType("string")).
|
|
Return([]*nomadApi.AllocationListStub{suite.stoppingRunner}, nil)
|
|
|
|
returnedIds, _ := suite.nomadApiClient.LoadAvailableRunners(suite.jobId)
|
|
suite.Empty(returnedIds)
|
|
}
|
|
|
|
func (suite *LoadAvailableRunnersTestSuite) TestReturnsAllAvailableRunners() {
|
|
runnersList := []*nomadApi.AllocationListStub{
|
|
suite.availableRunner,
|
|
suite.anotherAvailableRunner,
|
|
suite.stoppedRunner,
|
|
suite.stoppingRunner,
|
|
}
|
|
suite.mock.On("loadRunners", mock.AnythingOfType("string")).
|
|
Return(runnersList, nil)
|
|
|
|
returnedIds, _ := suite.nomadApiClient.LoadAvailableRunners(suite.jobId)
|
|
suite.Len(returnedIds, 2)
|
|
suite.Contains(returnedIds, suite.availableRunner.ID)
|
|
suite.Contains(returnedIds, suite.anotherAvailableRunner.ID)
|
|
}
|