debian-forge-cli/cmd/image-builder/describeimg_test.go
Tomáš Hozza 8040fee0d4 cmd/describe: test that all images can be described
Add an unit test to verify that the `describe` command can describe all
image types. I've recently ran into issue when describing ostree-based
and `*-simplified-installer` image types.

Add new dependecy for working with YAML - sigs.k8s.io/yaml.

This is what we will probably converge to, since our currently used YAML
library is unmaintained.

Signed-off-by: Tomáš Hozza <thozza@redhat.com>
2025-06-23 18:31:27 +00:00

95 lines
2.3 KiB
Go

package main_test
import (
"bytes"
"fmt"
"strings"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"sigs.k8s.io/yaml"
testrepos "github.com/osbuild/images/test/data/repositories"
main "github.com/osbuild/image-builder-cli/cmd/image-builder"
)
func TestDescribeImage(t *testing.T) {
restore := main.MockNewRepoRegistry(testrepos.New)
defer restore()
res, err := main.GetOneImage("centos-9", "tar", "x86_64", nil)
assert.NoError(t, err)
var buf bytes.Buffer
err = main.DescribeImage(res, &buf)
assert.NoError(t, err)
expectedOutput := `@WARNING - the output format is not stable yet and may change
distro: centos-9
type: tar
arch: x86_64
os_version: 9-stream
bootmode: none
partition_type: ""
default_filename: root.tar.xz
build_pipelines:
- build
payload_pipelines:
- os
- archive
packages:
build:
include:
- coreutils
- glibc
- platform-python
- policycoreutils
- python3
- rpm
- selinux-policy-targeted
- systemd
- tar
- xz
exclude: []
os:
include:
- policycoreutils
- selinux-policy-targeted
exclude:
- rng-tools
`
assert.Equal(t, expectedOutput, buf.String())
}
func TestDescribeImageAll(t *testing.T) {
restore := main.MockNewRepoRegistry(testrepos.New)
defer restore()
allImages, err := main.GetAllImages(nil)
require.NoError(t, err)
require.NotEmpty(t, allImages)
for _, res := range allImages {
t.Run(fmt.Sprintf("%s/%s/%s", res.Distro.Name(), res.Arch.Name(), res.ImgType.Name()), func(t *testing.T) {
var buf bytes.Buffer
err = main.DescribeImage(&res, &buf)
require.NoError(t, err)
// check that the first line of the output contains the "@WARNING" message
lines := strings.Split(buf.String(), "\n")
require.NotEmpty(t, lines)
require.Equal(t, "@WARNING - the output format is not stable yet and may change", lines[0])
// the rest of the output should contain a valid YAML representation of the image
describeOutput := strings.Join(lines[1:], "\n")
var imgDef main.DescribeImgYAML
err := yaml.Unmarshal([]byte(describeOutput), &imgDef)
require.NoError(t, err)
require.Equal(t, res.Distro.Name(), imgDef.Distro)
require.Equal(t, res.Arch.Name(), imgDef.Arch)
require.Equal(t, res.ImgType.Name(), imgDef.Type)
})
}
}