Bump the `rhel-9` and `rhel-10` distro aliases to the next in-development releases, because we don't plan to land any new releases in 9.6 or 10.0. Signed-off-by: Tomáš Hozza <thozza@redhat.com>
184 lines
5.1 KiB
Go
184 lines
5.1 KiB
Go
package main
|
|
|
|
import (
|
|
"bytes"
|
|
"os"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestEmpty(t *testing.T) {
|
|
config, err := LoadConfig("testdata/empty-config.toml")
|
|
require.NoError(t, err)
|
|
require.NotNil(t, config)
|
|
require.Equal(t, GetDefaultConfig(), config)
|
|
}
|
|
|
|
func TestNonExisting(t *testing.T) {
|
|
config, err := LoadConfig("testdata/non-existing-config.toml")
|
|
require.Nil(t, err)
|
|
require.Equal(t, config, GetDefaultConfig())
|
|
}
|
|
|
|
func TestDefaultConfig(t *testing.T) {
|
|
defaultConfig := GetDefaultConfig()
|
|
|
|
require.False(t, defaultConfig.Koji.EnableJWT)
|
|
require.Equal(t, "", defaultConfig.Koji.JWTKeysCA)
|
|
require.False(t, defaultConfig.Worker.EnableJWT)
|
|
require.Equal(t, "", defaultConfig.Worker.JWTKeysCA)
|
|
|
|
require.Equal(t, KojiAPIConfig{
|
|
EnableTLS: true,
|
|
EnableMTLS: true,
|
|
EnableJWT: false,
|
|
}, defaultConfig.Koji)
|
|
|
|
require.Equal(t, WorkerAPIConfig{
|
|
RequestJobTimeout: "0",
|
|
BasePath: "/api/worker/v1",
|
|
EnableArtifacts: true,
|
|
EnableTLS: true,
|
|
EnableMTLS: true,
|
|
EnableJWT: false,
|
|
WorkerHeartbeatTimeout: "1h",
|
|
}, defaultConfig.Worker)
|
|
|
|
expectedWeldrAPIConfig := WeldrAPIConfig{
|
|
DistroConfigs: map[string]WeldrDistroConfig{
|
|
"rhel-*": {
|
|
[]string{
|
|
"azure-eap7-rhui",
|
|
"azure-rhui",
|
|
"azure-sap-rhui",
|
|
"ec2",
|
|
"ec2-ha",
|
|
"ec2-sap",
|
|
"gce-rhui",
|
|
},
|
|
},
|
|
"fedora-*": {
|
|
[]string{
|
|
"iot-bootable-container",
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
require.Equal(t, expectedWeldrAPIConfig, defaultConfig.WeldrAPI)
|
|
|
|
expectedDistroAliases := map[string]string{
|
|
"rhel-10": "rhel-10.1",
|
|
"rhel-7": "rhel-7.9",
|
|
"rhel-8": "rhel-8.10",
|
|
"rhel-9": "rhel-9.7",
|
|
}
|
|
require.Equal(t, expectedDistroAliases, defaultConfig.DistroAliases)
|
|
|
|
require.Equal(t, "journal", defaultConfig.LogFormat)
|
|
}
|
|
|
|
func TestConfig(t *testing.T) {
|
|
config, err := LoadConfig("testdata/test.toml")
|
|
require.NoError(t, err)
|
|
require.NotNil(t, config)
|
|
|
|
require.Equal(t, config.Koji.AllowedDomains, []string{"osbuild.org"})
|
|
require.Equal(t, config.Koji.CA, "/etc/osbuild-composer/ca-crt.pem")
|
|
|
|
require.Equal(t, config.Worker.AllowedDomains, []string{"osbuild.org"})
|
|
require.Equal(t, config.Worker.CA, "/etc/osbuild-composer/ca-crt.pem")
|
|
|
|
require.Equal(t, []string{"qcow2", "vmdk"}, config.WeldrAPI.DistroConfigs["*"].ImageTypeDenyList)
|
|
require.Equal(t, []string{"qcow2"}, config.WeldrAPI.DistroConfigs["rhel-84"].ImageTypeDenyList)
|
|
|
|
require.Equal(t, "overwrite-me-db", config.Worker.PGDatabase)
|
|
|
|
require.NoError(t, os.Setenv("PGDATABASE", "composer-db"))
|
|
config, err = LoadConfig("testdata/test.toml")
|
|
require.NoError(t, err)
|
|
require.NotNil(t, config)
|
|
require.Equal(t, "composer-db", config.Worker.PGDatabase)
|
|
|
|
require.False(t, config.Koji.EnableJWT)
|
|
require.Equal(t, []string{"https://sso.redhat.com/auth/realms/redhat-external/protocol/openid-connect/certs"}, config.Koji.JWTKeysURLs)
|
|
require.Equal(t, "", config.Koji.JWTKeysCA)
|
|
require.Equal(t, "/var/lib/osbuild-composer/acl", config.Koji.JWTACLFile)
|
|
|
|
// 'rhel-8' and 'rhel-9' aliases are overwritten by the config file
|
|
expectedDistroAliases := map[string]string{
|
|
"rhel-10": "rhel-10.1", // this value is from the default config
|
|
"rhel-7": "rhel-7.9", // this value is from the default config
|
|
"rhel-8": "rhel-8.9",
|
|
"rhel-9": "rhel-9.3",
|
|
}
|
|
require.Equal(t, expectedDistroAliases, config.DistroAliases)
|
|
}
|
|
|
|
func TestWeldrDistrosImageTypeDenyList(t *testing.T) {
|
|
config, err := LoadConfig("testdata/test.toml")
|
|
require.NoError(t, err)
|
|
require.NotNil(t, config)
|
|
|
|
// rhel config is overridden, but fedora is unaffected
|
|
expectedWeldrDistrosImageTypeDenyList := map[string][]string{
|
|
"*": {"qcow2", "vmdk"},
|
|
"fedora-*": {"iot-bootable-container"},
|
|
"rhel-84": {"qcow2"},
|
|
}
|
|
|
|
require.Equal(t, expectedWeldrDistrosImageTypeDenyList, config.weldrDistrosImageTypeDenyList())
|
|
}
|
|
|
|
func TestDumpConfig(t *testing.T) {
|
|
config := &ComposerConfigFile{
|
|
Worker: WorkerAPIConfig{
|
|
PGPassword: "sensitive",
|
|
},
|
|
}
|
|
|
|
var buf bytes.Buffer
|
|
require.NoError(t, DumpConfig(*config, &buf))
|
|
require.Contains(t, buf.String(), "pg_password = \"\"")
|
|
require.NotContains(t, buf.String(), "sensitive")
|
|
// DumpConfig takes a copy
|
|
require.Equal(t, "sensitive", config.Worker.PGPassword)
|
|
}
|
|
|
|
func TestEnvStrToMap(t *testing.T) {
|
|
env := "key1=value1,key2=value2,key3=value3"
|
|
expected := map[string]string{
|
|
"key1": "value1",
|
|
"key2": "value2",
|
|
"key3": "value3",
|
|
}
|
|
got, err := envStrToMap(env)
|
|
require.NoError(t, err)
|
|
require.Equal(t, expected, got)
|
|
}
|
|
|
|
func TestConfigFromEnv(t *testing.T) {
|
|
// simulate the environment variables
|
|
currentEnv := os.Environ()
|
|
defer func() {
|
|
os.Clearenv()
|
|
for _, env := range currentEnv {
|
|
pair := strings.SplitN(env, "=", 2)
|
|
_ = os.Setenv(pair[0], pair[1])
|
|
}
|
|
}()
|
|
|
|
os.Setenv("DISTRO_ALIASES", "rhel-7=rhel-7.9,rhel-8=rhel-8.9,rhel-9=rhel-9.3")
|
|
expectedDistroAliases := map[string]string{
|
|
"rhel-7": "rhel-7.9",
|
|
"rhel-8": "rhel-8.9",
|
|
"rhel-9": "rhel-9.3",
|
|
"rhel-10": "rhel-10.1", // this value is from the default config
|
|
}
|
|
|
|
config, err := LoadConfig("")
|
|
require.NoError(t, err)
|
|
require.Equal(t, expectedDistroAliases, config.DistroAliases)
|
|
}
|