77 lines
2.0 KiB
Go
77 lines
2.0 KiB
Go
|
package protocol
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
|
||
|
"go.uber.org/zap"
|
||
|
|
||
|
gethbridge "github.com/status-im/status-go/eth-node/bridge/geth"
|
||
|
"github.com/status-im/status-go/eth-node/types"
|
||
|
"github.com/status-im/status-go/waku"
|
||
|
)
|
||
|
|
||
|
type testWakuWrapper struct {
|
||
|
*gethbridge.GethWakuWrapper
|
||
|
|
||
|
publicWakuAPIWrapper *testPublicWakuAPIWrapper
|
||
|
}
|
||
|
|
||
|
func newTestWaku(w *waku.Waku) types.Waku {
|
||
|
wrapper := gethbridge.NewGethWakuWrapper(w)
|
||
|
return &testWakuWrapper{
|
||
|
GethWakuWrapper: wrapper.(*gethbridge.GethWakuWrapper),
|
||
|
publicWakuAPIWrapper: newTestPublicWakuAPI(waku.NewPublicWakuAPI(w)).(*testPublicWakuAPIWrapper),
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (tw *testWakuWrapper) PublicWakuAPI() types.PublicWakuAPI {
|
||
|
return tw.publicWakuAPIWrapper
|
||
|
}
|
||
|
|
||
|
func (tw *testWakuWrapper) SubscribePostEvents() chan *PostMessageSubscription {
|
||
|
subscription := make(chan *PostMessageSubscription, 100)
|
||
|
tw.publicWakuAPIWrapper.postSubscriptions = append(tw.publicWakuAPIWrapper.postSubscriptions, subscription)
|
||
|
return subscription
|
||
|
}
|
||
|
|
||
|
type PostMessageSubscription struct {
|
||
|
id []byte
|
||
|
msg *types.NewMessage
|
||
|
}
|
||
|
|
||
|
type testPublicWakuAPIWrapper struct {
|
||
|
*gethbridge.GethPublicWakuAPIWrapper
|
||
|
|
||
|
postSubscriptions []chan *PostMessageSubscription
|
||
|
}
|
||
|
|
||
|
func newTestPublicWakuAPI(api *waku.PublicWakuAPI) types.PublicWakuAPI {
|
||
|
wrapper := gethbridge.NewGethPublicWakuAPIWrapper(api)
|
||
|
return &testPublicWakuAPIWrapper{
|
||
|
GethPublicWakuAPIWrapper: wrapper.(*gethbridge.GethPublicWakuAPIWrapper),
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (tp *testPublicWakuAPIWrapper) Post(ctx context.Context, req types.NewMessage) ([]byte, error) {
|
||
|
id, err := tp.GethPublicWakuAPIWrapper.Post(ctx, req)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
for _, s := range tp.postSubscriptions {
|
||
|
select {
|
||
|
case s <- &PostMessageSubscription{id: id, msg: &req}:
|
||
|
default:
|
||
|
// subscription channel full
|
||
|
}
|
||
|
}
|
||
|
return id, err
|
||
|
}
|
||
|
|
||
|
func newTestWakuWrapper(config *waku.Config, logger *zap.Logger) (*testWakuWrapper, error) {
|
||
|
if config == nil {
|
||
|
config = &waku.DefaultConfig
|
||
|
}
|
||
|
w := waku.New(config, logger)
|
||
|
return newTestWaku(w).(*testWakuWrapper), w.Start()
|
||
|
}
|