tinyrelayfile
tinyrelay/tinygit/external_test.go/

tinygit/external_test.go raw
1package tinygit_test
2
3import (
4 "fmt"
5 "os"
6 "os/exec"
7 "path/filepath"
8 "testing"
9)
10
11func TestExternalModuleCanUsePublicAPI(t *testing.T) {
12 if testing.Short() {
13 t.Skip("compiles an independent consumer module")
14 }
15 root, err := filepath.Abs("..")
16 if err != nil {
17 t.Fatal(err)
18 }
19 consumer := t.TempDir()
20 mod := fmt.Sprintf("module example.invalid/tinygit-consumer\n\ngo 1.27.1\n\nrequire github.com/FelineStateMachine/tinyrelay v0.0.0\nreplace github.com/FelineStateMachine/tinyrelay => %s\n", filepath.ToSlash(root))
21 if err := os.WriteFile(filepath.Join(consumer, "go.mod"), []byte(mod), 0600); err != nil {
22 t.Fatal(err)
23 }
24 source := `package consumer
25import (
26 "context"
27 "net/http"
28 "path/filepath"
29 "strings"
30 "testing"
31 "github.com/FelineStateMachine/tinyrelay/tinygit"
32 "github.com/FelineStateMachine/tinyrelay/protocol/nostr"
33)
34type fakeStore struct{}
35func (fakeStore) Query(context.Context, nostr.Filter, int64, int) ([]tinygit.Event, error) { return nil, nil }
36func (fakeStore) Save(context.Context, tinygit.Event, int64) error { return nil }
37func (fakeStore) Latest(context.Context, int, string, string) (tinygit.Event, bool, error) { return tinygit.Event{}, false, nil }
38func (fakeStore) Exists(context.Context, string, int) (bool, error) { return false, nil }
39func (fakeStore) Close() error { return nil }
40func TestUse(t *testing.T) {
41 ctx := context.Background()
42 dir := t.TempDir()
43 var store tinygit.Store
44 var err error
45 store, err = tinygit.OpenStore(ctx, filepath.Join(dir, "events.db"))
46 if err != nil { t.Fatal(err) }
47 defer store.Close()
48 p := tinygit.DefaultPolicy("")
49 g, err := tinygit.New(tinygit.Config{Store: fakeStore{}, Root: filepath.Join(dir, "git"), Policy: func() tinygit.Policy { return p }, Authorize: func(context.Context, tinygit.Event, tinygit.Repository) error { return nil }})
50 if err != nil { t.Fatal(err) }
51 var _ http.Handler = g
52 if err := g.Publish(ctx, tinygit.Event{}); err == nil { t.Fatal("invalid event accepted") }
53 s, err := tinygit.OpenServer(ctx, tinygit.ServerConfig{DataDir: t.TempDir(), Owner: strings.Repeat("a", 64)})
54 if err != nil { t.Fatal(err) }
55 defer s.Close()
56 var _ http.Handler = s
57}
58`
59 if err := os.WriteFile(filepath.Join(consumer, "consumer_test.go"), []byte(source), 0600); err != nil {
60 t.Fatal(err)
61 }
62 cmd := exec.Command("go", "test", "-mod=mod", ".")
63 cmd.Dir = consumer
64 // Dependencies are already in the build cache. Never use this boundary test
65 // as a reason to make a network request or change the root module files.
66 cmd.Env = append(os.Environ(), "GOWORK=off", "GOPROXY=off", "GOSUMDB=off")
67 if out, err := cmd.CombinedOutput(); err != nil {
68 t.Fatalf("external consumer: %v\n%s", err, out)
69 }
70}

About

ownerc01503e8035f
visibilitypublic
headd730679639bf

Maintainers

  • c01503e8035f owner
  • ba1b5beed5b5 agent hermes

Clone

  • https://012.run/npub1cq2s86qrtadf36eqq3epm38wmhdynrrcwxf84eldk3f94dkv7ttsrulrz5/tinyrelay.git

Refs