go.mondoo.com/cnquery@v0.0.0-20231005093811-59568235f6ea/providers/os/resources/packages/apk_packages_test.go (about) 1 // Copyright (c) Mondoo, Inc. 2 // SPDX-License-Identifier: BUSL-1.1 3 4 package packages_test 5 6 import ( 7 "testing" 8 9 "github.com/stretchr/testify/assert" 10 "go.mondoo.com/cnquery/providers/os/connection/mock" 11 "go.mondoo.com/cnquery/providers/os/resources/packages" 12 ) 13 14 func TestAlpineApkdbParser(t *testing.T) { 15 mock, err := mock.New("./testdata/packages_apk.toml", nil) 16 if err != nil { 17 t.Fatal(err) 18 } 19 f, err := mock.FileSystem().Open("/lib/apk/db/installed") 20 if err != nil { 21 t.Fatal(err) 22 } 23 defer f.Close() 24 25 m := packages.ParseApkDbPackages(f) 26 assert.Equal(t, 7, len(m), "detected the right amount of packages") 27 28 var p packages.Package 29 p = packages.Package{ 30 Name: "musl", 31 Version: "1510953106:1.1.18-r2", 32 Arch: "x86_64", 33 Description: "the musl c library (libc) implementation", 34 Origin: "musl", 35 Format: packages.AlpinePkgFormat, 36 } 37 assert.Contains(t, m, p, "musl detected") 38 39 p = packages.Package{ 40 Name: "libressl2.6-libcrypto", 41 Version: "1510257703:2.6.3-r0", 42 Arch: "x86_64", 43 Description: "libressl libcrypto library", 44 Origin: "libressl", 45 Format: packages.AlpinePkgFormat, 46 } 47 assert.Contains(t, m, p, "libcrypto detected") 48 49 p = packages.Package{ 50 Name: "libressl2.6-libssl", 51 Version: "1510257703:2.6.3-r0", 52 Arch: "x86_64", 53 Description: "libressl libssl library", 54 Origin: "libressl", 55 Format: packages.AlpinePkgFormat, 56 } 57 assert.Contains(t, m, p, "libssl detected") 58 59 p = packages.Package{ 60 Name: "apk-tools", 61 Version: "1515485577:2.8.2-r0", 62 Arch: "x86_64", 63 Description: "Alpine Package Keeper - package manager for alpine", 64 Origin: "apk-tools", 65 Format: packages.AlpinePkgFormat, 66 } 67 assert.Contains(t, m, p, "apk-tools detected") 68 69 p = packages.Package{ 70 Name: "busybox", 71 Version: "1513075346:1.27.2-r7", 72 Arch: "x86_64", 73 Description: "Size optimized toolbox of many common UNIX utilities", 74 Origin: "busybox", 75 Format: packages.AlpinePkgFormat, 76 } 77 assert.Contains(t, m, p, "apk-tools detected") 78 79 p = packages.Package{ 80 Name: "alpine-baselayout", 81 Version: "1510075862:3.0.5-r2", 82 Arch: "x86_64", 83 Description: "Alpine base dir structure and init scripts", 84 Origin: "alpine-baselayout", 85 Format: packages.AlpinePkgFormat, 86 } 87 assert.Contains(t, m, p, "apk-tools detected") 88 } 89 90 func TestApkUpdateParser(t *testing.T) { 91 mock, err := mock.New("./testdata/updates_apk.toml", nil) 92 if err != nil { 93 t.Fatal(err) 94 } 95 c, err := mock.RunCommand("apk version -v -l '<'") 96 if err != nil { 97 t.Fatal(err) 98 } 99 assert.Nil(t, err) 100 101 m, err := packages.ParseApkUpdates(c.Stdout) 102 assert.Nil(t, err) 103 assert.Equal(t, 2, len(m), "detected the right amount of package updates") 104 105 update := m["busybox"] 106 assert.Equal(t, "busybox", update.Name, "pkg name detected") 107 assert.Equal(t, "1.28.4-r0", update.Version, "pkg version detected") 108 assert.Equal(t, "1.28.4-r1", update.Available, "pkg available version detected") 109 110 update = m["ssl_client"] 111 assert.Equal(t, "ssl_client", update.Name, "pkg name detected") 112 assert.Equal(t, "1.28.4-r0", update.Version, "pkg version detected") 113 assert.Equal(t, "1.28.4-r1", update.Available, "pkg available version detected") 114 }