... | ... |
@@ -230,6 +230,9 @@ func (container *Container) start() error { |
230 | 230 |
} |
231 | 231 |
|
232 | 232 |
func (container *Container) Start() error { |
233 |
+ if container.State.Running { |
|
234 |
+ return fmt.Errorf("The container %s is already running.", container.Id) |
|
235 |
+ } |
|
233 | 236 |
if err := container.EnsureMounted(); err != nil { |
234 | 237 |
return err |
235 | 238 |
} |
... | ... |
@@ -231,6 +231,40 @@ func TestCommitRun(t *testing.T) { |
231 | 231 |
} |
232 | 232 |
} |
233 | 233 |
|
234 |
+func TestStart(t *testing.T) { |
|
235 |
+ runtime, err := newTestRuntime() |
|
236 |
+ if err != nil { |
|
237 |
+ t.Fatal(err) |
|
238 |
+ } |
|
239 |
+ defer nuke(runtime) |
|
240 |
+ container, err := runtime.Create( |
|
241 |
+ &Config{ |
|
242 |
+ Image: GetTestImage(runtime).Id, |
|
243 |
+ Memory: 33554432, |
|
244 |
+ Cmd: []string{"/bin/cat"}, |
|
245 |
+ OpenStdin: true, |
|
246 |
+ }, |
|
247 |
+ ) |
|
248 |
+ if err != nil { |
|
249 |
+ t.Fatal(err) |
|
250 |
+ } |
|
251 |
+ defer runtime.Destroy(container) |
|
252 |
+ |
|
253 |
+ if err := container.Start(); err != nil { |
|
254 |
+ t.Fatal(err) |
|
255 |
+ } |
|
256 |
+ |
|
257 |
+ // Give some time to the process to start |
|
258 |
+ container.WaitTimeout(500 * time.Millisecond) |
|
259 |
+ |
|
260 |
+ if !container.State.Running { |
|
261 |
+ t.Errorf("Container should be running") |
|
262 |
+ } |
|
263 |
+ if err := container.Start(); err == nil { |
|
264 |
+ t.Fatalf("A running containter should be able to be started") |
|
265 |
+ } |
|
266 |
+} |
|
267 |
+ |
|
234 | 268 |
func TestRun(t *testing.T) { |
235 | 269 |
runtime, err := newTestRuntime() |
236 | 270 |
if err != nil { |