go.mondoo.com/cnquery@v0.0.0-20231005093811-59568235f6ea/providers/os/resources/services/systemd_test.go (about) 1 // Copyright (c) Mondoo, Inc. 2 // SPDX-License-Identifier: BUSL-1.1 3 4 package services 5 6 import ( 7 "testing" 8 9 "github.com/stretchr/testify/assert" 10 "github.com/stretchr/testify/require" 11 "go.mondoo.com/cnquery/providers-sdk/v1/inventory" 12 "go.mondoo.com/cnquery/providers/os/connection/mock" 13 "go.mondoo.com/cnquery/providers/os/fs" 14 ) 15 16 func TestParseServiceSystemDUnitFiles(t *testing.T) { 17 mock, err := mock.New("./testdata/debian.toml", &inventory.Asset{ 18 Platform: &inventory.Platform{ 19 Name: "debian", 20 Family: []string{"debian", "linux"}, 21 }, 22 }) 23 if err != nil { 24 t.Fatal(err) 25 } 26 c, err := mock.RunCommand("systemctl --all list-units --type service") 27 if err != nil { 28 t.Fatal(err) 29 } 30 assert.Nil(t, err) 31 32 m, err := ParseServiceSystemDUnitFiles(c.Stdout) 33 assert.Nil(t, err) 34 assert.Equal(t, 102, len(m), "detected the right amount of services") 35 36 // check first element 37 assert.Equal(t, "auditd", m[0].Name, "service name detected") 38 assert.Equal(t, true, m[0].Running, "service is running") 39 assert.Equal(t, true, m[0].Installed, "service is installed") 40 assert.Equal(t, "systemd", m[0].Type, "service type is added") 41 42 // check last element 43 assert.Equal(t, "ypxfrd", m[101].Name, "service name detected") 44 assert.Equal(t, false, m[101].Running, "service is running") 45 assert.Equal(t, false, m[101].Installed, "service is installed") 46 assert.Equal(t, "systemd", m[101].Type, "service type is added") 47 48 // check for masked element 49 assert.Equal(t, "nfs-server", m[30].Name, "service name detected") 50 assert.Equal(t, true, m[30].Masked, "service is masked") 51 } 52 53 func TestSystemdFS(t *testing.T) { 54 s := SystemdFSServiceManager{ 55 Fs: fs.NewMountedFs("testdata/systemd"), 56 } 57 58 services, err := s.List() 59 require.NoError(t, err) 60 servicesMap := map[string]*Service{} 61 for _, svc := range services { 62 servicesMap[svc.Name] = svc 63 } 64 65 assert.NotContains(t, servicesMap, "default") 66 assert.NotContains(t, servicesMap, "default.target") 67 assert.NotContains(t, servicesMap, "not-enabled") 68 assert.Contains(t, servicesMap, "aliased") 69 assert.Equal(t, &Service{ 70 Name: "aliased", 71 Type: "service", 72 Description: "Aliased Service", 73 State: ServiceUnknown, 74 Installed: true, 75 Enabled: true, 76 }, servicesMap["aliased"]) 77 assert.Contains(t, servicesMap, "aliased-wants") 78 assert.Contains(t, servicesMap, "aliased-requires") 79 assert.Contains(t, servicesMap, "aliased-missing") 80 assert.Equal(t, &Service{ 81 Name: "aliased-missing", 82 Type: "service", 83 State: ServiceUnknown, 84 Installed: false, 85 Enabled: false, 86 }, servicesMap["aliased-missing"]) 87 assert.Contains(t, servicesMap, "intermediate-dep-want") 88 assert.Contains(t, servicesMap, "intermediate-dep-require") 89 assert.Contains(t, servicesMap, "masked") 90 assert.Equal(t, &Service{ 91 Name: "masked", 92 Type: "service", 93 State: ServiceUnknown, 94 Installed: true, 95 Enabled: true, 96 Masked: true, 97 }, servicesMap["masked"]) 98 assert.Contains(t, servicesMap, "implicit-socket") 99 assert.Equal(t, &Service{ 100 Name: "implicit-socket", 101 Type: "service", 102 Description: "Implicit Socket Service", 103 State: ServiceUnknown, 104 Installed: true, 105 Enabled: true, 106 }, servicesMap["implicit-socket"]) 107 assert.Contains(t, servicesMap, "explicit-socket-service") 108 assert.Equal(t, &Service{ 109 Name: "explicit-socket-service", 110 Type: "service", 111 Description: "Explicit Socket Service", 112 State: ServiceUnknown, 113 Installed: true, 114 Enabled: true, 115 }, servicesMap["explicit-socket-service"]) 116 117 // Relative path symlink 118 assert.Contains(t, servicesMap, "display-manager") 119 assert.Equal(t, &Service{ 120 Name: "display-manager", 121 Type: "service", 122 State: ServiceUnknown, 123 Installed: false, 124 Enabled: false, 125 Masked: false, 126 }, servicesMap["display-manager"]) 127 128 // Absolute path symlink 129 assert.Contains(t, servicesMap, "sshd") 130 assert.Equal(t, &Service{ 131 Name: "sshd", 132 Description: "OpenBSD Secure Shell server", 133 Type: "service", 134 State: ServiceUnknown, 135 Installed: true, 136 Enabled: true, 137 Masked: false, 138 }, servicesMap["sshd"]) 139 }