subscription_test.go raw

   1  package ws
   2  
   3  // const RELAY = "wss://nos.lol"
   4  
   5  // // test if we can fetch a couple of random events
   6  // func TestSubscribeBasic(t *testing.T) {
   7  // 	rl := mustRelayConnect(t, RELAY)
   8  // 	defer rl.Close()
   9  //
  10  // 	sub, err := rl.Subscribe(
  11  // 		context.Background(), filters.New(
  12  // 			&filter.F{
  13  // 				Kinds: &kinds.T{K: []*kind.T{kind.TextNote}},
  14  // 				Limit: values.ToUintPointer(2),
  15  // 			},
  16  // 		),
  17  // 	)
  18  // 	assert.NoError(t, err)
  19  // 	timeout := time.After(5 * time.Second)
  20  // 	n := 0
  21  // 	for {
  22  // 		select {
  23  // 		case event := <-sub.Events:
  24  // 			assert.NotNil(t, event)
  25  // 			n++
  26  // 		case <-sub.EndOfStoredEvents:
  27  // 			assert.Equal(t, 2, n)
  28  // 			sub.Unsub()
  29  // 			return
  30  // 		case <-rl.Context().Done():
  31  // 			t.Fatalf("connection closed: %v", rl.Context().Err())
  32  // 		case <-timeout:
  33  // 			t.Fatalf("timeout")
  34  // 		}
  35  // 	}
  36  // }
  37  //
  38  // // test if we can do multiple nested subscriptions
  39  // func TestNestedSubscriptions(t *testing.T) {
  40  // 	rl := mustRelayConnect(t, RELAY)
  41  // 	defer rl.Close()
  42  //
  43  // 	n := atomic.Uint32{}
  44  //
  45  // 	// fetch 2 replies to a note
  46  // 	sub, err := rl.Subscribe(
  47  // 		context.Background(), filters.New(
  48  // 			&filter.F{
  49  // 				Kinds: kinds.New(kind.TextNote),
  50  // 				Tags: tags.New(
  51  // 					tag.New(
  52  // 						"e",
  53  // 						"0e34a74f8547e3b95d52a2543719b109fd0312aba144e2ef95cba043f42fe8c5",
  54  // 					),
  55  // 				),
  56  // 				Limit: values.ToUintPointer(3),
  57  // 			},
  58  // 		),
  59  // 	)
  60  // 	assert.NoError(t, err)
  61  //
  62  // 	for {
  63  // 		select {
  64  // 		case ev := <-sub.Events:
  65  // 			// now fetch author of this
  66  // 			sub, err := rl.Subscribe(
  67  // 				context.Background(), filters.New(
  68  // 					&filter.F{
  69  // 						Kinds:   kinds.New(kind.ProfileMetadata),
  70  // 						Authors: tag.New(ev.PubKeyString()),
  71  // 						Limit:   values.ToUintPointer(1),
  72  // 					},
  73  // 				),
  74  // 			)
  75  // 			assert.NoError(t, err)
  76  //
  77  // 			for {
  78  // 				select {
  79  // 				case <-sub.Events:
  80  // 					// do another subscription here in "sync" mode, just so
  81  // 					// we're sure things aren't blocking
  82  // 					rl.QuerySync(
  83  // 						context.Background(),
  84  // 						&filter.F{Limit: values.ToUintPointer(1)},
  85  // 					)
  86  // 					n.Add(1)
  87  // 					if n.Load() == 3 {
  88  // 						// if we get here, it means the test passed
  89  // 						return
  90  // 					}
  91  // 				case <-sub.Context.Done():
  92  // 				case <-sub.EndOfStoredEvents:
  93  // 					sub.Unsub()
  94  // 				}
  95  // 			}
  96  // 		case <-sub.EndOfStoredEvents:
  97  // 			sub.Unsub()
  98  // 			return
  99  // 		case <-sub.Context.Done():
 100  // 			t.Fatalf("connection closed: %v", rl.Context().Err())
 101  // 			return
 102  // 		}
 103  // 	}
 104  // }
 105