From aeb96b8ebab069420c3386a08776e582fd1a036e Mon Sep 17 00:00:00 2001 From: Carsten Bormann Date: Fri, 1 Sep 2023 14:30:59 +0200 Subject: [PATCH 1/7] Make tests available as JSON and as CSV (RFC 4180) Makefile assumes that editing happens in CSV json-to-csv.rb can be called manually after an edit to the JSON --- tests/Makefile | 18 ++++++++ tests/README.md | 21 +++++++++ tests/csv-to-json.rb | 54 +++++++++++++++++++++++ tests/json-to-csv.rb | 72 ++++++++++++++++++++++++++++++ tests/tests.csv | 102 +++++++++++++++++++++++++++++++++++++++++++ tests/tests.json | 4 +- 6 files changed, 269 insertions(+), 2 deletions(-) create mode 100644 tests/Makefile create mode 100644 tests/csv-to-json.rb create mode 100644 tests/json-to-csv.rb create mode 100644 tests/tests.csv diff --git a/tests/Makefile b/tests/Makefile new file mode 100644 index 0000000..9271fe2 --- /dev/null +++ b/tests/Makefile @@ -0,0 +1,18 @@ +all: check + +# find out what has changed +check: tests.csv + ruby csv-to-json.rb $< | diff tests.json - + echo OK + +# Call this explicitly to overwrite tests.json +tests.json: tests.csv + ruby csv-to-json.rb $< >$@.new + mv $@ $@.bak + mv $@.new $@ + +# Call this explicitly and then manually move to tests.csv +new-tests.csv: tests.json + ruby json-to-csv.rb $< >$@ + -diff $@ tests.csv + diff --git a/tests/README.md b/tests/README.md index 6951141..5d644a4 100644 --- a/tests/README.md +++ b/tests/README.md @@ -22,6 +22,27 @@ Each test vector is organized as follows: | `resolved-cri` | hex-encoded CBOR representation of the resolved CRI reference relative to the [base CRI](#bases) | | `resolved-uri` | resolved URI relative to the [base URI](#bases) | +### Test Vector CSV Layout + +The test vectors are assembled in a CSV (RFC 4180) +comma-separated-value file. + +The columns are: + +| Key Name | Description | +| --- | --- | +| `type` | kind of test: `ok`, `fail`; special value `base` | +| `uri` | a URI reference | +| `cri` | hex-encoded CBOR representation of the CRI reference corresponding to `uri` | +| `cri-diag` | `cri` in CBOR diagnostic format | +| `uri-from-cri` | the URI obtained translating the CRI reference `cri`, or "=" if identical to `uri` | +| `resolved-cri` | hex-encoded CBOR representation of the resolved CRI reference relative to the [base CRI](#bases) | +| `resolved-cri-diag` | `resolved-cri` in CBOR diagnostic format | +| `resolved-uri` | resolved URI relative to the [base URI](#bases) | + +An initial line with type `base` gives the base URI and CRI applied, see above. + + ## Test Logics ### CBOR deserialization diff --git a/tests/csv-to-json.rb b/tests/csv-to-json.rb new file mode 100644 index 0000000..0aeeb30 --- /dev/null +++ b/tests/csv-to-json.rb @@ -0,0 +1,54 @@ +require 'cbor-cri' +require 'cbor-diagnostic' +require 'treetop' +require 'cbor-diag-parser' +require 'sid-csv' # steal from sid-csv gem +include CSV::SID + +class String + def hexi + bytes.map{|x| "%02x" % x}.join + end + def hexs + bytes.map{|x| "%02x" % x}.join(" ") + end + def xeh + gsub(/\s/, "").chars.each_slice(2).map{ |x| Integer(x.join, 16).chr("BINARY") }.join + end +end + +def hex_to_cri(h) + CBOR::CRI.new(*CBOR.decode(h.xeh)) +end + +def hex_to_diag(h) + CBOR.decode(h.xeh).cbor_diagnostic +end + +def diag_to_hex(d) + parser = CBOR_DIAGParser.new + parser.parse(d).to_rb.to_cbor.hexi +end + +test_data = {} + +tv = [] + +CSV.read("tests.csv").each do |row| + case row + in ["base", baseuri, basecri_diag] + test_data["base-uri"] = baseuri + test_data["base-cri"] = diag_to_hex(basecri_diag) + test_data["test-vectors"] = tv + in ["ok", uri_in, cri_in_diag, uri_from_cri_opt, resolved_cri_diag, resolved_uri] + tv << { + "uri" => uri_in, + "cri" => diag_to_hex(cri_in_diag), + "uri-from-cri" => (uri_from_cri_opt == "=" ? uri_in : uri_from_cri_opt), + "resolved-cri" => diag_to_hex(resolved_cri_diag), + "resolved-uri" => resolved_uri, + } + end +end + +puts JSON.pretty_generate(test_data) diff --git a/tests/json-to-csv.rb b/tests/json-to-csv.rb new file mode 100644 index 0000000..00f4eb2 --- /dev/null +++ b/tests/json-to-csv.rb @@ -0,0 +1,72 @@ +require 'cbor-cri' +require 'cbor-diagnostic' +require 'sid-csv' # steal from sid-csv gem +include CSV::SID + +class String + def hexi + bytes.map{|x| "%02x" % x}.join + end + def hexs + bytes.map{|x| "%02x" % x}.join(" ") + end + def xeh + gsub(/\s/, "").chars.each_slice(2).map{ |x| Integer(x.join, 16).chr("BINARY") }.join + end +end + +def hex_to_cri(h) + CBOR::CRI.new(*CBOR.decode(h.xeh)) +end + +def hex_to_diag(h) + CBOR.decode(h.xeh).cbor_diagnostic +end + + + +test_data = JSON.load_file("tests.json") + +baseuri = test_data["base-uri"] +basecri_hex = test_data["base-cri"] +basecri_diag = hex_to_diag(basecri_hex) +basecri = hex_to_cri(basecri_hex) + +data = [ + ["base", baseuri, # basecri_hex, + basecri_diag] +] + +tests = test_data["test-vectors"] +tests.each do |td| + uri_in = td["uri"] + cri_in = td["cri"] + uri_from_cri = td["uri-from-cri"] + resolved_cri = td["resolved-cri"] + resolved_uri = td["resolved-uri"] + data << [ + "ok", uri_in, # cri_in, + hex_to_diag(cri_in), + (uri_from_cri == uri_in ? "=" : uri_from_cri), + # resolved_cri, + hex_to_diag(resolved_cri), resolved_uri, + ] +end + + +=begin +| Key Name | Description | +| --- | --- | +| `type` | kind of test: `ok`, `fail`; special value `base` | +| `uri` | a URI reference | +| `cri` | hex-encoded CBOR representation of the CRI reference corresponding to `uri` | +| `cri-diag` | `cri` in CBOR diagnostic format | +| `uri-from-cri` | the URI obtained translating the CRI reference `cri`, or "=" if identical to `uri` | +| `resolved-cri` | hex-encoded CBOR representation of the resolved CRI reference relative to the [base CRI](#bases) | +| `resolved-cri-diag` | `resolved-cri` in CBOR diagnostic format | +| `resolved-uri` | resolved URI relative to the [base URI](#bases) + +=end | + + +puts csv_generate(data) diff --git a/tests/tests.csv b/tests/tests.csv new file mode 100644 index 0000000..5707316 --- /dev/null +++ b/tests/tests.csv @@ -0,0 +1,102 @@ +base,coaps://foo:4711/pa/th?query#frag,"[-2, [""foo"", 4711], [""pa"", ""th""], [""query""], ""frag""]" +ok,"",[0],=,"[-2, [""foo"", 4711], [""pa"", ""th""], [""query""], ""frag""]",coaps://foo:4711/pa/th?query#frag +ok,//a,"[null, [""a""]]",=,"[-2, [""a""]]",coaps://a +ok,//192.168.0.97,"[null, [h'C0A80061']]",=,"[-2, [h'C0A80061']]",coaps://192.168.0.97 +ok,"",[0],=,"[-2, [""foo"", 4711], [""pa"", ""th""], [""query""], ""frag""]",coaps://foo:4711/pa/th?query#frag +ok,/,"[true, [""""]]",=,"[-2, [""foo"", 4711], [""""]]",coaps://foo:4711/ +ok,/a,"[true, [""a""]]",=,"[-2, [""foo"", 4711], [""a""]]",coaps://foo:4711/a +ok,?a,"[0, null, [""a""]]",=,"[-2, [""foo"", 4711], [""pa"", ""th""], [""a""]]",coaps://foo:4711/pa/th?a +ok,#a,"[0, null, null, ""a""]",=,"[-2, [""foo"", 4711], [""pa"", ""th""], [""query""], ""a""]",coaps://foo:4711/pa/th?query#a +ok,a,"[1, [""a""]]",=,"[-2, [""foo"", 4711], [""pa"", ""a""]]",coaps://foo:4711/pa/a +ok,a/b,"[1, [""a"", ""b""]]",=,"[-2, [""foo"", 4711], [""pa"", ""a"", ""b""]]",coaps://foo:4711/pa/a/b +ok,a/./b,"[1, [""a"", ""b""]]",a/b,"[-2, [""foo"", 4711], [""pa"", ""a"", ""b""]]",coaps://foo:4711/pa/a/b +ok,./a/b,"[1, [""a"", ""b""]]",a/b,"[-2, [""foo"", 4711], [""pa"", ""a"", ""b""]]",coaps://foo:4711/pa/a/b +ok,../a,"[2, [""a""]]",=,"[-2, [""foo"", 4711], [""a""]]",coaps://foo:4711/a +ok,../a/b/../c/.,"[2, [""a"", ""c""]]",../a/c,"[-2, [""foo"", 4711], [""a"", ""c""]]",coaps://foo:4711/a/c +ok,"",[0],=,"[-2, [""foo"", 4711], [""pa"", ""th""], [""query""], ""frag""]",coaps://foo:4711/pa/th?query#frag +ok,a://b,"[""a"", [""b""]]",=,"[""a"", [""b""]]",a://b +ok,a://192.168.0.98,"[""a"", [h'C0A80062']]",=,"[""a"", [h'C0A80062']]",a://192.168.0.98 +ok,a:,"[""a""]",=,"[""a""]",a: +ok,a:b,"[""a"", true, [""b""]]",=,"[""a"", true, [""b""]]",a:b +ok,a:?b,"[""a"", null, null, [""b""]]",=,"[""a"", null, null, [""b""]]",a:?b +ok,a:/b,"[""a"", null, [""b""]]",=,"[""a"", null, [""b""]]",a:/b +ok,a:#b,"[""a"", null, null, null, ""b""]",=,"[""a"", null, null, null, ""b""]",a:#b +ok,//a:25186,"[null, [""a"", 25186]]",=,"[-2, [""a"", 25186]]",coaps://a:25186 +ok,//a/,"[null, [""a""], [""""]]",=,"[-2, [""a""], [""""]]",coaps://a/ +ok,//a/b,"[null, [""a""], [""b""]]",=,"[-2, [""a""], [""b""]]",coaps://a/b +ok,//a?b,"[null, [""a""], null, [""b""]]",=,"[-2, [""a""], null, [""b""]]",coaps://a?b +ok,//a#b,"[null, [""a""], null, null, ""b""]",=,"[-2, [""a""], null, null, ""b""]",coaps://a#b +ok,//192.168.0.97:25186,"[null, [h'C0A80061', 25186]]",=,"[-2, [h'C0A80061', 25186]]",coaps://192.168.0.97:25186 +ok,//192.168.0.97/,"[null, [h'C0A80061'], [""""]]",=,"[-2, [h'C0A80061'], [""""]]",coaps://192.168.0.97/ +ok,//192.168.0.97/b,"[null, [h'C0A80061'], [""b""]]",=,"[-2, [h'C0A80061'], [""b""]]",coaps://192.168.0.97/b +ok,//192.168.0.97?b,"[null, [h'C0A80061'], null, [""b""]]",=,"[-2, [h'C0A80061'], null, [""b""]]",coaps://192.168.0.97?b +ok,//192.168.0.97#b,"[null, [h'C0A80061'], null, null, ""b""]",=,"[-2, [h'C0A80061'], null, null, ""b""]",coaps://192.168.0.97#b +ok,"",[0],=,"[-2, [""foo"", 4711], [""pa"", ""th""], [""query""], ""frag""]",coaps://foo:4711/pa/th?query#frag +ok,/?b,"[true, [""""], [""b""]]",=,"[-2, [""foo"", 4711], [""""], [""b""]]",coaps://foo:4711/?b +ok,/#b,"[true, [""""], null, ""b""]",=,"[-2, [""foo"", 4711], [""""], null, ""b""]",coaps://foo:4711/#b +ok,/a/,"[true, [""a"", """"]]",=,"[-2, [""foo"", 4711], [""a"", """"]]",coaps://foo:4711/a/ +ok,/a/b,"[true, [""a"", ""b""]]",=,"[-2, [""foo"", 4711], [""a"", ""b""]]",coaps://foo:4711/a/b +ok,/a?b,"[true, [""a""], [""b""]]",=,"[-2, [""foo"", 4711], [""a""], [""b""]]",coaps://foo:4711/a?b +ok,/a#b,"[true, [""a""], null, ""b""]",=,"[-2, [""foo"", 4711], [""a""], null, ""b""]",coaps://foo:4711/a#b +ok,?a&b,"[0, null, [""a"", ""b""]]",=,"[-2, [""foo"", 4711], [""pa"", ""th""], [""a"", ""b""]]",coaps://foo:4711/pa/th?a&b +ok,?a#b,"[0, null, [""a""], ""b""]",=,"[-2, [""foo"", 4711], [""pa"", ""th""], [""a""], ""b""]",coaps://foo:4711/pa/th?a#b +ok,a://b:25443,"[""a"", [""b"", 25443]]",=,"[""a"", [""b"", 25443]]",a://b:25443 +ok,a://b/,"[""a"", [""b""], [""""]]",=,"[""a"", [""b""], [""""]]",a://b/ +ok,a://b/c,"[""a"", [""b""], [""c""]]",=,"[""a"", [""b""], [""c""]]",a://b/c +ok,a://b?c,"[""a"", [""b""], null, [""c""]]",=,"[""a"", [""b""], null, [""c""]]",a://b?c +ok,a://b#c,"[""a"", [""b""], null, null, ""c""]",=,"[""a"", [""b""], null, null, ""c""]",a://b#c +ok,a://192.168.0.98:25443,"[""a"", [h'C0A80062', 25443]]",=,"[""a"", [h'C0A80062', 25443]]",a://192.168.0.98:25443 +ok,a://192.168.0.98/,"[""a"", [h'C0A80062'], [""""]]",=,"[""a"", [h'C0A80062'], [""""]]",a://192.168.0.98/ +ok,a://192.168.0.98/c,"[""a"", [h'C0A80062'], [""c""]]",=,"[""a"", [h'C0A80062'], [""c""]]",a://192.168.0.98/c +ok,a://192.168.0.98?c,"[""a"", [h'C0A80062'], null, [""c""]]",=,"[""a"", [h'C0A80062'], null, [""c""]]",a://192.168.0.98?c +ok,a://192.168.0.98#c,"[""a"", [h'C0A80062'], null, null, ""c""]",=,"[""a"", [h'C0A80062'], null, null, ""c""]",a://192.168.0.98#c +ok,"",[0],=,"[-2, [""foo"", 4711], [""pa"", ""th""], [""query""], ""frag""]",coaps://foo:4711/pa/th?query#frag +ok,a:?c,"[""a"", null, null, [""c""]]",=,"[""a"", null, null, [""c""]]",a:?c +ok,a:#c,"[""a"", null, null, null, ""c""]",=,"[""a"", null, null, null, ""c""]",a:#c +ok,a:b/,"[""a"", true, [""b"", """"]]",=,"[""a"", true, [""b"", """"]]",a:b/ +ok,a:b/c,"[""a"", true, [""b"", ""c""]]",=,"[""a"", true, [""b"", ""c""]]",a:b/c +ok,a:b%3Fc,"[""a"", true, [""b?c""]]",=,"[""a"", true, [""b?c""]]",a:b%3Fc +ok,a:b?c,"[""a"", true, [""b""], [""c""]]",=,"[""a"", true, [""b""], [""c""]]",a:b?c +ok,a:b#c,"[""a"", true, [""b""], null, ""c""]",=,"[""a"", true, [""b""], null, ""c""]",a:b#c +ok,a:?b&c,"[""a"", null, null, [""b"", ""c""]]",=,"[""a"", null, null, [""b"", ""c""]]",a:?b&c +ok,a:?b#c,"[""a"", null, null, [""b""], ""c""]",=,"[""a"", null, null, [""b""], ""c""]",a:?b#c +ok,//a:25186/,"[null, [""a"", 25186], [""""]]",=,"[-2, [""a"", 25186], [""""]]",coaps://a:25186/ +ok,//a:25186/c,"[null, [""a"", 25186], [""c""]]",=,"[-2, [""a"", 25186], [""c""]]",coaps://a:25186/c +ok,//a:25186?c,"[null, [""a"", 25186], null, [""c""]]",=,"[-2, [""a"", 25186], null, [""c""]]",coaps://a:25186?c +ok,//a:25186#c,"[null, [""a"", 25186], null, null, ""c""]",=,"[-2, [""a"", 25186], null, null, ""c""]",coaps://a:25186#c +ok,"",[0],=,"[-2, [""foo"", 4711], [""pa"", ""th""], [""query""], ""frag""]",coaps://foo:4711/pa/th?query#frag +ok,//a/?c,"[null, [""a""], [""""], [""c""]]",=,"[-2, [""a""], [""""], [""c""]]",coaps://a/?c +ok,//a/#c,"[null, [""a""], [""""], null, ""c""]",=,"[-2, [""a""], [""""], null, ""c""]",coaps://a/#c +ok,//a/b/,"[null, [""a""], [""b"", """"]]",=,"[-2, [""a""], [""b"", """"]]",coaps://a/b/ +ok,//a/b/c,"[null, [""a""], [""b"", ""c""]]",=,"[-2, [""a""], [""b"", ""c""]]",coaps://a/b/c +ok,//a/b?c,"[null, [""a""], [""b""], [""c""]]",=,"[-2, [""a""], [""b""], [""c""]]",coaps://a/b?c +ok,//a/b#c,"[null, [""a""], [""b""], null, ""c""]",=,"[-2, [""a""], [""b""], null, ""c""]",coaps://a/b#c +ok,//a?b&c,"[null, [""a""], null, [""b"", ""c""]]",=,"[-2, [""a""], null, [""b"", ""c""]]",coaps://a?b&c +ok,//a?b#c,"[null, [""a""], null, [""b""], ""c""]",=,"[-2, [""a""], null, [""b""], ""c""]",coaps://a?b#c +ok,//192.168.0.97:25186/,"[null, [h'C0A80061', 25186], [""""]]",=,"[-2, [h'C0A80061', 25186], [""""]]",coaps://192.168.0.97:25186/ +ok,//192.168.0.97:25186/c,"[null, [h'C0A80061', 25186], [""c""]]",=,"[-2, [h'C0A80061', 25186], [""c""]]",coaps://192.168.0.97:25186/c +ok,//192.168.0.97:25186?c,"[null, [h'C0A80061', 25186], null, [""c""]]",=,"[-2, [h'C0A80061', 25186], null, [""c""]]",coaps://192.168.0.97:25186?c +ok,//192.168.0.97:25186#c,"[null, [h'C0A80061', 25186], null, null, ""c""]",=,"[-2, [h'C0A80061', 25186], null, null, ""c""]",coaps://192.168.0.97:25186#c +ok,"",[0],=,"[-2, [""foo"", 4711], [""pa"", ""th""], [""query""], ""frag""]",coaps://foo:4711/pa/th?query#frag +ok,//192.168.0.97/?c,"[null, [h'C0A80061'], [""""], [""c""]]",=,"[-2, [h'C0A80061'], [""""], [""c""]]",coaps://192.168.0.97/?c +ok,//192.168.0.97/#c,"[null, [h'C0A80061'], [""""], null, ""c""]",=,"[-2, [h'C0A80061'], [""""], null, ""c""]",coaps://192.168.0.97/#c +ok,//192.168.0.97/b/,"[null, [h'C0A80061'], [""b"", """"]]",=,"[-2, [h'C0A80061'], [""b"", """"]]",coaps://192.168.0.97/b/ +ok,//192.168.0.97/b/c,"[null, [h'C0A80061'], [""b"", ""c""]]",=,"[-2, [h'C0A80061'], [""b"", ""c""]]",coaps://192.168.0.97/b/c +ok,//192.168.0.97/b?c,"[null, [h'C0A80061'], [""b""], [""c""]]",=,"[-2, [h'C0A80061'], [""b""], [""c""]]",coaps://192.168.0.97/b?c +ok,//192.168.0.97/b#c,"[null, [h'C0A80061'], [""b""], null, ""c""]",=,"[-2, [h'C0A80061'], [""b""], null, ""c""]",coaps://192.168.0.97/b#c +ok,//192.168.0.97?b&c,"[null, [h'C0A80061'], null, [""b"", ""c""]]",=,"[-2, [h'C0A80061'], null, [""b"", ""c""]]",coaps://192.168.0.97?b&c +ok,//192.168.0.97?b#c,"[null, [h'C0A80061'], null, [""b""], ""c""]",=,"[-2, [h'C0A80061'], null, [""b""], ""c""]",coaps://192.168.0.97?b#c +ok,"",[0],=,"[-2, [""foo"", 4711], [""pa"", ""th""], [""query""], ""frag""]",coaps://foo:4711/pa/th?query#frag +ok,/?b&c,"[true, [""""], [""b"", ""c""]]",=,"[-2, [""foo"", 4711], [""""], [""b"", ""c""]]",coaps://foo:4711/?b&c +ok,/?b#c,"[true, [""""], [""b""], ""c""]",=,"[-2, [""foo"", 4711], [""""], [""b""], ""c""]",coaps://foo:4711/?b#c +ok,/a//,"[true, [""a"", """", """"]]",=,"[-2, [""foo"", 4711], [""a"", """", """"]]",coaps://foo:4711/a// +ok,/a//c,"[true, [""a"", """", ""c""]]",=,"[-2, [""foo"", 4711], [""a"", """", ""c""]]",coaps://foo:4711/a//c +ok,/a/?c,"[true, [""a"", """"], [""c""]]",=,"[-2, [""foo"", 4711], [""a"", """"], [""c""]]",coaps://foo:4711/a/?c +ok,/a/#c,"[true, [""a"", """"], null, ""c""]",=,"[-2, [""foo"", 4711], [""a"", """"], null, ""c""]",coaps://foo:4711/a/#c +ok,/a/b/,"[true, [""a"", ""b"", """"]]",=,"[-2, [""foo"", 4711], [""a"", ""b"", """"]]",coaps://foo:4711/a/b/ +ok,/a/b/c,"[true, [""a"", ""b"", ""c""]]",=,"[-2, [""foo"", 4711], [""a"", ""b"", ""c""]]",coaps://foo:4711/a/b/c +ok,/a/b?c,"[true, [""a"", ""b""], [""c""]]",=,"[-2, [""foo"", 4711], [""a"", ""b""], [""c""]]",coaps://foo:4711/a/b?c +ok,/a/b#c,"[true, [""a"", ""b""], null, ""c""]",=,"[-2, [""foo"", 4711], [""a"", ""b""], null, ""c""]",coaps://foo:4711/a/b#c +ok,/a?b&c,"[true, [""a""], [""b"", ""c""]]",=,"[-2, [""foo"", 4711], [""a""], [""b"", ""c""]]",coaps://foo:4711/a?b&c +ok,/a?b#c,"[true, [""a""], [""b""], ""c""]",=,"[-2, [""foo"", 4711], [""a""], [""b""], ""c""]",coaps://foo:4711/a?b#c +ok,?a&b&c,"[0, null, [""a"", ""b"", ""c""]]",=,"[-2, [""foo"", 4711], [""pa"", ""th""], [""a"", ""b"", ""c""]]",coaps://foo:4711/pa/th?a&b&c diff --git a/tests/tests.json b/tests/tests.json index 6d0bcbe..55e1e9b 100644 --- a/tests/tests.json +++ b/tests/tests.json @@ -403,9 +403,9 @@ }, { "uri": "a:b?c", - "cri": "846161F5816162816163", + "cri": "846161f5816162816163", "uri-from-cri": "a:b?c", - "resolved-cri": "846161F5816162816163", + "resolved-cri": "846161f5816162816163", "resolved-uri": "a:b?c" }, { From 0bd3157475241f2de68c0a008f1998e1c6e2904e Mon Sep 17 00:00:00 2001 From: Carsten Bormann Date: Fri, 1 Sep 2023 17:18:18 +0200 Subject: [PATCH 2/7] Remove cbor-cri dependency --- tests/csv-to-json.rb | 1 - tests/json-to-csv.rb | 6 ------ 2 files changed, 7 deletions(-) diff --git a/tests/csv-to-json.rb b/tests/csv-to-json.rb index 0aeeb30..f016103 100644 --- a/tests/csv-to-json.rb +++ b/tests/csv-to-json.rb @@ -1,4 +1,3 @@ -require 'cbor-cri' require 'cbor-diagnostic' require 'treetop' require 'cbor-diag-parser' diff --git a/tests/json-to-csv.rb b/tests/json-to-csv.rb index 00f4eb2..5c45e99 100644 --- a/tests/json-to-csv.rb +++ b/tests/json-to-csv.rb @@ -1,4 +1,3 @@ -require 'cbor-cri' require 'cbor-diagnostic' require 'sid-csv' # steal from sid-csv gem include CSV::SID @@ -15,10 +14,6 @@ def xeh end end -def hex_to_cri(h) - CBOR::CRI.new(*CBOR.decode(h.xeh)) -end - def hex_to_diag(h) CBOR.decode(h.xeh).cbor_diagnostic end @@ -30,7 +25,6 @@ def hex_to_diag(h) baseuri = test_data["base-uri"] basecri_hex = test_data["base-cri"] basecri_diag = hex_to_diag(basecri_hex) -basecri = hex_to_cri(basecri_hex) data = [ ["base", baseuri, # basecri_hex, From 2f3cef992525afcb02ace171c30a4d3139ee2923 Mon Sep 17 00:00:00 2001 From: Carsten Bormann Date: Fri, 1 Sep 2023 17:42:17 +0200 Subject: [PATCH 3/7] Add Gemfile for the dependencies of the small Ruby tools. --- .gitignore | 1 + tests/Gemfile | 4 ++++ tests/README.md | 5 +++++ 3 files changed, 10 insertions(+) create mode 100644 tests/Gemfile diff --git a/.gitignore b/.gitignore index 7755da2..681befc 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +*.lock *.html *.pdf *.redxml diff --git a/tests/Gemfile b/tests/Gemfile new file mode 100644 index 0000000..0f02d02 --- /dev/null +++ b/tests/Gemfile @@ -0,0 +1,4 @@ +source 'https://rubygems.org' +ruby '~> 3.0' +gem 'cbor-diag' +gem 'sid-csv' diff --git a/tests/README.md b/tests/README.md index 5d644a4..e3853c8 100644 --- a/tests/README.md +++ b/tests/README.md @@ -42,6 +42,11 @@ The columns are: An initial line with type `base` gives the base URI and CRI applied, see above. +Use the command + + bundle + +to install the dependencies. ## Test Logics From 19931bb8f00f5643521b1177a8bdf594bb1d1742 Mon Sep 17 00:00:00 2001 From: Carsten Bormann Date: Sun, 5 May 2024 22:57:07 +0200 Subject: [PATCH 4/7] Remove redundant tests from tests.json --- tests/tests.json | 49 ------------------------------------------------ 1 file changed, 49 deletions(-) diff --git a/tests/tests.json b/tests/tests.json index 55e1e9b..b37d272 100644 --- a/tests/tests.json +++ b/tests/tests.json @@ -23,13 +23,6 @@ "resolved-cri": "82218144c0a80061", "resolved-uri": "coaps://192.168.0.97" }, - { - "uri": "", - "cri": "8100", - "uri-from-cri": "", - "resolved-cri": "85218263666f6f19126782627061627468816571756572796466726167", - "resolved-uri": "coaps://foo:4711/pa/th?query#frag" - }, { "uri": "/", "cri": "82f58160", @@ -100,13 +93,6 @@ "resolved-cri": "83218263666f6f1912678261616163", "resolved-uri": "coaps://foo:4711/a/c" }, - { - "uri": "", - "cri": "8100", - "uri-from-cri": "", - "resolved-cri": "85218263666f6f19126782627061627468816571756572796466726167", - "resolved-uri": "coaps://foo:4711/pa/th?query#frag" - }, { "uri": "a://b", "cri": "826161816162", @@ -226,13 +212,6 @@ "resolved-cri": "85218144c0a80061f6f66162", "resolved-uri": "coaps://192.168.0.97#b" }, - { - "uri": "", - "cri": "8100", - "uri-from-cri": "", - "resolved-cri": "85218263666f6f19126782627061627468816571756572796466726167", - "resolved-uri": "coaps://foo:4711/pa/th?query#frag" - }, { "uri": "/?b", "cri": "83f58160816162", @@ -359,13 +338,6 @@ "resolved-cri": "8561618144c0a80062f6f66163", "resolved-uri": "a://192.168.0.98#c" }, - { - "uri": "", - "cri": "8100", - "uri-from-cri": "", - "resolved-cri": "85218263666f6f19126782627061627468816571756572796466726167", - "resolved-uri": "coaps://foo:4711/pa/th?query#frag" - }, { "uri": "a:?c", "cri": "846161f6f6816163", @@ -457,13 +429,6 @@ "resolved-cri": "8521826161196262f6f66163", "resolved-uri": "coaps://a:25186#c" }, - { - "uri": "", - "cri": "8100", - "uri-from-cri": "", - "resolved-cri": "85218263666f6f19126782627061627468816571756572796466726167", - "resolved-uri": "coaps://foo:4711/pa/th?query#frag" - }, { "uri": "//a/?c", "cri": "84f68161618160816163", @@ -548,13 +513,6 @@ "resolved-cri": "85218244c0a80061196262f6f66163", "resolved-uri": "coaps://192.168.0.97:25186#c" }, - { - "uri": "", - "cri": "8100", - "uri-from-cri": "", - "resolved-cri": "85218263666f6f19126782627061627468816571756572796466726167", - "resolved-uri": "coaps://foo:4711/pa/th?query#frag" - }, { "uri": "//192.168.0.97/?c", "cri": "84f68144c0a800618160816163", @@ -611,13 +569,6 @@ "resolved-cri": "85218144c0a80061f68161626163", "resolved-uri": "coaps://192.168.0.97?b#c" }, - { - "uri": "", - "cri": "8100", - "uri-from-cri": "", - "resolved-cri": "85218263666f6f19126782627061627468816571756572796466726167", - "resolved-uri": "coaps://foo:4711/pa/th?query#frag" - }, { "uri": "/?b&c", "cri": "83f581608261626163", From 021622cf3d9e1972086d596a8c74b6495a767a9e Mon Sep 17 00:00:00 2001 From: Carsten Bormann Date: Sun, 5 May 2024 22:57:40 +0200 Subject: [PATCH 5/7] Use updated tests.csv format: Use diagnostic notation; supply hex CBOR only as optional additional info --- tests/Gemfile | 1 + tests/Makefile | 5 +- tests/README.md | 22 +++-- tests/csv-to-json.rb | 38 +++++++-- tests/json-to-csv.rb | 134 ++++++++++++++++++++--------- tests/tests.csv | 198 +++++++++++++++++++++---------------------- 6 files changed, 240 insertions(+), 158 deletions(-) diff --git a/tests/Gemfile b/tests/Gemfile index 0f02d02..ef93c69 100644 --- a/tests/Gemfile +++ b/tests/Gemfile @@ -2,3 +2,4 @@ source 'https://rubygems.org' ruby '~> 3.0' gem 'cbor-diag' gem 'sid-csv' +gem 'cbor-cri' diff --git a/tests/Makefile b/tests/Makefile index 9271fe2..5c19c62 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -8,11 +8,12 @@ check: tests.csv # Call this explicitly to overwrite tests.json tests.json: tests.csv ruby csv-to-json.rb $< >$@.new - mv $@ $@.bak + -mv $@ $@.bak mv $@.new $@ # Call this explicitly and then manually move to tests.csv new-tests.csv: tests.json - ruby json-to-csv.rb $< >$@ + ruby json-to-csv.rb $< >$@.new + mv $@.new $@ -diff $@ tests.csv diff --git a/tests/README.md b/tests/README.md index e3853c8..4e3b420 100644 --- a/tests/README.md +++ b/tests/README.md @@ -27,18 +27,26 @@ Each test vector is organized as follows: The test vectors are assembled in a CSV (RFC 4180) comma-separated-value file. +Since `"` and `,` are very frequent, we instead use these settings: + +```ruby +CSV.generate(col_sep: ";", quote_char: "|", quote_empty: false) +``` + +(Note that, with these settings, no quote character is used at all for +the extant examples.) + The columns are: | Key Name | Description | | --- | --- | -| `type` | kind of test: `ok`, `fail`; special value `base` | +| `type` | kind of test: `ok`, `rt` (round-trip), `red` (normalized on roundtrip); special value `base` | | `uri` | a URI reference | -| `cri` | hex-encoded CBOR representation of the CRI reference corresponding to `uri` | -| `cri-diag` | `cri` in CBOR diagnostic format | -| `uri-from-cri` | the URI obtained translating the CRI reference `cri`, or "=" if identical to `uri` | -| `resolved-cri` | hex-encoded CBOR representation of the resolved CRI reference relative to the [base CRI](#bases) | -| `resolved-cri-diag` | `resolved-cri` in CBOR diagnostic format | -| `resolved-uri` | resolved URI relative to the [base URI](#bases) | +| `cri` | EDN CBOR representation of the CRI reference corresponding to `uri` | +| `red` | `uri` reference after normalization if type=red, empty otherwise | +| `resolved-cri` | EDN CBOR representation of the resolved CRI reference relative to the [base CRI](#bases) | +| `cri_hex` | `cri` in CBOR hexdump format | +| `resolved_cri_hex` | `resolved_cri` in CBOR hexdump format | An initial line with type `base` gives the base URI and CRI applied, see above. diff --git a/tests/csv-to-json.rb b/tests/csv-to-json.rb index f016103..5e1b561 100644 --- a/tests/csv-to-json.rb +++ b/tests/csv-to-json.rb @@ -1,4 +1,5 @@ require 'cbor-diagnostic' +require 'cbor-deterministic' require 'treetop' require 'cbor-diag-parser' require 'sid-csv' # steal from sid-csv gem @@ -29,24 +30,47 @@ def diag_to_hex(d) parser.parse(d).to_rb.to_cbor.hexi end +def check(sym, a, b, strict = false) + unless a == b + w [sym, a.item_diag, b.item_diag] + fail if strict + end +end + +def w(x) + warn x.inspect +end + test_data = {} tv = [] +seen = Set[] -CSV.read("tests.csv").each do |row| +CSV.read("tests.csv", col_sep: ";", quote_char: "|", quote_empty: false).each do |row| case row - in ["base", baseuri, basecri_diag] + in ["type", "uri", "cri", "red", "resolved_uri", "resolved_cri", "cri_hex", "resolved_cri_hex"] + in ["base", baseuri, basecri_diag, *_foo] test_data["base-uri"] = baseuri test_data["base-cri"] = diag_to_hex(basecri_diag) test_data["test-vectors"] = tv - in ["ok", uri_in, cri_in_diag, uri_from_cri_opt, resolved_cri_diag, resolved_uri] - tv << { - "uri" => uri_in, - "cri" => diag_to_hex(cri_in_diag), - "uri-from-cri" => (uri_from_cri_opt == "=" ? uri_in : uri_from_cri_opt), + in ["rt" | "red", uri_in, cri_in_diag, uri_from_cri_opt, resolved_uri, resolved_cri_diag, cri_hex_in, resolved_cri_hex_in] + cri_hex = diag_to_hex(cri_in_diag) + check "** CRI_HEX", cri_hex_in, cri_hex + resolved_cri_hex = diag_to_hex(resolved_cri_diag) + check "** RESOLVED_CRI_HEX", resolved_cri_hex_in, resolved_cri_hex + val = { + "uri" => uri_in || "", + "cri" => cri_hex, + "uri-from-cri" => uri_from_cri_opt || uri_in || "", "resolved-cri" => diag_to_hex(resolved_cri_diag), "resolved-uri" => resolved_uri, + # XXX check assigned cri_hex, resolved_cri_hex } + valdet = val.cbor_prepare_deterministic.to_cbor + unless seen === valdet + tv << val + seen << valdet + end end end diff --git a/tests/json-to-csv.rb b/tests/json-to-csv.rb index 5c45e99..3ad7ff6 100644 --- a/tests/json-to-csv.rb +++ b/tests/json-to-csv.rb @@ -1,6 +1,7 @@ +require 'cbor-cri' require 'cbor-diagnostic' -require 'sid-csv' # steal from sid-csv gem -include CSV::SID +require 'json' +require 'csv' class String def hexi @@ -14,53 +15,106 @@ def xeh end end +def w(x) + warn x.inspect +end + +def hex_to_cri(h) + CBOR::CRI.new(*CBOR.decode(h.xeh)) +end + def hex_to_diag(h) CBOR.decode(h.xeh).cbor_diagnostic end +def check(sym, a, b, strict = false) + unless a == b + w [sym, a.item_diag, b.item_diag] + fail if strict + end +end +class Object + def item_diag + inspect + end +end -test_data = JSON.load_file("tests.json") - -baseuri = test_data["base-uri"] -basecri_hex = test_data["base-cri"] -basecri_diag = hex_to_diag(basecri_hex) - -data = [ - ["base", baseuri, # basecri_hex, - basecri_diag] -] - -tests = test_data["test-vectors"] -tests.each do |td| - uri_in = td["uri"] - cri_in = td["cri"] - uri_from_cri = td["uri-from-cri"] - resolved_cri = td["resolved-cri"] - resolved_uri = td["resolved-uri"] - data << [ - "ok", uri_in, # cri_in, - hex_to_diag(cri_in), - (uri_from_cri == uri_in ? "=" : uri_from_cri), - # resolved_cri, - hex_to_diag(resolved_cri), resolved_uri, - ] +class CBOR::CRI + def item_diag + to_item.cbor_diagnostic + end end +test_data = JSON.load(ARGF.read) + +seen = Set[] + +result = CSV.generate(col_sep: ";", quote_char: "|", quote_empty: false) do |csv| -=begin -| Key Name | Description | -| --- | --- | -| `type` | kind of test: `ok`, `fail`; special value `base` | -| `uri` | a URI reference | -| `cri` | hex-encoded CBOR representation of the CRI reference corresponding to `uri` | -| `cri-diag` | `cri` in CBOR diagnostic format | -| `uri-from-cri` | the URI obtained translating the CRI reference `cri`, or "=" if identical to `uri` | -| `resolved-cri` | hex-encoded CBOR representation of the resolved CRI reference relative to the [base CRI](#bases) | -| `resolved-cri-diag` | `resolved-cri` in CBOR diagnostic format | -| `resolved-uri` | resolved URI relative to the [base URI](#bases) + csv << ["type", "uri", "cri", "red", + "resolved_uri", "resolved_cri", + "cri_hex", "resolved_cri_hex"] + + baseuri = test_data["base-uri"] + basecri_hex = test_data["base-cri"] + basecri = hex_to_cri(basecri_hex) + csv << ["base", baseuri, basecri.item_diag, "", + "", "", + basecri_hex] + + rt_basecri = CBOR::CRI.from_uri(baseuri) + fail ["*** basecri", basecri, "basecri from baseuri", rt_basecri].inspect if basecri != rt_basecri + fail ["*** basecri.to_item", basecri.to_item, "(basecri from baseuri).to_item", rt_basecri.to_item].inspect if basecri.to_item != rt_basecri.to_item + baseuri_out = basecri.to_uri + fail ["*** basecri.to_uri", baseuri_out, "baseuri", rt_basecri.to_item].inspect if baseuri_out != baseuri + + tests = test_data["test-vectors"] + tests.each do |td| + uri_in = td["uri"] + + cri_in_hex = td["cri"].downcase + cri_in = hex_to_cri(cri_in_hex) + cri_in_diag = cri_in.item_diag + check("hex cri_in", cri_in_hex, cri_in.to_item.to_cbor.hexi, true) + + uri_from_cri = td["uri-from-cri"] + red = uri_from_cri != uri_in + + resolved_cri_hex = td["resolved-cri"].downcase + resolved_cri = hex_to_cri(resolved_cri_hex) + check("hex resolved_cri", resolved_cri_hex, resolved_cri.to_item.to_cbor.hexi, true) + + # warn "resolved: #{hex_to_diag(td["resolved-cri"])}" + resolved_uri = td["resolved-uri"] + + cri_out = CBOR::CRI.from_uri(uri_in) + # w cri_out.item_diag + check :_CRI_IN_OUT, cri_in, cri_out + uri_out = cri_out.to_uri + check :_URI_IN_OUT, uri_out, uri_from_cri + check :_RES_IN_URI, resolved_uri, resolved_cri.to_uri + my_resolved_cri = basecri.merge(cri_in) + check :_RES_CRI, resolved_cri, my_resolved_cri + my_resolved_cri_to_uri = my_resolved_cri.to_uri + check :_RES_CRI_URI, my_resolved_cri_to_uri, resolved_uri + my_resolved_uri_cri = CBOR::CRI.from_uri(resolved_uri) + check :_RES_URI_CRI, my_resolved_uri_cri, resolved_cri + + item = [red ? "red" : "rt", + uri_in, cri_in_diag, red ? uri_from_cri : "", + resolved_uri, resolved_cri.item_diag, + cri_in_hex, resolved_cri_hex] + unless seen === item + csv << item + seen << item + end + end + +end -=end | +# puts result.lines.uniq +puts result +exit -puts csv_generate(data) diff --git a/tests/tests.csv b/tests/tests.csv index 5707316..e91a0be 100644 --- a/tests/tests.csv +++ b/tests/tests.csv @@ -1,102 +1,96 @@ -base,coaps://foo:4711/pa/th?query#frag,"[-2, [""foo"", 4711], [""pa"", ""th""], [""query""], ""frag""]" -ok,"",[0],=,"[-2, [""foo"", 4711], [""pa"", ""th""], [""query""], ""frag""]",coaps://foo:4711/pa/th?query#frag -ok,//a,"[null, [""a""]]",=,"[-2, [""a""]]",coaps://a -ok,//192.168.0.97,"[null, [h'C0A80061']]",=,"[-2, [h'C0A80061']]",coaps://192.168.0.97 -ok,"",[0],=,"[-2, [""foo"", 4711], [""pa"", ""th""], [""query""], ""frag""]",coaps://foo:4711/pa/th?query#frag -ok,/,"[true, [""""]]",=,"[-2, [""foo"", 4711], [""""]]",coaps://foo:4711/ -ok,/a,"[true, [""a""]]",=,"[-2, [""foo"", 4711], [""a""]]",coaps://foo:4711/a -ok,?a,"[0, null, [""a""]]",=,"[-2, [""foo"", 4711], [""pa"", ""th""], [""a""]]",coaps://foo:4711/pa/th?a -ok,#a,"[0, null, null, ""a""]",=,"[-2, [""foo"", 4711], [""pa"", ""th""], [""query""], ""a""]",coaps://foo:4711/pa/th?query#a -ok,a,"[1, [""a""]]",=,"[-2, [""foo"", 4711], [""pa"", ""a""]]",coaps://foo:4711/pa/a -ok,a/b,"[1, [""a"", ""b""]]",=,"[-2, [""foo"", 4711], [""pa"", ""a"", ""b""]]",coaps://foo:4711/pa/a/b -ok,a/./b,"[1, [""a"", ""b""]]",a/b,"[-2, [""foo"", 4711], [""pa"", ""a"", ""b""]]",coaps://foo:4711/pa/a/b -ok,./a/b,"[1, [""a"", ""b""]]",a/b,"[-2, [""foo"", 4711], [""pa"", ""a"", ""b""]]",coaps://foo:4711/pa/a/b -ok,../a,"[2, [""a""]]",=,"[-2, [""foo"", 4711], [""a""]]",coaps://foo:4711/a -ok,../a/b/../c/.,"[2, [""a"", ""c""]]",../a/c,"[-2, [""foo"", 4711], [""a"", ""c""]]",coaps://foo:4711/a/c -ok,"",[0],=,"[-2, [""foo"", 4711], [""pa"", ""th""], [""query""], ""frag""]",coaps://foo:4711/pa/th?query#frag -ok,a://b,"[""a"", [""b""]]",=,"[""a"", [""b""]]",a://b -ok,a://192.168.0.98,"[""a"", [h'C0A80062']]",=,"[""a"", [h'C0A80062']]",a://192.168.0.98 -ok,a:,"[""a""]",=,"[""a""]",a: -ok,a:b,"[""a"", true, [""b""]]",=,"[""a"", true, [""b""]]",a:b -ok,a:?b,"[""a"", null, null, [""b""]]",=,"[""a"", null, null, [""b""]]",a:?b -ok,a:/b,"[""a"", null, [""b""]]",=,"[""a"", null, [""b""]]",a:/b -ok,a:#b,"[""a"", null, null, null, ""b""]",=,"[""a"", null, null, null, ""b""]",a:#b -ok,//a:25186,"[null, [""a"", 25186]]",=,"[-2, [""a"", 25186]]",coaps://a:25186 -ok,//a/,"[null, [""a""], [""""]]",=,"[-2, [""a""], [""""]]",coaps://a/ -ok,//a/b,"[null, [""a""], [""b""]]",=,"[-2, [""a""], [""b""]]",coaps://a/b -ok,//a?b,"[null, [""a""], null, [""b""]]",=,"[-2, [""a""], null, [""b""]]",coaps://a?b -ok,//a#b,"[null, [""a""], null, null, ""b""]",=,"[-2, [""a""], null, null, ""b""]",coaps://a#b -ok,//192.168.0.97:25186,"[null, [h'C0A80061', 25186]]",=,"[-2, [h'C0A80061', 25186]]",coaps://192.168.0.97:25186 -ok,//192.168.0.97/,"[null, [h'C0A80061'], [""""]]",=,"[-2, [h'C0A80061'], [""""]]",coaps://192.168.0.97/ -ok,//192.168.0.97/b,"[null, [h'C0A80061'], [""b""]]",=,"[-2, [h'C0A80061'], [""b""]]",coaps://192.168.0.97/b -ok,//192.168.0.97?b,"[null, [h'C0A80061'], null, [""b""]]",=,"[-2, [h'C0A80061'], null, [""b""]]",coaps://192.168.0.97?b -ok,//192.168.0.97#b,"[null, [h'C0A80061'], null, null, ""b""]",=,"[-2, [h'C0A80061'], null, null, ""b""]",coaps://192.168.0.97#b -ok,"",[0],=,"[-2, [""foo"", 4711], [""pa"", ""th""], [""query""], ""frag""]",coaps://foo:4711/pa/th?query#frag -ok,/?b,"[true, [""""], [""b""]]",=,"[-2, [""foo"", 4711], [""""], [""b""]]",coaps://foo:4711/?b -ok,/#b,"[true, [""""], null, ""b""]",=,"[-2, [""foo"", 4711], [""""], null, ""b""]",coaps://foo:4711/#b -ok,/a/,"[true, [""a"", """"]]",=,"[-2, [""foo"", 4711], [""a"", """"]]",coaps://foo:4711/a/ -ok,/a/b,"[true, [""a"", ""b""]]",=,"[-2, [""foo"", 4711], [""a"", ""b""]]",coaps://foo:4711/a/b -ok,/a?b,"[true, [""a""], [""b""]]",=,"[-2, [""foo"", 4711], [""a""], [""b""]]",coaps://foo:4711/a?b -ok,/a#b,"[true, [""a""], null, ""b""]",=,"[-2, [""foo"", 4711], [""a""], null, ""b""]",coaps://foo:4711/a#b -ok,?a&b,"[0, null, [""a"", ""b""]]",=,"[-2, [""foo"", 4711], [""pa"", ""th""], [""a"", ""b""]]",coaps://foo:4711/pa/th?a&b -ok,?a#b,"[0, null, [""a""], ""b""]",=,"[-2, [""foo"", 4711], [""pa"", ""th""], [""a""], ""b""]",coaps://foo:4711/pa/th?a#b -ok,a://b:25443,"[""a"", [""b"", 25443]]",=,"[""a"", [""b"", 25443]]",a://b:25443 -ok,a://b/,"[""a"", [""b""], [""""]]",=,"[""a"", [""b""], [""""]]",a://b/ -ok,a://b/c,"[""a"", [""b""], [""c""]]",=,"[""a"", [""b""], [""c""]]",a://b/c -ok,a://b?c,"[""a"", [""b""], null, [""c""]]",=,"[""a"", [""b""], null, [""c""]]",a://b?c -ok,a://b#c,"[""a"", [""b""], null, null, ""c""]",=,"[""a"", [""b""], null, null, ""c""]",a://b#c -ok,a://192.168.0.98:25443,"[""a"", [h'C0A80062', 25443]]",=,"[""a"", [h'C0A80062', 25443]]",a://192.168.0.98:25443 -ok,a://192.168.0.98/,"[""a"", [h'C0A80062'], [""""]]",=,"[""a"", [h'C0A80062'], [""""]]",a://192.168.0.98/ -ok,a://192.168.0.98/c,"[""a"", [h'C0A80062'], [""c""]]",=,"[""a"", [h'C0A80062'], [""c""]]",a://192.168.0.98/c -ok,a://192.168.0.98?c,"[""a"", [h'C0A80062'], null, [""c""]]",=,"[""a"", [h'C0A80062'], null, [""c""]]",a://192.168.0.98?c -ok,a://192.168.0.98#c,"[""a"", [h'C0A80062'], null, null, ""c""]",=,"[""a"", [h'C0A80062'], null, null, ""c""]",a://192.168.0.98#c -ok,"",[0],=,"[-2, [""foo"", 4711], [""pa"", ""th""], [""query""], ""frag""]",coaps://foo:4711/pa/th?query#frag -ok,a:?c,"[""a"", null, null, [""c""]]",=,"[""a"", null, null, [""c""]]",a:?c -ok,a:#c,"[""a"", null, null, null, ""c""]",=,"[""a"", null, null, null, ""c""]",a:#c -ok,a:b/,"[""a"", true, [""b"", """"]]",=,"[""a"", true, [""b"", """"]]",a:b/ -ok,a:b/c,"[""a"", true, [""b"", ""c""]]",=,"[""a"", true, [""b"", ""c""]]",a:b/c -ok,a:b%3Fc,"[""a"", true, [""b?c""]]",=,"[""a"", true, [""b?c""]]",a:b%3Fc -ok,a:b?c,"[""a"", true, [""b""], [""c""]]",=,"[""a"", true, [""b""], [""c""]]",a:b?c -ok,a:b#c,"[""a"", true, [""b""], null, ""c""]",=,"[""a"", true, [""b""], null, ""c""]",a:b#c -ok,a:?b&c,"[""a"", null, null, [""b"", ""c""]]",=,"[""a"", null, null, [""b"", ""c""]]",a:?b&c -ok,a:?b#c,"[""a"", null, null, [""b""], ""c""]",=,"[""a"", null, null, [""b""], ""c""]",a:?b#c -ok,//a:25186/,"[null, [""a"", 25186], [""""]]",=,"[-2, [""a"", 25186], [""""]]",coaps://a:25186/ -ok,//a:25186/c,"[null, [""a"", 25186], [""c""]]",=,"[-2, [""a"", 25186], [""c""]]",coaps://a:25186/c -ok,//a:25186?c,"[null, [""a"", 25186], null, [""c""]]",=,"[-2, [""a"", 25186], null, [""c""]]",coaps://a:25186?c -ok,//a:25186#c,"[null, [""a"", 25186], null, null, ""c""]",=,"[-2, [""a"", 25186], null, null, ""c""]",coaps://a:25186#c -ok,"",[0],=,"[-2, [""foo"", 4711], [""pa"", ""th""], [""query""], ""frag""]",coaps://foo:4711/pa/th?query#frag -ok,//a/?c,"[null, [""a""], [""""], [""c""]]",=,"[-2, [""a""], [""""], [""c""]]",coaps://a/?c -ok,//a/#c,"[null, [""a""], [""""], null, ""c""]",=,"[-2, [""a""], [""""], null, ""c""]",coaps://a/#c -ok,//a/b/,"[null, [""a""], [""b"", """"]]",=,"[-2, [""a""], [""b"", """"]]",coaps://a/b/ -ok,//a/b/c,"[null, [""a""], [""b"", ""c""]]",=,"[-2, [""a""], [""b"", ""c""]]",coaps://a/b/c -ok,//a/b?c,"[null, [""a""], [""b""], [""c""]]",=,"[-2, [""a""], [""b""], [""c""]]",coaps://a/b?c -ok,//a/b#c,"[null, [""a""], [""b""], null, ""c""]",=,"[-2, [""a""], [""b""], null, ""c""]",coaps://a/b#c -ok,//a?b&c,"[null, [""a""], null, [""b"", ""c""]]",=,"[-2, [""a""], null, [""b"", ""c""]]",coaps://a?b&c -ok,//a?b#c,"[null, [""a""], null, [""b""], ""c""]",=,"[-2, [""a""], null, [""b""], ""c""]",coaps://a?b#c -ok,//192.168.0.97:25186/,"[null, [h'C0A80061', 25186], [""""]]",=,"[-2, [h'C0A80061', 25186], [""""]]",coaps://192.168.0.97:25186/ -ok,//192.168.0.97:25186/c,"[null, [h'C0A80061', 25186], [""c""]]",=,"[-2, [h'C0A80061', 25186], [""c""]]",coaps://192.168.0.97:25186/c -ok,//192.168.0.97:25186?c,"[null, [h'C0A80061', 25186], null, [""c""]]",=,"[-2, [h'C0A80061', 25186], null, [""c""]]",coaps://192.168.0.97:25186?c -ok,//192.168.0.97:25186#c,"[null, [h'C0A80061', 25186], null, null, ""c""]",=,"[-2, [h'C0A80061', 25186], null, null, ""c""]",coaps://192.168.0.97:25186#c -ok,"",[0],=,"[-2, [""foo"", 4711], [""pa"", ""th""], [""query""], ""frag""]",coaps://foo:4711/pa/th?query#frag -ok,//192.168.0.97/?c,"[null, [h'C0A80061'], [""""], [""c""]]",=,"[-2, [h'C0A80061'], [""""], [""c""]]",coaps://192.168.0.97/?c -ok,//192.168.0.97/#c,"[null, [h'C0A80061'], [""""], null, ""c""]",=,"[-2, [h'C0A80061'], [""""], null, ""c""]",coaps://192.168.0.97/#c -ok,//192.168.0.97/b/,"[null, [h'C0A80061'], [""b"", """"]]",=,"[-2, [h'C0A80061'], [""b"", """"]]",coaps://192.168.0.97/b/ -ok,//192.168.0.97/b/c,"[null, [h'C0A80061'], [""b"", ""c""]]",=,"[-2, [h'C0A80061'], [""b"", ""c""]]",coaps://192.168.0.97/b/c -ok,//192.168.0.97/b?c,"[null, [h'C0A80061'], [""b""], [""c""]]",=,"[-2, [h'C0A80061'], [""b""], [""c""]]",coaps://192.168.0.97/b?c -ok,//192.168.0.97/b#c,"[null, [h'C0A80061'], [""b""], null, ""c""]",=,"[-2, [h'C0A80061'], [""b""], null, ""c""]",coaps://192.168.0.97/b#c -ok,//192.168.0.97?b&c,"[null, [h'C0A80061'], null, [""b"", ""c""]]",=,"[-2, [h'C0A80061'], null, [""b"", ""c""]]",coaps://192.168.0.97?b&c -ok,//192.168.0.97?b#c,"[null, [h'C0A80061'], null, [""b""], ""c""]",=,"[-2, [h'C0A80061'], null, [""b""], ""c""]",coaps://192.168.0.97?b#c -ok,"",[0],=,"[-2, [""foo"", 4711], [""pa"", ""th""], [""query""], ""frag""]",coaps://foo:4711/pa/th?query#frag -ok,/?b&c,"[true, [""""], [""b"", ""c""]]",=,"[-2, [""foo"", 4711], [""""], [""b"", ""c""]]",coaps://foo:4711/?b&c -ok,/?b#c,"[true, [""""], [""b""], ""c""]",=,"[-2, [""foo"", 4711], [""""], [""b""], ""c""]",coaps://foo:4711/?b#c -ok,/a//,"[true, [""a"", """", """"]]",=,"[-2, [""foo"", 4711], [""a"", """", """"]]",coaps://foo:4711/a// -ok,/a//c,"[true, [""a"", """", ""c""]]",=,"[-2, [""foo"", 4711], [""a"", """", ""c""]]",coaps://foo:4711/a//c -ok,/a/?c,"[true, [""a"", """"], [""c""]]",=,"[-2, [""foo"", 4711], [""a"", """"], [""c""]]",coaps://foo:4711/a/?c -ok,/a/#c,"[true, [""a"", """"], null, ""c""]",=,"[-2, [""foo"", 4711], [""a"", """"], null, ""c""]",coaps://foo:4711/a/#c -ok,/a/b/,"[true, [""a"", ""b"", """"]]",=,"[-2, [""foo"", 4711], [""a"", ""b"", """"]]",coaps://foo:4711/a/b/ -ok,/a/b/c,"[true, [""a"", ""b"", ""c""]]",=,"[-2, [""foo"", 4711], [""a"", ""b"", ""c""]]",coaps://foo:4711/a/b/c -ok,/a/b?c,"[true, [""a"", ""b""], [""c""]]",=,"[-2, [""foo"", 4711], [""a"", ""b""], [""c""]]",coaps://foo:4711/a/b?c -ok,/a/b#c,"[true, [""a"", ""b""], null, ""c""]",=,"[-2, [""foo"", 4711], [""a"", ""b""], null, ""c""]",coaps://foo:4711/a/b#c -ok,/a?b&c,"[true, [""a""], [""b"", ""c""]]",=,"[-2, [""foo"", 4711], [""a""], [""b"", ""c""]]",coaps://foo:4711/a?b&c -ok,/a?b#c,"[true, [""a""], [""b""], ""c""]",=,"[-2, [""foo"", 4711], [""a""], [""b""], ""c""]",coaps://foo:4711/a?b#c -ok,?a&b&c,"[0, null, [""a"", ""b"", ""c""]]",=,"[-2, [""foo"", 4711], [""pa"", ""th""], [""a"", ""b"", ""c""]]",coaps://foo:4711/pa/th?a&b&c +type;uri;cri;red;resolved_uri;resolved_cri;cri_hex;resolved_cri_hex +base;coaps://foo:4711/pa/th?query#frag;[-2, ["foo", 4711], ["pa", "th"], ["query"], "frag"];;;;85218263666f6f19126782627061627468816571756572796466726167 +rt;;[0];;coaps://foo:4711/pa/th?query#frag;[-2, ["foo", 4711], ["pa", "th"], ["query"], "frag"];8100;85218263666f6f19126782627061627468816571756572796466726167 +rt;//a;[null, ["a"]];;coaps://a;[-2, ["a"]];82f6816161;8221816161 +rt;//192.168.0.97;[null, [h'C0A80061']];;coaps://192.168.0.97;[-2, [h'C0A80061']];82f68144c0a80061;82218144c0a80061 +rt;/;[true, [""]];;coaps://foo:4711/;[-2, ["foo", 4711], [""]];82f58160;83218263666f6f1912678160 +rt;/a;[true, ["a"]];;coaps://foo:4711/a;[-2, ["foo", 4711], ["a"]];82f5816161;83218263666f6f191267816161 +rt;?a;[0, null, ["a"]];;coaps://foo:4711/pa/th?a;[-2, ["foo", 4711], ["pa", "th"], ["a"]];8300f6816161;84218263666f6f19126782627061627468816161 +rt;#a;[0, null, null, "a"];;coaps://foo:4711/pa/th?query#a;[-2, ["foo", 4711], ["pa", "th"], ["query"], "a"];8400f6f66161;85218263666f6f19126782627061627468816571756572796161 +rt;a;[1, ["a"]];;coaps://foo:4711/pa/a;[-2, ["foo", 4711], ["pa", "a"]];8201816161;83218263666f6f191267826270616161 +rt;a/b;[1, ["a", "b"]];;coaps://foo:4711/pa/a/b;[-2, ["foo", 4711], ["pa", "a", "b"]];82018261616162;83218263666f6f1912678362706161616162 +red;a/./b;[1, ["a", "b"]];a/b;coaps://foo:4711/pa/a/b;[-2, ["foo", 4711], ["pa", "a", "b"]];82018261616162;83218263666f6f1912678362706161616162 +red;./a/b;[1, ["a", "b"]];a/b;coaps://foo:4711/pa/a/b;[-2, ["foo", 4711], ["pa", "a", "b"]];82018261616162;83218263666f6f1912678362706161616162 +rt;../a;[2, ["a"]];;coaps://foo:4711/a;[-2, ["foo", 4711], ["a"]];8202816161;83218263666f6f191267816161 +red;../a/b/../c/.;[2, ["a", "c"]];../a/c;coaps://foo:4711/a/c;[-2, ["foo", 4711], ["a", "c"]];82028261616163;83218263666f6f1912678261616163 +rt;a://b;["a", ["b"]];;a://b;["a", ["b"]];826161816162;826161816162 +rt;a://192.168.0.98;["a", [h'C0A80062']];;a://192.168.0.98;["a", [h'C0A80062']];8261618144c0a80062;8261618144c0a80062 +rt;a:;["a"];;a:;["a"];816161;816161 +rt;a:b;["a", true, ["b"]];;a:b;["a", true, ["b"]];836161f5816162;836161f5816162 +rt;a:?b;["a", null, null, ["b"]];;a:?b;["a", null, null, ["b"]];846161f6f6816162;846161f6f6816162 +rt;a:/b;["a", null, ["b"]];;a:/b;["a", null, ["b"]];836161f6816162;836161f6816162 +rt;a:#b;["a", null, null, null, "b"];;a:#b;["a", null, null, null, "b"];856161f6f6f66162;856161f6f6f66162 +rt;//a:25186;[null, ["a", 25186]];;coaps://a:25186;[-2, ["a", 25186]];82f6826161196262;8221826161196262 +rt;//a/;[null, ["a"], [""]];;coaps://a/;[-2, ["a"], [""]];83f68161618160;83218161618160 +rt;//a/b;[null, ["a"], ["b"]];;coaps://a/b;[-2, ["a"], ["b"]];83f6816161816162;8321816161816162 +rt;//a?b;[null, ["a"], null, ["b"]];;coaps://a?b;[-2, ["a"], null, ["b"]];84f6816161f6816162;8421816161f6816162 +rt;//a#b;[null, ["a"], null, null, "b"];;coaps://a#b;[-2, ["a"], null, null, "b"];85f6816161f6f66162;8521816161f6f66162 +rt;//192.168.0.97:25186;[null, [h'C0A80061', 25186]];;coaps://192.168.0.97:25186;[-2, [h'C0A80061', 25186]];82f68244c0a80061196262;82218244c0a80061196262 +rt;//192.168.0.97/;[null, [h'C0A80061'], [""]];;coaps://192.168.0.97/;[-2, [h'C0A80061'], [""]];83f68144c0a800618160;83218144c0a800618160 +rt;//192.168.0.97/b;[null, [h'C0A80061'], ["b"]];;coaps://192.168.0.97/b;[-2, [h'C0A80061'], ["b"]];83f68144c0a80061816162;83218144c0a80061816162 +rt;//192.168.0.97?b;[null, [h'C0A80061'], null, ["b"]];;coaps://192.168.0.97?b;[-2, [h'C0A80061'], null, ["b"]];84f68144c0a80061f6816162;84218144c0a80061f6816162 +rt;//192.168.0.97#b;[null, [h'C0A80061'], null, null, "b"];;coaps://192.168.0.97#b;[-2, [h'C0A80061'], null, null, "b"];85f68144c0a80061f6f66162;85218144c0a80061f6f66162 +rt;/?b;[true, [""], ["b"]];;coaps://foo:4711/?b;[-2, ["foo", 4711], [""], ["b"]];83f58160816162;84218263666f6f1912678160816162 +rt;/#b;[true, [""], null, "b"];;coaps://foo:4711/#b;[-2, ["foo", 4711], [""], null, "b"];84f58160f66162;85218263666f6f1912678160f66162 +rt;/a/;[true, ["a", ""]];;coaps://foo:4711/a/;[-2, ["foo", 4711], ["a", ""]];82f582616160;83218263666f6f19126782616160 +rt;/a/b;[true, ["a", "b"]];;coaps://foo:4711/a/b;[-2, ["foo", 4711], ["a", "b"]];82f58261616162;83218263666f6f1912678261616162 +rt;/a?b;[true, ["a"], ["b"]];;coaps://foo:4711/a?b;[-2, ["foo", 4711], ["a"], ["b"]];83f5816161816162;84218263666f6f191267816161816162 +rt;/a#b;[true, ["a"], null, "b"];;coaps://foo:4711/a#b;[-2, ["foo", 4711], ["a"], null, "b"];84f5816161f66162;85218263666f6f191267816161f66162 +rt;?a&b;[0, null, ["a", "b"]];;coaps://foo:4711/pa/th?a&b;[-2, ["foo", 4711], ["pa", "th"], ["a", "b"]];8300f68261616162;84218263666f6f191267826270616274688261616162 +rt;?a#b;[0, null, ["a"], "b"];;coaps://foo:4711/pa/th?a#b;[-2, ["foo", 4711], ["pa", "th"], ["a"], "b"];8400f68161616162;85218263666f6f191267826270616274688161616162 +rt;a://b:25443;["a", ["b", 25443]];;a://b:25443;["a", ["b", 25443]];826161826162196363;826161826162196363 +rt;a://b/;["a", ["b"], [""]];;a://b/;["a", ["b"], [""]];8361618161628160;8361618161628160 +rt;a://b/c;["a", ["b"], ["c"]];;a://b/c;["a", ["b"], ["c"]];836161816162816163;836161816162816163 +rt;a://b?c;["a", ["b"], null, ["c"]];;a://b?c;["a", ["b"], null, ["c"]];846161816162f6816163;846161816162f6816163 +rt;a://b#c;["a", ["b"], null, null, "c"];;a://b#c;["a", ["b"], null, null, "c"];856161816162f6f66163;856161816162f6f66163 +rt;a://192.168.0.98:25443;["a", [h'C0A80062', 25443]];;a://192.168.0.98:25443;["a", [h'C0A80062', 25443]];8261618244c0a80062196363;8261618244c0a80062196363 +rt;a://192.168.0.98/;["a", [h'C0A80062'], [""]];;a://192.168.0.98/;["a", [h'C0A80062'], [""]];8361618144c0a800628160;8361618144c0a800628160 +rt;a://192.168.0.98/c;["a", [h'C0A80062'], ["c"]];;a://192.168.0.98/c;["a", [h'C0A80062'], ["c"]];8361618144c0a80062816163;8361618144c0a80062816163 +rt;a://192.168.0.98?c;["a", [h'C0A80062'], null, ["c"]];;a://192.168.0.98?c;["a", [h'C0A80062'], null, ["c"]];8461618144c0a80062f6816163;8461618144c0a80062f6816163 +rt;a://192.168.0.98#c;["a", [h'C0A80062'], null, null, "c"];;a://192.168.0.98#c;["a", [h'C0A80062'], null, null, "c"];8561618144c0a80062f6f66163;8561618144c0a80062f6f66163 +rt;a:?c;["a", null, null, ["c"]];;a:?c;["a", null, null, ["c"]];846161f6f6816163;846161f6f6816163 +rt;a:#c;["a", null, null, null, "c"];;a:#c;["a", null, null, null, "c"];856161f6f6f66163;856161f6f6f66163 +rt;a:b/;["a", true, ["b", ""]];;a:b/;["a", true, ["b", ""]];836161f582616260;836161f582616260 +rt;a:b/c;["a", true, ["b", "c"]];;a:b/c;["a", true, ["b", "c"]];836161f58261626163;836161f58261626163 +rt;a:b%3Fc;["a", true, ["b?c"]];;a:b%3Fc;["a", true, ["b?c"]];836161f58163623f63;836161f58163623f63 +rt;a:b?c;["a", true, ["b"], ["c"]];;a:b?c;["a", true, ["b"], ["c"]];846161f5816162816163;846161f5816162816163 +rt;a:b#c;["a", true, ["b"], null, "c"];;a:b#c;["a", true, ["b"], null, "c"];856161f5816162f66163;856161f5816162f66163 +rt;a:?b&c;["a", null, null, ["b", "c"]];;a:?b&c;["a", null, null, ["b", "c"]];846161f6f68261626163;846161f6f68261626163 +rt;a:?b#c;["a", null, null, ["b"], "c"];;a:?b#c;["a", null, null, ["b"], "c"];856161f6f68161626163;856161f6f68161626163 +rt;//a:25186/;[null, ["a", 25186], [""]];;coaps://a:25186/;[-2, ["a", 25186], [""]];83f68261611962628160;83218261611962628160 +rt;//a:25186/c;[null, ["a", 25186], ["c"]];;coaps://a:25186/c;[-2, ["a", 25186], ["c"]];83f6826161196262816163;8321826161196262816163 +rt;//a:25186?c;[null, ["a", 25186], null, ["c"]];;coaps://a:25186?c;[-2, ["a", 25186], null, ["c"]];84f6826161196262f6816163;8421826161196262f6816163 +rt;//a:25186#c;[null, ["a", 25186], null, null, "c"];;coaps://a:25186#c;[-2, ["a", 25186], null, null, "c"];85f6826161196262f6f66163;8521826161196262f6f66163 +rt;//a/?c;[null, ["a"], [""], ["c"]];;coaps://a/?c;[-2, ["a"], [""], ["c"]];84f68161618160816163;84218161618160816163 +rt;//a/#c;[null, ["a"], [""], null, "c"];;coaps://a/#c;[-2, ["a"], [""], null, "c"];85f68161618160f66163;85218161618160f66163 +rt;//a/b/;[null, ["a"], ["b", ""]];;coaps://a/b/;[-2, ["a"], ["b", ""]];83f681616182616260;832181616182616260 +rt;//a/b/c;[null, ["a"], ["b", "c"]];;coaps://a/b/c;[-2, ["a"], ["b", "c"]];83f68161618261626163;83218161618261626163 +rt;//a/b?c;[null, ["a"], ["b"], ["c"]];;coaps://a/b?c;[-2, ["a"], ["b"], ["c"]];84f6816161816162816163;8421816161816162816163 +rt;//a/b#c;[null, ["a"], ["b"], null, "c"];;coaps://a/b#c;[-2, ["a"], ["b"], null, "c"];85f6816161816162f66163;8521816161816162f66163 +rt;//a?b&c;[null, ["a"], null, ["b", "c"]];;coaps://a?b&c;[-2, ["a"], null, ["b", "c"]];84f6816161f68261626163;8421816161f68261626163 +rt;//a?b#c;[null, ["a"], null, ["b"], "c"];;coaps://a?b#c;[-2, ["a"], null, ["b"], "c"];85f6816161f68161626163;8521816161f68161626163 +rt;//192.168.0.97:25186/;[null, [h'C0A80061', 25186], [""]];;coaps://192.168.0.97:25186/;[-2, [h'C0A80061', 25186], [""]];83f68244c0a800611962628160;83218244c0a800611962628160 +rt;//192.168.0.97:25186/c;[null, [h'C0A80061', 25186], ["c"]];;coaps://192.168.0.97:25186/c;[-2, [h'C0A80061', 25186], ["c"]];83f68244c0a80061196262816163;83218244c0a80061196262816163 +rt;//192.168.0.97:25186?c;[null, [h'C0A80061', 25186], null, ["c"]];;coaps://192.168.0.97:25186?c;[-2, [h'C0A80061', 25186], null, ["c"]];84f68244c0a80061196262f6816163;84218244c0a80061196262f6816163 +rt;//192.168.0.97:25186#c;[null, [h'C0A80061', 25186], null, null, "c"];;coaps://192.168.0.97:25186#c;[-2, [h'C0A80061', 25186], null, null, "c"];85f68244c0a80061196262f6f66163;85218244c0a80061196262f6f66163 +rt;//192.168.0.97/?c;[null, [h'C0A80061'], [""], ["c"]];;coaps://192.168.0.97/?c;[-2, [h'C0A80061'], [""], ["c"]];84f68144c0a800618160816163;84218144c0a800618160816163 +rt;//192.168.0.97/#c;[null, [h'C0A80061'], [""], null, "c"];;coaps://192.168.0.97/#c;[-2, [h'C0A80061'], [""], null, "c"];85f68144c0a800618160f66163;85218144c0a800618160f66163 +rt;//192.168.0.97/b/;[null, [h'C0A80061'], ["b", ""]];;coaps://192.168.0.97/b/;[-2, [h'C0A80061'], ["b", ""]];83f68144c0a8006182616260;83218144c0a8006182616260 +rt;//192.168.0.97/b/c;[null, [h'C0A80061'], ["b", "c"]];;coaps://192.168.0.97/b/c;[-2, [h'C0A80061'], ["b", "c"]];83f68144c0a800618261626163;83218144c0a800618261626163 +rt;//192.168.0.97/b?c;[null, [h'C0A80061'], ["b"], ["c"]];;coaps://192.168.0.97/b?c;[-2, [h'C0A80061'], ["b"], ["c"]];84f68144c0a80061816162816163;84218144c0a80061816162816163 +rt;//192.168.0.97/b#c;[null, [h'C0A80061'], ["b"], null, "c"];;coaps://192.168.0.97/b#c;[-2, [h'C0A80061'], ["b"], null, "c"];85f68144c0a80061816162f66163;85218144c0a80061816162f66163 +rt;//192.168.0.97?b&c;[null, [h'C0A80061'], null, ["b", "c"]];;coaps://192.168.0.97?b&c;[-2, [h'C0A80061'], null, ["b", "c"]];84f68144c0a80061f68261626163;84218144c0a80061f68261626163 +rt;//192.168.0.97?b#c;[null, [h'C0A80061'], null, ["b"], "c"];;coaps://192.168.0.97?b#c;[-2, [h'C0A80061'], null, ["b"], "c"];85f68144c0a80061f68161626163;85218144c0a80061f68161626163 +rt;/?b&c;[true, [""], ["b", "c"]];;coaps://foo:4711/?b&c;[-2, ["foo", 4711], [""], ["b", "c"]];83f581608261626163;84218263666f6f19126781608261626163 +rt;/?b#c;[true, [""], ["b"], "c"];;coaps://foo:4711/?b#c;[-2, ["foo", 4711], [""], ["b"], "c"];84f581608161626163;85218263666f6f19126781608161626163 +rt;/a//;[true, ["a", "", ""]];;coaps://foo:4711/a//;[-2, ["foo", 4711], ["a", "", ""]];82f58361616060;83218263666f6f1912678361616060 +rt;/a//c;[true, ["a", "", "c"]];;coaps://foo:4711/a//c;[-2, ["foo", 4711], ["a", "", "c"]];82f5836161606163;83218263666f6f191267836161606163 +rt;/a/?c;[true, ["a", ""], ["c"]];;coaps://foo:4711/a/?c;[-2, ["foo", 4711], ["a", ""], ["c"]];83f582616160816163;84218263666f6f19126782616160816163 +rt;/a/#c;[true, ["a", ""], null, "c"];;coaps://foo:4711/a/#c;[-2, ["foo", 4711], ["a", ""], null, "c"];84f582616160f66163;85218263666f6f19126782616160f66163 +rt;/a/b/;[true, ["a", "b", ""]];;coaps://foo:4711/a/b/;[-2, ["foo", 4711], ["a", "b", ""]];82f5836161616260;83218263666f6f191267836161616260 +rt;/a/b/c;[true, ["a", "b", "c"]];;coaps://foo:4711/a/b/c;[-2, ["foo", 4711], ["a", "b", "c"]];82f583616161626163;83218263666f6f19126783616161626163 +rt;/a/b?c;[true, ["a", "b"], ["c"]];;coaps://foo:4711/a/b?c;[-2, ["foo", 4711], ["a", "b"], ["c"]];83f58261616162816163;84218263666f6f1912678261616162816163 +rt;/a/b#c;[true, ["a", "b"], null, "c"];;coaps://foo:4711/a/b#c;[-2, ["foo", 4711], ["a", "b"], null, "c"];84f58261616162f66163;85218263666f6f1912678261616162f66163 +rt;/a?b&c;[true, ["a"], ["b", "c"]];;coaps://foo:4711/a?b&c;[-2, ["foo", 4711], ["a"], ["b", "c"]];83f58161618261626163;84218263666f6f1912678161618261626163 +rt;/a?b#c;[true, ["a"], ["b"], "c"];;coaps://foo:4711/a?b#c;[-2, ["foo", 4711], ["a"], ["b"], "c"];84f58161618161626163;85218263666f6f1912678161618161626163 +rt;?a&b&c;[0, null, ["a", "b", "c"]];;coaps://foo:4711/pa/th?a&b&c;[-2, ["foo", 4711], ["pa", "th"], ["a", "b", "c"]];8300f683616161626163;84218263666f6f1912678262706162746883616161626163 From ae727935d415dfb8b3a75473bb004d9a64ca3785 Mon Sep 17 00:00:00 2001 From: Carsten Bormann Date: Sun, 5 May 2024 23:58:31 +0200 Subject: [PATCH 6/7] Add comment (description), new tests from extratests branch --- tests/README.md | 19 ++-- tests/csv-to-json.rb | 6 +- tests/json-to-csv.rb | 14 ++- tests/tests.csv | 210 +++++++++++++++++++---------------- tests/tests.json | 255 +++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 391 insertions(+), 113 deletions(-) diff --git a/tests/README.md b/tests/README.md index 4e3b420..284974b 100644 --- a/tests/README.md +++ b/tests/README.md @@ -38,15 +38,16 @@ the extant examples.) The columns are: -| Key Name | Description | -| --- | --- | -| `type` | kind of test: `ok`, `rt` (round-trip), `red` (normalized on roundtrip); special value `base` | -| `uri` | a URI reference | -| `cri` | EDN CBOR representation of the CRI reference corresponding to `uri` | -| `red` | `uri` reference after normalization if type=red, empty otherwise | -| `resolved-cri` | EDN CBOR representation of the resolved CRI reference relative to the [base CRI](#bases) | -| `cri_hex` | `cri` in CBOR hexdump format | -| `resolved_cri_hex` | `resolved_cri` in CBOR hexdump format | +| Key Name | Description | +| --- | --- | +| `type` | kind of test: `ok`, `rt` (round-trip), `red` (normalized on roundtrip); special value `base` | +| `uri` | a URI reference | +| `cri` | EDN CBOR representation of the CRI reference corresponding to `uri` | +| `red` | `uri` reference after normalization if type=red, empty otherwise | +| `resolved-cri` | EDN CBOR representation of the resolved CRI reference relative to the [base CRI](#bases) | +| `cri_hex` | `cri` in CBOR hexdump format | +| `resolved_cri_hex` | `resolved_cri` in CBOR hexdump format | +| `description` | comment | An initial line with type `base` gives the base URI and CRI applied, see above. diff --git a/tests/csv-to-json.rb b/tests/csv-to-json.rb index 5e1b561..9c0292c 100644 --- a/tests/csv-to-json.rb +++ b/tests/csv-to-json.rb @@ -48,23 +48,23 @@ def w(x) CSV.read("tests.csv", col_sep: ";", quote_char: "|", quote_empty: false).each do |row| case row - in ["type", "uri", "cri", "red", "resolved_uri", "resolved_cri", "cri_hex", "resolved_cri_hex"] + in ["type", "uri", "cri", "red", "resolved_uri", "resolved_cri", "cri_hex", "resolved_cri_hex", "comment"] in ["base", baseuri, basecri_diag, *_foo] test_data["base-uri"] = baseuri test_data["base-cri"] = diag_to_hex(basecri_diag) test_data["test-vectors"] = tv - in ["rt" | "red", uri_in, cri_in_diag, uri_from_cri_opt, resolved_uri, resolved_cri_diag, cri_hex_in, resolved_cri_hex_in] + in ["rt" | "red", uri_in, cri_in_diag, uri_from_cri_opt, resolved_uri, resolved_cri_diag, cri_hex_in, resolved_cri_hex_in, comment] cri_hex = diag_to_hex(cri_in_diag) check "** CRI_HEX", cri_hex_in, cri_hex resolved_cri_hex = diag_to_hex(resolved_cri_diag) check "** RESOLVED_CRI_HEX", resolved_cri_hex_in, resolved_cri_hex val = { + "description" => comment || "", "uri" => uri_in || "", "cri" => cri_hex, "uri-from-cri" => uri_from_cri_opt || uri_in || "", "resolved-cri" => diag_to_hex(resolved_cri_diag), "resolved-uri" => resolved_uri, - # XXX check assigned cri_hex, resolved_cri_hex } valdet = val.cbor_prepare_deterministic.to_cbor unless seen === valdet diff --git a/tests/json-to-csv.rb b/tests/json-to-csv.rb index 3ad7ff6..5d6a81a 100644 --- a/tests/json-to-csv.rb +++ b/tests/json-to-csv.rb @@ -54,7 +54,7 @@ def item_diag csv << ["type", "uri", "cri", "red", "resolved_uri", "resolved_cri", - "cri_hex", "resolved_cri_hex"] + "cri_hex", "resolved_cri_hex", "comment"] baseuri = test_data["base-uri"] basecri_hex = test_data["base-cri"] @@ -76,7 +76,7 @@ def item_diag cri_in_hex = td["cri"].downcase cri_in = hex_to_cri(cri_in_hex) cri_in_diag = cri_in.item_diag - check("hex cri_in", cri_in_hex, cri_in.to_item.to_cbor.hexi, true) + check("hex cri_in", cri_in_hex, cri_in.to_item.to_cbor.hexi) # ,true uri_from_cri = td["uri-from-cri"] red = uri_from_cri != uri_in @@ -88,10 +88,10 @@ def item_diag # warn "resolved: #{hex_to_diag(td["resolved-cri"])}" resolved_uri = td["resolved-uri"] - cri_out = CBOR::CRI.from_uri(uri_in) + cri_out = CBOR::CRI.from_uri(uri_in) if uri_in # w cri_out.item_diag - check :_CRI_IN_OUT, cri_in, cri_out - uri_out = cri_out.to_uri + check :_CRI_IN_OUT, cri_in, cri_out if uri_in + uri_out = cri_out.to_uri if uri_in check :_URI_IN_OUT, uri_out, uri_from_cri check :_RES_IN_URI, resolved_uri, resolved_cri.to_uri my_resolved_cri = basecri.merge(cri_in) @@ -101,10 +101,12 @@ def item_diag my_resolved_uri_cri = CBOR::CRI.from_uri(resolved_uri) check :_RES_URI_CRI, my_resolved_uri_cri, resolved_cri + comment = td["description"] || "" + item = [red ? "red" : "rt", uri_in, cri_in_diag, red ? uri_from_cri : "", resolved_uri, resolved_cri.item_diag, - cri_in_hex, resolved_cri_hex] + cri_in_hex, resolved_cri_hex, comment] unless seen === item csv << item seen << item diff --git a/tests/tests.csv b/tests/tests.csv index e91a0be..5e5851b 100644 --- a/tests/tests.csv +++ b/tests/tests.csv @@ -1,96 +1,116 @@ -type;uri;cri;red;resolved_uri;resolved_cri;cri_hex;resolved_cri_hex +type;uri;cri;red;resolved_uri;resolved_cri;cri_hex;resolved_cri_hex;comment base;coaps://foo:4711/pa/th?query#frag;[-2, ["foo", 4711], ["pa", "th"], ["query"], "frag"];;;;85218263666f6f19126782627061627468816571756572796466726167 -rt;;[0];;coaps://foo:4711/pa/th?query#frag;[-2, ["foo", 4711], ["pa", "th"], ["query"], "frag"];8100;85218263666f6f19126782627061627468816571756572796466726167 -rt;//a;[null, ["a"]];;coaps://a;[-2, ["a"]];82f6816161;8221816161 -rt;//192.168.0.97;[null, [h'C0A80061']];;coaps://192.168.0.97;[-2, [h'C0A80061']];82f68144c0a80061;82218144c0a80061 -rt;/;[true, [""]];;coaps://foo:4711/;[-2, ["foo", 4711], [""]];82f58160;83218263666f6f1912678160 -rt;/a;[true, ["a"]];;coaps://foo:4711/a;[-2, ["foo", 4711], ["a"]];82f5816161;83218263666f6f191267816161 -rt;?a;[0, null, ["a"]];;coaps://foo:4711/pa/th?a;[-2, ["foo", 4711], ["pa", "th"], ["a"]];8300f6816161;84218263666f6f19126782627061627468816161 -rt;#a;[0, null, null, "a"];;coaps://foo:4711/pa/th?query#a;[-2, ["foo", 4711], ["pa", "th"], ["query"], "a"];8400f6f66161;85218263666f6f19126782627061627468816571756572796161 -rt;a;[1, ["a"]];;coaps://foo:4711/pa/a;[-2, ["foo", 4711], ["pa", "a"]];8201816161;83218263666f6f191267826270616161 -rt;a/b;[1, ["a", "b"]];;coaps://foo:4711/pa/a/b;[-2, ["foo", 4711], ["pa", "a", "b"]];82018261616162;83218263666f6f1912678362706161616162 -red;a/./b;[1, ["a", "b"]];a/b;coaps://foo:4711/pa/a/b;[-2, ["foo", 4711], ["pa", "a", "b"]];82018261616162;83218263666f6f1912678362706161616162 -red;./a/b;[1, ["a", "b"]];a/b;coaps://foo:4711/pa/a/b;[-2, ["foo", 4711], ["pa", "a", "b"]];82018261616162;83218263666f6f1912678362706161616162 -rt;../a;[2, ["a"]];;coaps://foo:4711/a;[-2, ["foo", 4711], ["a"]];8202816161;83218263666f6f191267816161 -red;../a/b/../c/.;[2, ["a", "c"]];../a/c;coaps://foo:4711/a/c;[-2, ["foo", 4711], ["a", "c"]];82028261616163;83218263666f6f1912678261616163 -rt;a://b;["a", ["b"]];;a://b;["a", ["b"]];826161816162;826161816162 -rt;a://192.168.0.98;["a", [h'C0A80062']];;a://192.168.0.98;["a", [h'C0A80062']];8261618144c0a80062;8261618144c0a80062 -rt;a:;["a"];;a:;["a"];816161;816161 -rt;a:b;["a", true, ["b"]];;a:b;["a", true, ["b"]];836161f5816162;836161f5816162 -rt;a:?b;["a", null, null, ["b"]];;a:?b;["a", null, null, ["b"]];846161f6f6816162;846161f6f6816162 -rt;a:/b;["a", null, ["b"]];;a:/b;["a", null, ["b"]];836161f6816162;836161f6816162 -rt;a:#b;["a", null, null, null, "b"];;a:#b;["a", null, null, null, "b"];856161f6f6f66162;856161f6f6f66162 -rt;//a:25186;[null, ["a", 25186]];;coaps://a:25186;[-2, ["a", 25186]];82f6826161196262;8221826161196262 -rt;//a/;[null, ["a"], [""]];;coaps://a/;[-2, ["a"], [""]];83f68161618160;83218161618160 -rt;//a/b;[null, ["a"], ["b"]];;coaps://a/b;[-2, ["a"], ["b"]];83f6816161816162;8321816161816162 -rt;//a?b;[null, ["a"], null, ["b"]];;coaps://a?b;[-2, ["a"], null, ["b"]];84f6816161f6816162;8421816161f6816162 -rt;//a#b;[null, ["a"], null, null, "b"];;coaps://a#b;[-2, ["a"], null, null, "b"];85f6816161f6f66162;8521816161f6f66162 -rt;//192.168.0.97:25186;[null, [h'C0A80061', 25186]];;coaps://192.168.0.97:25186;[-2, [h'C0A80061', 25186]];82f68244c0a80061196262;82218244c0a80061196262 -rt;//192.168.0.97/;[null, [h'C0A80061'], [""]];;coaps://192.168.0.97/;[-2, [h'C0A80061'], [""]];83f68144c0a800618160;83218144c0a800618160 -rt;//192.168.0.97/b;[null, [h'C0A80061'], ["b"]];;coaps://192.168.0.97/b;[-2, [h'C0A80061'], ["b"]];83f68144c0a80061816162;83218144c0a80061816162 -rt;//192.168.0.97?b;[null, [h'C0A80061'], null, ["b"]];;coaps://192.168.0.97?b;[-2, [h'C0A80061'], null, ["b"]];84f68144c0a80061f6816162;84218144c0a80061f6816162 -rt;//192.168.0.97#b;[null, [h'C0A80061'], null, null, "b"];;coaps://192.168.0.97#b;[-2, [h'C0A80061'], null, null, "b"];85f68144c0a80061f6f66162;85218144c0a80061f6f66162 -rt;/?b;[true, [""], ["b"]];;coaps://foo:4711/?b;[-2, ["foo", 4711], [""], ["b"]];83f58160816162;84218263666f6f1912678160816162 -rt;/#b;[true, [""], null, "b"];;coaps://foo:4711/#b;[-2, ["foo", 4711], [""], null, "b"];84f58160f66162;85218263666f6f1912678160f66162 -rt;/a/;[true, ["a", ""]];;coaps://foo:4711/a/;[-2, ["foo", 4711], ["a", ""]];82f582616160;83218263666f6f19126782616160 -rt;/a/b;[true, ["a", "b"]];;coaps://foo:4711/a/b;[-2, ["foo", 4711], ["a", "b"]];82f58261616162;83218263666f6f1912678261616162 -rt;/a?b;[true, ["a"], ["b"]];;coaps://foo:4711/a?b;[-2, ["foo", 4711], ["a"], ["b"]];83f5816161816162;84218263666f6f191267816161816162 -rt;/a#b;[true, ["a"], null, "b"];;coaps://foo:4711/a#b;[-2, ["foo", 4711], ["a"], null, "b"];84f5816161f66162;85218263666f6f191267816161f66162 -rt;?a&b;[0, null, ["a", "b"]];;coaps://foo:4711/pa/th?a&b;[-2, ["foo", 4711], ["pa", "th"], ["a", "b"]];8300f68261616162;84218263666f6f191267826270616274688261616162 -rt;?a#b;[0, null, ["a"], "b"];;coaps://foo:4711/pa/th?a#b;[-2, ["foo", 4711], ["pa", "th"], ["a"], "b"];8400f68161616162;85218263666f6f191267826270616274688161616162 -rt;a://b:25443;["a", ["b", 25443]];;a://b:25443;["a", ["b", 25443]];826161826162196363;826161826162196363 -rt;a://b/;["a", ["b"], [""]];;a://b/;["a", ["b"], [""]];8361618161628160;8361618161628160 -rt;a://b/c;["a", ["b"], ["c"]];;a://b/c;["a", ["b"], ["c"]];836161816162816163;836161816162816163 -rt;a://b?c;["a", ["b"], null, ["c"]];;a://b?c;["a", ["b"], null, ["c"]];846161816162f6816163;846161816162f6816163 -rt;a://b#c;["a", ["b"], null, null, "c"];;a://b#c;["a", ["b"], null, null, "c"];856161816162f6f66163;856161816162f6f66163 -rt;a://192.168.0.98:25443;["a", [h'C0A80062', 25443]];;a://192.168.0.98:25443;["a", [h'C0A80062', 25443]];8261618244c0a80062196363;8261618244c0a80062196363 -rt;a://192.168.0.98/;["a", [h'C0A80062'], [""]];;a://192.168.0.98/;["a", [h'C0A80062'], [""]];8361618144c0a800628160;8361618144c0a800628160 -rt;a://192.168.0.98/c;["a", [h'C0A80062'], ["c"]];;a://192.168.0.98/c;["a", [h'C0A80062'], ["c"]];8361618144c0a80062816163;8361618144c0a80062816163 -rt;a://192.168.0.98?c;["a", [h'C0A80062'], null, ["c"]];;a://192.168.0.98?c;["a", [h'C0A80062'], null, ["c"]];8461618144c0a80062f6816163;8461618144c0a80062f6816163 -rt;a://192.168.0.98#c;["a", [h'C0A80062'], null, null, "c"];;a://192.168.0.98#c;["a", [h'C0A80062'], null, null, "c"];8561618144c0a80062f6f66163;8561618144c0a80062f6f66163 -rt;a:?c;["a", null, null, ["c"]];;a:?c;["a", null, null, ["c"]];846161f6f6816163;846161f6f6816163 -rt;a:#c;["a", null, null, null, "c"];;a:#c;["a", null, null, null, "c"];856161f6f6f66163;856161f6f6f66163 -rt;a:b/;["a", true, ["b", ""]];;a:b/;["a", true, ["b", ""]];836161f582616260;836161f582616260 -rt;a:b/c;["a", true, ["b", "c"]];;a:b/c;["a", true, ["b", "c"]];836161f58261626163;836161f58261626163 -rt;a:b%3Fc;["a", true, ["b?c"]];;a:b%3Fc;["a", true, ["b?c"]];836161f58163623f63;836161f58163623f63 -rt;a:b?c;["a", true, ["b"], ["c"]];;a:b?c;["a", true, ["b"], ["c"]];846161f5816162816163;846161f5816162816163 -rt;a:b#c;["a", true, ["b"], null, "c"];;a:b#c;["a", true, ["b"], null, "c"];856161f5816162f66163;856161f5816162f66163 -rt;a:?b&c;["a", null, null, ["b", "c"]];;a:?b&c;["a", null, null, ["b", "c"]];846161f6f68261626163;846161f6f68261626163 -rt;a:?b#c;["a", null, null, ["b"], "c"];;a:?b#c;["a", null, null, ["b"], "c"];856161f6f68161626163;856161f6f68161626163 -rt;//a:25186/;[null, ["a", 25186], [""]];;coaps://a:25186/;[-2, ["a", 25186], [""]];83f68261611962628160;83218261611962628160 -rt;//a:25186/c;[null, ["a", 25186], ["c"]];;coaps://a:25186/c;[-2, ["a", 25186], ["c"]];83f6826161196262816163;8321826161196262816163 -rt;//a:25186?c;[null, ["a", 25186], null, ["c"]];;coaps://a:25186?c;[-2, ["a", 25186], null, ["c"]];84f6826161196262f6816163;8421826161196262f6816163 -rt;//a:25186#c;[null, ["a", 25186], null, null, "c"];;coaps://a:25186#c;[-2, ["a", 25186], null, null, "c"];85f6826161196262f6f66163;8521826161196262f6f66163 -rt;//a/?c;[null, ["a"], [""], ["c"]];;coaps://a/?c;[-2, ["a"], [""], ["c"]];84f68161618160816163;84218161618160816163 -rt;//a/#c;[null, ["a"], [""], null, "c"];;coaps://a/#c;[-2, ["a"], [""], null, "c"];85f68161618160f66163;85218161618160f66163 -rt;//a/b/;[null, ["a"], ["b", ""]];;coaps://a/b/;[-2, ["a"], ["b", ""]];83f681616182616260;832181616182616260 -rt;//a/b/c;[null, ["a"], ["b", "c"]];;coaps://a/b/c;[-2, ["a"], ["b", "c"]];83f68161618261626163;83218161618261626163 -rt;//a/b?c;[null, ["a"], ["b"], ["c"]];;coaps://a/b?c;[-2, ["a"], ["b"], ["c"]];84f6816161816162816163;8421816161816162816163 -rt;//a/b#c;[null, ["a"], ["b"], null, "c"];;coaps://a/b#c;[-2, ["a"], ["b"], null, "c"];85f6816161816162f66163;8521816161816162f66163 -rt;//a?b&c;[null, ["a"], null, ["b", "c"]];;coaps://a?b&c;[-2, ["a"], null, ["b", "c"]];84f6816161f68261626163;8421816161f68261626163 -rt;//a?b#c;[null, ["a"], null, ["b"], "c"];;coaps://a?b#c;[-2, ["a"], null, ["b"], "c"];85f6816161f68161626163;8521816161f68161626163 -rt;//192.168.0.97:25186/;[null, [h'C0A80061', 25186], [""]];;coaps://192.168.0.97:25186/;[-2, [h'C0A80061', 25186], [""]];83f68244c0a800611962628160;83218244c0a800611962628160 -rt;//192.168.0.97:25186/c;[null, [h'C0A80061', 25186], ["c"]];;coaps://192.168.0.97:25186/c;[-2, [h'C0A80061', 25186], ["c"]];83f68244c0a80061196262816163;83218244c0a80061196262816163 -rt;//192.168.0.97:25186?c;[null, [h'C0A80061', 25186], null, ["c"]];;coaps://192.168.0.97:25186?c;[-2, [h'C0A80061', 25186], null, ["c"]];84f68244c0a80061196262f6816163;84218244c0a80061196262f6816163 -rt;//192.168.0.97:25186#c;[null, [h'C0A80061', 25186], null, null, "c"];;coaps://192.168.0.97:25186#c;[-2, [h'C0A80061', 25186], null, null, "c"];85f68244c0a80061196262f6f66163;85218244c0a80061196262f6f66163 -rt;//192.168.0.97/?c;[null, [h'C0A80061'], [""], ["c"]];;coaps://192.168.0.97/?c;[-2, [h'C0A80061'], [""], ["c"]];84f68144c0a800618160816163;84218144c0a800618160816163 -rt;//192.168.0.97/#c;[null, [h'C0A80061'], [""], null, "c"];;coaps://192.168.0.97/#c;[-2, [h'C0A80061'], [""], null, "c"];85f68144c0a800618160f66163;85218144c0a800618160f66163 -rt;//192.168.0.97/b/;[null, [h'C0A80061'], ["b", ""]];;coaps://192.168.0.97/b/;[-2, [h'C0A80061'], ["b", ""]];83f68144c0a8006182616260;83218144c0a8006182616260 -rt;//192.168.0.97/b/c;[null, [h'C0A80061'], ["b", "c"]];;coaps://192.168.0.97/b/c;[-2, [h'C0A80061'], ["b", "c"]];83f68144c0a800618261626163;83218144c0a800618261626163 -rt;//192.168.0.97/b?c;[null, [h'C0A80061'], ["b"], ["c"]];;coaps://192.168.0.97/b?c;[-2, [h'C0A80061'], ["b"], ["c"]];84f68144c0a80061816162816163;84218144c0a80061816162816163 -rt;//192.168.0.97/b#c;[null, [h'C0A80061'], ["b"], null, "c"];;coaps://192.168.0.97/b#c;[-2, [h'C0A80061'], ["b"], null, "c"];85f68144c0a80061816162f66163;85218144c0a80061816162f66163 -rt;//192.168.0.97?b&c;[null, [h'C0A80061'], null, ["b", "c"]];;coaps://192.168.0.97?b&c;[-2, [h'C0A80061'], null, ["b", "c"]];84f68144c0a80061f68261626163;84218144c0a80061f68261626163 -rt;//192.168.0.97?b#c;[null, [h'C0A80061'], null, ["b"], "c"];;coaps://192.168.0.97?b#c;[-2, [h'C0A80061'], null, ["b"], "c"];85f68144c0a80061f68161626163;85218144c0a80061f68161626163 -rt;/?b&c;[true, [""], ["b", "c"]];;coaps://foo:4711/?b&c;[-2, ["foo", 4711], [""], ["b", "c"]];83f581608261626163;84218263666f6f19126781608261626163 -rt;/?b#c;[true, [""], ["b"], "c"];;coaps://foo:4711/?b#c;[-2, ["foo", 4711], [""], ["b"], "c"];84f581608161626163;85218263666f6f19126781608161626163 -rt;/a//;[true, ["a", "", ""]];;coaps://foo:4711/a//;[-2, ["foo", 4711], ["a", "", ""]];82f58361616060;83218263666f6f1912678361616060 -rt;/a//c;[true, ["a", "", "c"]];;coaps://foo:4711/a//c;[-2, ["foo", 4711], ["a", "", "c"]];82f5836161606163;83218263666f6f191267836161606163 -rt;/a/?c;[true, ["a", ""], ["c"]];;coaps://foo:4711/a/?c;[-2, ["foo", 4711], ["a", ""], ["c"]];83f582616160816163;84218263666f6f19126782616160816163 -rt;/a/#c;[true, ["a", ""], null, "c"];;coaps://foo:4711/a/#c;[-2, ["foo", 4711], ["a", ""], null, "c"];84f582616160f66163;85218263666f6f19126782616160f66163 -rt;/a/b/;[true, ["a", "b", ""]];;coaps://foo:4711/a/b/;[-2, ["foo", 4711], ["a", "b", ""]];82f5836161616260;83218263666f6f191267836161616260 -rt;/a/b/c;[true, ["a", "b", "c"]];;coaps://foo:4711/a/b/c;[-2, ["foo", 4711], ["a", "b", "c"]];82f583616161626163;83218263666f6f19126783616161626163 -rt;/a/b?c;[true, ["a", "b"], ["c"]];;coaps://foo:4711/a/b?c;[-2, ["foo", 4711], ["a", "b"], ["c"]];83f58261616162816163;84218263666f6f1912678261616162816163 -rt;/a/b#c;[true, ["a", "b"], null, "c"];;coaps://foo:4711/a/b#c;[-2, ["foo", 4711], ["a", "b"], null, "c"];84f58261616162f66163;85218263666f6f1912678261616162f66163 -rt;/a?b&c;[true, ["a"], ["b", "c"]];;coaps://foo:4711/a?b&c;[-2, ["foo", 4711], ["a"], ["b", "c"]];83f58161618261626163;84218263666f6f1912678161618261626163 -rt;/a?b#c;[true, ["a"], ["b"], "c"];;coaps://foo:4711/a?b#c;[-2, ["foo", 4711], ["a"], ["b"], "c"];84f58161618161626163;85218263666f6f1912678161618161626163 -rt;?a&b&c;[0, null, ["a", "b", "c"]];;coaps://foo:4711/pa/th?a&b&c;[-2, ["foo", 4711], ["pa", "th"], ["a", "b", "c"]];8300f683616161626163;84218263666f6f1912678262706162746883616161626163 +rt;;[0];;coaps://foo:4711/pa/th?query#frag;[-2, ["foo", 4711], ["pa", "th"], ["query"], "frag"];8100;85218263666f6f19126782627061627468816571756572796466726167; +rt;//a;[null, ["a"]];;coaps://a;[-2, ["a"]];82f6816161;8221816161; +rt;//192.168.0.97;[null, [h'C0A80061']];;coaps://192.168.0.97;[-2, [h'C0A80061']];82f68144c0a80061;82218144c0a80061; +rt;/;[true, [""]];;coaps://foo:4711/;[-2, ["foo", 4711], [""]];82f58160;83218263666f6f1912678160; +rt;/a;[true, ["a"]];;coaps://foo:4711/a;[-2, ["foo", 4711], ["a"]];82f5816161;83218263666f6f191267816161; +rt;?a;[0, null, ["a"]];;coaps://foo:4711/pa/th?a;[-2, ["foo", 4711], ["pa", "th"], ["a"]];8300f6816161;84218263666f6f19126782627061627468816161; +rt;#a;[0, null, null, "a"];;coaps://foo:4711/pa/th?query#a;[-2, ["foo", 4711], ["pa", "th"], ["query"], "a"];8400f6f66161;85218263666f6f19126782627061627468816571756572796161; +rt;a;[1, ["a"]];;coaps://foo:4711/pa/a;[-2, ["foo", 4711], ["pa", "a"]];8201816161;83218263666f6f191267826270616161; +rt;a/b;[1, ["a", "b"]];;coaps://foo:4711/pa/a/b;[-2, ["foo", 4711], ["pa", "a", "b"]];82018261616162;83218263666f6f1912678362706161616162; +red;a/./b;[1, ["a", "b"]];a/b;coaps://foo:4711/pa/a/b;[-2, ["foo", 4711], ["pa", "a", "b"]];82018261616162;83218263666f6f1912678362706161616162; +red;./a/b;[1, ["a", "b"]];a/b;coaps://foo:4711/pa/a/b;[-2, ["foo", 4711], ["pa", "a", "b"]];82018261616162;83218263666f6f1912678362706161616162; +rt;../a;[2, ["a"]];;coaps://foo:4711/a;[-2, ["foo", 4711], ["a"]];8202816161;83218263666f6f191267816161; +red;../a/b/../c/.;[2, ["a", "c"]];../a/c;coaps://foo:4711/a/c;[-2, ["foo", 4711], ["a", "c"]];82028261616163;83218263666f6f1912678261616163; +rt;a://b;["a", ["b"]];;a://b;["a", ["b"]];826161816162;826161816162; +rt;a://192.168.0.98;["a", [h'C0A80062']];;a://192.168.0.98;["a", [h'C0A80062']];8261618144c0a80062;8261618144c0a80062; +rt;a:;["a"];;a:;["a"];816161;816161; +rt;a:b;["a", true, ["b"]];;a:b;["a", true, ["b"]];836161f5816162;836161f5816162; +rt;a:?b;["a", null, null, ["b"]];;a:?b;["a", null, null, ["b"]];846161f6f6816162;846161f6f6816162; +rt;a:/b;["a", null, ["b"]];;a:/b;["a", null, ["b"]];836161f6816162;836161f6816162; +rt;a:#b;["a", null, null, null, "b"];;a:#b;["a", null, null, null, "b"];856161f6f6f66162;856161f6f6f66162; +rt;//a:25186;[null, ["a", 25186]];;coaps://a:25186;[-2, ["a", 25186]];82f6826161196262;8221826161196262; +rt;//a/;[null, ["a"], [""]];;coaps://a/;[-2, ["a"], [""]];83f68161618160;83218161618160; +rt;//a/b;[null, ["a"], ["b"]];;coaps://a/b;[-2, ["a"], ["b"]];83f6816161816162;8321816161816162; +rt;//a?b;[null, ["a"], null, ["b"]];;coaps://a?b;[-2, ["a"], null, ["b"]];84f6816161f6816162;8421816161f6816162; +rt;//a#b;[null, ["a"], null, null, "b"];;coaps://a#b;[-2, ["a"], null, null, "b"];85f6816161f6f66162;8521816161f6f66162; +rt;//192.168.0.97:25186;[null, [h'C0A80061', 25186]];;coaps://192.168.0.97:25186;[-2, [h'C0A80061', 25186]];82f68244c0a80061196262;82218244c0a80061196262; +rt;//192.168.0.97/;[null, [h'C0A80061'], [""]];;coaps://192.168.0.97/;[-2, [h'C0A80061'], [""]];83f68144c0a800618160;83218144c0a800618160; +rt;//192.168.0.97/b;[null, [h'C0A80061'], ["b"]];;coaps://192.168.0.97/b;[-2, [h'C0A80061'], ["b"]];83f68144c0a80061816162;83218144c0a80061816162; +rt;//192.168.0.97?b;[null, [h'C0A80061'], null, ["b"]];;coaps://192.168.0.97?b;[-2, [h'C0A80061'], null, ["b"]];84f68144c0a80061f6816162;84218144c0a80061f6816162; +rt;//192.168.0.97#b;[null, [h'C0A80061'], null, null, "b"];;coaps://192.168.0.97#b;[-2, [h'C0A80061'], null, null, "b"];85f68144c0a80061f6f66162;85218144c0a80061f6f66162; +rt;/?b;[true, [""], ["b"]];;coaps://foo:4711/?b;[-2, ["foo", 4711], [""], ["b"]];83f58160816162;84218263666f6f1912678160816162; +rt;/#b;[true, [""], null, "b"];;coaps://foo:4711/#b;[-2, ["foo", 4711], [""], null, "b"];84f58160f66162;85218263666f6f1912678160f66162; +rt;/a/;[true, ["a", ""]];;coaps://foo:4711/a/;[-2, ["foo", 4711], ["a", ""]];82f582616160;83218263666f6f19126782616160; +rt;/a/b;[true, ["a", "b"]];;coaps://foo:4711/a/b;[-2, ["foo", 4711], ["a", "b"]];82f58261616162;83218263666f6f1912678261616162; +rt;/a?b;[true, ["a"], ["b"]];;coaps://foo:4711/a?b;[-2, ["foo", 4711], ["a"], ["b"]];83f5816161816162;84218263666f6f191267816161816162; +rt;/a#b;[true, ["a"], null, "b"];;coaps://foo:4711/a#b;[-2, ["foo", 4711], ["a"], null, "b"];84f5816161f66162;85218263666f6f191267816161f66162; +rt;?a&b;[0, null, ["a", "b"]];;coaps://foo:4711/pa/th?a&b;[-2, ["foo", 4711], ["pa", "th"], ["a", "b"]];8300f68261616162;84218263666f6f191267826270616274688261616162; +rt;?a#b;[0, null, ["a"], "b"];;coaps://foo:4711/pa/th?a#b;[-2, ["foo", 4711], ["pa", "th"], ["a"], "b"];8400f68161616162;85218263666f6f191267826270616274688161616162; +rt;a://b:25443;["a", ["b", 25443]];;a://b:25443;["a", ["b", 25443]];826161826162196363;826161826162196363; +rt;a://b/;["a", ["b"], [""]];;a://b/;["a", ["b"], [""]];8361618161628160;8361618161628160; +rt;a://b/c;["a", ["b"], ["c"]];;a://b/c;["a", ["b"], ["c"]];836161816162816163;836161816162816163; +rt;a://b?c;["a", ["b"], null, ["c"]];;a://b?c;["a", ["b"], null, ["c"]];846161816162f6816163;846161816162f6816163; +rt;a://b#c;["a", ["b"], null, null, "c"];;a://b#c;["a", ["b"], null, null, "c"];856161816162f6f66163;856161816162f6f66163; +rt;a://192.168.0.98:25443;["a", [h'C0A80062', 25443]];;a://192.168.0.98:25443;["a", [h'C0A80062', 25443]];8261618244c0a80062196363;8261618244c0a80062196363; +rt;a://192.168.0.98/;["a", [h'C0A80062'], [""]];;a://192.168.0.98/;["a", [h'C0A80062'], [""]];8361618144c0a800628160;8361618144c0a800628160; +rt;a://192.168.0.98/c;["a", [h'C0A80062'], ["c"]];;a://192.168.0.98/c;["a", [h'C0A80062'], ["c"]];8361618144c0a80062816163;8361618144c0a80062816163; +rt;a://192.168.0.98?c;["a", [h'C0A80062'], null, ["c"]];;a://192.168.0.98?c;["a", [h'C0A80062'], null, ["c"]];8461618144c0a80062f6816163;8461618144c0a80062f6816163; +rt;a://192.168.0.98#c;["a", [h'C0A80062'], null, null, "c"];;a://192.168.0.98#c;["a", [h'C0A80062'], null, null, "c"];8561618144c0a80062f6f66163;8561618144c0a80062f6f66163; +rt;a:?c;["a", null, null, ["c"]];;a:?c;["a", null, null, ["c"]];846161f6f6816163;846161f6f6816163; +rt;a:#c;["a", null, null, null, "c"];;a:#c;["a", null, null, null, "c"];856161f6f6f66163;856161f6f6f66163; +rt;a:b/;["a", true, ["b", ""]];;a:b/;["a", true, ["b", ""]];836161f582616260;836161f582616260; +rt;a:b/c;["a", true, ["b", "c"]];;a:b/c;["a", true, ["b", "c"]];836161f58261626163;836161f58261626163; +rt;a:b%3Fc;["a", true, ["b?c"]];;a:b%3Fc;["a", true, ["b?c"]];836161f58163623f63;836161f58163623f63; +rt;a:b?c;["a", true, ["b"], ["c"]];;a:b?c;["a", true, ["b"], ["c"]];846161f5816162816163;846161f5816162816163; +rt;a:b#c;["a", true, ["b"], null, "c"];;a:b#c;["a", true, ["b"], null, "c"];856161f5816162f66163;856161f5816162f66163; +rt;a:?b&c;["a", null, null, ["b", "c"]];;a:?b&c;["a", null, null, ["b", "c"]];846161f6f68261626163;846161f6f68261626163; +rt;a:?b#c;["a", null, null, ["b"], "c"];;a:?b#c;["a", null, null, ["b"], "c"];856161f6f68161626163;856161f6f68161626163; +rt;//a:25186/;[null, ["a", 25186], [""]];;coaps://a:25186/;[-2, ["a", 25186], [""]];83f68261611962628160;83218261611962628160; +rt;//a:25186/c;[null, ["a", 25186], ["c"]];;coaps://a:25186/c;[-2, ["a", 25186], ["c"]];83f6826161196262816163;8321826161196262816163; +rt;//a:25186?c;[null, ["a", 25186], null, ["c"]];;coaps://a:25186?c;[-2, ["a", 25186], null, ["c"]];84f6826161196262f6816163;8421826161196262f6816163; +rt;//a:25186#c;[null, ["a", 25186], null, null, "c"];;coaps://a:25186#c;[-2, ["a", 25186], null, null, "c"];85f6826161196262f6f66163;8521826161196262f6f66163; +rt;//a/?c;[null, ["a"], [""], ["c"]];;coaps://a/?c;[-2, ["a"], [""], ["c"]];84f68161618160816163;84218161618160816163; +rt;//a/#c;[null, ["a"], [""], null, "c"];;coaps://a/#c;[-2, ["a"], [""], null, "c"];85f68161618160f66163;85218161618160f66163; +rt;//a/b/;[null, ["a"], ["b", ""]];;coaps://a/b/;[-2, ["a"], ["b", ""]];83f681616182616260;832181616182616260; +rt;//a/b/c;[null, ["a"], ["b", "c"]];;coaps://a/b/c;[-2, ["a"], ["b", "c"]];83f68161618261626163;83218161618261626163; +rt;//a/b?c;[null, ["a"], ["b"], ["c"]];;coaps://a/b?c;[-2, ["a"], ["b"], ["c"]];84f6816161816162816163;8421816161816162816163; +rt;//a/b#c;[null, ["a"], ["b"], null, "c"];;coaps://a/b#c;[-2, ["a"], ["b"], null, "c"];85f6816161816162f66163;8521816161816162f66163; +rt;//a?b&c;[null, ["a"], null, ["b", "c"]];;coaps://a?b&c;[-2, ["a"], null, ["b", "c"]];84f6816161f68261626163;8421816161f68261626163; +rt;//a?b#c;[null, ["a"], null, ["b"], "c"];;coaps://a?b#c;[-2, ["a"], null, ["b"], "c"];85f6816161f68161626163;8521816161f68161626163; +rt;//192.168.0.97:25186/;[null, [h'C0A80061', 25186], [""]];;coaps://192.168.0.97:25186/;[-2, [h'C0A80061', 25186], [""]];83f68244c0a800611962628160;83218244c0a800611962628160; +rt;//192.168.0.97:25186/c;[null, [h'C0A80061', 25186], ["c"]];;coaps://192.168.0.97:25186/c;[-2, [h'C0A80061', 25186], ["c"]];83f68244c0a80061196262816163;83218244c0a80061196262816163; +rt;//192.168.0.97:25186?c;[null, [h'C0A80061', 25186], null, ["c"]];;coaps://192.168.0.97:25186?c;[-2, [h'C0A80061', 25186], null, ["c"]];84f68244c0a80061196262f6816163;84218244c0a80061196262f6816163; +rt;//192.168.0.97:25186#c;[null, [h'C0A80061', 25186], null, null, "c"];;coaps://192.168.0.97:25186#c;[-2, [h'C0A80061', 25186], null, null, "c"];85f68244c0a80061196262f6f66163;85218244c0a80061196262f6f66163; +rt;//192.168.0.97/?c;[null, [h'C0A80061'], [""], ["c"]];;coaps://192.168.0.97/?c;[-2, [h'C0A80061'], [""], ["c"]];84f68144c0a800618160816163;84218144c0a800618160816163; +rt;//192.168.0.97/#c;[null, [h'C0A80061'], [""], null, "c"];;coaps://192.168.0.97/#c;[-2, [h'C0A80061'], [""], null, "c"];85f68144c0a800618160f66163;85218144c0a800618160f66163; +rt;//192.168.0.97/b/;[null, [h'C0A80061'], ["b", ""]];;coaps://192.168.0.97/b/;[-2, [h'C0A80061'], ["b", ""]];83f68144c0a8006182616260;83218144c0a8006182616260; +rt;//192.168.0.97/b/c;[null, [h'C0A80061'], ["b", "c"]];;coaps://192.168.0.97/b/c;[-2, [h'C0A80061'], ["b", "c"]];83f68144c0a800618261626163;83218144c0a800618261626163; +rt;//192.168.0.97/b?c;[null, [h'C0A80061'], ["b"], ["c"]];;coaps://192.168.0.97/b?c;[-2, [h'C0A80061'], ["b"], ["c"]];84f68144c0a80061816162816163;84218144c0a80061816162816163; +rt;//192.168.0.97/b#c;[null, [h'C0A80061'], ["b"], null, "c"];;coaps://192.168.0.97/b#c;[-2, [h'C0A80061'], ["b"], null, "c"];85f68144c0a80061816162f66163;85218144c0a80061816162f66163; +rt;//192.168.0.97?b&c;[null, [h'C0A80061'], null, ["b", "c"]];;coaps://192.168.0.97?b&c;[-2, [h'C0A80061'], null, ["b", "c"]];84f68144c0a80061f68261626163;84218144c0a80061f68261626163; +rt;//192.168.0.97?b#c;[null, [h'C0A80061'], null, ["b"], "c"];;coaps://192.168.0.97?b#c;[-2, [h'C0A80061'], null, ["b"], "c"];85f68144c0a80061f68161626163;85218144c0a80061f68161626163; +rt;/?b&c;[true, [""], ["b", "c"]];;coaps://foo:4711/?b&c;[-2, ["foo", 4711], [""], ["b", "c"]];83f581608261626163;84218263666f6f19126781608261626163; +rt;/?b#c;[true, [""], ["b"], "c"];;coaps://foo:4711/?b#c;[-2, ["foo", 4711], [""], ["b"], "c"];84f581608161626163;85218263666f6f19126781608161626163; +rt;/a//;[true, ["a", "", ""]];;coaps://foo:4711/a//;[-2, ["foo", 4711], ["a", "", ""]];82f58361616060;83218263666f6f1912678361616060; +rt;/a//c;[true, ["a", "", "c"]];;coaps://foo:4711/a//c;[-2, ["foo", 4711], ["a", "", "c"]];82f5836161606163;83218263666f6f191267836161606163; +rt;/a/?c;[true, ["a", ""], ["c"]];;coaps://foo:4711/a/?c;[-2, ["foo", 4711], ["a", ""], ["c"]];83f582616160816163;84218263666f6f19126782616160816163; +rt;/a/#c;[true, ["a", ""], null, "c"];;coaps://foo:4711/a/#c;[-2, ["foo", 4711], ["a", ""], null, "c"];84f582616160f66163;85218263666f6f19126782616160f66163; +rt;/a/b/;[true, ["a", "b", ""]];;coaps://foo:4711/a/b/;[-2, ["foo", 4711], ["a", "b", ""]];82f5836161616260;83218263666f6f191267836161616260; +rt;/a/b/c;[true, ["a", "b", "c"]];;coaps://foo:4711/a/b/c;[-2, ["foo", 4711], ["a", "b", "c"]];82f583616161626163;83218263666f6f19126783616161626163; +rt;/a/b?c;[true, ["a", "b"], ["c"]];;coaps://foo:4711/a/b?c;[-2, ["foo", 4711], ["a", "b"], ["c"]];83f58261616162816163;84218263666f6f1912678261616162816163; +rt;/a/b#c;[true, ["a", "b"], null, "c"];;coaps://foo:4711/a/b#c;[-2, ["foo", 4711], ["a", "b"], null, "c"];84f58261616162f66163;85218263666f6f1912678261616162f66163; +rt;/a?b&c;[true, ["a"], ["b", "c"]];;coaps://foo:4711/a?b&c;[-2, ["foo", 4711], ["a"], ["b", "c"]];83f58161618261626163;84218263666f6f1912678161618261626163; +rt;/a?b#c;[true, ["a"], ["b"], "c"];;coaps://foo:4711/a?b#c;[-2, ["foo", 4711], ["a"], ["b"], "c"];84f58161618161626163;85218263666f6f1912678161618161626163; +rt;?a&b&c;[0, null, ["a", "b", "c"]];;coaps://foo:4711/pa/th?a&b&c;[-2, ["foo", 4711], ["pa", "th"], ["a", "b", "c"]];8300f683616161626163;84218263666f6f1912678262706162746883616161626163; +rt;;[true];;coaps://foo:4711/pa/th?query#frag;[-2, ["foo", 4711], ["pa", "th"], ["query"], "frag"];80;85218263666f6f19126782627061627468816571756572796466726167;Empty CRI +rt;//a.b;[null, ["a", "b"]];;coaps://a.b;[-2, ["a", "b"]];82f68261616162;82218261616162;Dotted host name +rt;//a%2Ea;[null, ["a.a"]];;coaps://a%2Eb;[-2, ["a.a"]];82f68163612e61;82218163612e61;Weird non-PET in host +rt;//a%3Aa;[null, [["a", h'3A', "a"]]];;coaps://a%3Aa;[-2, [["a", h'3A', "a"]]];82f681836161413a6161;822181836161413a6161;PET (':') in host +rt;/a%2Fa%25a;[true, ["a/a%a"]];;coaps://foo:4711/a%2Fa%25a;[-2, ["foo", 4711], ["a/a%a"]];82f58165612f612561;83218263666f6f1912678165612f612561;Non-PET in path +rt;|/a;a|;|[true, ["a;a"]]|;;|coaps://foo:4711/a;a|;|[-2, ["foo", 4711], ["a;a"]]|;82f58163613b61;83218263666f6f1912678163613b61;Semicolon in path (pretty tame, but contrasting the next example) +rt;/a%3Ba;[true, [["a", h'3B', "a"]]];;coaps://foo:4711/a%3Ba;[-2, ["foo", 4711], [["a", h'3B', "a"]]];82f581836161413b6161;83218263666f6f19126781836161413b6161;PET in path +rt;;[true, [], ["a&a"]];;coaps://foo:4711?a%26a;[-2, ["foo", 4711], [], ["a&a"]];83f5808163612661;84218263666f6f191267808163612661;escaped non-PET in query (discarding path without empty trailing) +rt;/?a%26a;[true, [""], ["a&a"]];;coaps://foo:4711/?a%26a;[-2, ["foo", 4711], [""], ["a&a"]];83f581608163612661;84218263666f6f19126781608163612661;escaped non-PET in query (discarding path but restoring an empty trailing path component) +rt;/?a%23a;[true, [""], [["a", h'23', "a"]]];;coaps://foo:4711/?a%23a;[-2, ["foo", 4711], [""], [["a", h'23', "a"]]];83f581608183616141236161;84218263666f6f19126781608183616141236161;PET in query +rt;#/;[0, null, null, "/"];;coaps://foo:4711/pa/th?query#/;[-2, ["foo", 4711], ["pa", "th"], ["query"], "/"];8400f6f6612f;85218263666f6f1912678262706162746881657175657279612f;unescaped non-PET (but delimiter) in fragment +rt;#%5B%5D;[0, null, null, "[]"];;coaps://foo:4711/pa/th?query#%5B%5D;[-2, ["foo", 4711], ["pa", "th"], ["query"], "[]"];8400f6f6625b5d;85218263666f6f1912678262706162746881657175657279625b5d;escaped non-PET in fragment +rt;#%2F;[0, null, null, [h'2F']];;coaps://foo:4711/pa/th?query#%2F;[-2, ["foo", 4711], ["pa", "th"], ["query"], [h'2F']];8400f6f681412f;85218263666f6f191267826270616274688165717565727981412f;PET in fragment +rt;//non%3Aport.x;[null, ["non:port", "x"]];;coaps://non%3Aport.x;[-2, ["non:port", "x"]];82f682686e6f6e3a706f72746178;822182686e6f6e3a706f72746178;escaped non-PET in host +rt;//non!port.x;[null, [["non!port"], "x"]];;coaps://non!port.x;[-2, [["non!port"], "x"]];82f68281686e6f6e21706f72746178;82218281686e6f6e21706f72746178;unescaped non-PET (but delimiter) in host +rt;//non%21port.x;[null, [["non", h'21', "port"], "x"]];;coaps://non%21port.x;[-2, [["non", h'21', "port"], "x"]];82f68283636e6f6e412164706f72746178;82218283636e6f6e412164706f72746178;PET in host +rt;//alice%40example.com@example.com;[null, [false, "alice@example.com", "example", "com"]];;coaps://alice%40example.com@example.com;[-2, [false, "alice@example.com", "example", "com"]];82f684f471616c696365406578616d706c652e636f6d676578616d706c6563636f6d;822184f471616c696365406578616d706c652e636f6d676578616d706c6563636f6d;escaped non-PET in userinfo +rt;//c+%2B@example.com;[null, [false, ["c+", h'2B'], "example", "com"]];;coaps://c+%2B@example.com;[-2, [false, ["c+", h'2B'], "example", "com"]];82f684f48262632b412b676578616d706c6563636f6d;822184f48262632b412b676578616d706c6563636f6d;escaped and unescaped delimiter in userinfo +rt;./foo:bar;[1, ["foo:bar"]];;coaps://foo:4711/pa/foo:bar;[-2, ["foo", 4711], ["pa", "foo:bar"]];82018167666f6f3a626172;83218263666f6f1912678262706167666f6f3a626172;colon in first URI path needs to be preserved to disambiguate against full URIs +rt;math://equation=E%3Dmc%C2%B2/;["math", [["equation=E", h'3D', "mc\u00b2"]], [""]];;math://equation=E%3Dmc%C2%B2/;["math", [["equation=E", h'3D', "mc\u00b2"]], [""]];83646d61746881836a6571756174696f6e3d45413d646d63c2b28160;83646d61746881836a6571756174696f6e3d45413d646d63c2b28160;PET in contrast to unescaped subdelim in hostname diff --git a/tests/tests.json b/tests/tests.json index b37d272..9c9ec5c 100644 --- a/tests/tests.json +++ b/tests/tests.json @@ -3,6 +3,7 @@ "base-cri": "85218263666f6f19126782627061627468816571756572796466726167", "test-vectors": [ { + "description": "", "uri": "", "cri": "8100", "uri-from-cri": "", @@ -10,6 +11,7 @@ "resolved-uri": "coaps://foo:4711/pa/th?query#frag" }, { + "description": "", "uri": "//a", "cri": "82f6816161", "uri-from-cri": "//a", @@ -17,6 +19,7 @@ "resolved-uri": "coaps://a" }, { + "description": "", "uri": "//192.168.0.97", "cri": "82f68144c0a80061", "uri-from-cri": "//192.168.0.97", @@ -24,6 +27,7 @@ "resolved-uri": "coaps://192.168.0.97" }, { + "description": "", "uri": "/", "cri": "82f58160", "uri-from-cri": "/", @@ -31,6 +35,7 @@ "resolved-uri": "coaps://foo:4711/" }, { + "description": "", "uri": "/a", "cri": "82f5816161", "uri-from-cri": "/a", @@ -38,6 +43,7 @@ "resolved-uri": "coaps://foo:4711/a" }, { + "description": "", "uri": "?a", "cri": "8300f6816161", "uri-from-cri": "?a", @@ -45,6 +51,7 @@ "resolved-uri": "coaps://foo:4711/pa/th?a" }, { + "description": "", "uri": "#a", "cri": "8400f6f66161", "uri-from-cri": "#a", @@ -52,6 +59,7 @@ "resolved-uri": "coaps://foo:4711/pa/th?query#a" }, { + "description": "", "uri": "a", "cri": "8201816161", "uri-from-cri": "a", @@ -59,6 +67,7 @@ "resolved-uri": "coaps://foo:4711/pa/a" }, { + "description": "", "uri": "a/b", "cri": "82018261616162", "uri-from-cri": "a/b", @@ -66,6 +75,7 @@ "resolved-uri": "coaps://foo:4711/pa/a/b" }, { + "description": "", "uri": "a/./b", "cri": "82018261616162", "uri-from-cri": "a/b", @@ -73,6 +83,7 @@ "resolved-uri": "coaps://foo:4711/pa/a/b" }, { + "description": "", "uri": "./a/b", "cri": "82018261616162", "uri-from-cri": "a/b", @@ -80,6 +91,7 @@ "resolved-uri": "coaps://foo:4711/pa/a/b" }, { + "description": "", "uri": "../a", "cri": "8202816161", "uri-from-cri": "../a", @@ -87,6 +99,7 @@ "resolved-uri": "coaps://foo:4711/a" }, { + "description": "", "uri": "../a/b/../c/.", "cri": "82028261616163", "uri-from-cri": "../a/c", @@ -94,6 +107,7 @@ "resolved-uri": "coaps://foo:4711/a/c" }, { + "description": "", "uri": "a://b", "cri": "826161816162", "uri-from-cri": "a://b", @@ -101,6 +115,7 @@ "resolved-uri": "a://b" }, { + "description": "", "uri": "a://192.168.0.98", "cri": "8261618144c0a80062", "uri-from-cri": "a://192.168.0.98", @@ -108,6 +123,7 @@ "resolved-uri": "a://192.168.0.98" }, { + "description": "", "uri": "a:", "cri": "816161", "uri-from-cri": "a:", @@ -115,6 +131,7 @@ "resolved-uri": "a:" }, { + "description": "", "uri": "a:b", "cri": "836161f5816162", "uri-from-cri": "a:b", @@ -122,6 +139,7 @@ "resolved-uri": "a:b" }, { + "description": "", "uri": "a:?b", "cri": "846161f6f6816162", "uri-from-cri": "a:?b", @@ -129,6 +147,7 @@ "resolved-uri": "a:?b" }, { + "description": "", "uri": "a:/b", "cri": "836161f6816162", "uri-from-cri": "a:/b", @@ -136,6 +155,7 @@ "resolved-uri": "a:/b" }, { + "description": "", "uri": "a:#b", "cri": "856161f6f6f66162", "uri-from-cri": "a:#b", @@ -143,6 +163,7 @@ "resolved-uri": "a:#b" }, { + "description": "", "uri": "//a:25186", "cri": "82f6826161196262", "uri-from-cri": "//a:25186", @@ -150,6 +171,7 @@ "resolved-uri": "coaps://a:25186" }, { + "description": "", "uri": "//a/", "cri": "83f68161618160", "uri-from-cri": "//a/", @@ -157,6 +179,7 @@ "resolved-uri": "coaps://a/" }, { + "description": "", "uri": "//a/b", "cri": "83f6816161816162", "uri-from-cri": "//a/b", @@ -164,6 +187,7 @@ "resolved-uri": "coaps://a/b" }, { + "description": "", "uri": "//a?b", "cri": "84f6816161f6816162", "uri-from-cri": "//a?b", @@ -171,6 +195,7 @@ "resolved-uri": "coaps://a?b" }, { + "description": "", "uri": "//a#b", "cri": "85f6816161f6f66162", "uri-from-cri": "//a#b", @@ -178,6 +203,7 @@ "resolved-uri": "coaps://a#b" }, { + "description": "", "uri": "//192.168.0.97:25186", "cri": "82f68244c0a80061196262", "uri-from-cri": "//192.168.0.97:25186", @@ -185,6 +211,7 @@ "resolved-uri": "coaps://192.168.0.97:25186" }, { + "description": "", "uri": "//192.168.0.97/", "cri": "83f68144c0a800618160", "uri-from-cri": "//192.168.0.97/", @@ -192,6 +219,7 @@ "resolved-uri": "coaps://192.168.0.97/" }, { + "description": "", "uri": "//192.168.0.97/b", "cri": "83f68144c0a80061816162", "uri-from-cri": "//192.168.0.97/b", @@ -199,6 +227,7 @@ "resolved-uri": "coaps://192.168.0.97/b" }, { + "description": "", "uri": "//192.168.0.97?b", "cri": "84f68144c0a80061f6816162", "uri-from-cri": "//192.168.0.97?b", @@ -206,6 +235,7 @@ "resolved-uri": "coaps://192.168.0.97?b" }, { + "description": "", "uri": "//192.168.0.97#b", "cri": "85f68144c0a80061f6f66162", "uri-from-cri": "//192.168.0.97#b", @@ -213,6 +243,7 @@ "resolved-uri": "coaps://192.168.0.97#b" }, { + "description": "", "uri": "/?b", "cri": "83f58160816162", "uri-from-cri": "/?b", @@ -220,6 +251,7 @@ "resolved-uri": "coaps://foo:4711/?b" }, { + "description": "", "uri": "/#b", "cri": "84f58160f66162", "uri-from-cri": "/#b", @@ -227,6 +259,7 @@ "resolved-uri": "coaps://foo:4711/#b" }, { + "description": "", "uri": "/a/", "cri": "82f582616160", "uri-from-cri": "/a/", @@ -234,6 +267,7 @@ "resolved-uri": "coaps://foo:4711/a/" }, { + "description": "", "uri": "/a/b", "cri": "82f58261616162", "uri-from-cri": "/a/b", @@ -241,6 +275,7 @@ "resolved-uri": "coaps://foo:4711/a/b" }, { + "description": "", "uri": "/a?b", "cri": "83f5816161816162", "uri-from-cri": "/a?b", @@ -248,6 +283,7 @@ "resolved-uri": "coaps://foo:4711/a?b" }, { + "description": "", "uri": "/a#b", "cri": "84f5816161f66162", "uri-from-cri": "/a#b", @@ -255,6 +291,7 @@ "resolved-uri": "coaps://foo:4711/a#b" }, { + "description": "", "uri": "?a&b", "cri": "8300f68261616162", "uri-from-cri": "?a&b", @@ -262,6 +299,7 @@ "resolved-uri": "coaps://foo:4711/pa/th?a&b" }, { + "description": "", "uri": "?a#b", "cri": "8400f68161616162", "uri-from-cri": "?a#b", @@ -269,6 +307,7 @@ "resolved-uri": "coaps://foo:4711/pa/th?a#b" }, { + "description": "", "uri": "a://b:25443", "cri": "826161826162196363", "uri-from-cri": "a://b:25443", @@ -276,6 +315,7 @@ "resolved-uri": "a://b:25443" }, { + "description": "", "uri": "a://b/", "cri": "8361618161628160", "uri-from-cri": "a://b/", @@ -283,6 +323,7 @@ "resolved-uri": "a://b/" }, { + "description": "", "uri": "a://b/c", "cri": "836161816162816163", "uri-from-cri": "a://b/c", @@ -290,6 +331,7 @@ "resolved-uri": "a://b/c" }, { + "description": "", "uri": "a://b?c", "cri": "846161816162f6816163", "uri-from-cri": "a://b?c", @@ -297,6 +339,7 @@ "resolved-uri": "a://b?c" }, { + "description": "", "uri": "a://b#c", "cri": "856161816162f6f66163", "uri-from-cri": "a://b#c", @@ -304,6 +347,7 @@ "resolved-uri": "a://b#c" }, { + "description": "", "uri": "a://192.168.0.98:25443", "cri": "8261618244c0a80062196363", "uri-from-cri": "a://192.168.0.98:25443", @@ -311,6 +355,7 @@ "resolved-uri": "a://192.168.0.98:25443" }, { + "description": "", "uri": "a://192.168.0.98/", "cri": "8361618144c0a800628160", "uri-from-cri": "a://192.168.0.98/", @@ -318,6 +363,7 @@ "resolved-uri": "a://192.168.0.98/" }, { + "description": "", "uri": "a://192.168.0.98/c", "cri": "8361618144c0a80062816163", "uri-from-cri": "a://192.168.0.98/c", @@ -325,6 +371,7 @@ "resolved-uri": "a://192.168.0.98/c" }, { + "description": "", "uri": "a://192.168.0.98?c", "cri": "8461618144c0a80062f6816163", "uri-from-cri": "a://192.168.0.98?c", @@ -332,6 +379,7 @@ "resolved-uri": "a://192.168.0.98?c" }, { + "description": "", "uri": "a://192.168.0.98#c", "cri": "8561618144c0a80062f6f66163", "uri-from-cri": "a://192.168.0.98#c", @@ -339,6 +387,7 @@ "resolved-uri": "a://192.168.0.98#c" }, { + "description": "", "uri": "a:?c", "cri": "846161f6f6816163", "uri-from-cri": "a:?c", @@ -346,6 +395,7 @@ "resolved-uri": "a:?c" }, { + "description": "", "uri": "a:#c", "cri": "856161f6f6f66163", "uri-from-cri": "a:#c", @@ -353,6 +403,7 @@ "resolved-uri": "a:#c" }, { + "description": "", "uri": "a:b/", "cri": "836161f582616260", "uri-from-cri": "a:b/", @@ -360,6 +411,7 @@ "resolved-uri": "a:b/" }, { + "description": "", "uri": "a:b/c", "cri": "836161f58261626163", "uri-from-cri": "a:b/c", @@ -367,6 +419,7 @@ "resolved-uri": "a:b/c" }, { + "description": "", "uri": "a:b%3Fc", "cri": "836161f58163623f63", "uri-from-cri": "a:b%3Fc", @@ -374,6 +427,7 @@ "resolved-uri": "a:b%3Fc" }, { + "description": "", "uri": "a:b?c", "cri": "846161f5816162816163", "uri-from-cri": "a:b?c", @@ -381,6 +435,7 @@ "resolved-uri": "a:b?c" }, { + "description": "", "uri": "a:b#c", "cri": "856161f5816162f66163", "uri-from-cri": "a:b#c", @@ -388,6 +443,7 @@ "resolved-uri": "a:b#c" }, { + "description": "", "uri": "a:?b&c", "cri": "846161f6f68261626163", "uri-from-cri": "a:?b&c", @@ -395,6 +451,7 @@ "resolved-uri": "a:?b&c" }, { + "description": "", "uri": "a:?b#c", "cri": "856161f6f68161626163", "uri-from-cri": "a:?b#c", @@ -402,6 +459,7 @@ "resolved-uri": "a:?b#c" }, { + "description": "", "uri": "//a:25186/", "cri": "83f68261611962628160", "uri-from-cri": "//a:25186/", @@ -409,6 +467,7 @@ "resolved-uri": "coaps://a:25186/" }, { + "description": "", "uri": "//a:25186/c", "cri": "83f6826161196262816163", "uri-from-cri": "//a:25186/c", @@ -416,6 +475,7 @@ "resolved-uri": "coaps://a:25186/c" }, { + "description": "", "uri": "//a:25186?c", "cri": "84f6826161196262f6816163", "uri-from-cri": "//a:25186?c", @@ -423,6 +483,7 @@ "resolved-uri": "coaps://a:25186?c" }, { + "description": "", "uri": "//a:25186#c", "cri": "85f6826161196262f6f66163", "uri-from-cri": "//a:25186#c", @@ -430,6 +491,7 @@ "resolved-uri": "coaps://a:25186#c" }, { + "description": "", "uri": "//a/?c", "cri": "84f68161618160816163", "uri-from-cri": "//a/?c", @@ -437,6 +499,7 @@ "resolved-uri": "coaps://a/?c" }, { + "description": "", "uri": "//a/#c", "cri": "85f68161618160f66163", "uri-from-cri": "//a/#c", @@ -444,6 +507,7 @@ "resolved-uri": "coaps://a/#c" }, { + "description": "", "uri": "//a/b/", "cri": "83f681616182616260", "uri-from-cri": "//a/b/", @@ -451,6 +515,7 @@ "resolved-uri": "coaps://a/b/" }, { + "description": "", "uri": "//a/b/c", "cri": "83f68161618261626163", "uri-from-cri": "//a/b/c", @@ -458,6 +523,7 @@ "resolved-uri": "coaps://a/b/c" }, { + "description": "", "uri": "//a/b?c", "cri": "84f6816161816162816163", "uri-from-cri": "//a/b?c", @@ -465,6 +531,7 @@ "resolved-uri": "coaps://a/b?c" }, { + "description": "", "uri": "//a/b#c", "cri": "85f6816161816162f66163", "uri-from-cri": "//a/b#c", @@ -472,6 +539,7 @@ "resolved-uri": "coaps://a/b#c" }, { + "description": "", "uri": "//a?b&c", "cri": "84f6816161f68261626163", "uri-from-cri": "//a?b&c", @@ -479,6 +547,7 @@ "resolved-uri": "coaps://a?b&c" }, { + "description": "", "uri": "//a?b#c", "cri": "85f6816161f68161626163", "uri-from-cri": "//a?b#c", @@ -486,6 +555,7 @@ "resolved-uri": "coaps://a?b#c" }, { + "description": "", "uri": "//192.168.0.97:25186/", "cri": "83f68244c0a800611962628160", "uri-from-cri": "//192.168.0.97:25186/", @@ -493,6 +563,7 @@ "resolved-uri": "coaps://192.168.0.97:25186/" }, { + "description": "", "uri": "//192.168.0.97:25186/c", "cri": "83f68244c0a80061196262816163", "uri-from-cri": "//192.168.0.97:25186/c", @@ -500,6 +571,7 @@ "resolved-uri": "coaps://192.168.0.97:25186/c" }, { + "description": "", "uri": "//192.168.0.97:25186?c", "cri": "84f68244c0a80061196262f6816163", "uri-from-cri": "//192.168.0.97:25186?c", @@ -507,6 +579,7 @@ "resolved-uri": "coaps://192.168.0.97:25186?c" }, { + "description": "", "uri": "//192.168.0.97:25186#c", "cri": "85f68244c0a80061196262f6f66163", "uri-from-cri": "//192.168.0.97:25186#c", @@ -514,6 +587,7 @@ "resolved-uri": "coaps://192.168.0.97:25186#c" }, { + "description": "", "uri": "//192.168.0.97/?c", "cri": "84f68144c0a800618160816163", "uri-from-cri": "//192.168.0.97/?c", @@ -521,6 +595,7 @@ "resolved-uri": "coaps://192.168.0.97/?c" }, { + "description": "", "uri": "//192.168.0.97/#c", "cri": "85f68144c0a800618160f66163", "uri-from-cri": "//192.168.0.97/#c", @@ -528,6 +603,7 @@ "resolved-uri": "coaps://192.168.0.97/#c" }, { + "description": "", "uri": "//192.168.0.97/b/", "cri": "83f68144c0a8006182616260", "uri-from-cri": "//192.168.0.97/b/", @@ -535,6 +611,7 @@ "resolved-uri": "coaps://192.168.0.97/b/" }, { + "description": "", "uri": "//192.168.0.97/b/c", "cri": "83f68144c0a800618261626163", "uri-from-cri": "//192.168.0.97/b/c", @@ -542,6 +619,7 @@ "resolved-uri": "coaps://192.168.0.97/b/c" }, { + "description": "", "uri": "//192.168.0.97/b?c", "cri": "84f68144c0a80061816162816163", "uri-from-cri": "//192.168.0.97/b?c", @@ -549,6 +627,7 @@ "resolved-uri": "coaps://192.168.0.97/b?c" }, { + "description": "", "uri": "//192.168.0.97/b#c", "cri": "85f68144c0a80061816162f66163", "uri-from-cri": "//192.168.0.97/b#c", @@ -556,6 +635,7 @@ "resolved-uri": "coaps://192.168.0.97/b#c" }, { + "description": "", "uri": "//192.168.0.97?b&c", "cri": "84f68144c0a80061f68261626163", "uri-from-cri": "//192.168.0.97?b&c", @@ -563,6 +643,7 @@ "resolved-uri": "coaps://192.168.0.97?b&c" }, { + "description": "", "uri": "//192.168.0.97?b#c", "cri": "85f68144c0a80061f68161626163", "uri-from-cri": "//192.168.0.97?b#c", @@ -570,6 +651,7 @@ "resolved-uri": "coaps://192.168.0.97?b#c" }, { + "description": "", "uri": "/?b&c", "cri": "83f581608261626163", "uri-from-cri": "/?b&c", @@ -577,6 +659,7 @@ "resolved-uri": "coaps://foo:4711/?b&c" }, { + "description": "", "uri": "/?b#c", "cri": "84f581608161626163", "uri-from-cri": "/?b#c", @@ -584,6 +667,7 @@ "resolved-uri": "coaps://foo:4711/?b#c" }, { + "description": "", "uri": "/a//", "cri": "82f58361616060", "uri-from-cri": "/a//", @@ -591,6 +675,7 @@ "resolved-uri": "coaps://foo:4711/a//" }, { + "description": "", "uri": "/a//c", "cri": "82f5836161606163", "uri-from-cri": "/a//c", @@ -598,6 +683,7 @@ "resolved-uri": "coaps://foo:4711/a//c" }, { + "description": "", "uri": "/a/?c", "cri": "83f582616160816163", "uri-from-cri": "/a/?c", @@ -605,6 +691,7 @@ "resolved-uri": "coaps://foo:4711/a/?c" }, { + "description": "", "uri": "/a/#c", "cri": "84f582616160f66163", "uri-from-cri": "/a/#c", @@ -612,6 +699,7 @@ "resolved-uri": "coaps://foo:4711/a/#c" }, { + "description": "", "uri": "/a/b/", "cri": "82f5836161616260", "uri-from-cri": "/a/b/", @@ -619,6 +707,7 @@ "resolved-uri": "coaps://foo:4711/a/b/" }, { + "description": "", "uri": "/a/b/c", "cri": "82f583616161626163", "uri-from-cri": "/a/b/c", @@ -626,6 +715,7 @@ "resolved-uri": "coaps://foo:4711/a/b/c" }, { + "description": "", "uri": "/a/b?c", "cri": "83f58261616162816163", "uri-from-cri": "/a/b?c", @@ -633,6 +723,7 @@ "resolved-uri": "coaps://foo:4711/a/b?c" }, { + "description": "", "uri": "/a/b#c", "cri": "84f58261616162f66163", "uri-from-cri": "/a/b#c", @@ -640,6 +731,7 @@ "resolved-uri": "coaps://foo:4711/a/b#c" }, { + "description": "", "uri": "/a?b&c", "cri": "83f58161618261626163", "uri-from-cri": "/a?b&c", @@ -647,6 +739,7 @@ "resolved-uri": "coaps://foo:4711/a?b&c" }, { + "description": "", "uri": "/a?b#c", "cri": "84f58161618161626163", "uri-from-cri": "/a?b#c", @@ -654,11 +747,173 @@ "resolved-uri": "coaps://foo:4711/a?b#c" }, { + "description": "", "uri": "?a&b&c", "cri": "8300f683616161626163", "uri-from-cri": "?a&b&c", "resolved-cri": "84218263666f6f1912678262706162746883616161626163", "resolved-uri": "coaps://foo:4711/pa/th?a&b&c" + }, + { + "description": "Empty CRI", + "uri": "", + "cri": "80", + "uri-from-cri": "", + "resolved-cri": "85218263666f6f19126782627061627468816571756572796466726167", + "resolved-uri": "coaps://foo:4711/pa/th?query#frag" + }, + { + "description": "Dotted host name", + "uri": "//a.b", + "cri": "82f68261616162", + "uri-from-cri": "//a.b", + "resolved-cri": "82218261616162", + "resolved-uri": "coaps://a.b" + }, + { + "description": "Weird non-PET in host", + "uri": "//a%2Ea", + "cri": "82f68163612e61", + "uri-from-cri": "//a%2Ea", + "resolved-cri": "82218163612e61", + "resolved-uri": "coaps://a%2Eb", + "invalid": "The dot ('.') is unreserved, and thus never percent encoded, and thus (when used with a delimiter) not legal in the strings of the host" + }, + { + "description": "PET (':') in host", + "uri": "//a%3Aa", + "cri": "82f681836161413a6161", + "uri-from-cri": "//a%3Aa", + "resolved-cri": "822181836161413a6161", + "resolved-uri": "coaps://a%3Aa" + }, + { + "description": "Non-PET in path", + "uri": "/a%2Fa%25a", + "cri": "82f58165612f612561", + "uri-from-cri": "/a%2Fa%25a", + "resolved-cri": "83218263666F6F1912678165612F612561", + "resolved-uri": "coaps://foo:4711/a%2Fa%25a" + }, + { + "description": "Semicolon in path (pretty tame, but contrasting the next example)", + "uri": "/a;a", + "cri": "82f58163613b61", + "uri-from-cri": "/a;a", + "resolved-cri": "83218263666F6F1912678163613B61", + "resolved-uri": "coaps://foo:4711/a;a" + }, + { + "description": "PET in path", + "uri": "/a%3Ba", + "cri": "82f581836161413b6161", + "uri-from-cri": "/a%3Ba", + "resolved-cri": "83218263666F6F19126781836161413B6161", + "resolved-uri": "coaps://foo:4711/a%3Ba" + }, + { + "description": "escaped non-PET in query (discarding path without empty trailing)", + "uri": null, + "cri": "83f5808163612661", + "uri-from-cri": null, + "resolved-cri": "84218263666F6F191267808163612661", + "resolved-uri": "coaps://foo:4711?a%26a" + }, + { + "description": "escaped non-PET in query (discarding path but restoring an empty trailing path component)", + "uri": "/?a%26a", + "cri": "83F581608163612661", + "uri-from-cri": "/?a%26a", + "resolved-cri": "84218263666F6F19126781608163612661", + "resolved-uri": "coaps://foo:4711/?a%26a" + }, + { + "description": "PET in query", + "uri": "/?a%23a", + "cri": "83F581608183616141236161", + "uri-from-cri": "/?a%23a", + "resolved-cri": "84218263666F6F19126781608183616141236161", + "resolved-uri": "coaps://foo:4711/?a%23a" + }, + { + "description": "unescaped non-PET (but delimiter) in fragment", + "uri": "#/", + "cri": "8400F6F6612F", + "uri-from-cri": "#/", + "resolved-cri": "85218263666F6F1912678262706162746881657175657279612F", + "resolved-uri": "coaps://foo:4711/pa/th?query#/" + }, + { + "description": "escaped non-PET in fragment", + "uri": "#%5B%5D", + "cri": "8400f6f6625b5d", + "uri-from-cri": "#%5B%5D", + "resolved-cri": "85218263666F6F1912678262706162746881657175657279625B5D", + "resolved-uri": "coaps://foo:4711/pa/th?query#%5B%5D" + }, + { + "description": "PET in fragment", + "uri": "#%2F", + "cri": "8400F6F681412F", + "uri-from-cri": "#%2F", + "resolved-cri": "85218263666F6F191267826270616274688165717565727981412F", + "resolved-uri": "coaps://foo:4711/pa/th?query#%2F" + }, + { + "description": "escaped non-PET in host", + "uri": "//non%3Aport.x", + "cri": "82f682686E6F6E3A706F72746178", + "uri-from-cri": "//non%3Aport.x", + "resolved-cri": "822182686E6F6E3A706F72746178", + "resolved-uri": "coaps://non%3Aport.x" + }, + { + "description": "unescaped non-PET (but delimiter) in host", + "uri": "//non!port.x", + "cri": "82F68281686E6F6E21706F72746178", + "uri-from-cri": "//non!port.x", + "resolved-cri": "82218281686E6F6E21706F72746178", + "resolved-uri": "coaps://non!port.x" + }, + { + "description": "PET in host", + "uri": "//non%21port.x", + "cri": "82F68283636E6F6E412164706F72746178", + "uri-from-cri": "//non%21port.x", + "resolved-cri": "82218283636E6F6E412164706F72746178", + "resolved-uri": "coaps://non%21port.x" + }, + { + "description": "escaped non-PET in userinfo", + "uri": "//alice%40example.com@example.com", + "cri": "82f684f471616c696365406578616d706c652e636f6d676578616d706c6563636f6d", + "uri-from-cri": "//alice%40example.com@example.com", + "resolved-cri": "822184F471616C696365406578616D706C652E636F6D676578616D706C6563636F6D", + "resolved-uri": "coaps://alice%40example.com@example.com" + }, + { + "description": "escaped and unescaped delimiter in userinfo", + "uri": "//c+%2B@example.com", + "cri": "82F684F48262632B412B676578616D706C6563636F6D", + "uri-from-cri": "//c+%2B@example.com", + "resolved-cri": "822184F48262632B412B676578616D706C6563636F6D", + "resolved-uri": "coaps://c+%2B@example.com" + }, + { + "description": "colon in first URI path needs to be preserved to disambiguate against full URIs", + "uri": "./foo:bar", + "cri": "82018167666F6F3A626172", + "uri-from-cri": "./foo:bar", + "resolved-cri": "83218263666F6F1912678262706167666F6F3A626172", + "resolved-uri": "coaps://foo:4711/pa/foo:bar" + }, + { + "description": "PET in contrast to unescaped subdelim in hostname", + "uri": "math://equation=E%3Dmc%C2%B2/", + "cri": "83646D61746881836A6571756174696F6E3D45413D646D63C2B28160", + "uri-from-cri": "math://equation=E%3Dmc%C2%B2/", + "resolved-cri": "83646D61746881836A6571756174696F6E3D45413D646D63C2B28160", + "resolved-uri": "math://equation=E%3Dmc%C2%B2/" } ] } From f533181460d808cdfbb7b3845c956d3e76dd843c Mon Sep 17 00:00:00 2001 From: Carsten Bormann Date: Sun, 5 May 2024 23:58:59 +0200 Subject: [PATCH 7/7] Fix sense of comparison --- tests/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Makefile b/tests/Makefile index 5c19c62..fd7cfab 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -15,5 +15,5 @@ tests.json: tests.csv new-tests.csv: tests.json ruby json-to-csv.rb $< >$@.new mv $@.new $@ - -diff $@ tests.csv + -diff tests.csv $@