tinyrelayfile
tinyrelay/internal/syncprotocol/syncprotocol_test.go/

internal/syncprotocol/syncprotocol_test.go raw
1package syncprotocol
2
3import (
4 "strings"
5 "testing"
6
7 "github.com/FelineStateMachine/tinyrelay/internal/event"
8)
9
10func TestHLLOffsetAndRegisters(t *testing.T) {
11 f := event.Filter{Tags: map[string][]string{"d": {"30000:" + strings.Repeat("a", 64) + ":x"}}}
12 offset, ok := HLLFilterOffset(f)
13 if !ok || offset < 8 || offset > 23 {
14 t.Fatalf("unexpected offset %d, ok=%v", offset, ok)
15 }
16 h := NewHLL(offset)
17 if err := h.Add(strings.Repeat("b", 64)); err != nil {
18 t.Fatalf("add pubkey: %v", err)
19 }
20 if len(h.Hex()) != 512 {
21 t.Fatalf("HLL must encode 256 registers, got %d hex chars", len(h.Hex()))
22 }
23 if err := h.MergeHex(h.Hex()); err != nil {
24 t.Fatalf("merge own registers: %v", err)
25 }
26}
27
28func TestNegentropyReconcilesBothDirections(t *testing.T) {
29 left, err := NewSession([]Item{{Timestamp: 1, ID: strings.Repeat("a", 64)}, {Timestamp: 2, ID: strings.Repeat("b", 64)}}, true)
30 if err != nil {
31 t.Fatal(err)
32 }
33 right, err := NewSession([]Item{{Timestamp: 2, ID: strings.Repeat("b", 64)}, {Timestamp: 3, ID: strings.Repeat("c", 64)}}, false)
34 if err != nil {
35 t.Fatal(err)
36 }
37 msg, err := left.Start()
38 if err != nil {
39 t.Fatal(err)
40 }
41 for i := 0; i < 20 && msg != ""; i++ {
42 server, err := right.Reconcile(msg)
43 if err != nil {
44 t.Fatalf("server reconcile: %v", err)
45 }
46 msg = server.Response
47 if msg == "" {
48 break
49 }
50 client, err := left.Reconcile(msg)
51 if err != nil {
52 t.Fatalf("client reconcile: %v", err)
53 }
54 msg = client.Response
55 if client.Done {
56 if len(client.Have) != 1 || client.Have[0] != strings.Repeat("a", 64) || len(client.Need) != 1 || client.Need[0] != strings.Repeat("c", 64) {
57 t.Fatalf("unexpected diff: have=%v need=%v", client.Have, client.Need)
58 }
59 return
60 }
61 }
62 t.Fatal("negentropy did not finish")
63}

About

ownerc01503e8035f
visibilitypublic
headd730679639bf

Maintainers

  • c01503e8035f owner
  • ba1b5beed5b5 agent hermes

Clone

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

Refs