1 // SPDX-License-Identifier: GPL-3.0-or-later
2 // Copyright (C) 2021-2024 Simon Ruderich
13 "ruderich.org/simon/safcm"
14 "ruderich.org/simon/safcm/testutil"
17 func TestSyncPackagesDebian(t *testing.T) {
26 expResp safcm.MsgSyncResp
30 // NOTE: Also update MsgSyncResp in safcm test cases when
31 // changing the MsgSyncResp struct!
34 "packages already installed",
42 []byte(`install ok installed golang
43 install ok installed golang-1.16
44 install ok installed golang-1.16-doc
45 install ok installed golang-1.16-go
46 install ok installed golang-1.16-src
47 hold ok installed package-one
48 install ok installed package-two
54 Path: "/usr/bin/dpkg-query",
56 "/usr/bin/dpkg-query",
58 `--showformat=${Status}\t${Package}\n`,
60 Stdout: &bytes.Buffer{},
61 Stderr: &bytes.Buffer{},
64 "4: packages: checking package-one package-two (debian detected)",
65 `4: packages: running "/usr/bin/dpkg-query" "--show" "--showformat=${Status}\\t${Package}\\n"`,
66 `5: packages: command stdout:
67 install ok installed golang
68 install ok installed golang-1.16
69 install ok installed golang-1.16-doc
70 install ok installed golang-1.16-go
71 install ok installed golang-1.16-src
72 hold ok installed package-one
73 install ok installed package-two
81 "packages not yet installed",
90 []byte(`install ok installed golang
91 install ok installed golang-1.16
92 install ok installed golang-1.16-doc
93 install ok installed golang-1.16-go
94 install ok installed golang-1.16-src
95 install ok installed package-two
97 []byte("fake stdout/stderr"),
102 Path: "/usr/bin/dpkg-query",
104 "/usr/bin/dpkg-query",
106 `--showformat=${Status}\t${Package}\n`,
108 Stdout: &bytes.Buffer{},
109 Stderr: &bytes.Buffer{},
111 Path: "/usr/bin/apt-get",
118 "--no-install-recommends",
119 "-o", "Dpkg::Options::=--force-confdef",
120 "-o", "Dpkg::Options::=--force-confold",
124 Env: append(os.Environ(),
125 "DEBIAN_FRONTEND=noninteractive",
129 "4: packages: checking package-one package-two package-three (debian detected)",
130 `4: packages: running "/usr/bin/dpkg-query" "--show" "--showformat=${Status}\\t${Package}\\n"`,
131 `5: packages: command stdout:
132 install ok installed golang
133 install ok installed golang-1.16
134 install ok installed golang-1.16-doc
135 install ok installed golang-1.16-go
136 install ok installed golang-1.16-src
137 install ok installed package-two
139 "3: packages: installing package-one package-three",
140 `4: packages: running "/usr/bin/apt-get" "install" "--assume-yes" "--no-remove" "--no-upgrade" "--no-install-recommends" "-o" "Dpkg::Options::=--force-confdef" "-o" "Dpkg::Options::=--force-confold" "package-one" "package-three"`,
141 "5: packages: command output:\nfake stdout/stderr",
144 PackageChanges: []safcm.PackageChange{
149 Name: "package-three",
157 "packages not yet installed (error)",
165 []byte(`install ok installed golang
166 install ok installed golang-1.16
167 install ok installed golang-1.16-doc
168 install ok installed golang-1.16-go
169 install ok installed golang-1.16-src
171 []byte("fake stdout/stderr"),
176 fmt.Errorf("fake error"),
179 Path: "/usr/bin/dpkg-query",
181 "/usr/bin/dpkg-query",
183 `--showformat=${Status}\t${Package}\n`,
185 Stdout: &bytes.Buffer{},
186 Stderr: &bytes.Buffer{},
188 Path: "/usr/bin/apt-get",
195 "--no-install-recommends",
196 "-o", "Dpkg::Options::=--force-confdef",
197 "-o", "Dpkg::Options::=--force-confold",
201 Env: append(os.Environ(),
202 "DEBIAN_FRONTEND=noninteractive",
206 "4: packages: checking package-one package-two (debian detected)",
207 `4: packages: running "/usr/bin/dpkg-query" "--show" "--showformat=${Status}\\t${Package}\\n"`,
208 `5: packages: command stdout:
209 install ok installed golang
210 install ok installed golang-1.16
211 install ok installed golang-1.16-doc
212 install ok installed golang-1.16-go
213 install ok installed golang-1.16-src
215 "3: packages: installing package-one package-two",
216 `4: packages: running "/usr/bin/apt-get" "install" "--assume-yes" "--no-remove" "--no-upgrade" "--no-install-recommends" "-o" "Dpkg::Options::=--force-confdef" "-o" "Dpkg::Options::=--force-confold" "package-one" "package-two"`,
217 "5: packages: command output:\nfake stdout/stderr",
220 PackageChanges: []safcm.PackageChange{
229 fmt.Errorf(`"/usr/bin/apt-get" "install" "--assume-yes" "--no-remove" "--no-upgrade" "--no-install-recommends" "-o" "Dpkg::Options::=--force-confdef" "-o" "Dpkg::Options::=--force-confold" "package-one" "package-two" failed: fake error; output: "fake stdout/stderr"`),
233 "packages not yet installed (dry-run)",
242 []byte(`install ok installed golang
243 install ok installed golang-1.16
244 install ok installed golang-1.16-doc
245 install ok installed golang-1.16-go
246 install ok installed golang-1.16-src
252 Path: "/usr/bin/dpkg-query",
254 "/usr/bin/dpkg-query",
256 `--showformat=${Status}\t${Package}\n`,
258 Stdout: &bytes.Buffer{},
259 Stderr: &bytes.Buffer{},
262 "4: packages: checking package-one package-two (debian detected)",
263 `4: packages: running "/usr/bin/dpkg-query" "--show" "--showformat=${Status}\\t${Package}\\n"`,
264 `5: packages: command stdout:
265 install ok installed golang
266 install ok installed golang-1.16
267 install ok installed golang-1.16-doc
268 install ok installed golang-1.16-go
269 install ok installed golang-1.16-src
273 PackageChanges: []safcm.PackageChange{
286 for _, tc := range tests {
287 t.Run(tc.name, func(t *testing.T) {
288 s, res := prepareSync(tc.req, &testRunner{
291 resStdout: tc.stdout,
292 resStderr: tc.stderr,
296 err := s.syncPackagesDebian()
297 testutil.AssertErrorEqual(t, "err", err, tc.expErr)
300 testutil.AssertEqual(t, "resp", s.resp, tc.expResp)
301 testutil.AssertEqual(t, "dbg", dbg, tc.expDbg)