Skip to content
Snippets Groups Projects
Select Git revision
  • 1eae8dbcdfb56fecea20df44543f132cd5bc64ec
  • 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

parameters.go

Blame
  • drng_test.go 1.87 KiB
    package drng
    
    import (
    	"encoding/json"
    	"fmt"
    	"log"
    	"sync"
    	"testing"
    	"time"
    
    	"github.com/iotaledger/goshimmer/tools/integration-tests/tester/framework"
    	"github.com/iotaledger/goshimmer/tools/integration-tests/tester/tests"
    	"github.com/stretchr/testify/require"
    )
    
    var (
    	errWrongRound = fmt.Errorf("wrong round")
    )
    
    // TestDRNG checks whether drng messages are actually relayed/gossiped through the network
    // by checking the messages' existence on all nodes after a cool down.
    func TestDRNG(t *testing.T) {
    	var wg sync.WaitGroup
    
    	drng, err := f.CreateDRNGNetwork("TestDRNG", 5, 8, 3)
    	require.NoError(t, err)
    	defer tests.ShutdownNetwork(t, drng)
    
    	// wait for randomness generation to be started
    	log.Printf("Waiting for randomness generation to be started...\n")
    
    	// randomness starts at round = 2
    	firstRound := uint64(2)
    	_, err = waitForRound(t, drng.Peers()[0], firstRound, 200)
    	require.NoError(t, err)
    
    	log.Printf("Waiting for randomness generation to be started... done\n")
    
    	ticker := time.NewTimer(0)
    	defer ticker.Stop()
    
    	numChecks := 3
    	i := 0
    	for {
    		select {
    		case <-ticker.C:
    			ticker.Reset(10 * time.Second)
    
    			// check for randomness on every peer
    			for _, peer := range drng.Peers() {
    				wg.Add(1)
    				go func(peer *framework.Peer) {
    					defer wg.Done()
    					s, err := waitForRound(t, peer, firstRound+uint64(i), 8)
    					require.NoError(t, err, peer.ID().String(), s)
    					t.Log(peer.ID().String(), s)
    				}(peer)
    			}
    
    			wg.Wait()
    			i++
    
    			if i == numChecks {
    				return
    			}
    		}
    	}
    }
    
    func waitForRound(t *testing.T, peer *framework.Peer, round uint64, maxAttempts int) (string, error) {
    	var b []byte
    	for i := 0; i < maxAttempts; i++ {
    		resp, err := peer.GetRandomness()
    		require.NoError(t, err)
    		b, _ = json.MarshalIndent(resp, "", " ")
    		if resp.Round == round {
    			return string(b), nil
    		}
    		time.Sleep(1 * time.Second)
    	}
    	return string(b), errWrongRound
    }