Add tests and end-to-end tests for websocket execution
For unit tests, this mocks the runners Execute method with a customizable function that operates on the request, streams and exit channel to simulate a real execution. End-to-end tests are moved to the tests/e2e_tests folder. The tests folder allows us to have shared helper functions for all tests in a separate package (tests) that is not included in the non-test build. This also adds one second of delay before each end-to-end test case by using the TestSetup method of suite. By slowing down test execution, this gives Nomad time to create new allocations when a test requested a runner. Another solution could be to increase the scale of the job to have enough allocations for all end-to-end tests. Co-authored-by: Maximilian Paß <maximilian.pass@student.hpi.uni-potsdam.de>
This commit is contained in:
@@ -28,7 +28,7 @@ type MiddlewareTestSuite struct {
|
||||
|
||||
func (suite *MiddlewareTestSuite) SetupTest() {
|
||||
suite.manager = &runner.ManagerMock{}
|
||||
suite.runner = runner.NewRunner("runner")
|
||||
suite.runner = runner.NewNomadAllocation("runner", nil)
|
||||
suite.capturedRunner = nil
|
||||
suite.runnerRequest = func(runnerId string) *http.Request {
|
||||
path, err := suite.router.Get("test-runner-id").URL(RunnerIdKey, runnerId)
|
||||
@@ -89,12 +89,15 @@ type RunnerRouteTestSuite struct {
|
||||
runnerManager *runner.ManagerMock
|
||||
router *mux.Router
|
||||
runner runner.Runner
|
||||
executionId runner.ExecutionId
|
||||
}
|
||||
|
||||
func (suite *RunnerRouteTestSuite) SetupTest() {
|
||||
suite.runnerManager = &runner.ManagerMock{}
|
||||
suite.router = NewRouter(suite.runnerManager, nil)
|
||||
suite.runner = runner.NewRunner("test_runner")
|
||||
suite.runner = runner.NewNomadAllocation("some-id", nil)
|
||||
suite.executionId = "execution-id"
|
||||
suite.runner.Add(suite.executionId, &dto.ExecutionRequest{})
|
||||
suite.runnerManager.On("Get", suite.runner.Id()).Return(suite.runner, nil)
|
||||
}
|
||||
|
||||
@@ -122,8 +125,8 @@ func (suite *RunnerRouteTestSuite) TestExecuteRoute() {
|
||||
|
||||
suite.router.ServeHTTP(recorder, request)
|
||||
|
||||
var websocketResponse dto.WebsocketResponse
|
||||
err = json.NewDecoder(recorder.Result().Body).Decode(&websocketResponse)
|
||||
var webSocketResponse dto.ExecutionResponse
|
||||
err = json.NewDecoder(recorder.Result().Body).Decode(&webSocketResponse)
|
||||
if err != nil {
|
||||
suite.T().Fatal(err)
|
||||
}
|
||||
@@ -131,15 +134,15 @@ func (suite *RunnerRouteTestSuite) TestExecuteRoute() {
|
||||
suite.Equal(http.StatusOK, recorder.Code)
|
||||
|
||||
suite.Run("creates an execution request for the runner", func() {
|
||||
url, err := url.Parse(websocketResponse.WebsocketUrl)
|
||||
webSocketUrl, err := url.Parse(webSocketResponse.WebSocketUrl)
|
||||
if err != nil {
|
||||
suite.T().Fatal(err)
|
||||
}
|
||||
executionId := url.Query().Get(ExecutionIdKey)
|
||||
storedExecutionRequest, ok := suite.runner.Execution(runner.ExecutionId(executionId))
|
||||
executionId := webSocketUrl.Query().Get(ExecutionIdKey)
|
||||
storedExecutionRequest, ok := suite.runner.Pop(runner.ExecutionId(executionId))
|
||||
|
||||
suite.True(ok, "No execution request with this id: ", executionId)
|
||||
suite.Equal(executionRequest, storedExecutionRequest)
|
||||
suite.Equal(&executionRequest, storedExecutionRequest)
|
||||
})
|
||||
})
|
||||
|
||||
|
Reference in New Issue
Block a user