75 lines
1.8 KiB
Go
75 lines
1.8 KiB
Go
package budget
|
|
|
|
import (
|
|
"os"
|
|
|
|
"github.com/godbus/dbus/v5"
|
|
)
|
|
|
|
type fakeCtl struct {
|
|
units []unit
|
|
groups map[string]string
|
|
states map[string]unitState
|
|
sets map[string][]property
|
|
starts map[string][]property
|
|
stops []string
|
|
stateErr map[string]error
|
|
startErr error
|
|
setErr error
|
|
events *[]string
|
|
onStart func(string, []property)
|
|
}
|
|
|
|
func newFake() *fakeCtl {
|
|
return &fakeCtl{groups: map[string]string{}, states: map[string]unitState{}, sets: map[string][]property{}, starts: map[string][]property{}, stateErr: map[string]error{}}
|
|
}
|
|
|
|
func (f *fakeCtl) Units() ([]unit, error) { return f.units, nil }
|
|
func (f *fakeCtl) Group(name string) (string, error) { return f.groups[name], nil }
|
|
func (f *fakeCtl) Set(name string, props []property) error {
|
|
if f.events != nil {
|
|
*f.events = append(*f.events, "set "+name)
|
|
}
|
|
f.sets[name] = props
|
|
return f.setErr
|
|
}
|
|
func (f *fakeCtl) Start(name string, props []property) error {
|
|
if f.startErr != nil {
|
|
return f.startErr
|
|
}
|
|
f.starts[name] = props
|
|
f.states[name] = unitState{Active: "activating"}
|
|
if f.onStart != nil {
|
|
f.onStart(name, props)
|
|
}
|
|
return nil
|
|
}
|
|
func (f *fakeCtl) State(name string) (unitState, error) {
|
|
if err := f.stateErr[name]; err != nil {
|
|
return unitState{}, err
|
|
}
|
|
if state, ok := f.states[name]; ok {
|
|
return state, nil
|
|
}
|
|
return unitState{}, dbus.Error{Name: noUnit}
|
|
}
|
|
func (f *fakeCtl) Stop(name string) error { f.stops = append(f.stops, name); return nil }
|
|
|
|
type fakeProcs struct {
|
|
tasks map[uint32]task
|
|
groups map[uint32]string
|
|
}
|
|
|
|
type failWriter struct {
|
|
err error
|
|
}
|
|
|
|
func (w failWriter) Write([]byte) (int, error) { return 0, w.err }
|
|
|
|
func (f fakeProcs) Snapshot(config) (map[uint32]task, error) { return f.tasks, nil }
|
|
func (f fakeProcs) Group(pid uint32) (string, error) {
|
|
if group, ok := f.groups[pid]; ok {
|
|
return group, nil
|
|
}
|
|
return "", os.ErrNotExist
|
|
}
|