[NOD-1215] Added integration test for address exchange (#839)

* [NOD-1215] Added integration test for address exchange

* [NOD-1215] Fix error message
This commit is contained in:
Svarog 2020-08-03 10:34:21 +03:00 committed by GitHub
parent fa58623815
commit da90755530
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 78 additions and 2 deletions

View File

@ -132,6 +132,7 @@ func New(cfg *config.Config, databaseContext *dbaccess.DatabaseContext, interrup
protocolManager: protocolManager,
connectionManager: connectionManager,
netAdapter: netAdapter,
addressManager: addressManager,
}, nil
}
@ -235,6 +236,11 @@ func (a *App) P2PNodeID() *id.ID {
return a.netAdapter.ID()
}
// AddressManager returns the AddressManager associated with this App
func (a *App) AddressManager() *addressmanager.AddressManager {
return a.addressManager
}
// WaitForShutdown blocks until the main listener and peer handlers are stopped.
func (a *App) WaitForShutdown() {
// TODO(libp2p)

View File

@ -0,0 +1,32 @@
package integration
import (
"testing"
)
func TestAddressExchange(t *testing.T) {
appHarness1, appHarness2, appHarness3, teardown := standardSetup(t)
defer teardown()
testAddress := "1.2.3.4:6789"
err := appHarness1.app.AddressManager().AddAddressByIP(testAddress, nil)
if err != nil {
t.Fatalf("Error adding address to addressManager: %+v", err)
}
connect(t, appHarness1, appHarness2)
connect(t, appHarness2, appHarness3)
peerAddresses, err := appHarness3.rpcClient.GetPeerAddresses()
if err != nil {
t.Fatalf("Error getting peer addresses: %+v", err)
}
for _, peerAddress := range peerAddresses.Addresses {
if peerAddress.Addr == testAddress {
return
}
}
t.Errorf("Didn't find testAddress in list of addresses of appHarness3")
}

View File

@ -43,7 +43,7 @@ func setupHarness(t *testing.T, params *harnessParams) (harness *appHarness, tea
setRPCClient(t, harness)
return harness, func() {
teardown(t, harness)
teardownHarness(t, harness)
}
}
@ -95,7 +95,8 @@ func setRPCClient(t *testing.T, harness *appHarness) {
t.Fatalf("Error getting RPC client %+v", err)
}
}
func teardown(t *testing.T, harness *appHarness) {
func teardownHarness(t *testing.T, harness *appHarness) {
err := harness.app.Stop()
if err != nil {
t.Errorf("Error stopping App: %+v", err)

View File

@ -149,6 +149,43 @@ func (c *Client) GetConnectedPeerInfo() ([]model.GetConnectedPeerInfoResult, err
return c.GetConnectedPeerInfoAsync().Receive()
}
// FutureGetPeerAddresses is a future promise to deliver the result of a
// GetPeerAddresses RPC invocation (or an applicable error).
type FutureGetPeerAddresses chan *response
// Receive waits for the response promised by the future and returns data about
// peer addresses.
func (r FutureGetPeerAddresses) Receive() (*model.GetPeerAddressesResult, error) {
res, err := receiveFuture(r)
if err != nil {
return nil, err
}
// Unmarshal result as an array of getPeerAddresses result objects.
peerAddresses := &model.GetPeerAddressesResult{}
err = json.Unmarshal(res, peerAddresses)
if err != nil {
return nil, err
}
return peerAddresses, nil
}
// GetPeerAddressesAsync returns an instance of a type that can be used to get the
// result of the RPC at some future time by invoking the Receive function on the
// returned instance.
//
// See GetPeerAddresses for the blocking version and more details.
func (c *Client) GetPeerAddressesAsync() FutureGetPeerAddresses {
cmd := model.NewGetPeerAddressesCmd()
return c.sendCmd(cmd)
}
// GetPeerAddresses returns data about each connected network peer.
func (c *Client) GetPeerAddresses() (*model.GetPeerAddressesResult, error) {
return c.GetPeerAddressesAsync().Receive()
}
// FutureGetNetTotalsResult is a future promise to deliver the result of a
// GetNetTotalsAsync RPC invocation (or an applicable error).
type FutureGetNetTotalsResult chan *response