feat: add call logging to MQTT mock

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>
This commit is contained in:
Lorenz Herzberger 2024-11-04 14:26:12 +01:00
parent 8db8d53889
commit e55d1af36b
No known key found for this signature in database
GPG Key ID: FA5EE906EB55316A
2 changed files with 53 additions and 0 deletions

View File

@ -6,6 +6,7 @@ import (
"log" "log"
"math" "math"
"os" "os"
"regexp"
"strconv" "strconv"
"time" "time"
@ -19,6 +20,7 @@ import (
e2etestutil "github.com/planetmint/planetmint-go/testutil/e2e" e2etestutil "github.com/planetmint/planetmint-go/testutil/e2e"
"github.com/planetmint/planetmint-go/testutil/network" "github.com/planetmint/planetmint-go/testutil/network"
"github.com/planetmint/planetmint-go/testutil/sample" "github.com/planetmint/planetmint-go/testutil/sample"
"github.com/planetmint/planetmint-go/util/mocks"
daocli "github.com/planetmint/planetmint-go/x/dao/client/cli" daocli "github.com/planetmint/planetmint-go/x/dao/client/cli"
daotypes "github.com/planetmint/planetmint-go/x/dao/types" daotypes "github.com/planetmint/planetmint-go/x/dao/types"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
@ -323,6 +325,28 @@ func (s *SelectionE2ETestSuite) TestTokenRedeemClaim() {
qOut, err = clitestutil.ExecTestCLICmd(val.ClientCtx, daocli.CmdRedeemClaimByLiquidTxHash(), []string{"0000000000000000000000000000000000000000000000000000000000000000"}) qOut, err = clitestutil.ExecTestCLICmd(val.ClientCtx, daocli.CmdRedeemClaimByLiquidTxHash(), []string{"0000000000000000000000000000000000000000000000000000000000000000"})
s.Require().NoError(err) s.Require().NoError(err)
assert.Equal(s.T(), "redeemClaim:\n amount: \"5993150682\"\n beneficiary: liquidAddress\n confirmed: true\n creator: plmnt1kp93kns6hs2066d8qw0uz84fw3vlthewt2ck6p\n id: \"0\"\n liquidTxHash: \"0000000000000000000000000000000000000000000000000000000000000000\"\n", qOut.String()) assert.Equal(s.T(), "redeemClaim:\n amount: \"5993150682\"\n beneficiary: liquidAddress\n confirmed: true\n creator: plmnt1kp93kns6hs2066d8qw0uz84fw3vlthewt2ck6p\n id: \"0\"\n liquidTxHash: \"0000000000000000000000000000000000000000000000000000000000000000\"\n", qOut.String())
// Make sure "Publish" has been called with PoPInit cmnd
calls := mocks.GetCallLog()
var popInitCalls []mocks.Call
regex := regexp.MustCompile(`cmnd\/[a-zA-Z0-9]{15,50}\/PoPInit`)
for _, call := range calls {
if call.FuncName != "Publish" {
continue
}
cmnd, ok := call.Params[0].(string)
if !ok {
assert.True(s.T(), ok) // fails test case if !ok
continue
}
if regex.MatchString(cmnd) {
popInitCalls = append(popInitCalls, call)
}
}
assert.Greater(s.T(), len(popInitCalls), 0)
} }
func (s *SelectionE2ETestSuite) createValAccount(cfg network.Config) (address sdk.AccAddress, err error) { func (s *SelectionE2ETestSuite) createValAccount(cfg network.Config) (address sdk.AccAddress, err error) {

View File

@ -7,6 +7,16 @@ import (
mqtt "github.com/eclipse/paho.mqtt.golang" mqtt "github.com/eclipse/paho.mqtt.golang"
) )
var (
callLog []Call
logMutex sync.Mutex
)
type Call struct {
FuncName string
Params []interface{}
}
// MockMQTTClient is the mock mqtt client // MockMQTTClient is the mock mqtt client
type MockMQTTClient struct { type MockMQTTClient struct {
ConnectFunc func() mqtt.Token ConnectFunc func() mqtt.Token
@ -100,6 +110,7 @@ func GetUnsubscribeFunc(_ ...string) mqtt.Token {
// Connect is the mock client's `Disconnect` func // Connect is the mock client's `Disconnect` func
func (m *MockMQTTClient) Connect() mqtt.Token { func (m *MockMQTTClient) Connect() mqtt.Token {
m.logCall("Connect")
m.connectedMutex.Lock() m.connectedMutex.Lock()
m.connected = true m.connected = true
m.connectedMutex.Unlock() m.connectedMutex.Unlock()
@ -108,23 +119,28 @@ func (m *MockMQTTClient) Connect() mqtt.Token {
// Disconnect is the mock client's `Disconnect` func // Disconnect is the mock client's `Disconnect` func
func (m *MockMQTTClient) Disconnect(quiesce uint) { func (m *MockMQTTClient) Disconnect(quiesce uint) {
m.logCall("Disconnect")
GetDisconnectFunc(quiesce) GetDisconnectFunc(quiesce)
} }
// Publish is the mock client's `Publish` func // Publish is the mock client's `Publish` func
func (m *MockMQTTClient) Publish(topic string, qos byte, retained bool, payload interface{}) mqtt.Token { func (m *MockMQTTClient) Publish(topic string, qos byte, retained bool, payload interface{}) mqtt.Token {
m.logCall("Publish", topic, qos, retained, payload)
return GetPublishFunc(topic, qos, retained, payload) return GetPublishFunc(topic, qos, retained, payload)
} }
func (m *MockMQTTClient) Subscribe(topic string, qos byte, callback mqtt.MessageHandler) mqtt.Token { func (m *MockMQTTClient) Subscribe(topic string, qos byte, callback mqtt.MessageHandler) mqtt.Token {
m.logCall("Subscribe", topic, qos, callback)
return GetSubscribeFunc(topic, qos, callback) return GetSubscribeFunc(topic, qos, callback)
} }
func (m *MockMQTTClient) Unsubscribe(topics ...string) mqtt.Token { func (m *MockMQTTClient) Unsubscribe(topics ...string) mqtt.Token {
m.logCall("Unsubscribe", topics)
return GetUnsubscribeFunc(topics...) return GetUnsubscribeFunc(topics...)
} }
func (m *MockMQTTClient) IsConnected() bool { func (m *MockMQTTClient) IsConnected() bool {
m.logCall("IsConnected")
m.connectedMutex.Lock() m.connectedMutex.Lock()
connected := m.connected connected := m.connected
m.connectedMutex.Unlock() m.connectedMutex.Unlock()
@ -132,8 +148,21 @@ func (m *MockMQTTClient) IsConnected() bool {
} }
func (m *MockMQTTClient) IsConnectionOpen() bool { func (m *MockMQTTClient) IsConnectionOpen() bool {
m.logCall("IsConnectedOpen")
m.connectedMutex.Lock() m.connectedMutex.Lock()
connected := m.connected connected := m.connected
m.connectedMutex.Unlock() m.connectedMutex.Unlock()
return connected return connected
} }
func GetCallLog() []Call {
logMutex.Lock()
defer logMutex.Unlock()
return callLog
}
func (m *MockMQTTClient) logCall(funcName string, params ...interface{}) {
logMutex.Lock()
defer logMutex.Unlock()
callLog = append(callLog, Call{FuncName: funcName, Params: params})
}