eventenvelope_test.go raw

   1  package eventenvelope
   2  
   3  import (
   4  	"bufio"
   5  	"bytes"
   6  	"testing"
   7  
   8  	"next.orly.dev/pkg/nostr/encoders/envelopes"
   9  	"next.orly.dev/pkg/nostr/encoders/event"
  10  	"next.orly.dev/pkg/nostr/encoders/event/examples"
  11  	"next.orly.dev/pkg/nostr/utils"
  12  	"next.orly.dev/pkg/nostr/utils/bufpool"
  13  	"next.orly.dev/pkg/lol/chk"
  14  )
  15  
  16  func TestSubmission(t *testing.T) {
  17  	scanner := bufio.NewScanner(bytes.NewBuffer(examples.Cache))
  18  	var err error
  19  	for scanner.Scan() {
  20  		c, rem, out := bufpool.Get(), bufpool.Get(), bufpool.Get()
  21  		b := scanner.Bytes()
  22  		ev := event.New()
  23  		if _, err = ev.Unmarshal(b); chk.E(err) {
  24  			t.Fatal(err)
  25  		}
  26  		if len(rem) != 0 {
  27  			t.Fatalf(
  28  				"some of input remaining after marshal/unmarshal: '%s'",
  29  				rem,
  30  			)
  31  		}
  32  		rem = rem[:0]
  33  		ea := NewSubmissionWith(ev)
  34  		rem = ea.Marshal(rem)
  35  		c = append(c, rem...)
  36  		var l string
  37  		if l, rem, err = envelopes.Identify(rem); chk.E(err) {
  38  			t.Fatal(err)
  39  		}
  40  		if l != L {
  41  			t.Fatalf("invalid sentinel %s, expect %s", l, L)
  42  		}
  43  		if rem, err = ea.Unmarshal(rem); chk.E(err) {
  44  			t.Fatal(err)
  45  		}
  46  		if len(rem) != 0 {
  47  			t.Fatalf(
  48  				"some of input remaining after marshal/unmarshal: '%s'",
  49  				rem,
  50  			)
  51  		}
  52  		out = ea.Marshal(out)
  53  		if !utils.FastEqual(out, c) {
  54  			t.Fatalf("mismatched output\n%s\n\n%s\n", c, out)
  55  		}
  56  		bufpool.Put(c)
  57  		bufpool.Put(rem)
  58  		bufpool.Put(out)
  59  	}
  60  }
  61  
  62  func TestResult(t *testing.T) {
  63  	scanner := bufio.NewScanner(bytes.NewBuffer(examples.Cache))
  64  	var err error
  65  	var count int
  66  	for scanner.Scan() {
  67  		c, rem, out := bufpool.Get(), bufpool.Get(), bufpool.Get()
  68  		count++
  69  		b := scanner.Bytes()
  70  		ev := event.New()
  71  		if _, err = ev.Unmarshal(b); chk.E(err) {
  72  			t.Fatal(err)
  73  		}
  74  		if len(rem) != 0 {
  75  			t.Fatalf(
  76  				"some of input remaining after marshal/unmarshal: '%s'",
  77  				rem,
  78  			)
  79  		}
  80  		var ea *Result
  81  		if ea, err = NewResultWith(
  82  			utils.NewSubscription(count), ev,
  83  		); chk.E(err) {
  84  			t.Fatal(err)
  85  		}
  86  		rem = ea.Marshal(rem)
  87  		c = append(c, rem...)
  88  		var l string
  89  		if l, rem, err = envelopes.Identify(rem); chk.E(err) {
  90  			t.Fatal(err)
  91  		}
  92  		if l != L {
  93  			t.Fatalf("invalid sentinel %s, expect %s", l, L)
  94  		}
  95  		if rem, err = ea.Unmarshal(rem); chk.E(err) {
  96  			t.Fatal(err)
  97  		}
  98  		if len(rem) != 0 {
  99  			t.Fatalf(
 100  				"some of input remaining after marshal/unmarshal: '%s'",
 101  				rem,
 102  			)
 103  		}
 104  		out = ea.Marshal(out)
 105  		if !utils.FastEqual(out, c) {
 106  			t.Fatalf("mismatched output\n%s\n\n%s\n", c, out)
 107  		}
 108  		bufpool.Put(c)
 109  		bufpool.Put(rem)
 110  		bufpool.Put(out)
 111  	}
 112  }
 113