Merge pull request #5 from mihaelabalutoiu/dev
Fix `NewConfig` func & and add more unit tests
This commit is contained in:
commit
cd4e4fb985
5 changed files with 112 additions and 6 deletions
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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())
|
||||
}
|
||||
|
|
|
|||
22
config/testdata/test-empty-config-dir.toml
vendored
Normal file
22
config/testdata/test-empty-config-dir.toml
vendored
Normal 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"
|
||||
2
config/testdata/test-invalid-config.toml
vendored
Normal file
2
config/testdata/test-invalid-config.toml
vendored
Normal 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
22
config/testdata/test-valid-config.toml
vendored
Normal 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"
|
||||
Loading…
Add table
Add a link
Reference in a new issue