Skip to content

Commit

Permalink
completed unit tests
Browse files Browse the repository at this point in the history
  • Loading branch information
dan13ram committed Jun 27, 2024
1 parent 5376804 commit 6bc71a4
Show file tree
Hide file tree
Showing 10 changed files with 978 additions and 28 deletions.
2 changes: 2 additions & 0 deletions cosmos/signer.service.go
Original file line number Diff line number Diff line change
Expand Up @@ -741,6 +741,7 @@ func (x *CosmosMessageSignerRunnable) ValidateCosmosTxAndBroadcastRefund(
logger.WithError(err).Error("Error locking refund")
return false
} else {
//nolint:errcheck
defer x.db.Unlock(lockID)
}

Expand Down Expand Up @@ -821,6 +822,7 @@ func (x *CosmosMessageSignerRunnable) ValidateCosmosTxAndSignRefund(
logger.WithError(err).Error("Error locking refund")
return false
} else {
//nolint:errcheck
defer x.db.Unlock(lockID)
}

Expand Down
24 changes: 16 additions & 8 deletions cosmos/signer_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2260,7 +2260,8 @@ func TestValidateSignatures_Threshold(t *testing.T) {
sigV2, msg, err := util.SignWithPrivKey(context.Background(), signerData, txBuilder, signerKey, txConfig, 1)
assert.NoError(t, err)

txBuilder.SetSignatures(sigV2)
err = txBuilder.SetSignatures(sigV2)
assert.NoError(t, err)
sigs, err := txBuilder.GetTx().GetSignaturesV2()
assert.NoError(t, err)

Expand Down Expand Up @@ -2297,7 +2298,8 @@ func TestValidateSignatures_Threshold(t *testing.T) {

multisigSig := multisigtypes.NewMultisig(len(multisigPk.PubKeys))

multisigtypes.AddSignatureV2(multisigSig, sigV2, multisigPk.GetPubKeys())
err = multisigtypes.AddSignatureV2(multisigSig, sigV2, multisigPk.GetPubKeys())
assert.NoError(t, err)

expectedSignature := signingtypes.SignatureV2{
PubKey: multisigPk,
Expand Down Expand Up @@ -2357,7 +2359,8 @@ func TestValidateSignatures_Threshold_AnyError(t *testing.T) {

sigV2.PubKey = nil

txBuilder.SetSignatures(sigV2)
err = txBuilder.SetSignatures(sigV2)
assert.NoError(t, err)

result := signer.ValidateSignaturesAndAddMultiSignatureToTxConfig("hash1", 1, txConfig, txBuilder)
assert.False(t, result)
Expand Down Expand Up @@ -2404,7 +2407,8 @@ func TestValidateSignatures_Threshold_VerifyError(t *testing.T) {
sigV2, _, err := util.SignWithPrivKey(context.Background(), signerData, txBuilder, signerKey, txConfig, 1)
assert.NoError(t, err)

txBuilder.SetSignatures(sigV2)
err = txBuilder.SetSignatures(sigV2)
assert.NoError(t, err)

result := signer.ValidateSignaturesAndAddMultiSignatureToTxConfig("hash1", 1, txConfig, txBuilder)
assert.False(t, result)
Expand Down Expand Up @@ -2452,7 +2456,8 @@ func TestValidateSignatures_Threshold_AddSignatureError(t *testing.T) {
sigV2, _, err := util.SignWithPrivKey(context.Background(), signerData, txBuilder, signerKey, txConfig, 1)
assert.NoError(t, err)

txBuilder.SetSignatures(sigV2)
err = txBuilder.SetSignatures(sigV2)
assert.NoError(t, err)

result := signer.ValidateSignaturesAndAddMultiSignatureToTxConfig("hash1", 1, txConfig, txBuilder)
assert.False(t, result)
Expand Down Expand Up @@ -2540,7 +2545,8 @@ func TestValidateSignatures_TwoThreshold(t *testing.T) {
sig3, _, err := util.SignWithPrivKey(context.Background(), signerData, txBuilder, signer3Key, txConfig, 1)
assert.NoError(t, err)

txBuilder.SetSignatures(sig1, sig3)
err = txBuilder.SetSignatures(sig1, sig3)
assert.NoError(t, err)

sigs, err := txBuilder.GetTx().GetSignaturesV2()
assert.NoError(t, err)
Expand All @@ -2550,8 +2556,10 @@ func TestValidateSignatures_TwoThreshold(t *testing.T) {

multisigSig := multisigtypes.NewMultisig(len(multisigPk.PubKeys))

multisigtypes.AddSignatureV2(multisigSig, sig1, multisigPk.GetPubKeys())
multisigtypes.AddSignatureV2(multisigSig, sig3, multisigPk.GetPubKeys())
err = multisigtypes.AddSignatureV2(multisigSig, sig1, multisigPk.GetPubKeys())
assert.NoError(t, err)
err = multisigtypes.AddSignatureV2(multisigSig, sig3, multisigPk.GetPubKeys())
assert.NoError(t, err)

expectedSignature := signingtypes.SignatureV2{
PubKey: multisigPk,
Expand Down
10 changes: 7 additions & 3 deletions ethereum/monitor.service.go
Original file line number Diff line number Diff line change
Expand Up @@ -428,6 +428,10 @@ func (x *EthMessageMonitorRunnable) InitStartBlockHeight(lastHealth *models.Runn
x.logger.Infof("Initialized start block height: %d", x.startBlockHeight)
}

var ethNewClient = eth.NewClient
var ethNewMailboxContract = eth.NewMailboxContract
var dbNewDB = db.NewDB

func NewMessageMonitor(
config models.EthereumNetworkConfig,
mintControllerMap map[uint32][]byte,
Expand All @@ -445,13 +449,13 @@ func NewMessageMonitor(

logger.Debugf("Initializing")

client, err := eth.NewClient(config)
client, err := ethNewClient(config)
if err != nil {
logger.Fatalf("Error creating ethereum client: %s", err)
}

logger.Debug("Connecting to mailbox contract at: ", config.MailboxAddress)
mailbox, err := eth.NewMailboxContract(common.HexToAddress(config.MailboxAddress), client.GetClient())
mailbox, err := ethNewMailboxContract(common.HexToAddress(config.MailboxAddress), client.GetClient())
if err != nil {
logger.Fatal("Error connecting to mailbox contract: ", err)
}
Expand All @@ -472,7 +476,7 @@ func NewMessageMonitor(

logger: logger,

db: db.NewDB(),
db: dbNewDB(),
}

x.UpdateCurrentBlockHeight()
Expand Down
183 changes: 183 additions & 0 deletions ethereum/monitor_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,12 @@ package ethereum

import (
"context"
"fmt"
"math/big"
"testing"

"github.com/dan13ram/wpokt-oracle/common"
"github.com/dan13ram/wpokt-oracle/db"
"github.com/dan13ram/wpokt-oracle/db/mocks"
"github.com/dan13ram/wpokt-oracle/ethereum/autogen"
eth "github.com/dan13ram/wpokt-oracle/ethereum/client"
Expand Down Expand Up @@ -1550,6 +1552,37 @@ func TestMonitorSyncBlocks_Error(t *testing.T) {
assert.False(t, result)
}

func TestMonitorSyncNewBlocks_NoNewBlocks(t *testing.T) {
mockDB := mocks.NewMockDB(t)
mockClient := clientMocks.NewMockEthereumClient(t)
logger := log.New().WithField("test", "monitor")

mintControllerMap := map[uint32][]byte{
1: ethcommon.FromHex("0x01"),
}

startBlock := uint64(100)
endBlock := uint64(100)

mailbox := clientMocks.NewMockMailboxContract(t)
monitor := &EthMessageMonitorRunnable{
db: mockDB,
client: mockClient,
logger: logger,
mintControllerMap: mintControllerMap,
chain: models.Chain{
ChainDomain: 1,
},
mailbox: mailbox,
currentBlockHeight: endBlock,
startBlockHeight: startBlock,
}

result := monitor.SyncNewBlocks()

assert.True(t, result)
}

func TestMonitorSyncNewBlocks(t *testing.T) {
mockDB := mocks.NewMockDB(t)
mockClient := clientMocks.NewMockEthereumClient(t)
Expand Down Expand Up @@ -1826,3 +1859,153 @@ func TestMonitorRun(t *testing.T) {
mockClient.AssertExpectations(t)
mockDB.AssertExpectations(t)
}

func TestNewMessageMonitor(t *testing.T) {
mockDB := mocks.NewMockDB(t)
mockClient := clientMocks.NewMockEthereumClient(t)
mockMailbox := clientMocks.NewMockMailboxContract(t)

mintControllerMap := map[uint32][]byte{
1: ethcommon.FromHex("0x01"),
2: ethcommon.FromHex("0x02"),
}

lastHealth := &models.RunnerServiceStatus{BlockHeight: 50}

config := models.EthereumNetworkConfig{
ChainID: 1,
ChainName: "test",
StartBlockHeight: 1,
Confirmations: 10,
MailboxAddress: ethcommon.BytesToAddress([]byte("mailbox")).Hex(),
MessageMonitor: models.ServiceConfig{
Enabled: true,
},
}

ethNewClient = func(models.EthereumNetworkConfig) (eth.EthereumClient, error) {
return mockClient, nil
}

ethNewMailboxContract = func(ethcommon.Address, bind.ContractBackend) (eth.MailboxContract, error) {
return mockMailbox, nil
}

dbNewDB = func() db.DB {
return mockDB
}

defer func() {
ethNewClient = eth.NewClient
ethNewMailboxContract = eth.NewMailboxContract
dbNewDB = db.NewDB
}()

mockClient.EXPECT().GetBlockHeight().Return(uint64(100), nil)

mockClient.EXPECT().GetClient().Return(nil)

runnable := NewMessageMonitor(config, mintControllerMap, lastHealth)

assert.NotNil(t, runnable)

monitor, ok := runnable.(*EthMessageMonitorRunnable)
assert.True(t, ok)
assert.Equal(t, mockDB, monitor.db)
assert.Equal(t, mockClient, monitor.client)
assert.Equal(t, mockMailbox, monitor.mailbox)
assert.Equal(t, mintControllerMap, monitor.mintControllerMap)
assert.Equal(t, uint64(100), monitor.currentBlockHeight)
assert.Equal(t, uint64(50), monitor.startBlockHeight)

}

func TestNewMessageMonitorFailures(t *testing.T) {
mockDB := mocks.NewMockDB(t)
mockClient := clientMocks.NewMockEthereumClient(t)
mockMailbox := clientMocks.NewMockMailboxContract(t)

mintControllerMap := map[uint32][]byte{
1: ethcommon.FromHex("0x01"),
2: ethcommon.FromHex("0x02"),
}

lastHealth := &models.RunnerServiceStatus{BlockHeight: 50}

config := models.EthereumNetworkConfig{
ChainID: 1,
ChainName: "test",
StartBlockHeight: 1,
Confirmations: 10,
MailboxAddress: ethcommon.BytesToAddress([]byte("mailbox")).Hex(),
MessageMonitor: models.ServiceConfig{
Enabled: true,
},
}

ethNewClient = func(models.EthereumNetworkConfig) (eth.EthereumClient, error) {
return mockClient, nil
}

ethNewMailboxContract = func(ethcommon.Address, bind.ContractBackend) (eth.MailboxContract, error) {
return mockMailbox, nil
}

dbNewDB = func() db.DB {
return mockDB
}

defer func() {
ethNewClient = eth.NewClient
ethNewMailboxContract = eth.NewMailboxContract
dbNewDB = db.NewDB
}()

mockClient.EXPECT().GetClient().Return(nil)

defer func() { log.StandardLogger().ExitFunc = nil }()
log.StandardLogger().ExitFunc = func(num int) { panic(fmt.Sprintf("exit %d", num)) }

t.Run("Disabled", func(t *testing.T) {
config.MessageMonitor.Enabled = false

assert.Panics(t, func() {
NewMessageMonitor(config, mintControllerMap, lastHealth)
})

config.MessageMonitor.Enabled = true
})

t.Run("ClientError", func(t *testing.T) {

ethNewClient = func(models.EthereumNetworkConfig) (eth.EthereumClient, error) {
return nil, assert.AnError
}

assert.Panics(t, func() {
NewMessageMonitor(config, mintControllerMap, lastHealth)
})

ethNewClient = func(models.EthereumNetworkConfig) (eth.EthereumClient, error) {
return mockClient, nil
}

})

t.Run("MailboxError", func(t *testing.T) {

ethNewMailboxContract = func(ethcommon.Address, bind.ContractBackend) (eth.MailboxContract, error) {
return nil, assert.AnError
}

assert.Panics(t, func() {
NewMessageMonitor(config, mintControllerMap, lastHealth)
})

ethNewMailboxContract = func(ethcommon.Address, bind.ContractBackend) (eth.MailboxContract, error) {
return mockMailbox, nil
}

})

}
6 changes: 3 additions & 3 deletions ethereum/relayer.service.go
Original file line number Diff line number Diff line change
Expand Up @@ -359,13 +359,13 @@ func NewMessageRelayer(

logger.Debugf("Initializing")

client, err := eth.NewClient(config)
client, err := ethNewClient(config)
if err != nil {
logger.Fatalf("Error creating ethereum client: %s", err)
}

logger.Debug("Connecting to mintController contract at: ", config.MintControllerAddress)
mintController, err := eth.NewMintControllerContract(common.HexToAddress(config.MintControllerAddress), client.GetClient())
mintController, err := ethNewMintControllerContract(common.HexToAddress(config.MintControllerAddress), client.GetClient())
if err != nil {
logger.Fatal("Error connecting to mintController contract: ", err)
}
Expand All @@ -386,7 +386,7 @@ func NewMessageRelayer(

logger: logger,

db: db.NewDB(),
db: dbNewDB(),
}

x.UpdateCurrentBlockHeight()
Expand Down
Loading

0 comments on commit 6bc71a4

Please sign in to comment.