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>
217 lines
6.1 KiB
Go
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)
|
|
})
|
|
}
|
|
}
|