Blame internal/osbuild/stage_test.go

Packit 63bb0d
package osbuild
Packit 63bb0d
Packit 63bb0d
import (
Packit 63bb0d
	"bytes"
Packit 63bb0d
	"encoding/json"
Packit 63bb0d
	"reflect"
Packit 63bb0d
	"testing"
Packit 63bb0d
Packit 63bb0d
	"github.com/google/uuid"
Packit 63bb0d
)
Packit 63bb0d
Packit 63bb0d
func TestStage_UnmarshalJSON(t *testing.T) {
Packit 63bb0d
	nullUUID := uuid.MustParse("00000000-0000-0000-0000-000000000000")
Packit 63bb0d
	type fields struct {
Packit 63bb0d
		Name    string
Packit 63bb0d
		Options StageOptions
Packit 63bb0d
	}
Packit 63bb0d
	type args struct {
Packit 63bb0d
		data []byte
Packit 63bb0d
	}
Packit 63bb0d
	tests := []struct {
Packit 63bb0d
		name    string
Packit 63bb0d
		fields  fields
Packit 63bb0d
		args    args
Packit 63bb0d
		wantErr bool
Packit 63bb0d
	}{
Packit 63bb0d
		{
Packit 63bb0d
			name: "invalid json",
Packit 63bb0d
			args: args{
Packit 63bb0d
				data: []byte(`{"name":"org.osbuild.foo","options":{"bar":null}`),
Packit 63bb0d
			},
Packit 63bb0d
			wantErr: true,
Packit 63bb0d
		},
Packit 63bb0d
		{
Packit 63bb0d
			name: "unknown stage",
Packit 63bb0d
			args: args{
Packit 63bb0d
				data: []byte(`{"name":"org.osbuild.foo","options":{"bar":null}}`),
Packit 63bb0d
			},
Packit 63bb0d
			wantErr: true,
Packit 63bb0d
		},
Packit 63bb0d
		{
Packit 63bb0d
			name: "missing options",
Packit 63bb0d
			args: args{
Packit 63bb0d
				data: []byte(`{"name":"org.osbuild.locale"}`),
Packit 63bb0d
			},
Packit 63bb0d
			wantErr: true,
Packit 63bb0d
		},
Packit 63bb0d
		{
Packit 63bb0d
			name: "missing name",
Packit 63bb0d
			args: args{
Packit 63bb0d
				data: []byte(`{"foo":null,"options":{"bar":null}}`),
Packit 63bb0d
			},
Packit 63bb0d
			wantErr: true,
Packit 63bb0d
		},
Packit 63bb0d
		{
Packit 63bb0d
			name: "chrony",
Packit 63bb0d
			fields: fields{
Packit 63bb0d
				Name:    "org.osbuild.chrony",
Packit 63bb0d
				Options: &ChronyStageOptions{},
Packit 63bb0d
			},
Packit 63bb0d
			args: args{
Packit 63bb0d
				data: []byte(`{"name":"org.osbuild.chrony","options":{"timeservers":null}}`),
Packit 63bb0d
			},
Packit 63bb0d
		},
Packit 63bb0d
		{
Packit 63bb0d
			name: "firewall",
Packit 63bb0d
			fields: fields{
Packit 63bb0d
				Name:    "org.osbuild.firewall",
Packit 63bb0d
				Options: &FirewallStageOptions{},
Packit 63bb0d
			},
Packit 63bb0d
			args: args{
Packit 63bb0d
				data: []byte(`{"name":"org.osbuild.firewall","options":{}}`),
Packit 63bb0d
			},
Packit 63bb0d
		},
Packit 63bb0d
		{
Packit 63bb0d
			name: "fix-bls",
Packit 63bb0d
			fields: fields{
Packit 63bb0d
				Name:    "org.osbuild.fix-bls",
Packit 63bb0d
				Options: &FixBLSStageOptions{},
Packit 63bb0d
			},
Packit 63bb0d
			args: args{
Packit 63bb0d
				data: []byte(`{"name":"org.osbuild.fix-bls","options":{}}`),
Packit 63bb0d
			},
Packit 63bb0d
		},
Packit 63bb0d
		{
Packit 63bb0d
			name: "fstab",
Packit 63bb0d
			fields: fields{
Packit 63bb0d
				Name:    "org.osbuild.fstab",
Packit 63bb0d
				Options: &FSTabStageOptions{},
Packit 63bb0d
			},
Packit 63bb0d
			args: args{
Packit 63bb0d
				data: []byte(`{"name":"org.osbuild.fstab","options":{"filesystems":null}}`),
Packit 63bb0d
			},
Packit 63bb0d
		},
Packit 63bb0d
		{
Packit 63bb0d
			name: "groups",
Packit 63bb0d
			fields: fields{
Packit 63bb0d
				Name:    "org.osbuild.groups",
Packit 63bb0d
				Options: &GroupsStageOptions{},
Packit 63bb0d
			},
Packit 63bb0d
			args: args{
Packit 63bb0d
				data: []byte(`{"name":"org.osbuild.groups","options":{"groups":null}}`),
Packit 63bb0d
			},
Packit 63bb0d
		},
Packit 63bb0d
		{
Packit 63bb0d
			name: "grub2",
Packit 63bb0d
			fields: fields{
Packit 63bb0d
				Name: "org.osbuild.grub2",
Packit 63bb0d
				Options: &GRUB2StageOptions{
Packit 63bb0d
					RootFilesystemUUID: nullUUID,
Packit 63bb0d
				},
Packit 63bb0d
			},
Packit 63bb0d
			args: args{
Packit 63bb0d
				data: []byte(`{"name":"org.osbuild.grub2","options":{"root_fs_uuid":"00000000-0000-0000-0000-000000000000"}}`),
Packit 63bb0d
			},
Packit 63bb0d
		},
Packit 63bb0d
		{
Packit 63bb0d
			name: "grub2-uefi",
Packit 63bb0d
			fields: fields{
Packit 63bb0d
				Name: "org.osbuild.grub2",
Packit 63bb0d
				Options: &GRUB2StageOptions{
Packit 63bb0d
					RootFilesystemUUID: nullUUID,
Packit 63bb0d
					UEFI: &GRUB2UEFI{
Packit 63bb0d
						Vendor: "vendor",
Packit 63bb0d
					},
Packit 63bb0d
				},
Packit 63bb0d
			},
Packit 63bb0d
			args: args{
Packit 63bb0d
				data: []byte(`{"name":"org.osbuild.grub2","options":{"root_fs_uuid":"00000000-0000-0000-0000-000000000000","uefi":{"vendor":"vendor"}}}`),
Packit 63bb0d
			},
Packit 63bb0d
		},
Packit 63bb0d
		{
Packit 63bb0d
			name: "grub2-separate-boot",
Packit 63bb0d
			fields: fields{
Packit 63bb0d
				Name: "org.osbuild.grub2",
Packit 63bb0d
				Options: &GRUB2StageOptions{
Packit 63bb0d
					RootFilesystemUUID: nullUUID,
Packit 63bb0d
					BootFilesystemUUID: &nullUUID,
Packit 63bb0d
				},
Packit 63bb0d
			},
Packit 63bb0d
			args: args{
Packit 63bb0d
				data: []byte(`{"name":"org.osbuild.grub2","options":{"root_fs_uuid":"00000000-0000-0000-0000-000000000000","boot_fs_uuid":"00000000-0000-0000-0000-000000000000"}}`),
Packit 63bb0d
			},
Packit 63bb0d
		},
Packit 63bb0d
		{
Packit 63bb0d
			name: "hostname",
Packit 63bb0d
			fields: fields{
Packit 63bb0d
				Name:    "org.osbuild.hostname",
Packit 63bb0d
				Options: &HostnameStageOptions{},
Packit 63bb0d
			},
Packit 63bb0d
			args: args{
Packit 63bb0d
				data: []byte(`{"name":"org.osbuild.hostname","options":{"hostname":""}}`),
Packit 63bb0d
			},
Packit 63bb0d
		},
Packit 63bb0d
		{
Packit 63bb0d
			name: "keymap",
Packit 63bb0d
			fields: fields{
Packit 63bb0d
				Name:    "org.osbuild.keymap",
Packit 63bb0d
				Options: &KeymapStageOptions{},
Packit 63bb0d
			},
Packit 63bb0d
			args: args{
Packit 63bb0d
				data: []byte(`{"name":"org.osbuild.keymap","options":{"keymap":""}}`),
Packit 63bb0d
			},
Packit 63bb0d
		},
Packit 63bb0d
		{
Packit 63bb0d
			name: "locale",
Packit 63bb0d
			fields: fields{
Packit 63bb0d
				Name:    "org.osbuild.locale",
Packit 63bb0d
				Options: &LocaleStageOptions{},
Packit 63bb0d
			},
Packit 63bb0d
			args: args{
Packit 63bb0d
				data: []byte(`{"name":"org.osbuild.locale","options":{"language":""}}`),
Packit 63bb0d
			},
Packit 63bb0d
		},
Packit 63bb0d
		{
Packit Service bcdfb1
			name: "rhsm-empty",
Packit Service bcdfb1
			fields: fields{
Packit Service bcdfb1
				Name:    "org.osbuild.rhsm",
Packit Service bcdfb1
				Options: &RHSMStageOptions{},
Packit Service bcdfb1
			},
Packit Service bcdfb1
			args: args{
Packit Service bcdfb1
				data: []byte(`{"name":"org.osbuild.rhsm","options":{}}`),
Packit Service bcdfb1
			},
Packit Service bcdfb1
		},
Packit Service bcdfb1
		{
Packit Service bcdfb1
			name: "rhsm",
Packit Service bcdfb1
			fields: fields{
Packit Service bcdfb1
				Name: "org.osbuild.rhsm",
Packit Service bcdfb1
				Options: &RHSMStageOptions{
Packit Service bcdfb1
					DnfPlugins: &RHSMStageOptionsDnfPlugins{
Packit Service bcdfb1
						ProductID: &RHSMStageOptionsDnfPlugin{
Packit Service bcdfb1
							Enabled: false,
Packit Service bcdfb1
						},
Packit Service bcdfb1
						SubscriptionManager: &RHSMStageOptionsDnfPlugin{
Packit Service bcdfb1
							Enabled: false,
Packit Service bcdfb1
						},
Packit Service bcdfb1
					},
Packit Service bcdfb1
				},
Packit Service bcdfb1
			},
Packit Service bcdfb1
			args: args{
Packit Service bcdfb1
				data: []byte(`{"name":"org.osbuild.rhsm","options":{"dnf-plugins":{"product-id":{"enabled":false},"subscription-manager":{"enabled":false}}}}`),
Packit Service bcdfb1
			},
Packit Service bcdfb1
		},
Packit Service bcdfb1
		{
Packit 63bb0d
			name: "rpm-empty",
Packit 63bb0d
			fields: fields{
Packit 63bb0d
				Name:    "org.osbuild.rpm",
Packit 63bb0d
				Options: &RPMStageOptions{},
Packit 63bb0d
			},
Packit 63bb0d
			args: args{
Packit 63bb0d
				data: []byte(`{"name":"org.osbuild.rpm","options":{"packages":null}}`),
Packit 63bb0d
			},
Packit 63bb0d
		},
Packit 63bb0d
		{
Packit 63bb0d
			name: "rpm",
Packit 63bb0d
			fields: fields{
Packit 63bb0d
				Name: "org.osbuild.rpm",
Packit 63bb0d
				Options: &RPMStageOptions{
Packit 63bb0d
					GPGKeys: []string{"key1", "key2"},
Packit 63bb0d
					Packages: []RPMPackage{
Packit 63bb0d
						{
Packit 63bb0d
							Checksum: "checksum1",
Packit 63bb0d
						},
Packit 63bb0d
						{
Packit 63bb0d
							Checksum: "checksum2",
Packit 63bb0d
							CheckGPG: true,
Packit 63bb0d
						},
Packit 63bb0d
					},
Packit 63bb0d
				},
Packit 63bb0d
			},
Packit 63bb0d
			args: args{
Packit 63bb0d
				data: []byte(`{"name":"org.osbuild.rpm","options":{"gpgkeys":["key1","key2"],"packages":[{"checksum":"checksum1"},{"checksum":"checksum2","check_gpg":true}]}}`),
Packit 63bb0d
			},
Packit 63bb0d
		},
Packit 63bb0d
		{
Packit 63bb0d
			name: "rpm-ostree",
Packit 63bb0d
			fields: fields{
Packit 63bb0d
				Name: "org.osbuild.rpm-ostree",
Packit 63bb0d
				Options: &RPMOSTreeStageOptions{
Packit 63bb0d
					EtcGroupMembers: []string{
Packit 63bb0d
						"wheel",
Packit 63bb0d
					},
Packit 63bb0d
				},
Packit 63bb0d
			},
Packit 63bb0d
			args: args{
Packit 63bb0d
				data: []byte(`{"name":"org.osbuild.rpm-ostree","options":{"etc_group_members":["wheel"]}}`),
Packit 63bb0d
			},
Packit 63bb0d
		},
Packit 63bb0d
		{
Packit 63bb0d
			name: "script",
Packit 63bb0d
			fields: fields{
Packit 63bb0d
				Name:    "org.osbuild.script",
Packit 63bb0d
				Options: &ScriptStageOptions{},
Packit 63bb0d
			},
Packit 63bb0d
			args: args{
Packit 63bb0d
				data: []byte(`{"name":"org.osbuild.script","options":{"script":""}}`),
Packit 63bb0d
			},
Packit 63bb0d
		},
Packit 63bb0d
		{
Packit 63bb0d
			name: "selinux",
Packit 63bb0d
			fields: fields{
Packit 63bb0d
				Name:    "org.osbuild.selinux",
Packit 63bb0d
				Options: &SELinuxStageOptions{},
Packit 63bb0d
			},
Packit 63bb0d
			args: args{
Packit 63bb0d
				data: []byte(`{"name":"org.osbuild.selinux","options":{"file_contexts":""}}`),
Packit 63bb0d
			},
Packit 63bb0d
		},
Packit 63bb0d
		{
Packit 63bb0d
			name: "systemd",
Packit 63bb0d
			fields: fields{
Packit 63bb0d
				Name:    "org.osbuild.systemd",
Packit 63bb0d
				Options: &SystemdStageOptions{},
Packit 63bb0d
			},
Packit 63bb0d
			args: args{
Packit 63bb0d
				data: []byte(`{"name":"org.osbuild.systemd","options":{}}`),
Packit 63bb0d
			},
Packit 63bb0d
		},
Packit 63bb0d
		{
Packit 63bb0d
			name: "systemd-enabled",
Packit 63bb0d
			fields: fields{
Packit 63bb0d
				Name: "org.osbuild.systemd",
Packit 63bb0d
				Options: &SystemdStageOptions{
Packit 63bb0d
					EnabledServices: []string{"foo.service"},
Packit 63bb0d
				},
Packit 63bb0d
			},
Packit 63bb0d
			args: args{
Packit 63bb0d
				data: []byte(`{"name":"org.osbuild.systemd","options":{"enabled_services":["foo.service"]}}`),
Packit 63bb0d
			},
Packit 63bb0d
		},
Packit 63bb0d
		{
Packit 63bb0d
			name: "timezone",
Packit 63bb0d
			fields: fields{
Packit 63bb0d
				Name:    "org.osbuild.timezone",
Packit 63bb0d
				Options: &TimezoneStageOptions{},
Packit 63bb0d
			},
Packit 63bb0d
			args: args{
Packit 63bb0d
				data: []byte(`{"name":"org.osbuild.timezone","options":{"zone":""}}`),
Packit 63bb0d
			},
Packit 63bb0d
		},
Packit 63bb0d
		{
Packit 63bb0d
			name: "users",
Packit 63bb0d
			fields: fields{
Packit 63bb0d
				Name:    "org.osbuild.users",
Packit 63bb0d
				Options: &UsersStageOptions{},
Packit 63bb0d
			},
Packit 63bb0d
			args: args{
Packit 63bb0d
				data: []byte(`{"name":"org.osbuild.users","options":{"users":null}}`),
Packit 63bb0d
			},
Packit 63bb0d
		},
Packit 63bb0d
	}
Packit 63bb0d
	for _, tt := range tests {
Packit 63bb0d
		t.Run(tt.name, func(t *testing.T) {
Packit 63bb0d
			stage := &Stage{
Packit 63bb0d
				Name:    tt.fields.Name,
Packit 63bb0d
				Options: tt.fields.Options,
Packit 63bb0d
			}
Packit 63bb0d
			var gotStage Stage
Packit 63bb0d
			if err := gotStage.UnmarshalJSON(tt.args.data); (err != nil) != tt.wantErr {
Packit 63bb0d
				t.Errorf("Stage.UnmarshalJSON() error = %v, wantErr %v", err, tt.wantErr)
Packit 63bb0d
			}
Packit 63bb0d
			if tt.wantErr {
Packit 63bb0d
				return
Packit 63bb0d
			}
Packit 63bb0d
			gotBytes, err := json.Marshal(stage)
Packit 63bb0d
			if err != nil {
Packit 63bb0d
				t.Errorf("Could not marshal stage: %v", err)
Packit 63bb0d
			}
Packit 63bb0d
			if !bytes.Equal(gotBytes, tt.args.data) {
Packit 63bb0d
				t.Errorf("Expected `%v`, got `%v`", string(tt.args.data), string(gotBytes))
Packit 63bb0d
			}
Packit 63bb0d
			if !reflect.DeepEqual(&gotStage, stage) {
Packit 63bb0d
				t.Errorf("got {%v, %v}, expected {%v, %v}", gotStage.Name, gotStage.Options, stage.Name, stage.Options)
Packit 63bb0d
			}
Packit 63bb0d
		})
Packit 63bb0d
	}
Packit 63bb0d
}