diff options
author | Viktor TrĂ³n <viktor.tron@gmail.com> | 2018-06-22 05:00:43 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-06-22 05:00:43 +0800 |
commit | eaff89291ce998ba4bf9b9816ca8a15c8b85f440 (patch) | |
tree | c77d7a06627a1a7f578d0fec8e39788e66672e53 /swarm/network/hive_test.go | |
parent | d926bf2c7e3182d694c15829a37a0ca7331cd03c (diff) | |
parent | e187711c6545487d4cac3701f0f506bb536234e2 (diff) | |
download | dexon-eaff89291ce998ba4bf9b9816ca8a15c8b85f440.tar dexon-eaff89291ce998ba4bf9b9816ca8a15c8b85f440.tar.gz dexon-eaff89291ce998ba4bf9b9816ca8a15c8b85f440.tar.bz2 dexon-eaff89291ce998ba4bf9b9816ca8a15c8b85f440.tar.lz dexon-eaff89291ce998ba4bf9b9816ca8a15c8b85f440.tar.xz dexon-eaff89291ce998ba4bf9b9816ca8a15c8b85f440.tar.zst dexon-eaff89291ce998ba4bf9b9816ca8a15c8b85f440.zip |
Merge pull request #17041 from ethersphere/swarm-network-rewrite-merge
Swarm POC3 - happy solstice
Diffstat (limited to 'swarm/network/hive_test.go')
-rw-r--r-- | swarm/network/hive_test.go | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/swarm/network/hive_test.go b/swarm/network/hive_test.go new file mode 100644 index 000000000..c2abfb2aa --- /dev/null +++ b/swarm/network/hive_test.go @@ -0,0 +1,108 @@ +// Copyright 2016 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>. + +package network + +import ( + "io/ioutil" + "log" + "os" + "testing" + + p2ptest "github.com/ethereum/go-ethereum/p2p/testing" + "github.com/ethereum/go-ethereum/swarm/state" +) + +func newHiveTester(t *testing.T, params *HiveParams, n int, store state.Store) (*bzzTester, *Hive) { + // setup + addr := RandomAddr() // tested peers peer address + to := NewKademlia(addr.OAddr, NewKadParams()) + pp := NewHive(params, to, store) // hive + + return newBzzBaseTester(t, n, addr, DiscoverySpec, pp.Run), pp +} + +func TestRegisterAndConnect(t *testing.T) { + params := NewHiveParams() + s, pp := newHiveTester(t, params, 1, nil) + + id := s.IDs[0] + raddr := NewAddrFromNodeID(id) + pp.Register([]OverlayAddr{OverlayAddr(raddr)}) + + // start the hive and wait for the connection + err := pp.Start(s.Server) + if err != nil { + t.Fatal(err) + } + defer pp.Stop() + // retrieve and broadcast + err = s.TestDisconnected(&p2ptest.Disconnect{ + Peer: s.IDs[0], + Error: nil, + }) + + if err == nil || err.Error() != "timed out waiting for peers to disconnect" { + t.Fatalf("expected peer to connect") + } +} + +func TestHiveStatePersistance(t *testing.T) { + log.SetOutput(os.Stdout) + + dir, err := ioutil.TempDir("", "hive_test_store") + if err != nil { + panic(err) + } + defer os.RemoveAll(dir) + + store, err := state.NewDBStore(dir) //start the hive with an empty dbstore + + params := NewHiveParams() + s, pp := newHiveTester(t, params, 5, store) + + peers := make(map[string]bool) + for _, id := range s.IDs { + raddr := NewAddrFromNodeID(id) + pp.Register([]OverlayAddr{OverlayAddr(raddr)}) + peers[raddr.String()] = true + } + + // start the hive and wait for the connection + err = pp.Start(s.Server) + if err != nil { + t.Fatal(err) + } + pp.Stop() + store.Close() + + persistedStore, err := state.NewDBStore(dir) //start the hive with an empty dbstore + + s1, pp := newHiveTester(t, params, 1, persistedStore) + + //start the hive and wait for the connection + + pp.Start(s1.Server) + i := 0 + pp.Overlay.EachAddr(nil, 256, func(addr OverlayAddr, po int, nn bool) bool { + delete(peers, addr.(*BzzAddr).String()) + i++ + return true + }) + if len(peers) != 0 || i != 5 { + t.Fatalf("invalid peers loaded") + } +} |