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  }