github.com/schwarzm/garden-linux@v0.0.0-20150507151835-33bca2147c47/container_pool/fake_container_pool/fake_container.go (about) 1 package fake_container_pool 2 3 import ( 4 "io" 5 "sync" 6 "time" 7 8 "github.com/cloudfoundry-incubator/garden" 9 "github.com/cloudfoundry-incubator/garden/fakes" 10 ) 11 12 type FakeContainer struct { 13 *fakes.FakeContainer 14 15 Spec garden.ContainerSpec 16 17 SnapshotError error 18 SavedSnapshots []io.Writer 19 snapshotMutex *sync.RWMutex 20 21 StartError error 22 Started bool 23 24 CleanedUp bool 25 } 26 27 func NewFakeContainer(spec garden.ContainerSpec) *FakeContainer { 28 return &FakeContainer{ 29 Spec: spec, 30 31 FakeContainer: new(fakes.FakeContainer), 32 33 snapshotMutex: new(sync.RWMutex), 34 } 35 } 36 37 func (c *FakeContainer) ID() string { 38 return c.Spec.Handle 39 } 40 41 func (c *FakeContainer) Handle() string { 42 return c.Spec.Handle 43 } 44 45 func (c *FakeContainer) HasProperties(ps garden.Properties) bool { 46 containerProps := c.Spec.Properties 47 48 for key, val := range ps { 49 cval, ok := containerProps[key] 50 if !ok { 51 return false 52 } 53 54 if cval != val { 55 return false 56 } 57 } 58 59 return true 60 } 61 62 func (c *FakeContainer) Start() error { 63 c.Started = true 64 return c.StartError 65 } 66 67 func (c *FakeContainer) Cleanup() { 68 c.CleanedUp = true 69 } 70 71 func (c *FakeContainer) GraceTime() time.Duration { 72 return c.Spec.GraceTime 73 } 74 75 func (c *FakeContainer) Snapshot(snapshot io.Writer) error { 76 if c.SnapshotError != nil { 77 return c.SnapshotError 78 } 79 80 c.snapshotMutex.Lock() 81 defer c.snapshotMutex.Unlock() 82 83 c.SavedSnapshots = append(c.SavedSnapshots, snapshot) 84 85 return nil 86 }