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 }