Merge pull request #5 from mihaelabalutoiu/dev

Fix `NewConfig` func & and add more unit tests
This commit is contained in:
Gabriel 2022-07-26 14:24:53 +03:00 committed by GitHub
commit cd4e4fb985
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 112 additions and 6 deletions

View file

@ -52,9 +52,6 @@ const (
// DefaultConfigFilePath is the default path on disk to the garm
// configuration file.
DefaultConfigFilePath = "/etc/garm/config.toml"
// DefaultConfigDir is the default path on disk to the config dir. The config
// file will probably be in the same folder, but it is not mandatory.
DefaultConfigDir = "/etc/garm"
// DefaultUser is the default username that should exist on the instances.
DefaultUser = "runner"
@ -73,6 +70,10 @@ const (
)
var (
// DefaultConfigDir is the default path on disk to the config dir. The config
// file will probably be in the same folder, but it is not mandatory.
DefaultConfigDir = "/etc/garm"
// DefaultUserGroups are the groups the default user will be part of.
DefaultUserGroups = []string{
"sudo", "adm", "cdrom", "dialout",
@ -100,12 +101,12 @@ func NewConfig(cfgFile string) (*Config, error) {
if _, err := toml.DecodeFile(cfgFile, &config); err != nil {
return nil, errors.Wrap(err, "decoding toml")
}
if err := config.Validate(); err != nil {
return nil, errors.Wrap(err, "validating config")
}
if config.Default.ConfigDir == "" {
config.Default.ConfigDir = DefaultConfigDir
}
if err := config.Validate(); err != nil {
return nil, errors.Wrap(err, "validating config")
}
return &config, nil
}

View file

@ -294,6 +294,7 @@ func TestAPITLSconfig(t *testing.T) {
// Any error in the TLSConfig should return an error here.
cfg.TLSConfig = TLSConfig{}
tlsCfg, err = cfg.APITLSConfig()
require.Nil(t, tlsCfg)
require.NotNil(t, err)
require.EqualError(t, err, "missing crt or key")
@ -654,3 +655,61 @@ func TestTimeToLiveDuration(t *testing.T) {
require.NotNil(t, err)
require.EqualError(t, err, "time: unknown unit \"d\" in duration \"2d\"")
}
func TestNewConfig(t *testing.T) {
cfg, err := NewConfig("testdata/test-valid-config.toml")
require.Nil(t, err)
require.NotNil(t, cfg)
require.Equal(t, "https://garm.example.com/", cfg.Default.CallbackURL)
require.Equal(t, "./testdata/config_dir", cfg.Default.ConfigDir)
require.Equal(t, "0.0.0.0", cfg.APIServer.Bind)
require.Equal(t, 9998, cfg.APIServer.Port)
require.Equal(t, false, cfg.APIServer.UseTLS)
require.Equal(t, DBBackendType("mysql"), cfg.Database.DbBackend)
require.Equal(t, "bocyasicgatEtenOubwonIbsudNutDom", cfg.Database.Passphrase)
require.Equal(t, "test", cfg.Database.MySQL.Username)
require.Equal(t, "test", cfg.Database.MySQL.Password)
require.Equal(t, "127.0.0.1", cfg.Database.MySQL.Hostname)
require.Equal(t, "garm", cfg.Database.MySQL.DatabaseName)
require.Equal(t, "bocyasicgatEtenOubwonIbsudNutDom", cfg.JWTAuth.Secret)
require.Equal(t, timeToLive("48h"), cfg.JWTAuth.TimeToLive)
}
func TestNewConfigEmptyConfigDir(t *testing.T) {
dirPath, err := ioutil.TempDir("", "garm-config-test")
if err != nil {
t.Fatalf("failed to create temporary directory: %s", err)
}
defer os.RemoveAll(dirPath)
DefaultConfigDir = dirPath
cfg, err := NewConfig("testdata/test-empty-config-dir.toml")
require.Nil(t, err)
require.NotNil(t, cfg)
require.Equal(t, cfg.Default.ConfigDir, dirPath)
require.Equal(t, "https://garm.example.com/", cfg.Default.CallbackURL)
require.Equal(t, "0.0.0.0", cfg.APIServer.Bind)
require.Equal(t, 9998, cfg.APIServer.Port)
require.Equal(t, false, cfg.APIServer.UseTLS)
require.Equal(t, DBBackendType("mysql"), cfg.Database.DbBackend)
require.Equal(t, "test", cfg.Database.MySQL.Username)
require.Equal(t, "test", cfg.Database.MySQL.Password)
require.Equal(t, "127.0.0.1", cfg.Database.MySQL.Hostname)
require.Equal(t, "garm", cfg.Database.MySQL.DatabaseName)
require.Equal(t, "bocyasicgatEtenOubwonIbsudNutDom", cfg.JWTAuth.Secret)
require.Equal(t, timeToLive("48h"), cfg.JWTAuth.TimeToLive)
}
func TestNewConfigInvalidTomlPath(t *testing.T) {
cfg, err := NewConfig("this is not a file path")
require.Nil(t, cfg)
require.NotNil(t, err)
require.Regexp(t, "decoding toml", err.Error())
}
func TestNewConfigInvalidConfig(t *testing.T) {
cfg, err := NewConfig("testdata/test-invalid-config.toml")
require.Nil(t, cfg)
require.NotNil(t, err)
require.Regexp(t, "validating config", err.Error())
}

View file

@ -0,0 +1,22 @@
[default]
callback_url = "https://garm.example.com/"
config_dir = ""
[apiserver]
bind = "0.0.0.0"
port = 9998
use_tls = false
[database]
backend = "mysql"
passphrase = "bocyasicgatEtenOubwonIbsudNutDom"
[database.mysql]
username = "test"
password = "test"
hostname = "127.0.0.1"
database = "garm"
[jwt_auth]
secret = "bocyasicgatEtenOubwonIbsudNutDom"
time_to_live = "48h"

View file

@ -0,0 +1,2 @@
[apiserver]
port = -2 # this is considered an invalid port for garm

22
config/testdata/test-valid-config.toml vendored Normal file
View file

@ -0,0 +1,22 @@
[default]
callback_url = "https://garm.example.com/"
config_dir = "./testdata/config_dir"
[apiserver]
bind = "0.0.0.0"
port = 9998
use_tls = false
[database]
backend = "mysql"
passphrase = "bocyasicgatEtenOubwonIbsudNutDom"
[database.mysql]
username = "test"
password = "test"
hostname = "127.0.0.1"
database = "garm"
[jwt_auth]
secret = "bocyasicgatEtenOubwonIbsudNutDom"
time_to_live = "48h"