From c42efff1bc2c2b5ca635cb4f8283254cd2e32cf9 Mon Sep 17 00:00:00 2001 From: Tim Wu Date: Mon, 30 May 2022 15:40:15 -0400 Subject: [PATCH 1/3] move to integration test, hardcode protocol id --- .github/workflows/integration-tests.yml | 1 + dot/network/gossip_integration_test.go | 111 ++++++++++++++++++++++++ 2 files changed, 112 insertions(+) create mode 100644 dot/network/gossip_integration_test.go diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml index 9cdd995b38..68d2cf0978 100644 --- a/.github/workflows/integration-tests.yml +++ b/.github/workflows/integration-tests.yml @@ -27,6 +27,7 @@ jobs: github.com/ChainSafe/gossamer/dot/core, github.com/ChainSafe/gossamer/dot/rpc/modules, github.com/ChainSafe/gossamer/lib/babe, + github.com/ChainSafe/gossamer/dot/network ] runs-on: ubuntu-latest steps: diff --git a/dot/network/gossip_integration_test.go b/dot/network/gossip_integration_test.go new file mode 100644 index 0000000000..e8e6a810a6 --- /dev/null +++ b/dot/network/gossip_integration_test.go @@ -0,0 +1,111 @@ +// Copyright 2021 ChainSafe Systems (ON) +// SPDX-License-Identifier: LGPL-3.0-only + +//go:build integration + +package network + +import ( + "testing" + "time" + + "github.com/ChainSafe/gossamer/dot/types" + + "github.com/stretchr/testify/require" +) + +// test gossip messages to connected peers +func TestGossip(t *testing.T) { + if testing.Short() { + t.Skip("skipping TestGossip; currently, nothing is gossiped") + } + + t.Parallel() + + configA := &Config{ + BasePath: t.TempDir(), + Port: availablePort(t), + NoBootstrap: true, + NoMDNS: true, + } + + nodeA := createTestService(t, configA) + handlerA := newTestStreamHandler(testBlockAnnounceMessageDecoder) + nodeA.host.registerStreamHandler(nodeA.host.protocolID, handlerA.handleStream) + + configB := &Config{ + BasePath: t.TempDir(), + Port: availablePort(t), + NoBootstrap: true, + NoMDNS: true, + } + + nodeB := createTestService(t, configB) + handlerB := newTestStreamHandler(testBlockAnnounceMessageDecoder) + nodeB.host.registerStreamHandler(nodeB.host.protocolID, handlerB.handleStream) + + addrInfoA := nodeA.host.addrInfo() + err := nodeB.host.connect(addrInfoA) + // retry connect if "failed to dial" error + if failedToDial(err) { + time.Sleep(TestBackoffTimeout) + err = nodeB.host.connect(addrInfoA) + } + require.NoError(t, err) + + configC := &Config{ + BasePath: t.TempDir(), + Port: availablePort(t), + NoBootstrap: true, + NoMDNS: true, + } + + nodeC := createTestService(t, configC) + handlerC := newTestStreamHandler(testBlockAnnounceMessageDecoder) + nodeC.host.registerStreamHandler(nodeC.host.protocolID, handlerC.handleStream) + + err = nodeC.host.connect(addrInfoA) + // retry connect if "failed to dial" error + if failedToDial(err) { + time.Sleep(TestBackoffTimeout) + err = nodeC.host.connect(addrInfoA) + } + require.NoError(t, err) + + addrInfoB := nodeB.host.addrInfo() + err = nodeC.host.connect(addrInfoB) + // retry connect if "failed to dial" error + if failedToDial(err) { + time.Sleep(TestBackoffTimeout) + err = nodeC.host.connect(addrInfoB) + } + require.NoError(t, err) + + announceMessage := &BlockAnnounceMessage{ + Number: 128 * 7, + Digest: types.NewDigest(), + } + + time.Sleep(10 * time.Second) + + _, err = nodeA.host.send(addrInfoB.ID, "/gossamer/test/0/block-announces/1", announceMessage) + require.NoError(t, err) + + time.Sleep(10 * time.Second) + + hash, err := announceMessage.Hash() + require.NoError(t, err) + + t.Logf("B %+v\n", nodeB.gossip.seenMap) + t.Logf("C %+v\n", nodeC.gossip.seenMap) + t.Logf("A %+v\n", nodeA.gossip.seenMap) + + _, ok := nodeB.gossip.seenMap[hash] + require.True(t, ok, "node B did not receive block request message from node A") + + _, ok = nodeC.gossip.seenMap[hash] + require.True(t, ok, "node C did not receive block request message from node B") + + _, ok = nodeA.gossip.seenMap[hash] + require.True(t, ok, "node A did not receive block request message from node C") +} From 1a8af6cc0cd72b0842160cac43cf272c948654f2 Mon Sep 17 00:00:00 2001 From: Tim Wu Date: Mon, 30 May 2022 15:51:10 -0400 Subject: [PATCH 2/3] remove logs, restore original test --- .github/workflows/integration-tests.yml | 3 +- dot/network/gossip_integration_test.go | 111 ------------------------ dot/network/gossip_test.go | 6 +- 3 files changed, 5 insertions(+), 115 deletions(-) delete mode 100644 dot/network/gossip_integration_test.go diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml index 68d2cf0978..c2cd5dfbba 100644 --- a/.github/workflows/integration-tests.yml +++ b/.github/workflows/integration-tests.yml @@ -26,8 +26,7 @@ jobs: github.com/ChainSafe/gossamer/dot, github.com/ChainSafe/gossamer/dot/core, github.com/ChainSafe/gossamer/dot/rpc/modules, - github.com/ChainSafe/gossamer/lib/babe, - github.com/ChainSafe/gossamer/dot/network + github.com/ChainSafe/gossamer/lib/babe ] runs-on: ubuntu-latest steps: diff --git a/dot/network/gossip_integration_test.go b/dot/network/gossip_integration_test.go deleted file mode 100644 index e8e6a810a6..0000000000 --- a/dot/network/gossip_integration_test.go +++ /dev/null @@ -1,111 +0,0 @@ -// Copyright 2021 ChainSafe Systems (ON) -// SPDX-License-Identifier: LGPL-3.0-only - -//go:build integration - -package network - -import ( - "testing" - "time" - - "github.com/ChainSafe/gossamer/dot/types" - - "github.com/stretchr/testify/require" -) - -// test gossip messages to connected peers -func TestGossip(t *testing.T) { - if testing.Short() { - t.Skip("skipping TestGossip; currently, nothing is gossiped") - } - - t.Parallel() - - configA := &Config{ - BasePath: t.TempDir(), - Port: availablePort(t), - NoBootstrap: true, - NoMDNS: true, - } - - nodeA := createTestService(t, configA) - handlerA := newTestStreamHandler(testBlockAnnounceMessageDecoder) - nodeA.host.registerStreamHandler(nodeA.host.protocolID, handlerA.handleStream) - - configB := &Config{ - BasePath: t.TempDir(), - Port: availablePort(t), - NoBootstrap: true, - NoMDNS: true, - } - - nodeB := createTestService(t, configB) - handlerB := newTestStreamHandler(testBlockAnnounceMessageDecoder) - nodeB.host.registerStreamHandler(nodeB.host.protocolID, handlerB.handleStream) - - addrInfoA := nodeA.host.addrInfo() - err := nodeB.host.connect(addrInfoA) - // retry connect if "failed to dial" error - if failedToDial(err) { - time.Sleep(TestBackoffTimeout) - err = nodeB.host.connect(addrInfoA) - } - require.NoError(t, err) - - configC := &Config{ - BasePath: t.TempDir(), - Port: availablePort(t), - NoBootstrap: true, - NoMDNS: true, - } - - nodeC := createTestService(t, configC) - handlerC := newTestStreamHandler(testBlockAnnounceMessageDecoder) - nodeC.host.registerStreamHandler(nodeC.host.protocolID, handlerC.handleStream) - - err = nodeC.host.connect(addrInfoA) - // retry connect if "failed to dial" error - if failedToDial(err) { - time.Sleep(TestBackoffTimeout) - err = nodeC.host.connect(addrInfoA) - } - require.NoError(t, err) - - addrInfoB := nodeB.host.addrInfo() - err = nodeC.host.connect(addrInfoB) - // retry connect if "failed to dial" error - if failedToDial(err) { - time.Sleep(TestBackoffTimeout) - err = nodeC.host.connect(addrInfoB) - } - require.NoError(t, err) - - announceMessage := &BlockAnnounceMessage{ - Number: 128 * 7, - Digest: types.NewDigest(), - } - - time.Sleep(10 * time.Second) - - _, err = nodeA.host.send(addrInfoB.ID, "/gossamer/test/0/block-announces/1", announceMessage) - require.NoError(t, err) - - time.Sleep(10 * time.Second) - - hash, err := announceMessage.Hash() - require.NoError(t, err) - - t.Logf("B %+v\n", nodeB.gossip.seenMap) - t.Logf("C %+v\n", nodeC.gossip.seenMap) - t.Logf("A %+v\n", nodeA.gossip.seenMap) - - _, ok := nodeB.gossip.seenMap[hash] - require.True(t, ok, "node B did not receive block request message from node A") - - _, ok = nodeC.gossip.seenMap[hash] - require.True(t, ok, "node C did not receive block request message from node B") - - _, ok = nodeA.gossip.seenMap[hash] - require.True(t, ok, "node A did not receive block request message from node C") -} diff --git a/dot/network/gossip_test.go b/dot/network/gossip_test.go index 6c80f6905b..f63be52c1e 100644 --- a/dot/network/gossip_test.go +++ b/dot/network/gossip_test.go @@ -84,10 +84,12 @@ func TestGossip(t *testing.T) { Digest: types.NewDigest(), } - _, err = nodeA.host.send(addrInfoB.ID, "", announceMessage) + time.Sleep(10 * time.Second) + + _, err = nodeA.host.send(addrInfoB.ID, "/gossamer/test/0/block-announces/1", announceMessage) require.NoError(t, err) - time.Sleep(TestMessageTimeout) + time.Sleep(10 * time.Second) hash, err := announceMessage.Hash() require.NoError(t, err) From f64f250362af76343c6a02d1a844bfacb93b80cd Mon Sep 17 00:00:00 2001 From: Tim Wu Date: Thu, 2 Jun 2022 16:30:11 -0400 Subject: [PATCH 3/3] cr feedback --- .github/workflows/integration-tests.yml | 2 +- dot/network/gossip_test.go | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml index c2cd5dfbba..9cdd995b38 100644 --- a/.github/workflows/integration-tests.yml +++ b/.github/workflows/integration-tests.yml @@ -26,7 +26,7 @@ jobs: github.com/ChainSafe/gossamer/dot, github.com/ChainSafe/gossamer/dot/core, github.com/ChainSafe/gossamer/dot/rpc/modules, - github.com/ChainSafe/gossamer/lib/babe + github.com/ChainSafe/gossamer/lib/babe, ] runs-on: ubuntu-latest steps: diff --git a/dot/network/gossip_test.go b/dot/network/gossip_test.go index f63be52c1e..6b51163508 100644 --- a/dot/network/gossip_test.go +++ b/dot/network/gossip_test.go @@ -84,12 +84,12 @@ func TestGossip(t *testing.T) { Digest: types.NewDigest(), } - time.Sleep(10 * time.Second) + time.Sleep(TestMessageTimeout) _, err = nodeA.host.send(addrInfoB.ID, "/gossamer/test/0/block-announces/1", announceMessage) require.NoError(t, err) - time.Sleep(10 * time.Second) + time.Sleep(TestMessageTimeout) hash, err := announceMessage.Hash() require.NoError(t, err)