ADR 0193 says the node's runtime launches every served bundle over MCP stdio and knows no language, and ADR 0188 says one module may carry several bundles in any language. Nothing in the catalogue shows both at once: every tools bundle is TypeScript, and the only Go bundle is the runtime itself. netcheck is the smallest real module that does — read-only checks from a machine, worth having on their own: - tools-go (Go SDK go/v0.1.6): netcheck_tcp (one connect, nothing sent) and netcheck_dns (A/AAAA/CNAME/TXT/MX through the machine's resolver). - tools-typescript (@novox/mesh-sdk): netcheck_http (HEAD or GET, body neither sent nor read, redirects reported not followed, anything but http(s) refused). Both say loads; the module lists its tools. No container, no image, no env: nothing to be given, so the runtime's own words suffice.
69 lines
2.0 KiB
Go
69 lines
2.0 KiB
Go
package main
|
|
|
|
import (
|
|
"net"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestATCPPortThatListensIsReachableAndOneThatDoesNotIsNot(t *testing.T) {
|
|
l, err := net.Listen("tcp", "127.0.0.1:0")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
port := l.Addr().(*net.TCPAddr).Port
|
|
got, err := CheckTCP("127.0.0.1", port, time.Second)
|
|
if err != nil || !got.Reachable || got.Error != "" {
|
|
t.Fatalf("a listening port: %+v, %v", got, err)
|
|
}
|
|
l.Close()
|
|
got, err = CheckTCP("127.0.0.1", port, time.Second)
|
|
if err != nil || got.Reachable || got.Error == "" {
|
|
t.Fatalf("a closed port is reported as a result with its error, not a failure: %+v, %v", got, err)
|
|
}
|
|
}
|
|
|
|
func TestAPortOutsideTheRangeIsRefused(t *testing.T) {
|
|
for _, p := range []int{0, -1, 65536} {
|
|
if _, err := CheckTCP("127.0.0.1", p, time.Second); err == nil {
|
|
t.Errorf("port %d was accepted", p)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestDNSAnswersFromTheMachinesResolverAndRefusesAnUnknownType(t *testing.T) {
|
|
got, err := CheckDNS("localhost", "a", time.Second)
|
|
if err != nil || got.Type != "A" || len(got.Answers) == 0 {
|
|
t.Fatalf("localhost A: %+v, %v", got, err)
|
|
}
|
|
if _, err := CheckDNS("localhost", "SRV", time.Second); err == nil {
|
|
t.Fatal("an unknown record type was accepted")
|
|
}
|
|
got, err = CheckDNS("no-such-name.invalid", "A", time.Second)
|
|
if err != nil || got.Error == "" || len(got.Answers) != 0 {
|
|
t.Fatalf("a name that does not resolve is a result with its error: %+v, %v", got, err)
|
|
}
|
|
}
|
|
|
|
func TestTimeoutIsDefaultedAndBounded(t *testing.T) {
|
|
if d, _ := timeoutOf(map[string]any{}); d != DefaultTimeout {
|
|
t.Errorf("default: %v", d)
|
|
}
|
|
if d, _ := timeoutOf(map[string]any{"timeout_ms": float64(10 * 60 * 1000)}); d != MostTimeout {
|
|
t.Errorf("bounded: %v", d)
|
|
}
|
|
if _, err := timeoutOf(map[string]any{"timeout_ms": float64(0)}); err == nil {
|
|
t.Error("a zero timeout was accepted")
|
|
}
|
|
}
|
|
|
|
func TestBothToolsAreListedUnprefixed(t *testing.T) {
|
|
names := map[string]bool{}
|
|
for _, tool := range tools() {
|
|
names[tool.Name] = true
|
|
}
|
|
if !names["netcheck_tcp"] || !names["netcheck_dns"] || len(names) != 2 {
|
|
t.Fatalf("tools: %v", names)
|
|
}
|
|
}
|