提交 78eb3493 作者: Henry

fixed Compatible and added a small test case

上级 2a5b3eaa
...@@ -194,7 +194,7 @@ func (s *Swarm) connVersionExchange(remote *conn.Conn) error { ...@@ -194,7 +194,7 @@ func (s *Swarm) connVersionExchange(remote *conn.Conn) error {
remote.Secure.Out <- our remote.Secure.Out <- our
sendMine = true sendMine = true
close(outBuf) // only send local version once close(outBuf) // only send local version once
log.Debug("[peer: %s] Send my version(%s) to %s", s.local, myVersion, remote.Peer) log.Debug("Send my version(%s) [to = %s]", myVersion, remote.Peer)
} }
case data, ok := <-remote.Secure.In: case data, ok := <-remote.Secure.In:
...@@ -202,8 +202,6 @@ func (s *Swarm) connVersionExchange(remote *conn.Conn) error { ...@@ -202,8 +202,6 @@ func (s *Swarm) connVersionExchange(remote *conn.Conn) error {
return fmt.Errorf("Error retrieving from conn: %v", remote.Peer) return fmt.Errorf("Error retrieving from conn: %v", remote.Peer)
} }
log.Debug("[peer: %s] Received message [from = %s]", s.local, remote.Peer)
remoteVersion = new(version.SemVer) remoteVersion = new(version.SemVer)
err = proto.Unmarshal(data, remoteVersion) err = proto.Unmarshal(data, remoteVersion)
if err != nil { if err != nil {
...@@ -211,16 +209,18 @@ func (s *Swarm) connVersionExchange(remote *conn.Conn) error { ...@@ -211,16 +209,18 @@ func (s *Swarm) connVersionExchange(remote *conn.Conn) error {
return fmt.Errorf("connSetup: could not decode remote version: %q", err) return fmt.Errorf("connSetup: could not decode remote version: %q", err)
} }
gotTheirs = true gotTheirs = true
log.Debug("Received remote version(%s) [from = %s]", remoteVersion, remote.Peer)
// BUG(cryptix): could add another case here to trigger resending our version // BUG(cryptix): could add another case here to trigger resending our version
} }
} }
if !version.Compatible(myVersion, remoteVersion) { if !version.Compatible(myVersion.Convert(), remoteVersion.Convert()) {
remote.Close() remote.Close()
return errors.New("protocol missmatch") return errors.New("protocol missmatch")
} }
log.Debug("[peer: %s] Version compatible", remote.Peer)
return nil return nil
} }
......
...@@ -14,10 +14,8 @@ func Current() *SemVer { ...@@ -14,10 +14,8 @@ func Current() *SemVer {
} }
// Compatible checks wether two versions are compatible // Compatible checks wether two versions are compatible
func Compatible(a, b *SemVer) bool { func Compatible(a, b semver.Version) bool {
aConv := fromPBSemVer(a) return !a.LessThan(b)
bConv := fromPBSemVer(b)
return aConv.LessThan(*bConv)
} }
// toPBSemVar converts a coreos/semver to our protobuf SemVer // toPBSemVar converts a coreos/semver to our protobuf SemVer
...@@ -30,9 +28,9 @@ func toPBSemVer(in *semver.Version) (out *SemVer) { ...@@ -30,9 +28,9 @@ func toPBSemVer(in *semver.Version) (out *SemVer) {
} }
} }
// toPBSemVar converts our protobuf SemVer to a coreos/semver // Convert our protobuf SemVer to a coreos/semver
func fromPBSemVer(in *SemVer) *semver.Version { func (in SemVer) Convert() semver.Version {
return &semver.Version{ return semver.Version{
Major: *in.Major, Major: *in.Major,
Minor: *in.Minor, Minor: *in.Minor,
Patch: *in.Patch, Patch: *in.Patch,
......
package version
import (
"testing"
semver "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/coreos/go-semver/semver"
)
func TestCompatible(t *testing.T) {
tcases := []struct {
a, b semver.Version
expected bool
}{
{semver.Version{Major: 0}, semver.Version{Major: 0}, true},
{semver.Version{Major: 1}, semver.Version{Major: 0}, true},
{semver.Version{Major: 1}, semver.Version{Major: 1}, true},
{semver.Version{Major: 0}, semver.Version{Major: 1}, false},
}
for i, tcase := range tcases {
if Compatible(tcase.a, tcase.b) != tcase.expected {
t.Fatalf("case[%d] failed", i)
}
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论