package osbuild2 import ( "encoding/json" "testing" "github.com/stretchr/testify/assert" ) func TestOCIArchiveStage(t *testing.T) { expectedStage := &Stage{ Type: "org.osbuild.oci-archive", Options: &OCIArchiveStageOptions{}, Inputs: &OCIArchiveStageInputs{}, } actualStage := NewOCIArchiveStage(&OCIArchiveStageOptions{}, &OCIArchiveStageInputs{}) assert.Equal(t, expectedStage, actualStage) } func TestOCIArchiveInputs(t *testing.T) { exp := `{ "base": { "type": "org.osbuild.oci-archive", "origin":"org.osbuild.pipeline", "references": ["name:container-tree"] }, "layer.1": { "type": "org.osbuild.tree", "origin": "org.osbuild.pipeline", "references": ["name:container-ostree"] }, "layer.2": { "type": "org.osbuild.tree", "origin": "org.osbuild.pipeline", "references": ["name:container-ostree2"] } }` inputs := new(OCIArchiveStageInputs) base := &OCIArchiveStageInput{ References: []string{ "name:container-tree", }, } base.Type = "org.osbuild.oci-archive" base.Origin = "org.osbuild.pipeline" layer1 := OCIArchiveStageInput{ References: []string{ "name:container-ostree", }, } layer1.Type = "org.osbuild.tree" layer1.Origin = "org.osbuild.pipeline" layer2 := OCIArchiveStageInput{ References: []string{ "name:container-ostree2", }, } layer2.Type = "org.osbuild.tree" layer2.Origin = "org.osbuild.pipeline" inputs.Base = base inputs.Layers = []OCIArchiveStageInput{layer1, layer2} data, err := json.Marshal(inputs) assert.NoError(t, err) assert.JSONEq(t, exp, string(data)) inputsRead := new(OCIArchiveStageInputs) err = json.Unmarshal([]byte(exp), inputsRead) assert.NoError(t, err) assert.Equal(t, inputs, inputsRead) } func TestOCIArchiveInputsErrors(t *testing.T) { noBase := `{ "layer.10": { "type": "org.osbuild.tree", "origin": "org.osbuild.pipeline", "references": ["name:container-ostree"] }, "layer.2": { "type": "org.osbuild.tree", "origin": "org.osbuild.pipeline", "references": ["name:container-ostree2"] } }` inputsRead := new(OCIArchiveStageInputs) assert.Error(t, json.Unmarshal([]byte(noBase), inputsRead)) invalidKey := `{ "base": { "type": "org.osbuild.oci-archive", "origin":"org.osbuild.pipeline", "references": ["name:container-tree"] }, "not-a-layer": { "type": "org.osbuild.tree", "origin": "org.osbuild.pipeline", "references": ["name:container-ostree2"] } }` assert.Error(t, json.Unmarshal([]byte(invalidKey), inputsRead)) }