#190 Add recovery e2e tests.

This commit is contained in:
Maximilian Paß
2022-11-23 21:57:30 +00:00
parent 0c6c48c3cf
commit 0b7f71f3dc
9 changed files with 323 additions and 103 deletions

View File

@@ -3,10 +3,8 @@ package e2e
import (
"bytes"
"context"
"encoding/json"
"fmt"
"github.com/gorilla/websocket"
"github.com/openHPI/poseidon/internal/api"
"github.com/openHPI/poseidon/internal/nomad"
"github.com/openHPI/poseidon/pkg/dto"
"github.com/openHPI/poseidon/tests"
@@ -25,7 +23,7 @@ func (s *E2ETestSuite) TestExecuteCommandRoute() {
runnerID, err := ProvideRunner(&dto.RunnerRequest{ExecutionEnvironmentID: int(environmentID)})
s.Require().NoError(err)
webSocketURL, err := ProvideWebSocketURL(&s.Suite, runnerID, &dto.ExecutionRequest{Command: "true"})
webSocketURL, err := ProvideWebSocketURL(runnerID, &dto.ExecutionRequest{Command: "true"})
s.Require().NoError(err)
s.NotEqual("", webSocketURL)
@@ -222,7 +220,7 @@ func (s *E2ETestSuite) TestNomadStderrFifoIsRemoved() {
})
s.Require().NoError(err)
webSocketURL, err := ProvideWebSocketURL(&s.Suite, runnerID, &dto.ExecutionRequest{Command: "ls -a /tmp/"})
webSocketURL, err := ProvideWebSocketURL(runnerID, &dto.ExecutionRequest{Command: "ls -a /tmp/"})
s.Require().NoError(err)
connection, err := ConnectToWebSocket(webSocketURL)
s.Require().NoError(err)
@@ -290,10 +288,8 @@ func ProvideWebSocketConnection(s *suite.Suite, environmentID dto.EnvironmentID,
s.Require().NoError(err)
s.Require().Equal(http.StatusNoContent, resp.StatusCode)
}
webSocketURL, err := ProvideWebSocketURL(s, runnerID, executionRequest)
if err != nil {
return nil, fmt.Errorf("error providing WebSocket URL: %w", err)
}
webSocketURL, err := ProvideWebSocketURL(runnerID, executionRequest)
s.Require().NoError(err)
connection, err := ConnectToWebSocket(webSocketURL)
if err != nil {
return nil, fmt.Errorf("error connecting to WebSocket: %w", err)
@@ -301,23 +297,6 @@ func ProvideWebSocketConnection(s *suite.Suite, environmentID dto.EnvironmentID,
return connection, nil
}
// ProvideWebSocketURL creates a WebSocket endpoint from the ExecutionRequest via an external api request.
// It requires a running Poseidon instance.
func ProvideWebSocketURL(s *suite.Suite, runnerID string, request *dto.ExecutionRequest) (string, error) {
url := helpers.BuildURL(api.BasePath, api.RunnersPath, runnerID, api.ExecutePath)
executionRequestByteString, err := json.Marshal(request)
s.Require().NoError(err)
reader := strings.NewReader(string(executionRequestByteString))
resp, err := http.Post(url, "application/json", reader) //nolint:gosec // url is not influenced by a user
s.Require().NoError(err)
s.Require().Equal(http.StatusOK, resp.StatusCode)
executionResponse := new(dto.ExecutionResponse)
err = json.NewDecoder(resp.Body).Decode(executionResponse)
s.Require().NoError(err)
return executionResponse.WebSocketURL, nil
}
// ConnectToWebSocket establish an external WebSocket connection to the provided url.
// It requires a running Poseidon instance.
func ConnectToWebSocket(url string) (conn *websocket.Conn, err error) {