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 }