github.com/status-im/status-go@v1.1.0/protocol/messenger_waku_wrapper_test.go (about) 1 package protocol 2 3 import ( 4 "context" 5 6 "go.uber.org/zap" 7 8 gethbridge "github.com/status-im/status-go/eth-node/bridge/geth" 9 "github.com/status-im/status-go/eth-node/types" 10 "github.com/status-im/status-go/waku" 11 ) 12 13 type testWakuWrapper struct { 14 *gethbridge.GethWakuWrapper 15 16 publicWakuAPIWrapper *testPublicWakuAPIWrapper 17 } 18 19 func newTestWaku(w *waku.Waku) types.Waku { 20 wrapper := gethbridge.NewGethWakuWrapper(w) 21 return &testWakuWrapper{ 22 GethWakuWrapper: wrapper.(*gethbridge.GethWakuWrapper), 23 publicWakuAPIWrapper: newTestPublicWakuAPI(waku.NewPublicWakuAPI(w)).(*testPublicWakuAPIWrapper), 24 } 25 } 26 27 func (tw *testWakuWrapper) PublicWakuAPI() types.PublicWakuAPI { 28 return tw.publicWakuAPIWrapper 29 } 30 31 func (tw *testWakuWrapper) SubscribePostEvents() chan *PostMessageSubscription { 32 subscription := make(chan *PostMessageSubscription, 100) 33 tw.publicWakuAPIWrapper.postSubscriptions = append(tw.publicWakuAPIWrapper.postSubscriptions, subscription) 34 return subscription 35 } 36 37 type PostMessageSubscription struct { 38 id []byte 39 msg *types.NewMessage 40 } 41 42 type testPublicWakuAPIWrapper struct { 43 *gethbridge.GethPublicWakuAPIWrapper 44 45 postSubscriptions []chan *PostMessageSubscription 46 } 47 48 func newTestPublicWakuAPI(api *waku.PublicWakuAPI) types.PublicWakuAPI { 49 wrapper := gethbridge.NewGethPublicWakuAPIWrapper(api) 50 return &testPublicWakuAPIWrapper{ 51 GethPublicWakuAPIWrapper: wrapper.(*gethbridge.GethPublicWakuAPIWrapper), 52 } 53 } 54 55 func (tp *testPublicWakuAPIWrapper) Post(ctx context.Context, req types.NewMessage) ([]byte, error) { 56 id, err := tp.GethPublicWakuAPIWrapper.Post(ctx, req) 57 if err != nil { 58 return nil, err 59 } 60 for _, s := range tp.postSubscriptions { 61 select { 62 case s <- &PostMessageSubscription{id: id, msg: &req}: 63 default: 64 // subscription channel full 65 } 66 } 67 return id, err 68 } 69 70 func newTestWakuWrapper(config *waku.Config, logger *zap.Logger) (*testWakuWrapper, error) { 71 if config == nil { 72 config = &waku.DefaultConfig 73 } 74 w := waku.New(config, logger) 75 return newTestWaku(w).(*testWakuWrapper), w.Start() 76 }