Fix IPMask marshalling

Fix marshalling and add test

Signed-off-by: Flavio Crisciani <flavio.crisciani@docker.com>
This commit is contained in:
Flavio Crisciani 2017-10-03 17:12:57 -07:00
parent 1bb664f689
commit 1fe48e8608
2 changed files with 42 additions and 9 deletions

View File

@ -27,11 +27,13 @@ type peerEntry struct {
} }
func (p *peerEntry) MarshalDB() peerEntryDB { func (p *peerEntry) MarshalDB() peerEntryDB {
ones, bits := p.peerIPMask.Size()
return peerEntryDB{ return peerEntryDB{
eid: p.eid, eid: p.eid,
vtep: p.vtep.String(), vtep: p.vtep.String(),
peerIPMask: p.peerIPMask.String(), peerIPMaskOnes: ones,
isLocal: p.isLocal, peerIPMaskBits: bits,
isLocal: p.isLocal,
} }
} }
@ -39,17 +41,18 @@ func (p *peerEntry) MarshalDB() peerEntryDB {
// the value inserted in the set has to be Hashable so the []byte had to be converted into // the value inserted in the set has to be Hashable so the []byte had to be converted into
// strings // strings
type peerEntryDB struct { type peerEntryDB struct {
eid string eid string
vtep string vtep string
peerIPMask string peerIPMaskOnes int
isLocal bool peerIPMaskBits int
isLocal bool
} }
func (p *peerEntryDB) UnMarshalDB() peerEntry { func (p *peerEntryDB) UnMarshalDB() peerEntry {
return peerEntry{ return peerEntry{
eid: p.eid, eid: p.eid,
vtep: net.ParseIP(p.vtep), vtep: net.ParseIP(p.vtep),
peerIPMask: net.IPMask(net.ParseIP(p.peerIPMask)), peerIPMask: net.CIDRMask(p.peerIPMaskOnes, p.peerIPMaskBits),
isLocal: p.isLocal, isLocal: p.isLocal,
} }
} }

View File

@ -0,0 +1,30 @@
package overlay
import (
"net"
"testing"
_ "github.com/docker/libnetwork/testutils"
)
func TestPeerMarshal(t *testing.T) {
_, ipNet, _ := net.ParseCIDR("192.168.0.1/24")
p := &peerEntry{eid: "eid",
isLocal: true,
peerIPMask: ipNet.Mask,
vtep: ipNet.IP}
entryDB := p.MarshalDB()
x := entryDB.UnMarshalDB()
if x.eid != p.eid {
t.Fatalf("Incorrect Unmarshalling for eid: %v != %v", x.eid, p.eid)
}
if x.isLocal != p.isLocal {
t.Fatalf("Incorrect Unmarshalling for isLocal: %v != %v", x.isLocal, p.isLocal)
}
if x.peerIPMask.String() != p.peerIPMask.String() {
t.Fatalf("Incorrect Unmarshalling for eid: %v != %v", x.peerIPMask, p.peerIPMask)
}
if x.vtep.String() != p.vtep.String() {
t.Fatalf("Incorrect Unmarshalling for eid: %v != %v", x.vtep, p.vtep)
}
}