Add conformance testing
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 ```
Showing
codecov.yml
0 → 100644
multiaddr/main.go
0 → 100644
Please register or sign in to comment