Blame internal/osbuild/assembler_test.go

Packit Service 4d2de5
package osbuild
Packit Service 4d2de5
Packit Service 4d2de5
import (
Packit Service 4d2de5
	"encoding/json"
Packit Service 4d2de5
	"testing"
Packit Service 4d2de5
Packit Service 4d2de5
	"github.com/google/uuid"
Packit Service 4d2de5
	"github.com/stretchr/testify/assert"
Packit Service 4d2de5
)
Packit Service 4d2de5
Packit Service 4d2de5
func TestAssembler_UnmarshalJSON(t *testing.T) {
Packit Service 4d2de5
	tests := []struct {
Packit Service 4d2de5
		name          string
Packit Service 4d2de5
		assembler     Assembler
Packit Service 4d2de5
		data          []byte
Packit Service 4d2de5
		errorExpected bool
Packit Service 4d2de5
	}{
Packit Service 4d2de5
		{
Packit Service 4d2de5
			// invalid JSON - note the missing brace at the end of the string
Packit Service 4d2de5
			name:          "invalid json",
Packit Service 4d2de5
			data:          []byte(`{"name":"org.osbuild.tar","options":{"filename":""}`),
Packit Service 4d2de5
			errorExpected: true,
Packit Service 4d2de5
		},
Packit Service 4d2de5
		{
Packit Service 4d2de5
			// valid JSON, but with an unknown assembler (org.osbuild.foo)
Packit Service 4d2de5
			name:          "unknown assembler",
Packit Service 4d2de5
			data:          []byte(`{"name":"org.osbuild.foo","options":{"bar":null}}`),
Packit Service 4d2de5
			errorExpected: true,
Packit Service 4d2de5
		},
Packit Service 4d2de5
		{
Packit Service 4d2de5
			name:          "missing options",
Packit Service 4d2de5
			data:          []byte(`{"name":"org.osbuild.rawfs"`),
Packit Service 4d2de5
			errorExpected: true,
Packit Service 4d2de5
		},
Packit Service 4d2de5
		{
Packit Service 4d2de5
			name:          "missing name",
Packit Service 4d2de5
			data:          []byte(`{"options":{"bar":null}}`),
Packit Service 4d2de5
			errorExpected: true,
Packit Service 4d2de5
		},
Packit Service 4d2de5
		{
Packit Service 4d2de5
			name: "qemu assembler empty",
Packit Service 4d2de5
			assembler: Assembler{
Packit Service 4d2de5
				Name:    "org.osbuild.qemu",
Packit Service 4d2de5
				Options: &QEMUAssemblerOptions{},
Packit Service 4d2de5
			},
Packit Service 4d2de5
			data: []byte(`{"name":"org.osbuild.qemu","options":{"format":"","filename":"","size":0,"ptuuid":"","pttype":"","partitions":null}}`),
Packit Service 4d2de5
		},
Packit Service 4d2de5
		{
Packit Service 4d2de5
			name: "qemu assembler full",
Packit Service 4d2de5
			assembler: Assembler{
Packit Service 4d2de5
				Name: "org.osbuild.qemu",
Packit Service 4d2de5
				Options: &QEMUAssemblerOptions{
Packit Service 4d2de5
					Format:   "qcow2",
Packit Service 4d2de5
					Filename: "disk.qcow2",
Packit Service 4d2de5
					Size:     2147483648,
Packit Service 4d2de5
					PTUUID:   "0x14fc63d2",
Packit Service 4d2de5
					PTType:   "mbr",
Packit Service 4d2de5
					Partitions: []QEMUPartition{QEMUPartition{
Packit Service 4d2de5
						Start:    2048,
Packit Service 4d2de5
						Bootable: true,
Packit Service 4d2de5
						Filesystem: &QEMUFilesystem{
Packit Service 4d2de5
							Type:       "ext4",
Packit Service 4d2de5
							UUID:       "76a22bf4-f153-4541-b6c7-0332c0dfaeac",
Packit Service 4d2de5
							Label:      "root",
Packit Service 4d2de5
							Mountpoint: "/",
Packit Service 4d2de5
						},
Packit Service 4d2de5
					}},
Packit Service 4d2de5
				},
Packit Service 4d2de5
			},
Packit Service 4d2de5
			data: []byte(`{"name":"org.osbuild.qemu","options":{"format":"qcow2","filename":"disk.qcow2","size":2147483648,"ptuuid":"0x14fc63d2","pttype":"mbr","partitions":[{"start":2048,"bootable":true,"filesystem":{"type":"ext4","uuid":"76a22bf4-f153-4541-b6c7-0332c0dfaeac","label":"root","mountpoint":"/"}}]}}`),
Packit Service 4d2de5
		},
Packit Service 4d2de5
		{
Packit Service 4d2de5
			name: "tar assembler empty",
Packit Service 4d2de5
			assembler: Assembler{
Packit Service 4d2de5
				Name:    "org.osbuild.tar",
Packit Service 4d2de5
				Options: &TarAssemblerOptions{},
Packit Service 4d2de5
			},
Packit Service 4d2de5
			data: []byte(`{"name":"org.osbuild.tar","options":{"filename":""}}`),
Packit Service 4d2de5
		},
Packit Service 4d2de5
		{
Packit Service 4d2de5
			name: "tar assembler full",
Packit Service 4d2de5
			assembler: Assembler{
Packit Service 4d2de5
				Name: "org.osbuild.tar",
Packit Service 4d2de5
				Options: &TarAssemblerOptions{
Packit Service 4d2de5
					Filename:    "root.tar.xz",
Packit Service 4d2de5
					Compression: "xz",
Packit Service 4d2de5
				},
Packit Service 4d2de5
			},
Packit Service 4d2de5
			data: []byte(`{"name":"org.osbuild.tar","options":{"filename":"root.tar.xz","compression":"xz"}}`),
Packit Service 4d2de5
		},
Packit Service 4d2de5
		{
Packit Service 4d2de5
			name: "rawfs assembler empty",
Packit Service 4d2de5
			assembler: Assembler{
Packit Service 4d2de5
				Name:    "org.osbuild.rawfs",
Packit Service 4d2de5
				Options: &RawFSAssemblerOptions{},
Packit Service 4d2de5
			},
Packit Service 4d2de5
			data: []byte(`{"name":"org.osbuild.rawfs","options":{"filename":"","root_fs_uuid":"00000000-0000-0000-0000-000000000000","size":0}}`),
Packit Service 4d2de5
		},
Packit Service 4d2de5
		{
Packit Service 4d2de5
			name: "rawfs assembler full",
Packit Service 4d2de5
			assembler: Assembler{
Packit Service 4d2de5
				Name: "org.osbuild.rawfs",
Packit Service 4d2de5
				Options: &RawFSAssemblerOptions{
Packit Service 4d2de5
					Filename:           "filesystem.img",
Packit Service 4d2de5
					RootFilesystemUUID: uuid.MustParse("76a22bf4-f153-4541-b6c7-0332c0dfaeac"),
Packit Service 4d2de5
					Size:               2147483648,
Packit Service 4d2de5
				},
Packit Service 4d2de5
			},
Packit Service 4d2de5
			data: []byte(`{"name":"org.osbuild.rawfs","options":{"filename":"filesystem.img","root_fs_uuid":"76a22bf4-f153-4541-b6c7-0332c0dfaeac","size":2147483648}}`),
Packit Service 4d2de5
		},
Packit Service 4d2de5
		{
Packit Service 4d2de5
			name: "ostree commit assembler",
Packit Service 4d2de5
			assembler: Assembler{
Packit Service 4d2de5
				Name: "org.osbuild.ostree.commit",
Packit Service 4d2de5
				Options: &OSTreeCommitAssemblerOptions{
Packit Service 4d2de5
					Ref: "foo",
Packit Service 4d2de5
					Tar: OSTreeCommitAssemblerTarOptions{
Packit Service 4d2de5
						Filename: "foo.tar",
Packit Service 4d2de5
					},
Packit Service 4d2de5
				},
Packit Service 4d2de5
			},
Packit Service 4d2de5
			data: []byte(`{"name":"org.osbuild.ostree.commit","options":{"ref":"foo","tar":{"filename":"foo.tar"}}}`),
Packit Service 4d2de5
		},
Packit Service 4d2de5
	}
Packit Service 4d2de5
Packit Service 4d2de5
	assert := assert.New(t)
Packit Service 4d2de5
	for _, tt := range tests {
Packit Service 4d2de5
		t.Run(tt.name, func(t *testing.T) {
Packit Service 4d2de5
			assembler := &tt.assembler
Packit Service 4d2de5
			var gotAssembler Assembler
Packit Service 4d2de5
			err := gotAssembler.UnmarshalJSON(tt.data)
Packit Service 4d2de5
			if tt.errorExpected {
Packit Service 4d2de5
				assert.NotNil(err)
Packit Service 4d2de5
				return
Packit Service 4d2de5
			} else {
Packit Service 4d2de5
				assert.Nil(err)
Packit Service 4d2de5
			}
Packit Service 4d2de5
			gotBytes, err := json.Marshal(assembler)
Packit Service 4d2de5
			assert.Nilf(err, "Could not marshal assembler: %v", err)
Packit Service 4d2de5
			assert.Equal(tt.data, gotBytes)
Packit Service 4d2de5
			assert.Equal(&gotAssembler, assembler)
Packit Service 4d2de5
		})
Packit Service 4d2de5
	}
Packit Service 4d2de5
}
Packit Service 4d2de5
Packit Service 4d2de5
func TestNewQEMUAssembler(t *testing.T) {
Packit Service 4d2de5
	options := &QEMUAssemblerOptions{}
Packit Service 4d2de5
	expectedAssembler := &Assembler{
Packit Service 4d2de5
		Name:    "org.osbuild.qemu",
Packit Service 4d2de5
		Options: &QEMUAssemblerOptions{},
Packit Service 4d2de5
	}
Packit Service 4d2de5
	assert.Equal(t, expectedAssembler, NewQEMUAssembler(options))
Packit Service 4d2de5
}
Packit Service 4d2de5
Packit Service 4d2de5
func TestNewTarAssembler(t *testing.T) {
Packit Service 4d2de5
	options := &TarAssemblerOptions{}
Packit Service 4d2de5
	expectedAssembler := &Assembler{
Packit Service 4d2de5
		Name:    "org.osbuild.tar",
Packit Service 4d2de5
		Options: &TarAssemblerOptions{},
Packit Service 4d2de5
	}
Packit Service 4d2de5
	assert.Equal(t, expectedAssembler, NewTarAssembler(options))
Packit Service 4d2de5
}
Packit Service 4d2de5
Packit Service 4d2de5
func TestNewRawFSAssembler(t *testing.T) {
Packit Service 4d2de5
	options := &RawFSAssemblerOptions{}
Packit Service 4d2de5
	expectedAssembler := &Assembler{
Packit Service 4d2de5
		Name:    "org.osbuild.rawfs",
Packit Service 4d2de5
		Options: &RawFSAssemblerOptions{},
Packit Service 4d2de5
	}
Packit Service 4d2de5
	assert.Equal(t, expectedAssembler, NewRawFSAssembler(options))
Packit Service 4d2de5
}