mirror of
https://github.com/gitpod-io/gitpod.git
synced 2025-12-08 17:36:30 +00:00
108 lines
2.9 KiB
Go
108 lines
2.9 KiB
Go
// Copyright (c) 2020 Gitpod GmbH. All rights reserved.
|
|
// Licensed under the GNU Affero General Public License (AGPL).
|
|
// See License.AGPL.txt in the project root for license information.
|
|
|
|
package main
|
|
|
|
import (
|
|
"bytes"
|
|
"io/fs"
|
|
"testing"
|
|
"testing/fstest"
|
|
|
|
"github.com/google/go-cmp/cmp"
|
|
)
|
|
|
|
func TestProduceManifest(t *testing.T) {
|
|
type Expectation struct {
|
|
MF string
|
|
Error string
|
|
}
|
|
tests := []struct {
|
|
Name string
|
|
FS fs.FS
|
|
Expectation Expectation
|
|
}{
|
|
{
|
|
Name: "happy path",
|
|
FS: fstest.MapFS{
|
|
"c1/metadata.yaml": &fstest.MapFile{Data: []byte("helm-component: c1")},
|
|
"c1/imgnames.txt": &fstest.MapFile{Data: []byte("failthis\nimgc1:v1")},
|
|
"c2/metadata.yaml": &fstest.MapFile{Data: []byte("helm-component: c2.nested")},
|
|
"c2/imgnames.txt": &fstest.MapFile{Data: []byte("failthis\nimgc2:v2\n\n")},
|
|
"c20/metadata.yaml": &fstest.MapFile{Data: []byte("helm-component: c2.other")},
|
|
"c20/imgnames.txt": &fstest.MapFile{Data: []byte("failthis\nimgc2:v2\n\n")},
|
|
},
|
|
Expectation: Expectation{
|
|
MF: `components:
|
|
c1:
|
|
version: v1
|
|
|
|
c2:
|
|
nested:
|
|
version: v2
|
|
|
|
other:
|
|
version: v2
|
|
|
|
`,
|
|
},
|
|
},
|
|
{
|
|
Name: "imgnames only",
|
|
FS: fstest.MapFS{
|
|
"c1/imgnames.txt": &fstest.MapFile{Data: []byte("imgc1")},
|
|
},
|
|
Expectation: Expectation{MF: "components:\n"},
|
|
},
|
|
{
|
|
Name: "incomplete metadata",
|
|
FS: fstest.MapFS{
|
|
"c1/metadata.yaml": &fstest.MapFile{Data: []byte("")},
|
|
"c1/imgnames.txt": &fstest.MapFile{Data: []byte("failthis\nimgc1")},
|
|
},
|
|
Expectation: Expectation{MF: "components:\n"},
|
|
},
|
|
{
|
|
Name: "missing imgnames",
|
|
FS: fstest.MapFS{
|
|
"c1/metadata.yaml": &fstest.MapFile{Data: []byte("helm-component: foobar")},
|
|
},
|
|
Expectation: Expectation{Error: "cannot read image names for c1/metadata.yaml: open c1/imgnames.txt: file does not exist"},
|
|
},
|
|
{
|
|
Name: "broken metadata",
|
|
FS: fstest.MapFS{
|
|
"c1/metadata.yaml": &fstest.MapFile{Data: []byte("invalid YAML")},
|
|
"c1/imgnames.txt": &fstest.MapFile{Data: []byte("failthis\nimgc1")},
|
|
},
|
|
Expectation: Expectation{Error: "cannot unmarshal c1/metadata.yaml: yaml: unmarshal errors:\n line 1: cannot unmarshal !!str `invalid...` into main.MD"},
|
|
},
|
|
{
|
|
Name: "invalid image name",
|
|
FS: fstest.MapFS{
|
|
"c1/metadata.yaml": &fstest.MapFile{Data: []byte("helm-component: foobar")},
|
|
"c1/imgnames.txt": &fstest.MapFile{Data: []byte("failthis\nimgc1")},
|
|
},
|
|
Expectation: Expectation{Error: "invalid image format: imgc1"},
|
|
},
|
|
}
|
|
|
|
for _, test := range tests {
|
|
t.Run(test.Name, func(t *testing.T) {
|
|
buf := bytes.NewBuffer(nil)
|
|
err := produceManifest(buf, test.FS)
|
|
var act Expectation
|
|
if err != nil {
|
|
act.Error = err.Error()
|
|
} else {
|
|
act.MF = buf.String()
|
|
}
|
|
|
|
if diff := cmp.Diff(test.Expectation, act); diff != "" {
|
|
t.Errorf("produceManifest() mismatch (-want +got):\n%s", diff)
|
|
}
|
|
})
|
|
}
|
|
}
|