"bytes"
"fmt"
"os/exec"
- "reflect"
"testing"
- "github.com/google/go-cmp/cmp"
-
"ruderich.org/simon/safcm"
+ "ruderich.org/simon/safcm/testutil"
)
func TestSyncServicesSystemd(t *testing.T) {
}{
// NOTE: Also update MsgSyncResp in safcm test cases when
- // changing anything here!
+ // changing the MsgSyncResp struct!
{
"no service change necessary",
Stderr: &bytes.Buffer{},
}},
[]string{
- "4: sync remote: services: detected systemd",
- "4: sync remote: services: checking service-one service-two",
- `4: sync remote: services: running "/bin/systemctl" "show" "--property=ActiveState,UnitFileState,LoadError" "--" "service-one" "service-two"`,
- `5: sync remote: services: command stdout:
+ "4: services: checking service-one service-two (systemd detected)",
+ `4: services: running "/bin/systemctl" "show" "--property=ActiveState,UnitFileState,LoadError" "--" "service-one" "service-two"`,
+ `5: services: command stdout:
ActiveState=active
UnitFileState=enabled
LoadError=
Stderr: &bytes.Buffer{},
}},
[]string{
- "4: sync remote: services: detected systemd",
- "4: sync remote: services: checking service-one service-two",
- `4: sync remote: services: running "/bin/systemctl" "show" "--property=ActiveState,UnitFileState,LoadError" "--" "service-one" "service-two"`,
- `5: sync remote: services: command stdout:
+ "4: services: checking service-one service-two (systemd detected)",
+ `4: services: running "/bin/systemctl" "show" "--property=ActiveState,UnitFileState,LoadError" "--" "service-one" "service-two"`,
+ `5: services: command stdout:
ActiveState=active
UnitFileState=enabled
LoadError= ""
Stderr: &bytes.Buffer{},
}},
[]string{
- "4: sync remote: services: detected systemd",
- "4: sync remote: services: checking service-does-not-exist service-two",
- `4: sync remote: services: running "/bin/systemctl" "show" "--property=ActiveState,UnitFileState,LoadError" "--" "service-does-not-exist" "service-two"`,
- `5: sync remote: services: command stdout:
+ "4: services: checking service-does-not-exist service-two (systemd detected)",
+ `4: services: running "/bin/systemctl" "show" "--property=ActiveState,UnitFileState,LoadError" "--" "service-does-not-exist" "service-two"`,
+ `5: services: command stdout:
ActiveState=inactive
UnitFileState=
LoadError=org.freedesktop.systemd1.NoSuchUnit "Unit service-does-not-exist.service not found."
nil,
nil,
nil,
- []byte(`fake stderr`),
+ []byte("fake stderr"),
},
[]error{nil, nil, nil, nil},
[]*exec.Cmd{&exec.Cmd{
Stderr: &bytes.Buffer{},
}},
[]string{
- "4: sync remote: services: detected systemd",
- "4: sync remote: services: checking service-one service-two service-three",
- `4: sync remote: services: running "/bin/systemctl" "show" "--property=ActiveState,UnitFileState,LoadError" "--" "service-one" "service-two" "service-three"`,
- `5: sync remote: services: command stdout:
+ "4: services: checking service-one service-two service-three (systemd detected)",
+ `4: services: running "/bin/systemctl" "show" "--property=ActiveState,UnitFileState,LoadError" "--" "service-one" "service-two" "service-three"`,
+ `5: services: command stdout:
ActiveState=inactive
UnitFileState=enabled
LoadError=
UnitFileState=disabled
LoadError=
`,
- `4: sync remote: services: running "/bin/systemctl" "daemon-reload"`,
- "3: sync remote: services: starting service-one service-three",
- `4: sync remote: services: running "/bin/systemctl" "start" "--" "service-one" "service-three"`,
- "3: sync remote: services: enabling service-two service-three",
- `4: sync remote: services: running "/bin/systemctl" "enable" "--" "service-two" "service-three"`,
- "5: sync remote: services: command stderr:\nfake stderr",
+ `4: services: running "/bin/systemctl" "daemon-reload"`,
+ "3: services: starting service-one service-three",
+ `4: services: running "/bin/systemctl" "start" "--" "service-one" "service-three"`,
+ "3: services: enabling service-two service-three",
+ `4: services: running "/bin/systemctl" "enable" "--" "service-two" "service-three"`,
+ "5: services: command stderr:\nfake stderr",
},
safcm.MsgSyncResp{
ServiceChanges: []safcm.ServiceChange{
Stderr: &bytes.Buffer{},
}},
[]string{
- "4: sync remote: services: detected systemd",
- "4: sync remote: services: checking service-one service-two service-three",
- `4: sync remote: services: running "/bin/systemctl" "show" "--property=ActiveState,UnitFileState,LoadError" "--" "service-one" "service-two" "service-three"`,
- `5: sync remote: services: command stdout:
+ "4: services: checking service-one service-two service-three (systemd detected)",
+ `4: services: running "/bin/systemctl" "show" "--property=ActiveState,UnitFileState,LoadError" "--" "service-one" "service-two" "service-three"`,
+ `5: services: command stdout:
ActiveState=inactive
UnitFileState=enabled
LoadError=
[][]byte{
nil,
nil,
- []byte(`fake stderr`),
+ []byte("fake stderr"),
},
[]error{
nil,
Stderr: &bytes.Buffer{},
}},
[]string{
- "4: sync remote: services: detected systemd",
- "4: sync remote: services: checking service-one service-two service-three",
- `4: sync remote: services: running "/bin/systemctl" "show" "--property=ActiveState,UnitFileState,LoadError" "--" "service-one" "service-two" "service-three"`,
- `5: sync remote: services: command stdout:
+ "4: services: checking service-one service-two service-three (systemd detected)",
+ `4: services: running "/bin/systemctl" "show" "--property=ActiveState,UnitFileState,LoadError" "--" "service-one" "service-two" "service-three"`,
+ `5: services: command stdout:
ActiveState=inactive
UnitFileState=enabled
LoadError=
UnitFileState=disabled
LoadError=
`,
- `4: sync remote: services: running "/bin/systemctl" "daemon-reload"`,
- "3: sync remote: services: starting service-one service-three",
- `4: sync remote: services: running "/bin/systemctl" "start" "--" "service-one" "service-three"`,
- "5: sync remote: services: command stderr:\nfake stderr",
+ `4: services: running "/bin/systemctl" "daemon-reload"`,
+ "3: services: starting service-one service-three",
+ `4: services: running "/bin/systemctl" "start" "--" "service-one" "service-three"`,
+ "5: services: command stderr:\nfake stderr",
},
safcm.MsgSyncResp{
ServiceChanges: []safcm.ServiceChange{
for _, tc := range tests {
t.Run(tc.name, func(t *testing.T) {
- s, res := prepareSync(tc.req, &testRunner{
- t: t,
- expCmds: tc.expCmds,
- resStdout: tc.stdout,
- resStderr: tc.stderr,
- resError: tc.errors,
- })
-
- err := s.syncServicesSystemd()
- // Ugly but the simplest way to compare errors (including nil)
- if fmt.Sprintf("%s", err) != fmt.Sprintf("%s", tc.expErr) {
- t.Errorf("err = %#v, want %#v",
- err, tc.expErr)
- }
- dbg := res.Wait()
-
- if !reflect.DeepEqual(tc.expResp, s.resp) {
- t.Errorf("resp: %s",
- cmp.Diff(tc.expResp, s.resp))
- }
- if !reflect.DeepEqual(tc.expDbg, dbg) {
- t.Errorf("dbg: %s",
- cmp.Diff(tc.expDbg, dbg))
- }
+ s, res := prepareSync(tc.req, &testRunner{
+ t: t,
+ expCmds: tc.expCmds,
+ resStdout: tc.stdout,
+ resStderr: tc.stderr,
+ resError: tc.errors,
+ })
+
+ err := s.syncServicesSystemd()
+ testutil.AssertErrorEqual(t, "err", err, tc.expErr)
+ dbg := res.Wait()
+
+ testutil.AssertEqual(t, "resp", s.resp, tc.expResp)
+ testutil.AssertEqual(t, "dbg", dbg, tc.expDbg)
})
}
}