diff --git a/modules/mesh-build-go/cmd/mesh-build-go/testdata/captured/toolchain-go-entry.txt b/modules/mesh-build-go/cmd/mesh-build-go/testdata/captured/toolchain-go-entry.txt index 3ac840c1..dd8082ec 100644 --- a/modules/mesh-build-go/cmd/mesh-build-go/testdata/captured/toolchain-go-entry.txt +++ b/modules/mesh-build-go/cmd/mesh-build-go/testdata/captured/toolchain-go-entry.txt @@ -15,7 +15,7 @@ // rather than from the linker: two builds of one commit produce the same bytes. // // **And of one build source at two commits** (novox/hq ADR 0267 rule 6, issue 363): a module - // built from its repository's root is compiled with the clone's `.git` in view, and Go stamps the commit, + // from its repository's root is compiled with the clone's `.git` in view, and Go stamps the commit, // its time and whether the tree was modified into the binary unless told not to — so a merge that // changed only a README made a new digest of an unchanged program. Compile: []string{ diff --git a/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/broken/broken.go b/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/broken/broken.go new file mode 100644 index 00000000..02f0ddf3 --- /dev/null +++ b/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/broken/broken.go @@ -0,0 +1,3 @@ +package broken + +func One() int { return "one" } diff --git a/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/broken/broken_test.go b/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/broken/broken_test.go new file mode 100644 index 00000000..34eb0541 --- /dev/null +++ b/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/broken/broken_test.go @@ -0,0 +1,5 @@ +package broken + +import "testing" + +func TestOne(t *testing.T) { One() } diff --git a/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/broken/go.mod b/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/broken/go.mod new file mode 100644 index 00000000..e0f4d228 --- /dev/null +++ b/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/broken/go.mod @@ -0,0 +1,3 @@ +module fixture/broken + +go 1.25.0 diff --git a/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/build/cmd/prog/main.go b/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/build/cmd/prog/main.go new file mode 100644 index 00000000..4037a92a --- /dev/null +++ b/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/build/cmd/prog/main.go @@ -0,0 +1,9 @@ +// Command prog is what the build step of issue 1487 builds in its integration test. +package main + +import "fmt" + +// builtFor is stamped by the linker. +var builtFor string + +func main() { fmt.Println("prog built for", builtFor) } diff --git a/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/build/go.mod b/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/build/go.mod new file mode 100644 index 00000000..00ca3e6d --- /dev/null +++ b/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/build/go.mod @@ -0,0 +1,3 @@ +module fixture/build + +go 1.25.0 diff --git a/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/build/module.json b/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/build/module.json new file mode 100644 index 00000000..b5439527 --- /dev/null +++ b/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/build/module.json @@ -0,0 +1,17 @@ +{ + "module": "fixture-build", + "version": "1", + "build": { + "artifacts": [ + { + "name": "tools", + "kind": "bundle", + "language": "go", + "system": "arch", + "from": "cmd/prog", + "binary": "prog-bin", + "loads": ["prog-bin"] + } + ] + } +} diff --git a/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/digest/a/a.go b/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/digest/a/a.go new file mode 100644 index 00000000..0f746116 --- /dev/null +++ b/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/digest/a/a.go @@ -0,0 +1,4 @@ +package a + +// A is what a's tests check. +func A() int { return 1 } diff --git a/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/digest/a/a_test.go b/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/digest/a/a_test.go new file mode 100644 index 00000000..0aaf337a --- /dev/null +++ b/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/digest/a/a_test.go @@ -0,0 +1,15 @@ +package a + +import ( + "os" + "testing" + + "fixture/digest/b" +) + +func TestAReadsBAndItsTestdata(t *testing.T) { + raw, err := os.ReadFile("testdata/x.txt") + if err != nil || A()+b.B() != 3 || len(raw) == 0 { + t.Fatal("a") + } +} diff --git a/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/digest/a/testdata/x.txt b/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/digest/a/testdata/x.txt new file mode 100644 index 00000000..587be6b4 --- /dev/null +++ b/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/digest/a/testdata/x.txt @@ -0,0 +1 @@ +x diff --git a/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/digest/b/b.go b/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/digest/b/b.go new file mode 100644 index 00000000..690fd406 --- /dev/null +++ b/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/digest/b/b.go @@ -0,0 +1,4 @@ +package b + +// B is reached by a's tests. +func B() int { return 2 } diff --git a/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/digest/c/c.go b/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/digest/c/c.go new file mode 100644 index 00000000..467fd27e --- /dev/null +++ b/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/digest/c/c.go @@ -0,0 +1,6 @@ +package c + +import _ "embed" + +//go:embed note.txt +var Note string diff --git a/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/digest/c/c_test.go b/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/digest/c/c_test.go new file mode 100644 index 00000000..4ab9f706 --- /dev/null +++ b/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/digest/c/c_test.go @@ -0,0 +1,9 @@ +package c + +import "testing" + +func TestCHasANote(t *testing.T) { + if Note == "" { + t.Fatal("c") + } +} diff --git a/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/digest/c/note.txt b/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/digest/c/note.txt new file mode 100644 index 00000000..519dd581 --- /dev/null +++ b/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/digest/c/note.txt @@ -0,0 +1 @@ +note diff --git a/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/digest/d/d.go b/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/digest/d/d.go new file mode 100644 index 00000000..9cd66d1a --- /dev/null +++ b/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/digest/d/d.go @@ -0,0 +1,4 @@ +package d + +// D is reached by no test. +func D() int { return 4 } diff --git a/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/digest/go.mod b/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/digest/go.mod new file mode 100644 index 00000000..2659cd0a --- /dev/null +++ b/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/digest/go.mod @@ -0,0 +1,3 @@ +module fixture/digest + +go 1.25.0 diff --git a/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/empty/empty.go b/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/empty/empty.go new file mode 100644 index 00000000..d0f06191 --- /dev/null +++ b/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/empty/empty.go @@ -0,0 +1,3 @@ +package empty + +func Nothing() {} diff --git a/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/empty/go.mod b/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/empty/go.mod new file mode 100644 index 00000000..ac1acaba --- /dev/null +++ b/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/empty/go.mod @@ -0,0 +1,3 @@ +module fixture/empty + +go 1.25.0 diff --git a/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/failing/bad/bad.go b/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/failing/bad/bad.go new file mode 100644 index 00000000..526a6282 --- /dev/null +++ b/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/failing/bad/bad.go @@ -0,0 +1,3 @@ +package bad + +func Three() int { return 3 } diff --git a/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/failing/bad/bad_test.go b/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/failing/bad/bad_test.go new file mode 100644 index 00000000..b0d25fa0 --- /dev/null +++ b/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/failing/bad/bad_test.go @@ -0,0 +1,9 @@ +package bad + +import "testing" + +func TestThreeIsFour(t *testing.T) { + if Three() != 4 { + t.Fatalf("Three() = %d, want 4", Three()) + } +} diff --git a/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/failing/go.mod b/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/failing/go.mod new file mode 100644 index 00000000..10b202f0 --- /dev/null +++ b/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/failing/go.mod @@ -0,0 +1,3 @@ +module fixture/failing + +go 1.25.0 diff --git a/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/failing/good/good.go b/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/failing/good/good.go new file mode 100644 index 00000000..6022f6a1 --- /dev/null +++ b/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/failing/good/good.go @@ -0,0 +1,3 @@ +package good + +func Two() int { return 2 } diff --git a/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/failing/good/good_test.go b/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/failing/good/good_test.go new file mode 100644 index 00000000..c6392073 --- /dev/null +++ b/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/failing/good/good_test.go @@ -0,0 +1,9 @@ +package good + +import "testing" + +func TestTwo(t *testing.T) { + if Two() != 2 { + t.Fatal("two") + } +} diff --git a/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/slow/go.mod b/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/slow/go.mod new file mode 100644 index 00000000..7f95cab9 --- /dev/null +++ b/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/slow/go.mod @@ -0,0 +1,3 @@ +module fixture/slow + +go 1.25.0 diff --git a/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/slow/slow.go b/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/slow/slow.go new file mode 100644 index 00000000..10b49fa5 --- /dev/null +++ b/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/slow/slow.go @@ -0,0 +1,3 @@ +package slow + +func Zero() int { return 0 } diff --git a/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/slow/slow_test.go b/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/slow/slow_test.go new file mode 100644 index 00000000..39a56be8 --- /dev/null +++ b/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/slow/slow_test.go @@ -0,0 +1,16 @@ +package slow + +import ( + "testing" + "time" +) + +func TestTakesAWhile(t *testing.T) { + time.Sleep(60 * time.Millisecond) +} + +func TestQuick(t *testing.T) { + if Zero() != 0 { + t.Fatal("zero") + } +} diff --git a/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/store/go.mod b/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/store/go.mod new file mode 100644 index 00000000..71f77819 --- /dev/null +++ b/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/store/go.mod @@ -0,0 +1,3 @@ +module fixture/store + +go 1.25.0 diff --git a/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/store/store.go b/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/store/store.go new file mode 100644 index 00000000..cff0dca8 --- /dev/null +++ b/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/store/store.go @@ -0,0 +1,4 @@ +package store + +// Name is what the integration test below finds a store and a bus for. +const Name = "store" diff --git a/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/store/store_integration_test.go b/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/store/store_integration_test.go new file mode 100644 index 00000000..9c3e6a40 --- /dev/null +++ b/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/store/store_integration_test.go @@ -0,0 +1,37 @@ +//go:build integration + +package store + +import ( + "bufio" + "net" + "net/url" + "os" + "path/filepath" + "strings" + "testing" + "time" +) + +// The fixture of issue 1486: the store and the bus a run gives its tests are there, reached as a test reaches them. +func TestTheStoreAndTheBusAreThere(t *testing.T) { + u, err := url.Parse(os.Getenv("MESH_TEST_POSTGRES")) + if err != nil || u.Query().Get("host") == "" { + t.Fatalf("MESH_TEST_POSTGRES = %q", os.Getenv("MESH_TEST_POSTGRES")) + } + pg, err := net.DialTimeout("unix", filepath.Join(u.Query().Get("host"), ".s.PGSQL.5432"), 5*time.Second) + if err != nil { + t.Fatalf("the store's socket: %v", err) + } + pg.Close() + + bus, err := net.DialTimeout("tcp", strings.TrimPrefix(os.Getenv("MESH_TEST_NATS"), "nats://"), 5*time.Second) + if err != nil { + t.Fatalf("the bus: %v", err) + } + defer bus.Close() + line, err := bufio.NewReader(bus).ReadString('\n') + if err != nil || !strings.HasPrefix(line, "INFO ") || !strings.Contains(line, `"jetstream":true`) { + t.Fatalf("the bus said %q (%v), want an INFO line with JetStream on", line, err) + } +} diff --git a/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/tagged/go.mod b/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/tagged/go.mod new file mode 100644 index 00000000..4be2fcd2 --- /dev/null +++ b/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/tagged/go.mod @@ -0,0 +1,3 @@ +module fixture/tagged + +go 1.25.0 diff --git a/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/tagged/tagged.go b/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/tagged/tagged.go new file mode 100644 index 00000000..9be2b802 --- /dev/null +++ b/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/tagged/tagged.go @@ -0,0 +1,3 @@ +package tagged + +func One() int { return 1 } diff --git a/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/tagged/tagged_integration_test.go b/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/tagged/tagged_integration_test.go new file mode 100644 index 00000000..917c1765 --- /dev/null +++ b/modules/mesh-build-go/cmd/mesh-build-go/testdata/repos/tagged/tagged_integration_test.go @@ -0,0 +1,11 @@ +//go:build integration + +package tagged + +import "testing" + +func TestNeedsAStore(t *testing.T) { + if One() != 1 { + t.Fatal("one") + } +}