1package main23import (4 "bytes"5 "context"6 "errors"7 "net/http"8 "strings"9 "testing"10)1112func TestCommandNameAndPermanentTenant(t *testing.T) {13 var out bytes.Buffer14 if err := run(context.Background(), []string{"help"}, &out); err != nil {15 t.Fatal(err)16 }17 if !strings.Contains(out.String(), "tiny serve") || !strings.Contains(out.String(), "tiny relay") {18 t.Fatal(out.String())19 }20 args := []string{"tenant", "create", "--data-dir", t.TempDir(), "--name", "main", "--owner", strings.Repeat("a", 64)}21 if err := run(context.Background(), args, &out); err != nil {22 t.Fatal(err)23 }24 if !strings.Contains(out.String(), "ready") {25 t.Fatal(out.String())26 }27}2829func TestRelayCommandDelegatesFlagValidation(t *testing.T) {30 err := run(context.Background(), []string{"relay", "--public-url", "ftp://relay.example"}, &bytes.Buffer{})31 if err == nil {32 t.Fatal("accepted invalid standalone relay URL")33 }34}3536func TestServerShutdownDoesNotHideAnotherFailure(t *testing.T) {37 results := make(chan error, 1)38 results <- http.ErrServerClosed39 want := errors.New("diagnostics listener failed")40 go func() { results <- want }()41 err := awaitServers(context.Background(), []*http.Server{{}, {}}, results)42 if !errors.Is(err, want) {43 t.Fatalf("got %v, want %v", err, want)44 }45}