diff --git a/pgraph/pgraph_test.go b/pgraph/pgraph_test.go index 583abbf4..cad42aed 100644 --- a/pgraph/pgraph_test.go +++ b/pgraph/pgraph_test.go @@ -26,6 +26,15 @@ import ( "time" ) +// NV is a helper function to make testing easier. It creates a new noop vertex. +func NV(s string) *Vertex { + obj, err := NewNoopRes(s) + if err != nil { + panic(err) // unlikely test failure! + } + return NewVertex(obj) +} + func TestPgraphT1(t *testing.T) { G := NewGraph("g1") @@ -38,8 +47,8 @@ func TestPgraphT1(t *testing.T) { t.Errorf("Should have 0 edges instead of: %d.", i) } - v1 := NewVertex(NewNoopRes("v1")) - v2 := NewVertex(NewNoopRes("v2")) + v1 := NV("v1") + v2 := NV("v2") e1 := NewEdge("e1") G.AddEdge(v1, v2, e1) @@ -55,12 +64,12 @@ func TestPgraphT1(t *testing.T) { func TestPgraphT2(t *testing.T) { G := NewGraph("g2") - v1 := NewVertex(NewNoopRes("v1")) - v2 := NewVertex(NewNoopRes("v2")) - v3 := NewVertex(NewNoopRes("v3")) - v4 := NewVertex(NewNoopRes("v4")) - v5 := NewVertex(NewNoopRes("v5")) - v6 := NewVertex(NewNoopRes("v6")) + v1 := NV("v1") + v2 := NV("v2") + v3 := NV("v3") + v4 := NV("v4") + v5 := NV("v5") + v6 := NV("v6") e1 := NewEdge("e1") e2 := NewEdge("e2") e3 := NewEdge("e3") @@ -82,12 +91,12 @@ func TestPgraphT2(t *testing.T) { func TestPgraphT3(t *testing.T) { G := NewGraph("g3") - v1 := NewVertex(NewNoopRes("v1")) - v2 := NewVertex(NewNoopRes("v2")) - v3 := NewVertex(NewNoopRes("v3")) - v4 := NewVertex(NewNoopRes("v4")) - v5 := NewVertex(NewNoopRes("v5")) - v6 := NewVertex(NewNoopRes("v6")) + v1 := NV("v1") + v2 := NV("v2") + v3 := NV("v3") + v4 := NV("v4") + v5 := NV("v5") + v6 := NV("v6") e1 := NewEdge("e1") e2 := NewEdge("e2") e3 := NewEdge("e3") @@ -123,9 +132,9 @@ func TestPgraphT3(t *testing.T) { func TestPgraphT4(t *testing.T) { G := NewGraph("g4") - v1 := NewVertex(NewNoopRes("v1")) - v2 := NewVertex(NewNoopRes("v2")) - v3 := NewVertex(NewNoopRes("v3")) + v1 := NV("v1") + v2 := NV("v2") + v3 := NV("v3") e1 := NewEdge("e1") e2 := NewEdge("e2") e3 := NewEdge("e3") @@ -145,12 +154,12 @@ func TestPgraphT4(t *testing.T) { func TestPgraphT5(t *testing.T) { G := NewGraph("g5") - v1 := NewVertex(NewNoopRes("v1")) - v2 := NewVertex(NewNoopRes("v2")) - v3 := NewVertex(NewNoopRes("v3")) - v4 := NewVertex(NewNoopRes("v4")) - v5 := NewVertex(NewNoopRes("v5")) - v6 := NewVertex(NewNoopRes("v6")) + v1 := NV("v1") + v2 := NV("v2") + v3 := NV("v3") + v4 := NV("v4") + v5 := NV("v5") + v6 := NV("v6") e1 := NewEdge("e1") e2 := NewEdge("e2") e3 := NewEdge("e3") @@ -174,12 +183,12 @@ func TestPgraphT5(t *testing.T) { func TestPgraphT6(t *testing.T) { G := NewGraph("g6") - v1 := NewVertex(NewNoopRes("v1")) - v2 := NewVertex(NewNoopRes("v2")) - v3 := NewVertex(NewNoopRes("v3")) - v4 := NewVertex(NewNoopRes("v4")) - v5 := NewVertex(NewNoopRes("v5")) - v6 := NewVertex(NewNoopRes("v6")) + v1 := NV("v1") + v2 := NV("v2") + v3 := NV("v3") + v4 := NV("v4") + v5 := NV("v5") + v6 := NV("v6") e1 := NewEdge("e1") e2 := NewEdge("e2") e3 := NewEdge("e3") @@ -212,9 +221,9 @@ func TestPgraphT6(t *testing.T) { func TestPgraphT7(t *testing.T) { G := NewGraph("g7") - v1 := NewVertex(NewNoopRes("v1")) - v2 := NewVertex(NewNoopRes("v2")) - v3 := NewVertex(NewNoopRes("v3")) + v1 := NV("v1") + v2 := NV("v2") + v3 := NV("v3") e1 := NewEdge("e1") e2 := NewEdge("e2") e3 := NewEdge("e3") @@ -253,28 +262,28 @@ func TestPgraphT7(t *testing.T) { func TestPgraphT8(t *testing.T) { - v1 := NewVertex(NewNoopRes("v1")) - v2 := NewVertex(NewNoopRes("v2")) - v3 := NewVertex(NewNoopRes("v3")) + v1 := NV("v1") + v2 := NV("v2") + v3 := NV("v3") if VertexContains(v1, []*Vertex{v1, v2, v3}) != true { t.Errorf("Should be true instead of false.") } - v4 := NewVertex(NewNoopRes("v4")) - v5 := NewVertex(NewNoopRes("v5")) - v6 := NewVertex(NewNoopRes("v6")) + v4 := NV("v4") + v5 := NV("v5") + v6 := NV("v6") if VertexContains(v4, []*Vertex{v5, v6}) != false { t.Errorf("Should be false instead of true.") } - v7 := NewVertex(NewNoopRes("v7")) - v8 := NewVertex(NewNoopRes("v8")) - v9 := NewVertex(NewNoopRes("v9")) + v7 := NV("v7") + v8 := NV("v8") + v9 := NV("v9") if VertexContains(v8, []*Vertex{v7, v8, v9}) != true { t.Errorf("Should be true instead of false.") } - v1b := NewVertex(NewNoopRes("v1")) // same value, different objects + v1b := NV("v1") // same value, different objects if VertexContains(v1b, []*Vertex{v1, v2, v3}) != false { t.Errorf("Should be false instead of true.") } @@ -283,12 +292,12 @@ func TestPgraphT8(t *testing.T) { func TestPgraphT9(t *testing.T) { G := NewGraph("g9") - v1 := NewVertex(NewNoopRes("v1")) - v2 := NewVertex(NewNoopRes("v2")) - v3 := NewVertex(NewNoopRes("v3")) - v4 := NewVertex(NewNoopRes("v4")) - v5 := NewVertex(NewNoopRes("v5")) - v6 := NewVertex(NewNoopRes("v6")) + v1 := NV("v1") + v2 := NV("v2") + v3 := NV("v3") + v4 := NV("v4") + v5 := NV("v5") + v6 := NV("v6") e1 := NewEdge("e1") e2 := NewEdge("e2") e3 := NewEdge("e3") @@ -359,12 +368,12 @@ func TestPgraphT9(t *testing.T) { func TestPgraphT10(t *testing.T) { G := NewGraph("g10") - v1 := NewVertex(NewNoopRes("v1")) - v2 := NewVertex(NewNoopRes("v2")) - v3 := NewVertex(NewNoopRes("v3")) - v4 := NewVertex(NewNoopRes("v4")) - v5 := NewVertex(NewNoopRes("v5")) - v6 := NewVertex(NewNoopRes("v6")) + v1 := NV("v1") + v2 := NV("v2") + v3 := NV("v3") + v4 := NV("v4") + v5 := NV("v5") + v6 := NV("v6") e1 := NewEdge("e1") e2 := NewEdge("e2") e3 := NewEdge("e3") @@ -399,8 +408,8 @@ func TestPgraphReachability0(t *testing.T) { } { G := NewGraph("g") - v1 := NewVertex(NewNoopRes("v1")) - v6 := NewVertex(NewNoopRes("v6")) + v1 := NV("v1") + v6 := NV("v6") result := G.Reachability(v1, v6) expected := []*Vertex{} @@ -416,12 +425,12 @@ func TestPgraphReachability0(t *testing.T) { } { G := NewGraph("g") - v1 := NewVertex(NewNoopRes("v1")) - v2 := NewVertex(NewNoopRes("v2")) - v3 := NewVertex(NewNoopRes("v3")) - v4 := NewVertex(NewNoopRes("v4")) - v5 := NewVertex(NewNoopRes("v5")) - v6 := NewVertex(NewNoopRes("v6")) + v1 := NV("v1") + v2 := NV("v2") + v3 := NV("v3") + v4 := NV("v4") + v5 := NV("v5") + v6 := NV("v6") e1 := NewEdge("e1") e2 := NewEdge("e2") e3 := NewEdge("e3") @@ -450,12 +459,12 @@ func TestPgraphReachability0(t *testing.T) { // simple linear path func TestPgraphReachability1(t *testing.T) { G := NewGraph("g") - v1 := NewVertex(NewNoopRes("v1")) - v2 := NewVertex(NewNoopRes("v2")) - v3 := NewVertex(NewNoopRes("v3")) - v4 := NewVertex(NewNoopRes("v4")) - v5 := NewVertex(NewNoopRes("v5")) - v6 := NewVertex(NewNoopRes("v6")) + v1 := NV("v1") + v2 := NV("v2") + v3 := NV("v3") + v4 := NV("v4") + v5 := NV("v5") + v6 := NV("v6") e1 := NewEdge("e1") e2 := NewEdge("e2") e3 := NewEdge("e3") @@ -484,12 +493,12 @@ func TestPgraphReachability1(t *testing.T) { // pick one of two correct paths func TestPgraphReachability2(t *testing.T) { G := NewGraph("g") - v1 := NewVertex(NewNoopRes("v1")) - v2 := NewVertex(NewNoopRes("v2")) - v3 := NewVertex(NewNoopRes("v3")) - v4 := NewVertex(NewNoopRes("v4")) - v5 := NewVertex(NewNoopRes("v5")) - v6 := NewVertex(NewNoopRes("v6")) + v1 := NV("v1") + v2 := NV("v2") + v3 := NV("v3") + v4 := NV("v4") + v5 := NV("v5") + v6 := NV("v6") e1 := NewEdge("e1") e2 := NewEdge("e2") e3 := NewEdge("e3") @@ -521,12 +530,12 @@ func TestPgraphReachability2(t *testing.T) { // pick shortest path func TestPgraphReachability3(t *testing.T) { G := NewGraph("g") - v1 := NewVertex(NewNoopRes("v1")) - v2 := NewVertex(NewNoopRes("v2")) - v3 := NewVertex(NewNoopRes("v3")) - v4 := NewVertex(NewNoopRes("v4")) - v5 := NewVertex(NewNoopRes("v5")) - v6 := NewVertex(NewNoopRes("v6")) + v1 := NV("v1") + v2 := NV("v2") + v3 := NV("v3") + v4 := NV("v4") + v5 := NV("v5") + v6 := NV("v6") e1 := NewEdge("e1") e2 := NewEdge("e2") e3 := NewEdge("e3") @@ -556,12 +565,12 @@ func TestPgraphReachability3(t *testing.T) { // direct path func TestPgraphReachability4(t *testing.T) { G := NewGraph("g") - v1 := NewVertex(NewNoopRes("v1")) - v2 := NewVertex(NewNoopRes("v2")) - v3 := NewVertex(NewNoopRes("v3")) - v4 := NewVertex(NewNoopRes("v4")) - v5 := NewVertex(NewNoopRes("v5")) - v6 := NewVertex(NewNoopRes("v6")) + v1 := NV("v1") + v2 := NV("v2") + v3 := NV("v3") + v4 := NV("v4") + v5 := NV("v5") + v6 := NV("v6") e1 := NewEdge("e1") e2 := NewEdge("e2") e3 := NewEdge("e3") @@ -589,12 +598,12 @@ func TestPgraphReachability4(t *testing.T) { } func TestPgraphT11(t *testing.T) { - v1 := NewVertex(NewNoopRes("v1")) - v2 := NewVertex(NewNoopRes("v2")) - v3 := NewVertex(NewNoopRes("v3")) - v4 := NewVertex(NewNoopRes("v4")) - v5 := NewVertex(NewNoopRes("v5")) - v6 := NewVertex(NewNoopRes("v6")) + v1 := NV("v1") + v2 := NV("v2") + v3 := NV("v3") + v4 := NV("v4") + v5 := NV("v5") + v6 := NV("v6") if rev := Reverse([]*Vertex{}); !reflect.DeepEqual(rev, []*Vertex{}) { t.Errorf("Reverse of vertex slice failed.") diff --git a/resources/exec.go b/resources/exec.go index 75a8b400..b81112b7 100644 --- a/resources/exec.go +++ b/resources/exec.go @@ -51,7 +51,7 @@ type ExecRes struct { } // NewExecRes is a constructor for this resource. It also calls Init() for you. -func NewExecRes(name, cmd, shell string, timeout int, watchcmd, watchshell, ifcmd, ifshell string, pollint int, state string) *ExecRes { +func NewExecRes(name, cmd, shell string, timeout int, watchcmd, watchshell, ifcmd, ifshell string, pollint int, state string) (*ExecRes, error) { obj := &ExecRes{ BaseRes: BaseRes{ Name: name, @@ -66,8 +66,7 @@ func NewExecRes(name, cmd, shell string, timeout int, watchcmd, watchshell, ifcm PollInt: pollint, State: state, } - obj.Init() - return obj + return obj, obj.Init() } // Init runs some startup code for this resource. diff --git a/resources/file.go b/resources/file.go index 0af51e86..39b5c1f9 100644 --- a/resources/file.go +++ b/resources/file.go @@ -60,7 +60,7 @@ type FileRes struct { } // NewFileRes is a constructor for this resource. It also calls Init() for you. -func NewFileRes(name, path, dirname, basename, content, source, state string, recurse, force bool) *FileRes { +func NewFileRes(name, path, dirname, basename, content, source, state string, recurse, force bool) (*FileRes, error) { obj := &FileRes{ BaseRes: BaseRes{ Name: name, @@ -74,8 +74,7 @@ func NewFileRes(name, path, dirname, basename, content, source, state string, re Recurse: recurse, Force: force, } - obj.Init() - return obj + return obj, obj.Init() } // Init runs some startup code for this resource. diff --git a/resources/msg.go b/resources/msg.go index af5318dc..a499b1b4 100644 --- a/resources/msg.go +++ b/resources/msg.go @@ -54,7 +54,7 @@ type MsgUID struct { } // NewMsgRes is a constructor for this resource. -func NewMsgRes(name, body, priority string, journal, syslog bool, fields map[string]string) *MsgRes { +func NewMsgRes(name, body, priority string, journal, syslog bool, fields map[string]string) (*MsgRes, error) { message := name if body != "" { message = body @@ -71,8 +71,7 @@ func NewMsgRes(name, body, priority string, journal, syslog bool, fields map[str Syslog: syslog, } - obj.Init() - return obj + return obj, obj.Init() } // Init runs some startup code for this resource. diff --git a/resources/noop.go b/resources/noop.go index 51f70a1d..e06eef8c 100644 --- a/resources/noop.go +++ b/resources/noop.go @@ -36,15 +36,14 @@ type NoopRes struct { } // NewNoopRes is a constructor for this resource. It also calls Init() for you. -func NewNoopRes(name string) *NoopRes { +func NewNoopRes(name string) (*NoopRes, error) { obj := &NoopRes{ BaseRes: BaseRes{ Name: name, }, Comment: "", } - obj.Init() - return obj + return obj, obj.Init() } // Init runs some startup code for this resource. diff --git a/resources/pkg.go b/resources/pkg.go index db9607f0..3dee52cb 100644 --- a/resources/pkg.go +++ b/resources/pkg.go @@ -48,7 +48,7 @@ type PkgRes struct { } // NewPkgRes is a constructor for this resource. It also calls Init() for you. -func NewPkgRes(name, state string, allowuntrusted, allownonfree, allowunsupported bool) *PkgRes { +func NewPkgRes(name, state string, allowuntrusted, allownonfree, allowunsupported bool) (*PkgRes, error) { obj := &PkgRes{ BaseRes: BaseRes{ Name: name, @@ -58,8 +58,7 @@ func NewPkgRes(name, state string, allowuntrusted, allownonfree, allowunsupporte AllowNonFree: allownonfree, AllowUnsupported: allowunsupported, } - obj.Init() // XXX: on error return nil, or separate error return? - return obj + return obj, obj.Init() } // Init runs some startup code for this resource. diff --git a/resources/svc.go b/resources/svc.go index 4ccfc5a9..539b1a30 100644 --- a/resources/svc.go +++ b/resources/svc.go @@ -46,7 +46,7 @@ type SvcRes struct { } // NewSvcRes is a constructor for this resource. It also calls Init() for you. -func NewSvcRes(name, state, startup string) *SvcRes { +func NewSvcRes(name, state, startup string) (*SvcRes, error) { obj := &SvcRes{ BaseRes: BaseRes{ Name: name, @@ -54,8 +54,7 @@ func NewSvcRes(name, state, startup string) *SvcRes { State: state, Startup: startup, } - obj.Init() - return obj + return obj, obj.Init() } // Init runs some startup code for this resource. diff --git a/resources/timer.go b/resources/timer.go index 8852212c..3d39690a 100644 --- a/resources/timer.go +++ b/resources/timer.go @@ -42,15 +42,14 @@ type TimerUID struct { } // NewTimerRes is a constructor for this resource. It also calls Init() for you. -func NewTimerRes(name string, interval int) *TimerRes { +func NewTimerRes(name string, interval int) (*TimerRes, error) { obj := &TimerRes{ BaseRes: BaseRes{ Name: name, }, Interval: interval, } - obj.Init() - return obj + return obj, obj.Init() } // Init runs some startup code for this resource. diff --git a/resources/virt.go b/resources/virt.go index a8c7c3c3..bfce8c2e 100644 --- a/resources/virt.go +++ b/resources/virt.go @@ -60,7 +60,7 @@ type VirtRes struct { } // NewVirtRes is a constructor for this resource. It also calls Init() for you. -func NewVirtRes(name string, uri, state string, transient bool, cpus uint, memory uint64) *VirtRes { +func NewVirtRes(name string, uri, state string, transient bool, cpus uint, memory uint64) (*VirtRes, error) { obj := &VirtRes{ BaseRes: BaseRes{ Name: name, @@ -71,8 +71,7 @@ func NewVirtRes(name string, uri, state string, transient bool, cpus uint, memor CPUs: cpus, Memory: memory, } - obj.Init() - return obj + return obj, obj.Init() } // Init runs some startup code for this resource.