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  }