go.mondoo.com/cnquery@v0.0.0-20231005093811-59568235f6ea/providers/os/resources/packages/dpkg_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 "github.com/stretchr/testify/require" 11 "go.mondoo.com/cnquery/providers/os/connection/mock" 12 "go.mondoo.com/cnquery/providers/os/resources/packages" 13 ) 14 15 func TestDpkgParser(t *testing.T) { 16 mock, err := mock.New("./testdata/packages_dpkg.toml", nil) 17 require.NoError(t, err) 18 f, err := mock.FileSystem().Open("/var/lib/dpkg/status") 19 require.NoError(t, err) 20 defer f.Close() 21 22 m, err := packages.ParseDpkgPackages(f) 23 require.NoError(t, err) 24 assert.Equal(t, 10, len(m), "detected the right amount of packages") 25 26 var p packages.Package 27 p = packages.Package{ 28 Name: "fdisk", 29 Version: "2.31.1-0.4ubuntu3.1", 30 Arch: "amd64", 31 Status: "install ok installed", 32 Origin: "util-linux", 33 Description: `collection of partitioning utilities 34 This package contains the classic fdisk, sfdisk and cfdisk partitioning 35 utilities from the util-linux suite. 36 . 37 The utilities included in this package allow you to partition 38 your hard disk. The utilities supports both modern and legacy 39 partition tables (eg. GPT, MBR, etc). 40 . 41 The fdisk utility is the classical text-mode utility. 42 The cfdisk utilitity gives a more userfriendly curses based interface. 43 The sfdisk utility is mostly for automation and scripting uses.`, 44 Format: "deb", 45 } 46 assert.Contains(t, m, p, "fdisk detected") 47 48 p = packages.Package{ 49 Name: "libaudit1", 50 Version: "1:2.4-1+b1", 51 Arch: "amd64", 52 Status: "install ok installed", 53 Origin: "audit", 54 Description: `Dynamic library for security auditing 55 The audit-libs package contains the dynamic libraries needed for 56 applications to use the audit framework. It is used to monitor systems for 57 security related events.`, 58 Format: "deb", 59 } 60 assert.Contains(t, m, p, "libaudit1 detected") 61 } 62 63 func TestDpkgParserStatusD(t *testing.T) { 64 mock, err := mock.New("./testdata/packages_dpkg_statusd.toml", nil) 65 require.NoError(t, err) 66 f, err := mock.FileSystem().Open("/var/lib/dpkg/status.d/base") 67 require.NoError(t, err) 68 defer f.Close() 69 70 m, err := packages.ParseDpkgPackages(f) 71 require.NoError(t, err) 72 assert.Equal(t, 1, len(m), "detected the right amount of packages") 73 74 var p packages.Package 75 p = packages.Package{ 76 Name: "base-files", 77 Version: "9.9+deb9u11", 78 Arch: "amd64", 79 Description: `Debian base system miscellaneous files 80 This package contains the basic filesystem hierarchy of a Debian system, and 81 several important miscellaneous files, such as /etc/debian_version, 82 /etc/host.conf, /etc/issue, /etc/motd, /etc/profile, and others, 83 and the text of several common licenses in use on Debian systems.`, 84 Format: "deb", 85 } 86 assert.Contains(t, m, p, "fdisk detected") 87 } 88 89 func TestDpkgUpdateParser(t *testing.T) { 90 mock, err := mock.New("./testdata/updates_dpkg.toml", nil) 91 require.NoError(t, err) 92 c, err := mock.RunCommand("DEBIAN_FRONTEND=noninteractive apt-get upgrade --dry-run") 93 require.NoError(t, err) 94 assert.Nil(t, err) 95 96 m, err := packages.ParseDpkgUpdates(c.Stdout) 97 assert.Nil(t, err) 98 assert.Equal(t, 13, len(m), "detected the right amount of package updates") 99 100 update := m["base-files"] 101 assert.Equal(t, "base-files", update.Name, "pkg name detected") 102 assert.Equal(t, "10.1ubuntu2", update.Version, "pkg version detected") 103 assert.Equal(t, "10.1ubuntu2.1", update.Available, "pkg available version detected") 104 105 update = m["ncurses-bin"] 106 assert.Equal(t, "ncurses-bin", update.Name, "pkg name detected") 107 assert.Equal(t, "6.1-1ubuntu1", update.Version, "pkg version detected") 108 assert.Equal(t, "6.1-1ubuntu1.18.04", update.Available, "pkg available version detected") 109 }