mirror of
https://github.com/OliveTin/OliveTin
synced 2025-12-12 09:05:39 +00:00
169 lines
5.0 KiB
Go
169 lines
5.0 KiB
Go
package config
|
|
|
|
import (
|
|
"os"
|
|
"testing"
|
|
|
|
"github.com/knadh/koanf/parsers/yaml"
|
|
"github.com/knadh/koanf/providers/file"
|
|
"github.com/knadh/koanf/v2"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestUserLoadingFromConfig(t *testing.T) {
|
|
// Create a temporary test config file
|
|
testConfig := `
|
|
authLocalUsers:
|
|
enabled: true
|
|
users:
|
|
- username: testuser1
|
|
usergroup: admin
|
|
password: password1
|
|
- username: testuser2
|
|
usergroup: guest
|
|
password: password2
|
|
|
|
actions:
|
|
- title: Test Action
|
|
shell: echo "test"
|
|
`
|
|
|
|
// Create temporary file
|
|
tmpFile, err := os.CreateTemp("", "test_config_*.yaml")
|
|
assert.NoError(t, err, "Should create temporary file")
|
|
defer os.Remove(tmpFile.Name())
|
|
|
|
// Write test config to file
|
|
_, err = tmpFile.WriteString(testConfig)
|
|
assert.NoError(t, err, "Should write test config to file")
|
|
tmpFile.Close()
|
|
|
|
// Load config using koanf
|
|
k := koanf.New(".")
|
|
err = k.Load(file.Provider(tmpFile.Name()), yaml.Parser())
|
|
assert.NoError(t, err, "Should load config file")
|
|
|
|
// Create config struct and load it
|
|
cfg := &Config{}
|
|
AppendSource(cfg, k, tmpFile.Name())
|
|
|
|
// Test that authLocalUsers was loaded correctly
|
|
assert.True(t, cfg.AuthLocalUsers.Enabled, "AuthLocalUsers should be enabled")
|
|
assert.Equal(t, 2, len(cfg.AuthLocalUsers.Users), "Should load 2 users")
|
|
|
|
// Test individual users
|
|
user1 := cfg.FindUserByUsername("testuser1")
|
|
assert.NotNil(t, user1, "Should find testuser1")
|
|
assert.Equal(t, "testuser1", user1.Username, "User1 should have correct username")
|
|
assert.Equal(t, "admin", user1.Usergroup, "User1 should have correct usergroup")
|
|
assert.Equal(t, "password1", user1.Password, "User1 should have correct password")
|
|
|
|
user2 := cfg.FindUserByUsername("testuser2")
|
|
assert.NotNil(t, user2, "Should find testuser2")
|
|
assert.Equal(t, "testuser2", user2.Username, "User2 should have correct username")
|
|
assert.Equal(t, "guest", user2.Usergroup, "User2 should have correct usergroup")
|
|
assert.Equal(t, "password2", user2.Password, "User2 should have correct password")
|
|
|
|
// Test non-existent user
|
|
assert.Nil(t, cfg.FindUserByUsername("nonexistent"), "Should return nil for non-existent user")
|
|
}
|
|
|
|
func TestUserLoadingWithEmptyUsers(t *testing.T) {
|
|
// Test config with enabled but no users
|
|
testConfig := `
|
|
authLocalUsers:
|
|
enabled: true
|
|
users: []
|
|
|
|
actions:
|
|
- title: Test Action
|
|
shell: echo "test"
|
|
`
|
|
|
|
tmpFile, err := os.CreateTemp("", "test_config_empty_*.yaml")
|
|
assert.NoError(t, err, "Should create temporary file")
|
|
defer os.Remove(tmpFile.Name())
|
|
|
|
_, err = tmpFile.WriteString(testConfig)
|
|
assert.NoError(t, err, "Should write test config to file")
|
|
tmpFile.Close()
|
|
|
|
k := koanf.New(".")
|
|
err = k.Load(file.Provider(tmpFile.Name()), yaml.Parser())
|
|
assert.NoError(t, err, "Should load config file")
|
|
|
|
cfg := &Config{}
|
|
AppendSource(cfg, k, tmpFile.Name())
|
|
|
|
assert.True(t, cfg.AuthLocalUsers.Enabled, "AuthLocalUsers should be enabled")
|
|
assert.Equal(t, 0, len(cfg.AuthLocalUsers.Users), "Should have 0 users")
|
|
assert.Nil(t, cfg.FindUserByUsername("anyuser"), "Should return nil for any user")
|
|
}
|
|
|
|
func TestUserLoadingWithDisabledAuth(t *testing.T) {
|
|
// Test config with disabled auth
|
|
testConfig := `
|
|
authLocalUsers:
|
|
enabled: false
|
|
users:
|
|
- username: testuser
|
|
usergroup: admin
|
|
password: password
|
|
|
|
actions:
|
|
- title: Test Action
|
|
shell: echo "test"
|
|
`
|
|
|
|
tmpFile, err := os.CreateTemp("", "test_config_disabled_*.yaml")
|
|
assert.NoError(t, err, "Should create temporary file")
|
|
defer os.Remove(tmpFile.Name())
|
|
|
|
_, err = tmpFile.WriteString(testConfig)
|
|
assert.NoError(t, err, "Should write test config to file")
|
|
tmpFile.Close()
|
|
|
|
k := koanf.New(".")
|
|
err = k.Load(file.Provider(tmpFile.Name()), yaml.Parser())
|
|
assert.NoError(t, err, "Should load config file")
|
|
|
|
cfg := &Config{}
|
|
AppendSource(cfg, k, tmpFile.Name())
|
|
|
|
assert.False(t, cfg.AuthLocalUsers.Enabled, "AuthLocalUsers should be disabled")
|
|
assert.Equal(t, 1, len(cfg.AuthLocalUsers.Users), "Should still load users even when disabled")
|
|
|
|
// User should still be findable even when auth is disabled
|
|
user := cfg.FindUserByUsername("testuser")
|
|
assert.NotNil(t, user, "Should find user even when auth is disabled")
|
|
}
|
|
|
|
func TestUserLoadingWithoutAuthSection(t *testing.T) {
|
|
// Test config without authLocalUsers section
|
|
testConfig := `
|
|
actions:
|
|
- title: Test Action
|
|
shell: echo "test"
|
|
`
|
|
|
|
tmpFile, err := os.CreateTemp("", "test_config_no_auth_*.yaml")
|
|
assert.NoError(t, err, "Should create temporary file")
|
|
defer os.Remove(tmpFile.Name())
|
|
|
|
_, err = tmpFile.WriteString(testConfig)
|
|
assert.NoError(t, err, "Should write test config to file")
|
|
tmpFile.Close()
|
|
|
|
k := koanf.New(".")
|
|
err = k.Load(file.Provider(tmpFile.Name()), yaml.Parser())
|
|
assert.NoError(t, err, "Should load config file")
|
|
|
|
cfg := &Config{}
|
|
AppendSource(cfg, k, tmpFile.Name())
|
|
|
|
// Should have default values
|
|
assert.False(t, cfg.AuthLocalUsers.Enabled, "AuthLocalUsers should be disabled by default")
|
|
assert.Equal(t, 0, len(cfg.AuthLocalUsers.Users), "Should have 0 users by default")
|
|
assert.Nil(t, cfg.FindUserByUsername("anyuser"), "Should return nil for any user")
|
|
}
|