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  }