This patch adds a go-multiaddr CLI to aid in testing this
implementation of multiaddr. It takes a multiaddr in string or
packed form as input, and prints detailed information about the
multiaddr. This tool can be useful beyond testing, of course.
Another addition is a Makefile target for running the new
multiaddr conformance test suite. This test suite lives at
https://github.com/multiformats/multiaddr and is fetched to be
run against our new go-multiaddr CLI. This target is to be run in CI
Neither the test suite nor the CLI are complete yet.
Currently the output looks like this:
```
> go run ./multiaddr /ip4/192.0.2.42/tcp/443 | jq .
{
"string": "/ip4/192.0.2.42/tcp/443",
"stringSize": "23",
"packed": "0x04c000022a0601bb",
"packedSize": "8",
"components": [
{
"string": "/ip4/192.0.2.42",
"stringSize": "15",
"packed": "0x04c000022a",
"packedSize": "5",
"value": "192.0.2.42",
"rawValue": "0xc000022a",
"valueSize": "4",
"protocol": "ip4",
"codec": "4",
"uvarint": "0x04",
"lengthPrefix": ""
},
{
"string": "/tcp/443",
"stringSize": "8",
"packed": "0x0601bb",
"packedSize": "3",
"value": "443",
"rawValue": "0x01bb",
"valueSize": "2",
"protocol": "tcp",
"codec": "6",
"uvarint": "0x06",
"lengthPrefix": ""
}
]
}
```
And the Makefile target:
```
> make conformance
go get -d -v .
go build -o tmp/multiaddr/test/go-multiaddr ./multiaddr
cd tmp/multiaddr/test && MULTIADDR_BIN="./go-multiaddr" go test -v
=== RUN TestGodog
MULTIADDR_BIN="./go-multiaddr"
Feature: Multiaddr
Scenario: Banana # multiaddr.feature:3
Given the multiaddr /ip4/192.0.2.42/tcp/443 # main_test.go:81 -> github.com/multiformats/multiaddr/test_test.theMultiaddr
Then the packed form is 0x04c000022a0601bb # main_test.go:98 -> github.com/multiformats/multiaddr/test_test.thePackedFormIs
And the packed size is 8 bytes # main_test.go:105 -> github.com/multiformats/multiaddr/test_test.thePackedSizeIs
And the components are: # main_test.go:126 -> github.com/multiformats/multiaddr/test_test.theComponentsAre
| string | stringSize | packed | packedSize | value | valueSize | protocol | codec | uvarint | lengthPrefix | rawValue |
| /ip4/192.0.2.42 | 15 | 0x04c000022a | 5 | 192.0.2.42 | 4 | ip4 | 4 | 0x04 | | 0xc000022a |
| /tcp/443 | 8 | 0x0601bb | 3 | 443 | 2 | tcp | 6 | 0x06 | | 0x01bb |
Scenario: Banana #2 # multiaddr.feature:12
Given the multiaddr 0x04c000022a0601bb # main_test.go:81 -> github.com/multiformats/multiaddr/test_test.theMultiaddr
Then the string form is /ip4/192.0.2.42/tcp/443 # main_test.go:112 -> github.com/multiformats/multiaddr/test_test.theStringFormIs
And the string size is 23 bytes # main_test.go:119 -> github.com/multiformats/multiaddr/test_test.theStringSizeIs
And the components are: # main_test.go:126 -> github.com/multiformats/multiaddr/test_test.theComponentsAre
| string | stringSize | packed | packedSize | value | valueSize | protocol | codec | uvarint | lengthPrefix | rawValue |
| /ip4/192.0.2.42 | 15 | 0x04c000022a | 5 | 192.0.2.42 | 4 | ip4 | 4 | 0x04 | | 0xc000022a |
| /tcp/443 | 8 | 0x0601bb | 3 | 443 | 2 | tcp | 6 | 0x06 | | 0x01bb |
2 scenarios (2 passed)
8 steps (8 passed)
3.187755ms
--- PASS: TestGodog (0.00s)
PASS
ok github.com/multiformats/multiaddr/test 0.012s
```