func/hack/cmd/components/main_test.go

141 lines
3.0 KiB
Go

package main
import (
"io/fs"
"os"
"path"
"testing"
"gotest.tools/v3/assert"
)
const expectedScript string = `#!/usr/bin/env bash
# AUTOGENERATED FILE - edit versions in ./component-versions.json.
# If you want to add/modify these components, please read the how-to steps in
# ./cmd/components/main.go.
# You can regenerate with "make hack-generate-components".
set_versions() {
# Note: Kubernetes Version node image per Kind releases (full hash is suggested):
# https://github.com/kubernetes-sigs/kind/releases
kind_node_version=v1.32.0@sha256:c48c62eac5da28cdadcf560d1d8616cfa6783b58f0d94cf63ad1bf49600cb027
# find source-of-truth in component-versions.json to add/modify components
knative_serving_version="v1.19.0"
knative_eventing_version="v1.19.0"
contour_version="v1.19.0"
tekton_version="v1.1.0"
pac_version="v0.35.2"
}
`
const expectedJson string = `{
"Contour": {
"version": "v1.19.0",
"owner": "knative-extensions",
"repo": "net-contour"
},
"Eventing": {
"version": "v1.19.0",
"owner": "knative",
"repo": "eventing"
},
"KindNode": {
"version": "v1.32.0@sha256:c48c62eac5da28cdadcf560d1d8616cfa6783b58f0d94cf63ad1bf49600cb027"
},
"Pac": {
"version": "v0.35.2"
},
"Serving": {
"version": "v1.19.0",
"owner": "knative",
"repo": "serving"
},
"Tekton": {
"version": "v1.1.0"
}
}
`
// TestRead should just successfully unmarshal
func TestRead(t *testing.T) {
dir := t.TempDir()
// just assign this for simplicity, no need to the same variable twice
const jsonContent = expectedJson
tmpJson := path.Join(dir, "json.json")
err := os.WriteFile(tmpJson, []byte(jsonContent), fs.ModePerm)
if err != nil {
t.Fatal(err)
}
_, err = readVersions(tmpJson)
if err != nil {
t.Fatalf("failed to read json: %v", err)
}
}
// TestWrite ensures that writing both files succeeds with the correct file
// contents
func TestWrite(t *testing.T) {
dir := t.TempDir()
tmpJson := path.Join(dir, "f.json")
tmpSh := path.Join(dir, "f.sh")
// as if we just unmarshalled this
c := ComponentList{
"Contour": &Component{
Version: "v1.19.0",
Owner: "knative-extensions",
Repo: "net-contour",
},
"Eventing": {
Version: "v1.19.0",
Owner: "knative",
Repo: "eventing",
},
"KindNode": {
Version: "v1.32.0@sha256:c48c62eac5da28cdadcf560d1d8616cfa6783b58f0d94cf63ad1bf49600cb027",
},
"Pac": {
Version: "v0.35.2",
},
"Serving": {
Version: "v1.19.0",
Owner: "knative",
Repo: "serving",
},
"Tekton": {
Version: "v1.1.0",
},
}
// write to script (generate it)
err := writeScript(c, tmpSh)
if err != nil {
t.Fatalf("failed to generate script: %v", err)
}
// assert
fsh, err := os.ReadFile(tmpSh)
if err != nil {
t.Fatalf("failed to read file: %v", err)
}
assert.Equal(t, string(fsh), expectedScript)
// write to json
err = writeSource(c, tmpJson)
if err != nil {
t.Fatalf("failed to write json: %v", err)
}
// assert
fjson, err := os.ReadFile(tmpJson)
if err != nil {
t.Fatalf("failed to read json: %v", err)
}
assert.Equal(t, string(fjson), expectedJson)
}