Skip to content

Commit e1825f7

Browse files
author
Lars Gierth
authored
Merge pull request #99 from multiformats/feat/bin
Add conformance testing
2 parents 0460aad + 2df5aa6 commit e1825f7

File tree

5 files changed

+111
-3
lines changed

5 files changed

+111
-3
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
11
.vscode/
2+
multiaddr/multiaddr
3+
tmp/

.travis.yml

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ go:
99
env:
1010
global:
1111
- GOTFLAGS="-race"
12+
- GO111MODULE=on
1213
matrix:
13-
- BUILD_DEPTYPE=gx
1414
- BUILD_DEPTYPE=gomod
1515

1616

@@ -20,11 +20,10 @@ install:
2020

2121
script:
2222
- bash <(curl -s https://raw.githubusercontent.com/ipfs/ci-helpers/master/travis-ci/run-standard-tests.sh)
23-
23+
- make conformance
2424

2525
cache:
2626
directories:
27-
- $GOPATH/src/gx
2827
- $GOPATH/pkg/mod
2928
- /home/travis/.cache/go-build
3029

Makefile

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,15 @@ deps: gx covertools
1212
publish:
1313
gx-go rewrite --undo
1414

15+
conformance: tmp/multiaddr
16+
go build -o tmp/multiaddr/test/go-multiaddr ./multiaddr
17+
cd tmp/multiaddr/test && MULTIADDR_BIN="./go-multiaddr" go test -v
18+
19+
tmp/multiaddr:
20+
mkdir -p tmp/
21+
git clone https://github.com/multiformats/multiaddr tmp/multiaddr/
22+
23+
clean:
24+
rm -rf tmp/
25+
26+
.PHONY: gx covertools deps publish conformance clean

codecov.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
ignore:
2+
- "multiaddr"

multiaddr/main.go

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
package main
2+
3+
import (
4+
"encoding/hex"
5+
"flag"
6+
"fmt"
7+
"os"
8+
"strings"
9+
10+
maddr "github.com/multiformats/go-multiaddr"
11+
)
12+
13+
var (
14+
flagHelp bool
15+
)
16+
17+
func main() {
18+
flag.Usage = func() {
19+
usage := `usage: %s [options] ADDR
20+
21+
Print details about the given multiaddr.
22+
23+
Options:
24+
`
25+
fmt.Fprintf(os.Stderr, usage, os.Args[0])
26+
flag.PrintDefaults()
27+
}
28+
29+
flag.BoolVar(&flagHelp, "h", false, "display help message")
30+
flag.Parse()
31+
32+
if flagHelp || len(flag.Args()) == 0 {
33+
flag.Usage()
34+
os.Exit(0)
35+
}
36+
37+
addrStr := flag.Args()[0]
38+
var addr maddr.Multiaddr
39+
var err error
40+
if strings.HasPrefix(addrStr, "0x") {
41+
addrBytes, err := hex.DecodeString(addrStr[2:])
42+
if err != nil {
43+
fmt.Fprintf(os.Stderr, "parse error: %s\n", err)
44+
os.Exit(1)
45+
}
46+
addr, err = maddr.NewMultiaddrBytes(addrBytes)
47+
} else {
48+
addr, err = maddr.NewMultiaddr(addrStr)
49+
}
50+
if err != nil {
51+
fmt.Fprintf(os.Stderr, "parse error: %s\n", err)
52+
os.Exit(1)
53+
}
54+
55+
infoCommand(addr)
56+
}
57+
58+
func infoCommand(addr maddr.Multiaddr) {
59+
var compsJson []string
60+
maddr.ForEach(addr, func(comp maddr.Component) bool {
61+
lengthPrefix := ""
62+
if comp.Protocol().Size == maddr.LengthPrefixedVarSize {
63+
lengthPrefix = "0x" + hex.EncodeToString(maddr.CodeToVarint(len(comp.RawValue())))
64+
}
65+
66+
compsJson = append(compsJson, `{`+
67+
fmt.Sprintf(`"string": "%s", `, comp.String())+
68+
fmt.Sprintf(`"stringSize": "%d", `, len(comp.String()))+
69+
fmt.Sprintf(`"packed": "0x%x", `, comp.Bytes())+
70+
fmt.Sprintf(`"packedSize": "%d", `, len(comp.Bytes()))+
71+
fmt.Sprintf(`"value": %#v, `, comp.Value())+
72+
fmt.Sprintf(`"rawValue": "0x%x", `, comp.RawValue())+
73+
fmt.Sprintf(`"valueSize": "%d", `, len(comp.RawValue()))+
74+
fmt.Sprintf(`"protocol": "%s", `, comp.Protocol().Name)+
75+
fmt.Sprintf(`"codec": "%d", `, comp.Protocol().Code)+
76+
fmt.Sprintf(`"uvarint": "0x%x", `, comp.Protocol().VCode)+
77+
fmt.Sprintf(`"lengthPrefix": "%s"`, lengthPrefix)+
78+
`}`)
79+
return true
80+
})
81+
82+
addrJson := `{
83+
"string": "%[1]s",
84+
"stringSize": "%[2]d",
85+
"packed": "0x%[3]x",
86+
"packedSize": "%[4]d",
87+
"components": [
88+
%[5]s
89+
]
90+
}`
91+
fmt.Fprintf(os.Stdout, addrJson+"\n",
92+
addr.String(), len(addr.String()), addr.Bytes(), len(addr.Bytes()), strings.Join(compsJson, ",\n "))
93+
}

0 commit comments

Comments
 (0)