"log"
"os"
"path/filepath"
- "reflect"
"testing"
- "github.com/google/go-cmp/cmp"
-
"ruderich.org/simon/safcm"
+ "ruderich.org/simon/safcm/testutil"
)
func TestHostSyncReq(t *testing.T) {
}
for _, tc := range tests {
- err = os.Chdir(filepath.Join(cwd, "testdata", tc.project))
- if err != nil {
- t.Fatal(err)
- }
+ t.Run(tc.name, func(t *testing.T) {
+ err = os.Chdir(filepath.Join(cwd,
+ "testdata", tc.project))
+ if err != nil {
+ t.Fatal(err)
+ }
- // `safcm fixperms` in case user has strict umask
- log.SetOutput(io.Discard)
- err := MainFixperms()
- if err != nil {
- t.Fatal(err)
- }
- log.SetOutput(os.Stderr)
+ // `safcm fixperms` in case user has strict umask
+ log.SetOutput(io.Discard)
+ err := MainFixperms()
+ if err != nil {
+ t.Fatal(err)
+ }
+ log.SetOutput(os.Stderr)
- cfg, allHosts, allGroups, err := LoadBaseFiles()
- if err != nil {
- t.Fatal(err)
- }
- cfg.LogLevel = tc.level
+ cfg, allHosts, allGroups, err := LoadBaseFiles()
+ if err != nil {
+ t.Fatal(err)
+ }
+ cfg.LogLevel = tc.level
- var events []string
- ch := make(chan Event)
- done := make(chan struct{})
- go func() {
- for {
- x, ok := <-ch
- if !ok {
- break
+ var events []string
+ ch := make(chan Event)
+ done := make(chan struct{})
+ go func() {
+ for {
+ x, ok := <-ch
+ if !ok {
+ break
+ }
+ if x.ConnEvent.Type != 0 {
+ panic("unexpected ConnEvent")
+ }
+ events = append(events,
+ fmt.Sprintf("%s: %v %d %s",
+ x.Host.Name,
+ x.Error, x.Log.Level,
+ x.Log.Text))
}
- if x.ConnEvent.Type != 0 {
- panic("unexpected ConnEvent")
- }
- events = append(events,
- fmt.Sprintf("%s: %v %d %s",
- x.Host.Name,
- x.Error, x.Log.Level,
- x.Log.Text))
- }
- done <- struct{}{}
- }()
+ done <- struct{}{}
+ }()
- s := &Sync{
- host: allHosts.Map[tc.host],
- config: cfg,
- allHosts: allHosts,
- allGroups: allGroups,
- events: ch,
- }
+ s := &Sync{
+ host: allHosts.Map[tc.host],
+ config: cfg,
+ allHosts: allHosts,
+ allGroups: allGroups,
+ events: ch,
+ }
- res, err := s.hostSyncReq(tc.detected)
- if !reflect.DeepEqual(tc.exp, res) {
- t.Errorf("%s: res: %s", tc.name,
- cmp.Diff(tc.exp, res))
- }
- // Ugly but the simplest way to compare errors (including nil)
- if fmt.Sprintf("%s", err) != fmt.Sprintf("%s", tc.expErr) {
- t.Errorf("%s: err = %#v, want %#v",
- tc.name, err, tc.expErr)
- }
+ res, err := s.hostSyncReq(tc.detected)
- close(ch)
- <-done
- if !reflect.DeepEqual(tc.expEvents, events) {
- t.Errorf("%s: events: %s", tc.name,
- cmp.Diff(tc.expEvents, events))
- }
+ testutil.AssertEqual(t, "res", res, tc.exp)
+ testutil.AssertErrorEqual(t, "err", err, tc.expErr)
+ close(ch)
+ <-done
+ testutil.AssertEqual(t, "events",
+ events, tc.expEvents)
+ })
}
}