@cryptotaxi247 / kubo / commits / 78eb34936

fixed Compatible and added a small test case

Henry committed Oct 16, 2014 at 12:29 UTC 78eb349360d5b27d34cca8bdcedd5182f28bc0d6
3 files changed +34 -11
net/swarm/conn.go
+4 -4
@@ -194,7 +194,7 @@ func (s *Swarm) connVersionExchange(remote *conn.Conn) error {
194 remote.Secure.Out <- our
195 sendMine = true
196 close(outBuf) // only send local version once
197 - log.Debug("[peer: %s] Send my version(%s) to %s", s.local, myVersion, remote.Peer)
197 + log.Debug("Send my version(%s) [to = %s]", myVersion, remote.Peer)
198 }
199
200 case data, ok := <-remote.Secure.In:
@@ -202,8 +202,6 @@ func (s *Swarm) connVersionExchange(remote *conn.Conn) error {
202 return fmt.Errorf("Error retrieving from conn: %v", remote.Peer)
203 }
204
205 - log.Debug("[peer: %s] Received message [from = %s]", s.local, remote.Peer)
206 -
205 remoteVersion = new(version.SemVer)
206 err = proto.Unmarshal(data, remoteVersion)
207 if err != nil {
@@ -211,16 +209,18 @@ func (s *Swarm) connVersionExchange(remote *conn.Conn) error {
209 return fmt.Errorf("connSetup: could not decode remote version: %q", err)
210 }
211 gotTheirs = true
212 + log.Debug("Received remote version(%s) [from = %s]", remoteVersion, remote.Peer)
213
214 // BUG(cryptix): could add another case here to trigger resending our version
215 }
216 }
217
219 - if !version.Compatible(myVersion, remoteVersion) {
218 + if !version.Compatible(myVersion.Convert(), remoteVersion.Convert()) {
219 remote.Close()
220 return errors.New("protocol missmatch")
221 }
222
223 + log.Debug("[peer: %s] Version compatible", remote.Peer)
224 return nil
225 }
226
net/version/version.go
+5 -7
@@ -14,10 +14,8 @@ func Current() *SemVer {
14 }
15
16 // Compatible checks wether two versions are compatible
17 -func Compatible(a, b *SemVer) bool {
18 - aConv := fromPBSemVer(a)
19 - bConv := fromPBSemVer(b)
20 - return aConv.LessThan(*bConv)
17 +func Compatible(a, b semver.Version) bool {
18 + return !a.LessThan(b)
19 }
20
21 // toPBSemVar converts a coreos/semver to our protobuf SemVer
@@ -30,9 +28,9 @@ func toPBSemVer(in *semver.Version) (out *SemVer) {
28 }
29 }
30
33 -// toPBSemVar converts our protobuf SemVer to a coreos/semver
34 -func fromPBSemVer(in *SemVer) *semver.Version {
35 - return &semver.Version{
31 +// Convert our protobuf SemVer to a coreos/semver
32 +func (in SemVer) Convert() semver.Version {
33 + return semver.Version{
34 Major: *in.Major,
35 Minor: *in.Minor,
36 Patch: *in.Patch,
net/version/version_test.go new
+25
@@ -0,0 +1,25 @@
1 +package version
2 +
3 +import (
4 + "testing"
5 +
6 + semver "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/coreos/go-semver/semver"
7 +)
8 +
9 +func TestCompatible(t *testing.T) {
10 + tcases := []struct {
11 + a, b semver.Version
12 + expected bool
13 + }{
14 + {semver.Version{Major: 0}, semver.Version{Major: 0}, true},
15 + {semver.Version{Major: 1}, semver.Version{Major: 0}, true},
16 + {semver.Version{Major: 1}, semver.Version{Major: 1}, true},
17 + {semver.Version{Major: 0}, semver.Version{Major: 1}, false},
18 + }
19 +
20 + for i, tcase := range tcases {
21 + if Compatible(tcase.a, tcase.b) != tcase.expected {
22 + t.Fatalf("case[%d] failed", i)
23 + }
24 + }
25 +}