Blame internal/distro/fedora32/distro_test.go

Packit 63bb0d
package fedora32_test
Packit 63bb0d
Packit 63bb0d
import (
Packit 63bb0d
	"testing"
Packit 63bb0d
Packit 63bb0d
	"github.com/osbuild/osbuild-composer/internal/blueprint"
Packit Service bcdfb1
	"github.com/osbuild/osbuild-composer/internal/distro"
Packit 63bb0d
	"github.com/osbuild/osbuild-composer/internal/distro/distro_test_common"
Packit 63bb0d
	"github.com/osbuild/osbuild-composer/internal/distro/fedora32"
Packit 63bb0d
	"github.com/stretchr/testify/assert"
Packit 63bb0d
)
Packit 63bb0d
Packit 63bb0d
func TestFilenameFromType(t *testing.T) {
Packit 63bb0d
	type args struct {
Packit 63bb0d
		outputFormat string
Packit 63bb0d
	}
Packit 63bb0d
	tests := []struct {
Packit 63bb0d
		name    string
Packit 63bb0d
		args    args
Packit 63bb0d
		want    string
Packit 63bb0d
		want1   string
Packit 63bb0d
		wantErr bool
Packit 63bb0d
	}{
Packit 63bb0d
		{
Packit 63bb0d
			name:  "ami",
Packit 63bb0d
			args:  args{"ami"},
Packit 63bb0d
			want:  "image.raw",
Packit 63bb0d
			want1: "application/octet-stream",
Packit 63bb0d
		},
Packit 63bb0d
		{
Packit 63bb0d
			name:  "openstack",
Packit 63bb0d
			args:  args{"openstack"},
Packit 63bb0d
			want:  "disk.qcow2",
Packit 63bb0d
			want1: "application/x-qemu-disk",
Packit 63bb0d
		},
Packit 63bb0d
		{
Packit 63bb0d
			name:  "qcow2",
Packit 63bb0d
			args:  args{"qcow2"},
Packit 63bb0d
			want:  "disk.qcow2",
Packit 63bb0d
			want1: "application/x-qemu-disk",
Packit 63bb0d
		},
Packit 63bb0d
		{
Packit 63bb0d
			name:  "vhd",
Packit 63bb0d
			args:  args{"vhd"},
Packit 63bb0d
			want:  "disk.vhd",
Packit 63bb0d
			want1: "application/x-vhd",
Packit 63bb0d
		},
Packit 63bb0d
		{
Packit 63bb0d
			name:  "vmdk",
Packit 63bb0d
			args:  args{"vmdk"},
Packit 63bb0d
			want:  "disk.vmdk",
Packit 63bb0d
			want1: "application/x-vmdk",
Packit 63bb0d
		},
Packit 63bb0d
		{
Packit 63bb0d
			name:    "invalid-output-type",
Packit 63bb0d
			args:    args{"foobar"},
Packit 63bb0d
			wantErr: true,
Packit 63bb0d
		},
Packit 63bb0d
	}
Packit 63bb0d
	for _, tt := range tests {
Packit 63bb0d
		t.Run(tt.name, func(t *testing.T) {
Packit 63bb0d
			dist := fedora32.New()
Packit 63bb0d
			arch, _ := dist.GetArch("x86_64")
Packit 63bb0d
			imgType, err := arch.GetImageType(tt.args.outputFormat)
Packit 63bb0d
			if (err != nil) != tt.wantErr {
Packit 63bb0d
				t.Errorf("Arch.GetImageType() error = %v, wantErr %v", err, tt.wantErr)
Packit 63bb0d
				return
Packit 63bb0d
			}
Packit 63bb0d
			if !tt.wantErr {
Packit 63bb0d
				got := imgType.Filename()
Packit 63bb0d
				got1 := imgType.MIMEType()
Packit 63bb0d
				if got != tt.want {
Packit 63bb0d
					t.Errorf("ImageType.Filename()  got = %v, want %v", got, tt.want)
Packit 63bb0d
				}
Packit 63bb0d
				if got1 != tt.want1 {
Packit 63bb0d
					t.Errorf("ImageType.MIMEType() got1 = %v, want %v", got1, tt.want1)
Packit 63bb0d
				}
Packit 63bb0d
			}
Packit 63bb0d
		})
Packit 63bb0d
	}
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
func TestImageType_BuildPackages(t *testing.T) {
Packit 63bb0d
	x8664BuildPackages := []string{
Packit 63bb0d
		"dnf",
Packit 63bb0d
		"dosfstools",
Packit 63bb0d
		"e2fsprogs",
Packit 63bb0d
		"grub2-pc",
Packit 63bb0d
		"policycoreutils",
Packit 63bb0d
		"qemu-img",
Packit 63bb0d
		"selinux-policy-targeted",
Packit 63bb0d
		"systemd",
Packit 63bb0d
		"tar",
Packit 63bb0d
		"xz",
Packit 63bb0d
	}
Packit 63bb0d
	aarch64BuildPackages := []string{
Packit 63bb0d
		"dnf",
Packit 63bb0d
		"dosfstools",
Packit 63bb0d
		"e2fsprogs",
Packit 63bb0d
		"policycoreutils",
Packit 63bb0d
		"qemu-img",
Packit 63bb0d
		"selinux-policy-targeted",
Packit 63bb0d
		"systemd",
Packit 63bb0d
		"tar",
Packit 63bb0d
		"xz",
Packit 63bb0d
	}
Packit 63bb0d
	buildPackages := map[string][]string{
Packit 63bb0d
		"x86_64":  x8664BuildPackages,
Packit 63bb0d
		"aarch64": aarch64BuildPackages,
Packit 63bb0d
	}
Packit 63bb0d
	d := fedora32.New()
Packit 63bb0d
	for _, archLabel := range d.ListArches() {
Packit 63bb0d
		archStruct, err := d.GetArch(archLabel)
Packit 63bb0d
		if err != nil {
Packit 63bb0d
			t.Errorf("d.GetArch(%v) returned err = %v; expected nil", archLabel, err)
Packit 63bb0d
			continue
Packit 63bb0d
		}
Packit 63bb0d
		for _, itLabel := range archStruct.ListImageTypes() {
Packit 63bb0d
			itStruct, err := archStruct.GetImageType(itLabel)
Packit 63bb0d
			if err != nil {
Packit 63bb0d
				t.Errorf("d.GetArch(%v) returned err = %v; expected nil", archLabel, err)
Packit 63bb0d
				continue
Packit 63bb0d
			}
Packit Service 15f37d
			buildPkgs := itStruct.PackageSets(blueprint.Blueprint{})["build-packages"]
Packit Service 15f37d
			assert.NotNil(t, buildPkgs)
Packit 63bb0d
			if itLabel == "fedora-iot-commit" {
Packit 63bb0d
				// For now we only include rpm-ostree when building fedora-iot-commit image types, this we may want
Packit 63bb0d
				// to reconsider. The only reason to specia-case it is that it might pull in a lot of dependencies
Packit 63bb0d
				// for a niche usecase.
Packit Service 15f37d
				assert.ElementsMatch(t, append(buildPackages[archLabel], "rpm-ostree"), buildPkgs.Include)
Packit 63bb0d
			} else {
Packit Service 15f37d
				assert.ElementsMatch(t, buildPackages[archLabel], buildPkgs.Include)
Packit 63bb0d
			}
Packit 63bb0d
		}
Packit 63bb0d
	}
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
func TestImageType_Name(t *testing.T) {
Packit 63bb0d
	distro := fedora32.New()
Packit 63bb0d
	imgMap := []struct {
Packit 63bb0d
		arch     string
Packit 63bb0d
		imgNames []string
Packit 63bb0d
	}{
Packit 63bb0d
		{
Packit 63bb0d
			arch: "x86_64",
Packit 63bb0d
			imgNames: []string{
Packit 63bb0d
				"ami",
Packit 63bb0d
				"qcow2",
Packit 63bb0d
				"openstack",
Packit 63bb0d
				"vhd",
Packit 63bb0d
				"vmdk",
Packit 63bb0d
			},
Packit 63bb0d
		},
Packit 63bb0d
		{
Packit 63bb0d
			arch: "aarch64",
Packit 63bb0d
			imgNames: []string{
Packit 63bb0d
				"ami",
Packit 63bb0d
				"qcow2",
Packit 63bb0d
				"openstack",
Packit 63bb0d
			},
Packit 63bb0d
		},
Packit 63bb0d
	}
Packit 63bb0d
	for _, mapping := range imgMap {
Packit 63bb0d
		arch, err := distro.GetArch(mapping.arch)
Packit 63bb0d
		if assert.NoError(t, err) {
Packit 63bb0d
			for _, imgName := range mapping.imgNames {
Packit 63bb0d
				imgType, err := arch.GetImageType(imgName)
Packit 63bb0d
				if assert.NoError(t, err) {
Packit 63bb0d
					assert.Equalf(t, imgName, imgType.Name(), "arch: %s", mapping.arch)
Packit 63bb0d
				}
Packit 63bb0d
			}
Packit 63bb0d
		}
Packit 63bb0d
	}
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
func TestImageType_Size(t *testing.T) {
Packit 63bb0d
	const gigaByte = 1024 * 1024 * 1024
Packit 63bb0d
	sizeMap := []struct {
Packit 63bb0d
		name       string
Packit 63bb0d
		inputSize  uint64
Packit 63bb0d
		outputSize uint64
Packit 63bb0d
	}{
Packit 63bb0d
		{
Packit 63bb0d
			name:       "ami",
Packit 63bb0d
			inputSize:  6*gigaByte + 1,
Packit 63bb0d
			outputSize: 6*gigaByte + 1,
Packit 63bb0d
		},
Packit 63bb0d
		{
Packit 63bb0d
			name:       "ami",
Packit 63bb0d
			inputSize:  0,
Packit 63bb0d
			outputSize: 6 * gigaByte,
Packit 63bb0d
		},
Packit 63bb0d
		{
Packit 63bb0d
			name:       "vhd",
Packit 63bb0d
			inputSize:  10 * gigaByte,
Packit 63bb0d
			outputSize: 10 * gigaByte,
Packit 63bb0d
		},
Packit 63bb0d
		{
Packit 63bb0d
			name:       "vhd",
Packit 63bb0d
			inputSize:  10*gigaByte - 1,
Packit 63bb0d
			outputSize: 10 * gigaByte,
Packit 63bb0d
		},
Packit 63bb0d
	}
Packit 63bb0d
Packit 63bb0d
	distro := fedora32.New()
Packit 63bb0d
	arch, err := distro.GetArch("x86_64")
Packit 63bb0d
	if assert.NoError(t, err) {
Packit 63bb0d
		for _, mapping := range sizeMap {
Packit 63bb0d
			imgType, err := arch.GetImageType(mapping.name)
Packit 63bb0d
			if assert.NoError(t, err) {
Packit 63bb0d
				size := imgType.Size(mapping.inputSize)
Packit 63bb0d
				assert.Equalf(t, mapping.outputSize, size, "Image type: %s, input size: %d, expected: %d, got: %d",
Packit 63bb0d
					mapping.name, mapping.inputSize, mapping.outputSize, size)
Packit 63bb0d
			}
Packit 63bb0d
		}
Packit 63bb0d
	}
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
func TestImageType_BasePackages(t *testing.T) {
Packit 63bb0d
	pkgMaps := []struct {
Packit 63bb0d
		name               string
Packit 63bb0d
		basePackages       []string
Packit 63bb0d
		bootloaderPackages []string
Packit 63bb0d
		excludedPackages   []string
Packit 63bb0d
		bootable           bool
Packit 63bb0d
	}{
Packit 63bb0d
		{
Packit 63bb0d
			name: "ami",
Packit 63bb0d
			basePackages: []string{
Packit 63bb0d
				"@Core",
Packit 63bb0d
				"chrony",
Packit 63bb0d
				"selinux-policy-targeted",
Packit 63bb0d
				"langpacks-en",
Packit 63bb0d
				"libxcrypt-compat",
Packit 63bb0d
				"xfsprogs",
Packit 63bb0d
				"cloud-init",
Packit 63bb0d
				"checkpolicy",
Packit 63bb0d
				"net-tools",
Packit Service bcdfb1
Packit Service bcdfb1
				// Default from Blueprint
Packit Service bcdfb1
				"kernel",
Packit 63bb0d
			},
Packit 63bb0d
			bootloaderPackages: []string{
Packit 63bb0d
				"dracut-config-generic",
Packit 63bb0d
				"grub2-pc",
Packit 63bb0d
			},
Packit 63bb0d
			excludedPackages: []string{
Packit 63bb0d
				"dracut-config-rescue",
Packit 63bb0d
			},
Packit 63bb0d
			bootable: true,
Packit 63bb0d
		},
Packit 63bb0d
		{
Packit 63bb0d
			name: "openstack",
Packit 63bb0d
			basePackages: []string{
Packit 63bb0d
				"@Core",
Packit 63bb0d
				"chrony",
Packit 63bb0d
				"selinux-policy-targeted",
Packit 63bb0d
				"spice-vdagent",
Packit 63bb0d
				"qemu-guest-agent",
Packit 63bb0d
				"xen-libs",
Packit 63bb0d
				"langpacks-en",
Packit 63bb0d
				"cloud-init",
Packit 63bb0d
				"libdrm",
Packit Service bcdfb1
Packit Service bcdfb1
				// Default from Blueprint
Packit Service bcdfb1
				"kernel",
Packit 63bb0d
			},
Packit 63bb0d
			bootloaderPackages: []string{
Packit 63bb0d
				"dracut-config-generic",
Packit 63bb0d
				"grub2-pc",
Packit 63bb0d
			},
Packit 63bb0d
			excludedPackages: []string{
Packit 63bb0d
				"dracut-config-rescue",
Packit 63bb0d
			},
Packit 63bb0d
			bootable: true,
Packit 63bb0d
		},
Packit 63bb0d
	}
Packit 63bb0d
	distro := fedora32.New()
Packit 63bb0d
	arch, err := distro.GetArch("x86_64")
Packit 63bb0d
	assert.NoError(t, err)
Packit 63bb0d
Packit 63bb0d
	for _, pkgMap := range pkgMaps {
Packit 63bb0d
		imgType, err := arch.GetImageType(pkgMap.name)
Packit 63bb0d
		assert.NoError(t, err)
Packit Service 15f37d
		packages := imgType.PackageSets(blueprint.Blueprint{})["packages"]
Packit Service 15f37d
		assert.NotNil(t, packages)
Packit 63bb0d
		assert.Equalf(
Packit 63bb0d
			t,
Packit 63bb0d
			append(pkgMap.basePackages, pkgMap.bootloaderPackages...),
Packit Service 15f37d
			packages.Include,
Packit 63bb0d
			"image type: %s",
Packit 63bb0d
			pkgMap.name,
Packit 63bb0d
		)
Packit Service 15f37d
		assert.Equalf(t, pkgMap.excludedPackages, packages.Exclude, "image type: %s", pkgMap.name)
Packit 63bb0d
	}
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
func TestDistro_Manifest(t *testing.T) {
Packit Service 509fd4
	distro_test_common.TestDistro_Manifest(t, "../../../test/data/manifests/", "fedora_32*", fedora32.New())
Packit 63bb0d
}
Packit 63bb0d
Packit Service bcdfb1
// Check that Manifest() function returns an error for unsupported
Packit Service bcdfb1
// configurations.
Packit Service bcdfb1
func TestDistro_ManifestError(t *testing.T) {
Packit Service bcdfb1
	// Currently, the only unsupported configuration is OSTree commit types
Packit Service bcdfb1
	// with Kernel boot options
Packit Service bcdfb1
	f32distro := fedora32.New()
Packit Service bcdfb1
	bp := blueprint.Blueprint{
Packit Service bcdfb1
		Customizations: &blueprint.Customizations{
Packit Service bcdfb1
			Kernel: &blueprint.KernelCustomization{
Packit Service bcdfb1
				Append: "debug",
Packit Service bcdfb1
			},
Packit Service bcdfb1
		},
Packit Service bcdfb1
	}
Packit Service bcdfb1
Packit Service bcdfb1
	for _, archName := range f32distro.ListArches() {
Packit Service bcdfb1
		arch, _ := f32distro.GetArch(archName)
Packit Service bcdfb1
		for _, imgTypeName := range arch.ListImageTypes() {
Packit Service bcdfb1
			imgType, _ := arch.GetImageType(imgTypeName)
Packit Service 15f37d
			_, err := imgType.Manifest(bp.Customizations, distro.ImageOptions{}, nil, nil, 0)
Packit Service bcdfb1
			if imgTypeName == "fedora-iot-commit" {
Packit Service bcdfb1
				assert.EqualError(t, err, "kernel boot parameter customizations are not supported for ostree types")
Packit Service bcdfb1
			} else {
Packit Service bcdfb1
				assert.NoError(t, err)
Packit Service bcdfb1
			}
Packit Service bcdfb1
		}
Packit Service bcdfb1
	}
Packit Service bcdfb1
}
Packit Service bcdfb1
Packit 63bb0d
func TestFedora32_ListArches(t *testing.T) {
Packit 63bb0d
	distro := fedora32.New()
Packit 63bb0d
	arches := distro.ListArches()
Packit 63bb0d
	assert.Equal(t, []string{"aarch64", "x86_64"}, arches)
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
func TestFedora32_GetArch(t *testing.T) {
Packit 63bb0d
	distro := fedora32.New()
Packit 63bb0d
	arches := []struct {
Packit 63bb0d
		name          string
Packit 63bb0d
		errorExpected bool
Packit 63bb0d
	}{
Packit 63bb0d
		{
Packit 63bb0d
			name: "x86_64",
Packit 63bb0d
		},
Packit 63bb0d
		{
Packit 63bb0d
			name: "aarch64",
Packit 63bb0d
		},
Packit 63bb0d
		{
Packit 63bb0d
			name:          "foo-arch",
Packit 63bb0d
			errorExpected: true,
Packit 63bb0d
		},
Packit 63bb0d
	}
Packit 63bb0d
Packit 63bb0d
	for _, a := range arches {
Packit 63bb0d
		actualArch, err := distro.GetArch(a.name)
Packit 63bb0d
		if !a.errorExpected {
Packit 63bb0d
			assert.Equal(t, a.name, actualArch.Name())
Packit 63bb0d
			assert.NoError(t, err)
Packit 63bb0d
		} else {
Packit 63bb0d
			assert.Nil(t, actualArch)
Packit 63bb0d
			assert.Error(t, err)
Packit 63bb0d
		}
Packit 63bb0d
	}
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
func TestFedora32_Name(t *testing.T) {
Packit 63bb0d
	distro := fedora32.New()
Packit 63bb0d
	assert.Equal(t, "fedora-32", distro.Name())
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
func TestFedora32_ModulePlatformID(t *testing.T) {
Packit 63bb0d
	distro := fedora32.New()
Packit 63bb0d
	assert.Equal(t, "platform:f32", distro.ModulePlatformID())
Packit 63bb0d
}
Packit Service bcdfb1
Packit Service bcdfb1
func TestFedora32_KernelOption(t *testing.T) {
Packit Service bcdfb1
	distro_test_common.TestDistro_KernelOption(t, fedora32.New())
Packit Service bcdfb1
}