package ws import ( "testing" "time" "smesh.lol/pkg/nostr/filter" "smesh.lol/pkg/nostr/kind" "smesh.lol/pkg/nostr/timestamp" ) func TestDialAndSubscribe(t *testing.T) { if testing.Short() { t.Skip("skipping network test in short mode") } relay := "wss://relay.damus.io" c, err := Connect(relay) if err != nil { t.Fatalf("connect to %s: %v", relay, err) } defer c.Close() // Subscribe: recent kind-1 text notes, last 30 seconds. now := time.Now().Unix() since := now - 30 f := &filter.F{ Kinds: kind.NewS(kind.New(uint16(1))), Since: timestamp.FromUnix(since), } limit := uint(5) f.Limit = &limit sub, err := c.Subscribe(f) if err != nil { t.Fatalf("subscribe: %v", err) } // Wait for EOSE or timeout. var count int timeout := time.After(15 * time.Second) loop: for { select { case ev, ok := <-sub.Events: if !ok { break loop } if ev == nil { continue } if len(ev.ID) != 32 { t.Fatalf("bad event ID length: %d", len(ev.ID)) } if len(ev.Pubkey) != 32 { t.Fatalf("bad pubkey length: %d", len(ev.Pubkey)) } if ev.Kind != 1 { t.Fatalf("expected kind 1, got %d", ev.Kind) } count++ case <-sub.EOSE: break loop case <-timeout: break loop } } if count == 0 { t.Fatal("received no events") } t.Logf("received %d events from %s", count, relay) } func TestWebSocketFraming(t *testing.T) { if testing.Short() { t.Skip("skipping network test in short mode") } // Connect and immediately close — tests upgrade handshake. relay := "wss://relay.damus.io" c, err := Dial(relay) if err != nil { t.Fatalf("dial: %v", err) } c.Close() }