1package records23import (4 "context"5 "strings"6 "testing"7 "time"89 "github.com/FelineStateMachine/tinyrelay/internal/event"10)1112func TestProtocolSigningDoesNotWaitForProjectionLockOrAdvanceClock(t *testing.T) {13 s := &Service{secret: strings.Repeat("0", 63) + "1"}14 s.mu.Lock()15 defer s.mu.Unlock()16 ctx, cancel := context.WithTimeout(context.Background(), time.Second)17 defer cancel()18 result := make(chan error, 1)19 go func() {20 for range 80 {21 proof, err := s.SignNIP98(ctx, "GET", "https://relay.test/repo", "", 1234567890)22 if err != nil {23 result <- err24 return25 }26 if proof.CreatedAt != 1234567890 {27 result <- context.DeadlineExceeded28 return29 }30 if err := event.Validate(proof); err != nil {31 result <- err32 return33 }34 }35 result <- nil36 }()37 select {38 case err := <-result:39 if err != nil {40 t.Fatal(err)41 }42 case <-ctx.Done():43 t.Fatal("protocol signing waited for projection lock")44 }45}