jx/internal/resource/user_test.go
Matthew Rich 08b2f5301f
All checks were successful
Lint / golangci-lint (push) Successful in 9m57s
Declarative Tests / test (push) Successful in 28s
remove unused config field from User
2024-10-16 11:31:33 -07:00

121 lines
2.2 KiB
Go

// Copyright 2024 Matthew Rich <matthewrich.conf@gmail.com>. All rights reserved.
package resource
import (
"context"
_ "encoding/json"
"fmt"
"github.com/stretchr/testify/assert"
_ "io"
_ "net/http"
_ "net/http/httptest"
_ "net/url"
_ "os"
_ "strings"
"testing"
"decl/internal/data"
)
func TestNewUserResource(t *testing.T) {
u := NewUser()
assert.NotEqual(t, nil, u)
}
func TestReadUser(t *testing.T) {
ctx := context.Background()
decl := `
name: "nobody"
`
u := NewUser()
e := u.LoadDecl(decl)
assert.Nil(t, e)
assert.Equal(t, "nobody", u.Name)
fmt.Printf("%#v\n", u)
_, readErr := u.Read(ctx)
assert.Nil(t, readErr)
fmt.Printf("%#v\n", u)
assert.Equal(t, "65534", u.UID)
}
func TestCreateUser(t *testing.T) {
decl := `
name: "testuser"
uid: 12001
gid: 12001
home: "/home/testuser"
state: present
`
u := NewUser()
e := u.LoadDecl(decl)
assert.Equal(t, nil, e)
assert.Equal(t, "testuser", u.Name)
u.CreateCommand.Executor = func(value any) ([]byte, error) {
return []byte(``), nil
}
u.ReadCommand.Extractor = func(out []byte, target any) error {
return nil
}
u.DeleteCommand.Executor = func(value any) ([]byte, error) {
return nil, nil
}
applyErr := u.Apply()
assert.Nil(t, applyErr)
assert.Equal(t, "12001", u.UID)
u.State = "absent"
applyDeleteErr := u.Apply()
assert.Equal(t, nil, applyDeleteErr)
}
func TestSystemUser(t *testing.T) {
u := NewUser()
u.Name = "self"
u.UseConfig(MockConfigValueGetter(func(key string) (any, error) {
switch key {
case "user":
return "bar", nil
case "group":
return "foo", nil
case "uid":
return "", nil
}
return nil, fmt.Errorf("%w: %s", data.ErrUnknownConfigurationKey, key)
}))
assert.Nil(t, u.Init(nil))
u.ResolveId(context.Background())
assert.Equal(t, "bar", u.Name)
}
func TestUserSecondaryGroups(t *testing.T) {
groupCounts := make(map[string]int)
u := NewUser()
u.Name = "root"
u.ResolveId(context.Background())
u.Groups = []string{
"root",
"wheel",
}
assert.Nil(t, u.ReadGroups())
for _, groupName := range u.Groups {
groupCounts[groupName]++
}
assert.Greater(t, len(u.Groups), 2)
assert.Equal(t, 1, groupCounts["root"])
assert.Equal(t, 1, groupCounts["wheel"])
}