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

     1  // Copyright (c) Mondoo, Inc.
     2  // SPDX-License-Identifier: BUSL-1.1
     3  
     4  package shadow_test
     5  
     6  import (
     7  	"testing"
     8  	"time"
     9  
    10  	"github.com/stretchr/testify/assert"
    11  	"github.com/stretchr/testify/require"
    12  	"go.mondoo.com/cnquery/providers/os/connection/mock"
    13  	"go.mondoo.com/cnquery/providers/os/resources/shadow"
    14  )
    15  
    16  func TestParseShadow(t *testing.T) {
    17  	mock, err := mock.New("./testdata/debian.toml", nil)
    18  	require.NoError(t, err)
    19  
    20  	f, err := mock.FileSystem().Open("/etc/shadow")
    21  	require.NoError(t, err)
    22  	defer f.Close()
    23  
    24  	shadowEntries, err := shadow.ParseShadow(f)
    25  	require.NoError(t, err)
    26  
    27  	assert.Equal(t, 27, len(shadowEntries))
    28  
    29  	// 18368 days + jan 1 1970 = 2020-04-16 00:00:00 +0000 UTC
    30  	date := time.Date(2020, 0o4, 16, 0, 0, 0, 0, time.UTC)
    31  	expected := &shadow.ShadowEntry{
    32  		User:         "chris",
    33  		Password:     "*",
    34  		LastChanged:  &date,
    35  		MinDays:      "0",
    36  		MaxDays:      "99999",
    37  		WarnDays:     "7",
    38  		InactiveDays: "",
    39  		ExpiryDates:  "",
    40  		Reserved:     "",
    41  	}
    42  	found := findUser(shadowEntries, "chris")
    43  	assert.Equal(t, expected, found)
    44  }
    45  
    46  func findUser(shadowEntries []shadow.ShadowEntry, user string) *shadow.ShadowEntry {
    47  	for i := range shadowEntries {
    48  		if shadowEntries[i].User == user {
    49  			return &shadowEntries[i]
    50  		}
    51  	}
    52  	return nil
    53  }