2020-04-21 20:38:12 +02:00
|
|
|
package ensure
|
2020-04-21 20:12:47 +02:00
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"testing"
|
|
|
|
)
|
|
|
|
|
|
|
|
type (
|
|
|
|
Dummy struct {
|
|
|
|
enforced bool
|
|
|
|
exec func() error
|
|
|
|
}
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestRunner(t *testing.T) {
|
|
|
|
d := &Dummy{}
|
|
|
|
r := Runner{
|
|
|
|
States: []Ensurer{d},
|
|
|
|
}
|
|
|
|
if err := r.Ensure(); err != nil {
|
|
|
|
t.Fatalf("ensure failed with: %s", err)
|
|
|
|
}
|
|
|
|
if !d.enforced {
|
|
|
|
t.Fatalf("state was not ensured")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestRecursiveRunner(t *testing.T) {
|
|
|
|
d := &Dummy{}
|
|
|
|
r := Runner{
|
|
|
|
States: []Ensurer{&Runner{States: []Ensurer{d}}},
|
|
|
|
}
|
|
|
|
if err := r.Ensure(); err != nil {
|
|
|
|
t.Fatalf("ensure failed with: %s", err)
|
|
|
|
}
|
|
|
|
if !d.enforced {
|
|
|
|
t.Fatalf("state was not ensured")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestWithCheck(t *testing.T) {
|
|
|
|
d := &Dummy{}
|
|
|
|
r := Runner{
|
|
|
|
Is: func() bool { return true },
|
|
|
|
States: []Ensurer{d},
|
|
|
|
}
|
|
|
|
if err := r.Ensure(); err != nil {
|
|
|
|
t.Fatalf("ensure failed with: %s", err)
|
|
|
|
}
|
|
|
|
if d.enforced {
|
|
|
|
t.Fatalf("state was ensured but shouldn't be")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestWithError(t *testing.T) {
|
|
|
|
d := &Dummy{exec: func() error { return fmt.Errorf("fail!") }}
|
|
|
|
r := Runner{
|
|
|
|
States: []Ensurer{d},
|
|
|
|
}
|
|
|
|
if err := r.Ensure(); err == nil {
|
|
|
|
t.Fatalf("ensure should have failed")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestWithParallel(t *testing.T) {
|
|
|
|
d := &Dummy{}
|
|
|
|
r := Runner{
|
|
|
|
Parallel: true,
|
|
|
|
States: []Ensurer{d},
|
|
|
|
}
|
|
|
|
if err := r.Ensure(); err != nil {
|
|
|
|
t.Fatalf("parallel should not have failed")
|
|
|
|
}
|
|
|
|
if !d.enforced {
|
|
|
|
t.Fatalf("state was not enforced")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestWithParallelWithError(t *testing.T) {
|
|
|
|
d := &Dummy{exec: func() error { return fmt.Errorf("fail!") }}
|
|
|
|
r := Runner{
|
|
|
|
Parallel: true,
|
|
|
|
States: []Ensurer{d},
|
|
|
|
}
|
|
|
|
if err := r.Ensure(); err == nil {
|
|
|
|
t.Fatalf("parallel should have failed")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (d *Dummy) Ensure() error {
|
|
|
|
d.enforced = true
|
|
|
|
if d.exec != nil {
|
|
|
|
return d.exec()
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
}
|