github.com/cloudfoundry-attic/garden-linux@v0.333.2-candidate/linux_container/cgroups_manager/fake_cgroups_manager/fake_cgroups_manager.go (about)

     1  package fake_cgroups_manager
     2  
     3  import (
     4  	"path"
     5  )
     6  
     7  type FakeCgroupsManager struct {
     8  	cgroupsPath string
     9  	id          string
    10  
    11  	SetError error
    12  	AddError error
    13  
    14  	setValues    []SetValue
    15  	addValues    []AddValue
    16  	getCallbacks []GetCallback
    17  	setCallbacks []SetCallback
    18  
    19  	subsystemPathCalls []string
    20  }
    21  
    22  type AddValue struct {
    23  	Pid        int
    24  	Subsystems []string
    25  }
    26  
    27  type SetValue struct {
    28  	Subsystem string
    29  	Name      string
    30  	Value     string
    31  }
    32  
    33  type GetCallback struct {
    34  	Subsystem string
    35  	Name      string
    36  	Callback  func() (string, error)
    37  }
    38  
    39  type SetCallback struct {
    40  	Subsystem string
    41  	Name      string
    42  	Callback  func() error
    43  }
    44  
    45  func New(cgroupsPath, id string) *FakeCgroupsManager {
    46  	return &FakeCgroupsManager{
    47  		cgroupsPath: cgroupsPath,
    48  		id:          id,
    49  	}
    50  }
    51  
    52  func (m *FakeCgroupsManager) Add(pid int, subsystems ...string) error {
    53  	if m.AddError != nil {
    54  		return m.AddError
    55  	}
    56  	m.addValues = append(m.addValues, AddValue{pid, subsystems})
    57  	return nil
    58  }
    59  
    60  func (m *FakeCgroupsManager) Set(subsystem, name, value string) error {
    61  	if m.SetError != nil {
    62  		return m.SetError
    63  	}
    64  
    65  	for _, cb := range m.setCallbacks {
    66  		if cb.Subsystem == subsystem && cb.Name == name {
    67  			return cb.Callback()
    68  		}
    69  	}
    70  
    71  	m.setValues = append(m.setValues, SetValue{subsystem, name, value})
    72  
    73  	return nil
    74  }
    75  
    76  func (m *FakeCgroupsManager) Get(subsytem, name string) (string, error) {
    77  	for _, cb := range m.getCallbacks {
    78  		if cb.Subsystem == subsytem && cb.Name == name {
    79  			return cb.Callback()
    80  		}
    81  	}
    82  
    83  	for _, val := range m.setValues {
    84  		if val.Subsystem == subsytem && val.Name == name {
    85  			return val.Value, nil
    86  		}
    87  	}
    88  
    89  	return "", nil
    90  }
    91  
    92  func (m *FakeCgroupsManager) SubsystemPath(subsystem string) (string, error) {
    93  	m.subsystemPathCalls = append(m.subsystemPathCalls, subsystem)
    94  	return path.Join(m.cgroupsPath, subsystem, "instance-"+m.id), nil
    95  }
    96  
    97  func (m *FakeCgroupsManager) SubsystemPathCallCount() int {
    98  	return len(m.subsystemPathCalls)
    99  }
   100  
   101  func (m *FakeCgroupsManager) SubsystemArgsForCall(index int) string {
   102  	return m.subsystemPathCalls[index]
   103  }
   104  
   105  func (m *FakeCgroupsManager) AddedValues() []AddValue {
   106  	return m.addValues
   107  }
   108  
   109  func (m *FakeCgroupsManager) SetValues() []SetValue {
   110  	return m.setValues
   111  }
   112  
   113  func (m *FakeCgroupsManager) WhenGetting(subsystem, name string, callback func() (string, error)) {
   114  	m.getCallbacks = append(m.getCallbacks, GetCallback{subsystem, name, callback})
   115  }
   116  
   117  func (m *FakeCgroupsManager) WhenSetting(subsystem, name string, callback func() error) {
   118  	m.setCallbacks = append(m.setCallbacks, SetCallback{subsystem, name, callback})
   119  }