- Add summer build with validated summer.yaml codegen - Generate stable main.go and plugins.gen.go then go build - Smoke-test the built hello binary greeter:hello command
64 lines
1.4 KiB
Go
64 lines
1.4 KiB
Go
package main
|
|
|
|
import (
|
|
"bytes"
|
|
"crypto/sha256"
|
|
"os"
|
|
"os/exec"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestGreeterHelloPrintsAppName(t *testing.T) {
|
|
var buf bytes.Buffer
|
|
if err := run([]string{"greeter:hello"}, &buf); err != nil {
|
|
t.Fatalf("greeter:hello: %v", err)
|
|
}
|
|
if got := strings.TrimSpace(buf.String()); got != "hello-app" {
|
|
t.Fatalf("output = %q, want %q", got, "hello-app")
|
|
}
|
|
}
|
|
|
|
func TestBuiltBinaryGreeterHello(t *testing.T) {
|
|
first := runSummerBuild(t)
|
|
h1 := generatedHash(t)
|
|
second := runSummerBuild(t)
|
|
h2 := generatedHash(t)
|
|
if h1 != h2 {
|
|
t.Fatalf("generated files changed on second build\nfirst:\n%s\nsecond:\n%s", first, second)
|
|
}
|
|
|
|
cmd := exec.Command("./bin/hello", "greeter:hello")
|
|
out, err := cmd.CombinedOutput()
|
|
if err != nil {
|
|
t.Fatalf("bin/hello greeter:hello: %v\n%s", err, out)
|
|
}
|
|
if got := strings.TrimSpace(string(out)); got != "hello-app" {
|
|
t.Fatalf("output = %q, want %q", got, "hello-app")
|
|
}
|
|
}
|
|
|
|
func runSummerBuild(t *testing.T) string {
|
|
t.Helper()
|
|
cmd := exec.Command("go", "run", "../../cmd/summer", "build")
|
|
cmd.Dir = "."
|
|
out, err := cmd.CombinedOutput()
|
|
if err != nil {
|
|
t.Fatalf("summer build: %v\n%s", err, out)
|
|
}
|
|
return string(out)
|
|
}
|
|
|
|
func generatedHash(t *testing.T) [32]byte {
|
|
t.Helper()
|
|
var buf bytes.Buffer
|
|
for _, name := range []string{"main.go", "plugins.gen.go"} {
|
|
body, err := os.ReadFile(name)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
buf.Write(body)
|
|
}
|
|
return sha256.Sum256(buf.Bytes())
|
|
}
|