debian-forge-composer/internal/distro/image_config_test.go
Tomas Hozza 8130c892f0 RHEL-90: move RHSM configuration to ImageConfig structure
Move the RHSM configuration settings to `ImageConfig` structure and use
when handling subscriptions in `osPipeline`, `ec2BaseTreePipeline` and
`ostreeTreePipeline` functions.

Regenerate image test cases. While there are changed in the manifests,
the actual image configuration didn't change at all and thus the
`image-info` report was not changed.

Signed-off-by: Tomas Hozza <thozza@redhat.com>
2022-01-11 17:08:19 +01:00

217 lines
6.1 KiB
Go

package distro
import (
"testing"
"github.com/osbuild/osbuild-composer/internal/common"
"github.com/osbuild/osbuild-composer/internal/osbuild2"
"github.com/stretchr/testify/assert"
)
func TestImageConfigInheritFrom(t *testing.T) {
tests := []struct {
name string
distroConfig *ImageConfig
imageConfig *ImageConfig
expectedConfig *ImageConfig
}{
{
name: "inheritance with overridden values",
distroConfig: &ImageConfig{
Timezone: "America/New_York",
TimeSynchronization: &osbuild2.ChronyStageOptions{
Timeservers: []string{"127.0.0.1"},
},
Locale: "en_US.UTF-8",
Keyboard: &osbuild2.KeymapStageOptions{
Keymap: "us",
},
EnabledServices: []string{"sshd"},
DisabledServices: []string{"named"},
DefaultTarget: "multi-user.target",
Sysconfig: []*osbuild2.SysconfigStageOptions{
{
Kernel: &osbuild2.SysconfigKernelOptions{
UpdateDefault: true,
DefaultKernel: "kernel",
},
Network: &osbuild2.SysconfigNetworkOptions{
Networking: true,
NoZeroConf: true,
},
NetworkScripts: &osbuild2.NetworkScriptsOptions{
IfcfgFiles: map[string]osbuild2.IfcfgFile{
"eth0": {
Device: "eth0",
Bootproto: osbuild2.IfcfgBootprotoDHCP,
OnBoot: common.BoolToPtr(true),
Type: osbuild2.IfcfgTypeEthernet,
UserCtl: common.BoolToPtr(true),
PeerDNS: common.BoolToPtr(true),
IPv6Init: common.BoolToPtr(false),
},
},
},
},
},
},
imageConfig: &ImageConfig{
Timezone: "UTC",
TimeSynchronization: &osbuild2.ChronyStageOptions{
Servers: []osbuild2.ChronyConfigServer{
{
Hostname: "169.254.169.123",
Prefer: common.BoolToPtr(true),
Iburst: common.BoolToPtr(true),
Minpoll: common.IntToPtr(4),
Maxpoll: common.IntToPtr(4),
},
},
LeapsecTz: common.StringToPtr(""),
},
},
expectedConfig: &ImageConfig{
Timezone: "UTC",
TimeSynchronization: &osbuild2.ChronyStageOptions{
Servers: []osbuild2.ChronyConfigServer{
{
Hostname: "169.254.169.123",
Prefer: common.BoolToPtr(true),
Iburst: common.BoolToPtr(true),
Minpoll: common.IntToPtr(4),
Maxpoll: common.IntToPtr(4),
},
},
LeapsecTz: common.StringToPtr(""),
},
Locale: "en_US.UTF-8",
Keyboard: &osbuild2.KeymapStageOptions{
Keymap: "us",
},
EnabledServices: []string{"sshd"},
DisabledServices: []string{"named"},
DefaultTarget: "multi-user.target",
Sysconfig: []*osbuild2.SysconfigStageOptions{
{
Kernel: &osbuild2.SysconfigKernelOptions{
UpdateDefault: true,
DefaultKernel: "kernel",
},
Network: &osbuild2.SysconfigNetworkOptions{
Networking: true,
NoZeroConf: true,
},
NetworkScripts: &osbuild2.NetworkScriptsOptions{
IfcfgFiles: map[string]osbuild2.IfcfgFile{
"eth0": {
Device: "eth0",
Bootproto: osbuild2.IfcfgBootprotoDHCP,
OnBoot: common.BoolToPtr(true),
Type: osbuild2.IfcfgTypeEthernet,
UserCtl: common.BoolToPtr(true),
PeerDNS: common.BoolToPtr(true),
IPv6Init: common.BoolToPtr(false),
},
},
},
},
},
},
},
{
name: "empty image type configuration",
distroConfig: &ImageConfig{
Timezone: "America/New_York",
TimeSynchronization: &osbuild2.ChronyStageOptions{
Timeservers: []string{"127.0.0.1"},
},
Locale: "en_US.UTF-8",
Keyboard: &osbuild2.KeymapStageOptions{
Keymap: "us",
},
EnabledServices: []string{"sshd"},
DisabledServices: []string{"named"},
DefaultTarget: "multi-user.target",
},
imageConfig: &ImageConfig{},
expectedConfig: &ImageConfig{
Timezone: "America/New_York",
TimeSynchronization: &osbuild2.ChronyStageOptions{
Timeservers: []string{"127.0.0.1"},
},
Locale: "en_US.UTF-8",
Keyboard: &osbuild2.KeymapStageOptions{
Keymap: "us",
},
EnabledServices: []string{"sshd"},
DisabledServices: []string{"named"},
DefaultTarget: "multi-user.target",
},
},
{
name: "empty distro configuration",
distroConfig: &ImageConfig{},
imageConfig: &ImageConfig{
Timezone: "America/New_York",
TimeSynchronization: &osbuild2.ChronyStageOptions{
Timeservers: []string{"127.0.0.1"},
},
Locale: "en_US.UTF-8",
Keyboard: &osbuild2.KeymapStageOptions{
Keymap: "us",
},
EnabledServices: []string{"sshd"},
DisabledServices: []string{"named"},
DefaultTarget: "multi-user.target",
},
expectedConfig: &ImageConfig{
Timezone: "America/New_York",
TimeSynchronization: &osbuild2.ChronyStageOptions{
Timeservers: []string{"127.0.0.1"},
},
Locale: "en_US.UTF-8",
Keyboard: &osbuild2.KeymapStageOptions{
Keymap: "us",
},
EnabledServices: []string{"sshd"},
DisabledServices: []string{"named"},
DefaultTarget: "multi-user.target",
},
},
{
name: "empty distro configuration",
distroConfig: nil,
imageConfig: &ImageConfig{
Timezone: "America/New_York",
TimeSynchronization: &osbuild2.ChronyStageOptions{
Timeservers: []string{"127.0.0.1"},
},
Locale: "en_US.UTF-8",
Keyboard: &osbuild2.KeymapStageOptions{
Keymap: "us",
},
EnabledServices: []string{"sshd"},
DisabledServices: []string{"named"},
DefaultTarget: "multi-user.target",
},
expectedConfig: &ImageConfig{
Timezone: "America/New_York",
TimeSynchronization: &osbuild2.ChronyStageOptions{
Timeservers: []string{"127.0.0.1"},
},
Locale: "en_US.UTF-8",
Keyboard: &osbuild2.KeymapStageOptions{
Keymap: "us",
},
EnabledServices: []string{"sshd"},
DisabledServices: []string{"named"},
DefaultTarget: "multi-user.target",
},
},
}
for idx, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
assert.Equalf(t, tt.expectedConfig, tt.imageConfig.InheritFrom(tt.distroConfig), "test case %q failed (idx %d)", tt.name, idx)
})
}
}