diff --git a/tests/e2e/dao/pop/selection_suite.go b/tests/e2e/dao/pop/selection_suite.go index 7cf2f36..f390c63 100644 --- a/tests/e2e/dao/pop/selection_suite.go +++ b/tests/e2e/dao/pop/selection_suite.go @@ -6,6 +6,7 @@ import ( "log" "math" "os" + "regexp" "strconv" "time" @@ -19,6 +20,7 @@ import ( e2etestutil "github.com/planetmint/planetmint-go/testutil/e2e" "github.com/planetmint/planetmint-go/testutil/network" "github.com/planetmint/planetmint-go/testutil/sample" + "github.com/planetmint/planetmint-go/util/mocks" daocli "github.com/planetmint/planetmint-go/x/dao/client/cli" daotypes "github.com/planetmint/planetmint-go/x/dao/types" "github.com/stretchr/testify/assert" @@ -323,6 +325,28 @@ func (s *SelectionE2ETestSuite) TestTokenRedeemClaim() { qOut, err = clitestutil.ExecTestCLICmd(val.ClientCtx, daocli.CmdRedeemClaimByLiquidTxHash(), []string{"0000000000000000000000000000000000000000000000000000000000000000"}) 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()) + + // 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) { diff --git a/util/mocks/mqtt.go b/util/mocks/mqtt.go index be8e368..03095e2 100644 --- a/util/mocks/mqtt.go +++ b/util/mocks/mqtt.go @@ -7,6 +7,16 @@ import ( 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 type MockMQTTClient struct { ConnectFunc func() mqtt.Token @@ -100,6 +110,7 @@ func GetUnsubscribeFunc(_ ...string) mqtt.Token { // Connect is the mock client's `Disconnect` func func (m *MockMQTTClient) Connect() mqtt.Token { + m.logCall("Connect") m.connectedMutex.Lock() m.connected = true m.connectedMutex.Unlock() @@ -108,23 +119,28 @@ func (m *MockMQTTClient) Connect() mqtt.Token { // Disconnect is the mock client's `Disconnect` func func (m *MockMQTTClient) Disconnect(quiesce uint) { + m.logCall("Disconnect") GetDisconnectFunc(quiesce) } // Publish is the mock client's `Publish` func 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) } func (m *MockMQTTClient) Subscribe(topic string, qos byte, callback mqtt.MessageHandler) mqtt.Token { + m.logCall("Subscribe", topic, qos, callback) return GetSubscribeFunc(topic, qos, callback) } func (m *MockMQTTClient) Unsubscribe(topics ...string) mqtt.Token { + m.logCall("Unsubscribe", topics) return GetUnsubscribeFunc(topics...) } func (m *MockMQTTClient) IsConnected() bool { + m.logCall("IsConnected") m.connectedMutex.Lock() connected := m.connected m.connectedMutex.Unlock() @@ -132,8 +148,21 @@ func (m *MockMQTTClient) IsConnected() bool { } func (m *MockMQTTClient) IsConnectionOpen() bool { + m.logCall("IsConnectedOpen") m.connectedMutex.Lock() connected := m.connected m.connectedMutex.Unlock() 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}) +}