@cryptotaxi247 / kubo / commits / a11c59dca

feat(peer) add Type (Unspecified, Local, Remote)

Brian Tiger Chow committed Nov 11, 2014 at 16:30 UTC a11c59dcacfd2d7f601f9b126e3822987459fef9
4 files changed +60
core/core.go
+5
@@ -211,6 +211,11 @@ func initIdentity(cfg *config.Identity, peers peer.Peerstore, online bool) (peer
211 if err != nil {
212 return nil, err
213 }
214 + self.SetType(peer.Local)
215 + self, err = peers.Add(self)
216 + if err != nil {
217 + return nil, err
218 + }
219
220 // when not online, don't need to parse private keys (yet)
221 if online {
core/core_test.go
+17
@@ -4,6 +4,7 @@ import (
4 "testing"
5
6 config "github.com/jbenet/go-ipfs/config"
7 + "github.com/jbenet/go-ipfs/peer"
8 )
9
10 func TestInitialization(t *testing.T) {
@@ -57,6 +58,22 @@ func TestInitialization(t *testing.T) {
58 }
59 }
60
61 +func TestPeerIsLocal(t *testing.T) {
62 + t.Log("Ensure that peer is Local after initializing identity")
63 +
64 + online := false
65 + peers := peer.NewPeerstore()
66 +
67 + cfg := testIdentity
68 + p, err := initIdentity(&cfg, peers, online)
69 + if err != nil {
70 + t.Fatal(err)
71 + }
72 + if p.GetType() != peer.Local {
73 + t.Fail()
74 + }
75 +}
76 +
77 var testIdentity = config.Identity{
78 PeerID: "QmNgdzLieYi8tgfo2WfTUzNVH5hQK9oAYGVf6dxN12NrHt",
79 PrivKey: "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",
peer/peer.go
+30
@@ -95,10 +95,23 @@ type Peer interface {
95 GetLatency() (out time.Duration)
96 SetLatency(laten time.Duration)
97
98 + // Get/SetType indicate whether this is a local or remote peer
99 + GetType() Type
100 + SetType(Type)
101 +
102 // Update with the data of another peer instance
103 Update(Peer) error
104 }
105
106 +type Type uint8
107 +
108 +const (
109 + // Unspecified indicates peer was created without specifying Type
110 + Unspecified Type = iota
111 + Local
112 + Remote
113 +)
114 +
115 type peer struct {
116 id ID
117 addresses []ma.Multiaddr
@@ -111,6 +124,9 @@ type peer struct {
124 // within that package, map from ID to latency value.
125 latency time.Duration
126
127 + // typ can be Local, Remote, or Unspecified (default)
128 + typ Type
129 +
130 sync.RWMutex
131 }
132
@@ -222,6 +238,18 @@ func (p *peer) SetLatency(laten time.Duration) {
238 p.Unlock()
239 }
240
241 +func (p *peer) SetType(t Type) {
242 + p.Lock()
243 + p.typ = t
244 + defer p.Unlock()
245 +}
246 +
247 +func (p *peer) GetType() Type {
248 + p.Lock()
249 + defer p.Unlock()
250 + return p.typ
251 +}
252 +
253 // LoadAndVerifyKeyPair unmarshalls, loads a private/public key pair.
254 // Error if (a) unmarshalling fails, or (b) pubkey does not match id.
255 func (p *peer) LoadAndVerifyKeyPair(marshalled []byte) error {
@@ -306,6 +334,8 @@ func (p *peer) Update(other Peer) error {
334
335 p.SetLatency(other.GetLatency())
336
337 + p.SetType(other.GetType())
338 +
339 sk := other.PrivKey()
340 pk := other.PubKey()
341 p.Lock()
peer/peer_test.go
+8
@@ -55,3 +55,11 @@ func TestStringMethodWithSmallId(t *testing.T) {
55 }
56 p1.String()
57 }
58 +
59 +func TestDefaultType(t *testing.T) {
60 + t.Log("Ensure that peers are initialized to Unspecified by default")
61 + p := peer{}
62 + if p.GetType() != Unspecified {
63 + t.Fatalf("Peer's default type is was not `Unspecified`")
64 + }
65 +}