go.mondoo.com/cnquery@v0.0.0-20231005093811-59568235f6ea/providers/os/resources/packages/windows_packages_test.go (about)

     1  // Copyright (c) Mondoo, Inc.
     2  // SPDX-License-Identifier: BUSL-1.1
     3  
     4  package packages
     5  
     6  import (
     7  	"os"
     8  	"strings"
     9  	"testing"
    10  
    11  	"github.com/stretchr/testify/assert"
    12  	"github.com/stretchr/testify/require"
    13  	"go.mondoo.com/cnquery/providers-sdk/v1/inventory"
    14  	"go.mondoo.com/cnquery/providers/os/connection/mock"
    15  	"go.mondoo.com/cnquery/providers/os/resources/powershell"
    16  )
    17  
    18  func TestWindowsAppPackagesParser(t *testing.T) {
    19  	f, err := os.Open("./testdata/windows_packages.json")
    20  	require.NoError(t, err)
    21  	defer f.Close()
    22  
    23  	m, err := ParseWindowsAppPackages(f)
    24  	assert.Nil(t, err)
    25  	assert.Equal(t, 19, len(m), "detected the right amount of packages")
    26  
    27  	p := Package{
    28  		Name:    "Microsoft Visual C++ 2015-2019 Redistributable (x86) - 14.28.29913",
    29  		Version: "14.28.29913.0",
    30  		Arch:    "",
    31  		Format:  "windows/app",
    32  	}
    33  	assert.Contains(t, m, p)
    34  
    35  	// check empty return
    36  	m, err = ParseWindowsAppxPackages(strings.NewReader(""))
    37  	assert.Nil(t, err)
    38  	assert.Equal(t, 0, len(m), "detected the right amount of packages")
    39  }
    40  
    41  func TestWindowsAppxPackagesParser(t *testing.T) {
    42  	mock, err := mock.New("./testdata/windows_2019.toml", &inventory.Asset{
    43  		Platform: &inventory.Platform{
    44  			Family: []string{"windows"},
    45  		},
    46  	})
    47  	if err != nil {
    48  		t.Fatal(err)
    49  	}
    50  
    51  	c, err := mock.RunCommand(powershell.Wrap(WINDOWS_QUERY_APPX_PACKAGES))
    52  	if err != nil {
    53  		t.Fatal(err)
    54  	}
    55  
    56  	m, err := ParseWindowsAppxPackages(c.Stdout)
    57  	assert.Nil(t, err)
    58  	assert.Equal(t, 28, len(m), "detected the right amount of packages")
    59  
    60  	p := Package{
    61  		Name:    "Microsoft.Windows.Cortana",
    62  		Version: "1.11.5.17763",
    63  		Arch:    "neutral",
    64  		Format:  "windows/appx",
    65  	}
    66  	assert.Contains(t, m, p)
    67  
    68  	// check empty return
    69  	m, err = ParseWindowsAppxPackages(strings.NewReader(""))
    70  	assert.Nil(t, err)
    71  	assert.Equal(t, 0, len(m), "detected the right amount of packages")
    72  }
    73  
    74  func TestWindowsHotFixParser(t *testing.T) {
    75  	mock, err := mock.New("./testdata/windows_2019.toml", &inventory.Asset{
    76  		Platform: &inventory.Platform{
    77  			Family: []string{"windows"},
    78  		},
    79  	})
    80  	if err != nil {
    81  		t.Fatal(err)
    82  	}
    83  
    84  	c, err := mock.RunCommand(powershell.Wrap(WINDOWS_QUERY_HOTFIXES))
    85  	if err != nil {
    86  		t.Fatal(err)
    87  	}
    88  
    89  	hotfixes, err := ParseWindowsHotfixes(c.Stdout)
    90  	assert.Nil(t, err)
    91  	assert.Equal(t, 6, len(hotfixes), "detected the right amount of packages")
    92  
    93  	timestamp := hotfixes[0].InstalledOnTime()
    94  	assert.NotNil(t, timestamp)
    95  
    96  	pkgs := HotFixesToPackages(hotfixes)
    97  	p := Package{
    98  		Name:        "KB4486553",
    99  		Description: "Update",
   100  		Format:      "windows/hotfix",
   101  	}
   102  	assert.Contains(t, pkgs, p)
   103  
   104  	// check empty return
   105  	hotfixes, err = ParseWindowsHotfixes(strings.NewReader(""))
   106  	assert.Nil(t, err)
   107  	assert.Equal(t, 0, len(hotfixes), "detected the right amount of packages")
   108  }