rewrite value for protocols and add more tests

This commit is contained in:
Jeromy 2016-01-18 00:35:47 -08:00
parent a581da3f8f
commit ae64eb994b
2 changed files with 16 additions and 18 deletions

View File

@ -117,28 +117,15 @@ func (m *multiaddr) Decapsulate(o Multiaddr) Multiaddr {
var ErrProtocolNotFound = fmt.Errorf("protocol not found in multiaddr")
func (m *multiaddr) ValueForProtocol(code int) (string, error) {
protos := m.Protocols()
found := -1
index := 2
for i, p := range protos {
if code == p.Code {
for _, sub := range Split(m) {
p := sub.Protocols()[0]
if p.Code == code {
if p.Size == 0 {
return "", nil
}
found = i
break
} else {
index += 2
if p.Size == 0 {
index--
}
return strings.Split(sub.String(), "/")[2], nil
}
}
if found == -1 {
return "", ErrProtocolNotFound
}
return strings.Split(m.String(), "/")[index], nil
return "", ErrProtocolNotFound
}

View File

@ -330,4 +330,15 @@ func TestGetValue(t *testing.T) {
default:
t.Fatalf("expected ErrProtocolNotFound but got: %s", err)
}
a = newMultiaddr(t, "/ip4/0.0.0.0") // only one addr
assertValueForProto(t, a, P_IP4, "0.0.0.0")
a = newMultiaddr(t, "/ip4/0.0.0.0/ip4/0.0.0.0/ip4/0.0.0.0") // same sub-addr
assertValueForProto(t, a, P_IP4, "0.0.0.0")
a = newMultiaddr(t, "/ip4/0.0.0.0/udp/12345/utp") // ending in a no-value one.
assertValueForProto(t, a, P_IP4, "0.0.0.0")
assertValueForProto(t, a, P_UDP, "12345")
assertValueForProto(t, a, P_UTP, "")
}