Enable memory oversubscription (#102)
* Enable memory oversubscription * Fix and add e2e test
This commit is contained in:
@ -24,11 +24,12 @@ import (
|
||||
*/
|
||||
|
||||
var (
|
||||
log = logging.GetLogger("e2e")
|
||||
testDockerImage = flag.String("dockerImage", "", "Docker image to use in E2E tests")
|
||||
nomadClient *nomadApi.Client
|
||||
nomadNamespace string
|
||||
environmentIDs []dto.EnvironmentID
|
||||
log = logging.GetLogger("e2e")
|
||||
testDockerImage = flag.String("dockerImage", "", "Docker image to use in E2E tests")
|
||||
nomadClient *nomadApi.Client
|
||||
nomadNamespace string
|
||||
environmentIDs []dto.EnvironmentID
|
||||
defaultNomadEnvironment dto.ExecutionEnvironmentRequest
|
||||
)
|
||||
|
||||
type E2ETestSuite struct {
|
||||
@ -102,7 +103,7 @@ func createDefaultEnvironment() {
|
||||
|
||||
path := helpers.BuildURL(api.BasePath, api.EnvironmentsPath, tests.DefaultEnvironmentIDAsString)
|
||||
|
||||
request := dto.ExecutionEnvironmentRequest{
|
||||
defaultNomadEnvironment = dto.ExecutionEnvironmentRequest{
|
||||
PrewarmingPoolSize: 10,
|
||||
CPULimit: 100,
|
||||
MemoryLimit: 100,
|
||||
@ -111,7 +112,7 @@ func createDefaultEnvironment() {
|
||||
ExposedPorts: nil,
|
||||
}
|
||||
|
||||
resp, err := helpers.HTTPPutJSON(path, request)
|
||||
resp, err := helpers.HTTPPutJSON(path, defaultNomadEnvironment)
|
||||
if err != nil || resp.StatusCode != http.StatusCreated && resp.StatusCode != http.StatusNoContent {
|
||||
log.WithError(err).Fatal("Couldn't create default environment for e2e tests")
|
||||
}
|
||||
|
@ -364,7 +364,7 @@ func validateJob(t *testing.T, expected dto.ExecutionEnvironmentRequest) {
|
||||
|
||||
task := taskGroup.Tasks[0]
|
||||
assertEqualValueIntPointer(t, int(expected.CPULimit), task.Resources.CPU)
|
||||
assertEqualValueIntPointer(t, int(expected.MemoryLimit), task.Resources.MemoryMB)
|
||||
assertEqualValueIntPointer(t, int(expected.MemoryLimit), task.Resources.MemoryMaxMB)
|
||||
assert.Equal(t, expected.Image, task.Config["image"])
|
||||
|
||||
if expected.NetworkAccess {
|
||||
|
@ -13,6 +13,7 @@ import (
|
||||
"github.com/openHPI/poseidon/tests/helpers"
|
||||
"github.com/stretchr/testify/suite"
|
||||
"net/http"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
@ -175,6 +176,28 @@ func (s *E2ETestSuite) TestEchoEnvironment() {
|
||||
}
|
||||
}
|
||||
|
||||
func (s *E2ETestSuite) TestMemoryMaxLimit_Nomad() {
|
||||
maxMemoryLimit := defaultNomadEnvironment.MemoryLimit
|
||||
// The operating system is in charge to kill the process and sometimes tolerates small exceeding of the limit.
|
||||
maxMemoryLimit = uint(1.1 * float64(maxMemoryLimit))
|
||||
connection, err := ProvideWebSocketConnection(&s.Suite, tests.DefaultEnvironmentIDAsInteger, &dto.ExecutionRequest{
|
||||
// This shell line tries to load maxMemoryLimit Bytes into the memory.
|
||||
Command: "</dev/zero head -c " + strconv.Itoa(int(maxMemoryLimit)) + "MB | tail > /dev/null",
|
||||
})
|
||||
s.Require().NoError(err)
|
||||
|
||||
startMessage, err := helpers.ReceiveNextWebSocketMessage(connection)
|
||||
s.Require().NoError(err)
|
||||
s.Equal(dto.WebSocketMetaStart, startMessage.Type)
|
||||
|
||||
messages, err := helpers.ReceiveAllWebSocketMessages(connection)
|
||||
s.Require().Error(err)
|
||||
s.Equal(err, &websocket.CloseError{Code: websocket.CloseNormalClosure})
|
||||
stdout, stderr, _ := helpers.WebSocketOutputMessages(messages)
|
||||
s.Empty(stdout)
|
||||
s.Contains(stderr, "Killed")
|
||||
}
|
||||
|
||||
func (s *E2ETestSuite) TestNomadStderrFifoIsRemoved() {
|
||||
runnerID, err := ProvideRunner(&dto.RunnerRequest{
|
||||
ExecutionEnvironmentID: tests.DefaultEnvironmentIDAsInteger,
|
||||
|
Reference in New Issue
Block a user