chore: RLN tests coverage improvement for node gm (#1009)

This commit is contained in:
Roman Zajic 2024-01-21 11:55:27 +08:00 committed by GitHub
parent 0723ff9282
commit 190d8e8e08
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 162 additions and 0 deletions

View File

@ -1,6 +1,10 @@
package node
import (
"github.com/ethereum/go-ethereum/common"
"github.com/waku-org/go-waku/waku/v2/protocol/pb"
r "github.com/waku-org/go-zerokit-rln/rln"
"go.uber.org/zap"
"net"
"testing"
"time"
@ -14,6 +18,15 @@ import (
"github.com/waku-org/go-waku/waku/v2/protocol/store"
)
func handleSpam(msg *pb.WakuMessage, topic string) error {
logger := new(zap.Logger)
logger.Log(zap.InfoLevel, "Spam has been detected!")
return nil
}
func TestWakuOptions(t *testing.T) {
connStatusChan := make(chan ConnStatus, 100)
@ -59,3 +72,101 @@ func TestWakuOptions(t *testing.T) {
require.NotNil(t, params.privKey)
require.NotNil(t, params.connStatusC)
}
func TestWakuRLNOptions(t *testing.T) {
connStatusChan := make(chan ConnStatus, 100)
key, err := tests.RandomHex(32)
require.NoError(t, err)
prvKey, err := crypto.HexToECDSA(key)
require.NoError(t, err)
hostAddr, _ := net.ResolveTCPAddr("tcp", "0.0.0.0:0")
addr, err := multiaddr.NewMultiaddr("/ip4/0.0.0.0/tcp/4000/ws")
require.NoError(t, err)
storeFactory := func(w *WakuNode) store.Store {
return store.NewWakuStore(w.opts.messageProvider, w.peermanager, w.timesource, prometheus.DefaultRegisterer, w.log)
}
index := r.MembershipIndex(5)
// Test WithStaticRLNRelay
options := []WakuNodeOption{
WithHostAddress(hostAddr),
WithAdvertiseAddresses(addr),
WithMultiaddress(addr),
WithPrivateKey(prvKey),
WithLibP2POptions(),
WithWakuRelay(),
WithLegacyWakuFilter(true),
WithDiscoveryV5(123, nil, false),
WithWakuStore(),
WithMessageProvider(&persistence.DBStore{}),
WithLightPush(),
WithKeepAlive(time.Hour),
WithConnectionStatusChannel(connStatusChan),
WithWakuStoreFactory(storeFactory),
WithStaticRLNRelay(&index, handleSpam),
}
params := new(WakuNodeParameters)
for _, opt := range options {
require.NoError(t, opt(params))
}
require.True(t, params.enableRLN)
require.False(t, params.rlnRelayDynamic)
require.Equal(t, uint(5), *params.rlnRelayMemIndex)
require.NotNil(t, params.rlnSpamHandler)
// Test WithDynamicRLNRelay
var (
keystorePath = "./rlnKeystore.json"
keystorePassword = "password"
rlnTreePath = "root"
contractAddress = "0xF471d71E9b1455bBF4b85d475afb9BB0954A29c4"
ethClientAddress = "wss://sepolia.infura.io/ws/v3/API_KEY_GOES_HERE"
)
index = uint(0)
options2 := []WakuNodeOption{
WithHostAddress(hostAddr),
WithAdvertiseAddresses(addr),
WithMultiaddress(addr),
WithPrivateKey(prvKey),
WithLibP2POptions(),
WithWakuRelay(),
WithLegacyWakuFilter(true),
WithDiscoveryV5(123, nil, false),
WithWakuStore(),
WithMessageProvider(&persistence.DBStore{}),
WithLightPush(),
WithKeepAlive(time.Hour),
WithConnectionStatusChannel(connStatusChan),
WithWakuStoreFactory(storeFactory),
WithDynamicRLNRelay(keystorePath, keystorePassword, rlnTreePath, common.HexToAddress(contractAddress), &index, handleSpam, ethClientAddress),
}
params2 := new(WakuNodeParameters)
for _, opt := range options2 {
require.NoError(t, opt(params2))
}
require.True(t, params2.enableRLN)
require.True(t, params2.rlnRelayDynamic)
require.Equal(t, keystorePassword, params2.keystorePassword)
require.Equal(t, uint(0), *params2.rlnRelayMemIndex)
require.NotNil(t, params2.rlnSpamHandler)
require.Equal(t, ethClientAddress, params2.rlnETHClientAddress)
require.Equal(t, common.HexToAddress(contractAddress), params2.rlnMembershipContractAddress)
require.Equal(t, rlnTreePath, params2.rlnTreePath)
}

View File

@ -331,3 +331,54 @@ func (s *WakuRLNRelayDynamicSuite) tmpRLNDBPath() string {
s.Require().NoError(err)
return dbPath
}
func (s *WakuRLNRelayDynamicSuite) TestDynamicGroupManagerGetters() {
// Create a RLN instance
rlnInstance, err := rln.NewRLN()
s.Require().NoError(err)
ctx := context.Background()
rt := group_manager.NewMerkleRootTracker(5, rlnInstance)
u1Credentials := s.generateCredentials(rlnInstance)
appKeystore, err := keystore.New(s.tmpKeystorePath(), dynamic.RLNAppInfo, utils.Logger())
s.Require().NoError(err)
membershipIndex := s.register(appKeystore, u1Credentials, s.u1PrivKey)
gm, err := dynamic.NewDynamicGroupManager(s.web3Config.ETHClientAddress, s.web3Config.RegistryContract.Address, &membershipIndex, appKeystore, keystorePassword, prometheus.DefaultRegisterer, rlnInstance, rt, utils.Logger())
s.Require().NoError(err)
// initialize the WakuRLNRelay
rlnRelay := &WakuRLNRelay{
Details: group_manager.Details{
RootTracker: rt,
GroupManager: gm,
RLN: rlnInstance,
},
log: utils.Logger(),
nullifierLog: NewNullifierLog(ctx, utils.Logger()),
}
err = rlnRelay.Start(ctx)
s.Require().NoError(err)
// Test IdentityCredentials
_, err = gm.IdentityCredentials()
s.Require().NoError(err)
// Test MembershipIndex
mIndex := gm.MembershipIndex()
s.Require().Equal(mIndex, uint(membershipIndex))
// Test IsReady
isReady, err := gm.IsReady(ctx)
s.Require().NoError(err)
s.Require().True(isReady)
// Test Stop / gm.Start happened as a part of rlnRelay.Start
err = gm.Stop()
s.Require().NoError(err)
}