From 9ee11161bf0c635a0b0164ae1dee806c6fcfe7b7 Mon Sep 17 00:00:00 2001 From: unclejack Date: Fri, 14 Jun 2013 19:46:04 +0300 Subject: [PATCH 1/2] validate memory limits & error out if less than 512 KB --- server.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/server.go b/server.go index 34d525a35a..330c9fbb89 100644 --- a/server.go +++ b/server.go @@ -652,6 +652,10 @@ func (srv *Server) ImageImport(src, repo, tag string, in io.Reader, out io.Write func (srv *Server) ContainerCreate(config *Config) (string, error) { + if config.Memory != 0 && config.Memory < 524288 { + return "", fmt.Errorf("Memory limit must be given in bytes (minimum 524288 bytes)") + } + if config.Memory > 0 && !srv.runtime.capabilities.MemoryLimit { config.Memory = 0 } From d3f83a6592e3d79768d9d3805edec80642b69c4b Mon Sep 17 00:00:00 2001 From: unclejack Date: Fri, 14 Jun 2013 22:55:00 +0300 Subject: [PATCH 2/2] add test: fail to create container if mem limit < 512KB --- server_test.go | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/server_test.go b/server_test.go index 532757c61e..7fdec18f61 100644 --- a/server_test.go +++ b/server_test.go @@ -147,3 +147,25 @@ func TestCreateStartRestartStopStartKillRm(t *testing.T) { } } + +func TestRunWithTooLowMemoryLimit(t *testing.T) { + runtime, err := newTestRuntime() + srv := &Server{runtime: runtime} + if err != nil { + t.Fatal(err) + } + defer nuke(runtime) + // Try to create a container with a memory limit of 1 byte less than the minimum allowed limit. + _, err = srv.ContainerCreate( + &Config{ + Image: GetTestImage(runtime).ID, + Memory: 524287, + CpuShares: 1000, + Cmd: []string{"/bin/cat"}, + }, + ) + if err == nil { + t.Errorf("Memory limit is smaller than the allowed limit. Container creation should've failed!") + } + +}