Skip to content

Commit 4b5a5d2

Browse files
wip: checkpoint
1 parent 4dc8486 commit 4b5a5d2

14 files changed

Lines changed: 587 additions & 305 deletions

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -694,6 +694,8 @@ github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE
694694
github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg=
695695
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
696696
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
697+
github.com/pokt-network/go-mockdns v0.0.1 h1:1Kb/kIFH6bNtY9F1bFhJyMRMCc7WyiqfGg0hotBZ1JI=
698+
github.com/pokt-network/go-mockdns v0.0.1/go.mod h1:lgRN6+KxQBawyIghpnl5CezHFGS9VLzvtVlwxvzXTQ4=
697699
github.com/pokt-network/gocuke v0.0.1 h1:qJ/Ryf+hi5L6T9lsOZDNbiAclHkLlDio5/eVKQEYhgE=
698700
github.com/pokt-network/gocuke v0.0.1/go.mod h1:BowLKW4++696gTTU33teodtIhjjyaphEbhQT9D5Refw=
699701
github.com/pokt-network/smt v0.4.0 h1:fodLphes/EtQw+nr6Zc5giSJdnjIkM2BY6cGTOfTaqo=

internal/testutil/bus.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,11 @@ func WithBusEventHandler(
7575
) *mock_modules.MockBus {
7676
t.Helper()
7777

78-
handler := handlerFactory(t, busMock)
79-
busMock.EXPECT().PublishEventToBus(gomock.Any()).Do(handler).AnyTimes()
78+
if handlerFactory != nil {
79+
handler := handlerFactory(t, busMock)
80+
busMock.EXPECT().PublishEventToBus(gomock.Any()).Do(handler).AnyTimes()
81+
}
82+
8083
return busMock
8184
}
8285

internal/testutil/constructors/constructors.go

Lines changed: 76 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package constructors
22

33
import (
4+
"github.com/foxcpp/go-mockdns"
45
libp2pHost "github.com/libp2p/go-libp2p/core/host"
56
mocknet "github.com/libp2p/go-libp2p/p2p/net/mock"
67
"github.com/pokt-network/pocket/internal/testutil/bus"
@@ -25,85 +26,100 @@ type serviceURLStr = string
2526
func NewBusesMocknetAndP2PModules(
2627
t gocuke.TestingT,
2728
count int,
29+
dnsSrv *mockdns.Server,
2830
genesisState *genesis.GenesisState,
2931
busEventHandlerFactory testutil.BusEventHandlerFactory,
3032
) (
3133
buses map[serviceURLStr]*mock_modules.MockBus,
3234
libp2pNetworkMock mocknet.Mocknet,
3335
p2pModules map[serviceURLStr]modules.P2PModule,
3436
) {
35-
// TODO_THIS_COMMIT: refactor
36-
dnsSrv := testutil.MinimalDNSMock(t)
37-
38-
libp2pNetworkMock = mocknet.New()
39-
// destroy mocknet on test cleanup
40-
t.Cleanup(func() {
41-
err := libp2pNetworkMock.Close()
42-
require.NoError(t, err)
43-
})
44-
45-
buses = make(map[serviceURLStr]*mock_modules.MockBus)
46-
p2pModules = make(map[serviceURLStr]modules.P2PModule)
47-
// CONSIDERATION: using an iterator/generator would prevent unintentional
48-
// ID collisions
49-
privKeys := testutil.LoadLocalnetPrivateKeys(t, count)
50-
// CONSIDERATION: using an iterator/generator would prevent unintentional
51-
// serviceURL collisions
52-
serviceURLs := p2p_testutil.SequentialServiceURLs(t, count)
53-
for i, serviceURL := range serviceURLs {
54-
if len(privKeys) <= i {
55-
t.Logf("WARNING: not enough private keys for %d service URLs", len(serviceURLs))
56-
break
57-
}
58-
59-
privKey := privKeys[i]
60-
busMock := bus_testutil.NewBus(t, privKey, serviceURL, genesisState, busEventHandlerFactory)
61-
buses[serviceURL] = busMock
62-
63-
// TODO_THIS_COMMIT: refactor
64-
_ = consensus_testutil.BaseConsensusMock(t, busMock)
65-
_ = persistence_testutil.BasePersistenceMock(t, busMock, genesisState)
66-
67-
// -- option 1
68-
_ = telemetry_testutil.BaseTelemetryMock(t, busMock)
69-
70-
// -- option 2
71-
//_ = telemetry_testutil.WithTimeSeriesAgent(
72-
// t, telemetry_testutil.MinimalTelemetryMock(t, busMock),
73-
//)
74-
75-
// MUST register DNS before instantiating P2PModule
76-
testutil.AddServiceURLZone(t, dnsSrv, serviceURL)
77-
78-
host := p2p_testutil.NewMocknetHost(t, libp2pNetworkMock, privKey)
79-
p2pModules[serviceURL] = NewP2PModuleWithHost(t, busMock, host)
80-
}
37+
libp2pNetworkMock = p2p_testutil.NewLibp2pNetworkMock(t)
38+
serviceURLKeyMap := testutil.SequentialServiceURLPrivKeyMap(t, count)
39+
40+
buses, p2pModules = NewBusesAndP2PModules(
41+
t, busEventHandlerFactory,
42+
dnsSrv,
43+
genesisState,
44+
libp2pNetworkMock,
45+
serviceURLKeyMap,
46+
)
8147
err := libp2pNetworkMock.LinkAll()
8248
require.NoError(t, err)
8349

8450
return buses, libp2pNetworkMock, p2pModules
8551
}
8652

87-
// TODO_THIS_TEST: need this?
88-
func NewP2PModules(
53+
// TODO_THIS_COMMIT: rename / move, if possible
54+
func NewP2PModule(
8955
t gocuke.TestingT,
90-
privKeys []cryptoPocket.PrivateKey,
56+
// TODO_THIS_COMMIT: get these from the bus instead
57+
serviceURL string,
58+
privKey cryptoPocket.PrivateKey,
59+
// --
9160
busMock *mock_modules.MockBus,
61+
genesisState *genesis.GenesisState,
62+
dnsSrv *mockdns.Server,
63+
libp2pNetworkMock mocknet.Mocknet,
64+
// TODO_THIS_COMMIT: consider *p2p.P2PModule instead
65+
) modules.P2PModule {
66+
_ = consensus_testutil.BaseConsensusMock(t, busMock)
67+
_ = persistence_testutil.BasePersistenceMock(t, busMock, genesisState)
68+
69+
// -- option 1
70+
_ = telemetry_testutil.BaseTelemetryMock(t, busMock)
71+
72+
// -- option 2
73+
//_ = telemetry_testutil.WithTimeSeriesAgent(
74+
// t, telemetry_testutil.MinimalTelemetryMock(t, busMock),
75+
//)
76+
77+
// MUST register DNS before instantiating P2PModule
78+
testutil.AddServiceURLZone(t, dnsSrv, serviceURL)
79+
80+
host := testutil.NewMocknetHost(t, libp2pNetworkMock, privKey)
81+
return NewP2PModuleWithHost(t, busMock, host)
82+
}
83+
84+
// TODO_THIS_TEST: need this?
85+
func NewBusesAndP2PModules(
86+
t gocuke.TestingT,
87+
busEventHandlerFactory testutil.BusEventHandlerFactory,
88+
dnsSrv *mockdns.Server,
89+
genesisState *genesis.GenesisState,
9290
libp2pNetworkMock mocknet.Mocknet,
91+
serviceURLKeyMap map[serviceURLStr]cryptoPocket.PrivateKey,
9392
) (
93+
busMocks map[serviceURLStr]*mock_modules.MockBus,
94+
// TODO_THIS_COMMIT: consider *p2p.P2PModule instead
9495
p2pModules map[serviceURLStr]modules.P2PModule,
9596
) {
96-
// CONSIDERATION: using an iterator/generator would prevent unintentional
97-
// serviceURL collisions
98-
serviceURLs := p2p_testutil.SequentialServiceURLs(t, len(privKeys))
99-
_ = p2p_testutil.SetupMockNetPeers(t, libp2pNetworkMock, privKeys, serviceURLs)
100-
101-
for i, serviceURL := range serviceURLs {
102-
host := libp2pNetworkMock.Hosts()[i]
103-
// TECHDEBT: refactor
104-
p2pModules[serviceURL] = NewP2PModuleWithHost(t, busMock, host)
97+
busMocks = make(map[serviceURLStr]*mock_modules.MockBus)
98+
p2pModules = make(map[serviceURLStr]modules.P2PModule)
99+
100+
for serviceURL, privKey := range serviceURLKeyMap {
101+
busMock := bus_testutil.NewBus(
102+
t, privKey,
103+
serviceURL,
104+
genesisState,
105+
busEventHandlerFactory,
106+
)
107+
busMocks[serviceURL] = busMock
108+
109+
p2pModules[serviceURL] = NewP2PModule(
110+
t, serviceURL,
111+
// TODO_THIS_COMMIT: send via busMock instead
112+
privKey,
113+
busMock,
114+
// TODO_THIS_COMMIT: send via busMock instead
115+
genesisState,
116+
// TODO_THIS_COMMIT: send via busMock instead (?)
117+
dnsSrv,
118+
// TODO_THIS_COMMIT: send via busMock instead (?)
119+
libp2pNetworkMock,
120+
)
105121
}
106-
return p2pModules
122+
return busMocks, p2pModules
107123
}
108124

109125
// TODO_THIS_TEST: need this?
@@ -122,6 +138,7 @@ func NewBusesAndP2PModuleWithHost(
122138
return busMock, NewP2PModuleWithHost(t, busMock, host)
123139
}
124140

141+
// TODO_THIS_COMMIT: rename; consider returning *p2p.P2PModule instead
125142
func NewP2PModuleWithHost(
126143
t gocuke.TestingT,
127144
busMock *mock_modules.MockBus,

internal/testutil/module.go

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package testutil
2+
3+
import (
4+
"github.com/foxcpp/go-mockdns"
5+
mocknet "github.com/libp2p/go-libp2p/p2p/net/mock"
6+
"github.com/pokt-network/pocket/runtime/genesis"
7+
"github.com/pokt-network/pocket/shared/modules"
8+
"github.com/pokt-network/pocket/shared/modules/base_modules"
9+
)
10+
11+
// TODO_THIS_COMMIT: is this helpful?
12+
const TestModuleName = "testModule"
13+
14+
var (
15+
_ modules.Module = &TestModule{}
16+
_ modules.ModuleFactoryWithOptions = &TestModule{}
17+
)
18+
19+
type TestModule struct {
20+
base_modules.IntegratableModule
21+
base_modules.InterruptableModule
22+
23+
DNS *mockdns.Server
24+
Genesis *genesis.GenesisState
25+
Libp2pNetworkMock mocknet.Mocknet
26+
}
27+
28+
func (m *TestModule) GetModuleName() string {
29+
return TestModuleName
30+
}
31+
32+
func (m *TestModule) Create(
33+
bus modules.Bus,
34+
opts ...modules.ModuleOption,
35+
) (modules.Module, error) {
36+
panic("implement me")
37+
}
38+
39+
func (m *TestModule) GetDNS() *mockdns.Server {
40+
return m.DNS
41+
}

internal/testutil/network.go

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
package testutil
2+
3+
import (
4+
"fmt"
5+
6+
crypto2 "github.com/libp2p/go-libp2p/core/crypto"
7+
"github.com/libp2p/go-libp2p/core/host"
8+
"github.com/libp2p/go-libp2p/p2p/net/mock"
9+
"github.com/multiformats/go-multiaddr"
10+
"github.com/regen-network/gocuke"
11+
"github.com/stretchr/testify/require"
12+
13+
"github.com/pokt-network/pocket/runtime/defaults"
14+
"github.com/pokt-network/pocket/shared/crypto"
15+
)
16+
17+
const ServiceURLFormat = "node%d.consensus:42069"
18+
19+
func NewMocknetHost(
20+
t gocuke.TestingT,
21+
libp2pNetworkMock mocknet.Mocknet,
22+
privKey crypto.PrivateKey,
23+
) host.Host {
24+
t.Helper()
25+
26+
// TODO_THIS_COMMIT: move to const
27+
addrMock, err := multiaddr.NewMultiaddr(fmt.Sprintf("/ip4/10.0.0.1/tcp/%d", defaults.DefaultP2PPort))
28+
require.NoError(t, err)
29+
30+
libp2pPrivKey, err := crypto2.UnmarshalEd25519PrivateKey(privKey.Bytes())
31+
require.NoError(t, err)
32+
33+
host, err := libp2pNetworkMock.AddPeer(libp2pPrivKey, addrMock)
34+
require.NoError(t, err)
35+
36+
return host
37+
}
38+
39+
func SequentialServiceURLPrivKeyMap(t gocuke.TestingT, count int) map[string]crypto.PrivateKey {
40+
t.Helper()
41+
42+
// CONSIDERATION: using an iterator/generator would prevent unintentional
43+
// ID collisions
44+
privKeys := LoadLocalnetPrivateKeys(t, count)
45+
// CONSIDERATION: using an iterator/generator would prevent unintentional
46+
// serviceURL collisions
47+
serviceURLs := SequentialServiceURLs(t, count)
48+
49+
require.GreaterOrEqualf(t, len(privKeys), len(serviceURLs), "not enough private keys for service URLs")
50+
51+
serviceURLKeysMap := make(map[string]crypto.PrivateKey, len(serviceURLs))
52+
53+
for i, serviceURL := range serviceURLs {
54+
serviceURLKeysMap[serviceURL] = privKeys[i]
55+
}
56+
return serviceURLKeysMap
57+
}
58+
59+
// CONSIDERATION: serviceURLs are only unique within their respective slice;
60+
// consider building an iterator/generator instead.
61+
func SequentialServiceURLs(t gocuke.TestingT, count int) (serviceURLs []string) {
62+
t.Helper()
63+
64+
for i := 0; i < count; i++ {
65+
serviceURLs = append(serviceURLs, NewServiceURL(i+1))
66+
}
67+
return serviceURLs
68+
}
69+
70+
// TECHDEBT: rename `validatorId()` to `serviceURL()`
71+
func NewServiceURL(i int) string {
72+
return fmt.Sprintf(ServiceURLFormat, i)
73+
}

0 commit comments

Comments
 (0)