Skip to content

Commit f42cb9c

Browse files
committed
Made parser testable
1 parent 799c99b commit f42cb9c

File tree

4 files changed

+35141
-25
lines changed

4 files changed

+35141
-25
lines changed

apt.go

+7-5
Original file line numberDiff line numberDiff line change
@@ -47,19 +47,22 @@ func List() ([]*Package, error) {
4747
// Search list packages available in the system that match the search
4848
// pattern
4949
func Search(pattern string) ([]*Package, error) {
50-
res := []*Package{}
51-
5250
cmd := exec.Command("dpkg-query", "-W", "-f=${Package}\t${Architecture}\t${db:Status-Status}\t${Version}\t${Installed-Size}\t${Binary:summary}\n", "*"+pattern+"*")
5351

5452
out, err := cmd.CombinedOutput()
5553
if err != nil {
5654
// Avoid returning an error if the list is empty
5755
if bytes.Contains(out, []byte("no packages found matching")) {
58-
return res, nil
56+
return []*Package{}, nil
5957
}
6058
return nil, fmt.Errorf("running dpkg-query: %s - %s", err, out)
6159
}
6260

61+
return parseDpkgQueryOutput(out), nil
62+
}
63+
64+
func parseDpkgQueryOutput(out []byte) []*Package {
65+
res := []*Package{}
6366
scanner := bufio.NewScanner(bytes.NewReader(out))
6467
for scanner.Scan() {
6568
data := strings.Split(scanner.Text(), "\t")
@@ -77,8 +80,7 @@ func Search(pattern string) ([]*Package, error) {
7780
ShortDescription: data[5],
7881
})
7982
}
80-
81-
return res, nil
83+
return res
8284
}
8385

8486
// CheckForUpdates runs an apt update to retrieve new packages available

apt_test.go

+14-20
Original file line numberDiff line numberDiff line change
@@ -19,35 +19,29 @@
1919
package apt
2020

2121
import (
22+
"encoding/json"
2223
"fmt"
24+
"io/ioutil"
2325
"testing"
2426

2527
"github.com/stretchr/testify/require"
2628
)
2729

2830
func TestList(t *testing.T) {
29-
list, err := List()
30-
require.NoError(t, err, "running List command")
31-
require.NotEmpty(t, list, "List command result")
31+
out, err := ioutil.ReadFile("testdata/dpkg-query-output-1.txt")
32+
require.NoError(t, err, "Reading test input data")
33+
list := parseDpkgQueryOutput(out)
3234

33-
var dpkg *Package
34-
statusCount := map[string]int{}
35-
for _, p := range list {
36-
if p.Name == "dpkg" {
37-
dpkg = p
38-
continue
39-
}
40-
statusCount[p.Status]++
41-
// fmt.Printf("%+v\n", p)
35+
// Check list with expected output
36+
data, err := ioutil.ReadFile("testdata/dpkg-query-output-1-result.json")
37+
require.NoError(t, err, "Reading test result data")
38+
var expected []*Package
39+
err = json.Unmarshal(data, &expected)
40+
require.NoError(t, err, "Unmarshaling test result data")
41+
require.Equal(t, len(expected), len(list), "Length of result")
42+
for i := range expected {
43+
require.Equal(t, expected[i], list[i], "Element", i, "of the result")
4244
}
43-
44-
// fmt.Println("Summary:")
45-
// for k, v := range statusCount {
46-
// fmt.Printf(" %s: %d\n", k, v)
47-
// }
48-
49-
require.NotNil(t, dpkg, "search package 'dpkg'")
50-
require.Equal(t, "installed", dpkg.Status, "'dpkg' status")
5145
}
5246

5347
func TestSearch(t *testing.T) {

0 commit comments

Comments
 (0)