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  }