| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 |
- 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")
- }
|