Skip to content
Snippets Groups Projects
Select Git revision
  • fc739a8f47f777e64609524059ec37bb02899a4a
  • without_tipselection default
  • develop protected
  • fix/grafana-local-dashboard
  • wasp
  • fix/dashboard-explorer-freeze
  • master
  • feat/timerqueue
  • test/sync_debug_and_650
  • feat/sync_revamp_inv
  • wip/sync
  • tool/db-recovery
  • portcheck/fix
  • fix/synchronization
  • feat/new-dashboard-analysis
  • feat/refactored-analysis-dashboard
  • feat/new-analysis-dashboard
  • test/demo-prometheus-fpc
  • prometheus_metrics
  • wip/analysis-server
  • merge/fpc-test-value-transfer
  • v0.2.2
  • v0.2.1
  • v0.2.0
  • v0.1.3
  • v0.1.2
  • v0.1.1
  • v0.1.0
28 results

testutil.go

  • testutil.go 3.22 KiB
    package tests
    
    import (
    	"fmt"
    	"math/rand"
    	"testing"
    
    	"github.com/iotaledger/goshimmer/packages/binary/messagelayer/payload"
    	"github.com/iotaledger/goshimmer/tools/integration-tests/tester/framework"
    	"github.com/stretchr/testify/assert"
    	"github.com/stretchr/testify/require"
    )
    
    // DataMessageSent defines a struct to identify from which issuer a data message was sent.
    type DataMessageSent struct {
    	number          int
    	id              string
    	data            []byte
    	issuerPublicKey string
    }
    
    type Shutdowner interface {
    	Shutdown() error
    }
    
    // SendDataMessagesOnRandomPeer sends data messages on a random peer and saves the sent message to a map.
    func SendDataMessagesOnRandomPeer(t *testing.T, peers []*framework.Peer, numMessages int, idsMap ...map[string]DataMessageSent) map[string]DataMessageSent {
    	var ids map[string]DataMessageSent
    	if len(idsMap) > 0 {
    		ids = idsMap[0]
    	} else {
    		ids = make(map[string]DataMessageSent, numMessages)
    	}
    
    	for i := 0; i < numMessages; i++ {
    		data := []byte(fmt.Sprintf("Test%d", i))
    
    		peer := peers[rand.Intn(len(peers))]
    		id, sent := SendDataMessage(t, peer, data, i)
    
    		ids[id] = sent
    	}
    
    	return ids
    }
    
    // SendDataMessage sends a data message on a given peer and returns the id and a DataMessageSent struct.
    func SendDataMessage(t *testing.T, peer *framework.Peer, data []byte, number int) (string, DataMessageSent) {
    	id, err := peer.Data(data)
    	require.NoErrorf(t, err, "Could not send message on %s", peer.String())
    
    	sent := DataMessageSent{
    		number: number,
    		id:     id,
    		// save payload to be able to compare API response
    		data:            payload.NewData(data).Bytes(),
    		issuerPublicKey: peer.Identity.PublicKey().String(),
    	}
    	return id, sent
    }
    
    // CheckForMessageIds performs checks to make sure that all peers received all given messages defined in ids.
    func CheckForMessageIds(t *testing.T, peers []*framework.Peer, ids map[string]DataMessageSent, checkSynchronized bool) {
    	var idsSlice []string
    	for id := range ids {
    		idsSlice = append(idsSlice, id)
    	}
    
    	for _, peer := range peers {
    		if checkSynchronized {
    			// check that the peer sees itself as synchronized
    			info, err := peer.Info()
    			require.NoError(t, err)
    			require.True(t, info.Synced)
    		}
    
    		resp, err := peer.FindMessageByID(idsSlice)
    		require.NoError(t, err)
    
    		// check that all messages are present in response
    		respIDs := make([]string, len(resp.Messages))
    		for i, msg := range resp.Messages {
    			respIDs[i] = msg.ID
    		}
    		assert.ElementsMatchf(t, idsSlice, respIDs, "messages do not match sent in %s", peer.String())
    
    		// check for general information
    		for _, msg := range resp.Messages {
    			msgSent := ids[msg.ID]
    
    			assert.Equalf(t, msgSent.issuerPublicKey, msg.IssuerPublicKey, "messageID=%s, issuer=%s not correct issuer in %s.", msgSent.id, msgSent.issuerPublicKey, peer.String())
    			assert.Equalf(t, msgSent.data, msg.Payload, "messageID=%s, issuer=%s data not equal in %s.", msgSent.id, msgSent.issuerPublicKey, peer.String())
    			assert.Truef(t, msg.Metadata.Solid, "messageID=%s, issuer=%s not solid in %s.", msgSent.id, msgSent.issuerPublicKey, peer.String())
    		}
    	}
    }
    
    // ShutdownNetwork shuts down the network and reports errors.
    func ShutdownNetwork(t *testing.T, n Shutdowner) {
    	err := n.Shutdown()
    	require.NoError(t, err)
    }