OverviewFilesCommitsIssuesDocsReleasesPeers

hyper-overlay / test / conformance / vectors.json

488 lines · json ref:
{
  "generator": "hyper-overlay/test/conformance/generate.mjs",
  "overlayVersion": "0.3.12",
  "protocol": "hyper-overlay/v2",
  "messageCount": 15,
  "caseCount": 35,
  "cases": [
    {
      "message": "handshake",
      "label": "v1 no caps",
      "note": null,
      "truncated": false,
      "bytes": "0100",
      "decoded": {
        "capabilities": 0,
        "version": 1
      }
    },
    {
      "message": "handshake",
      "label": "max uint8",
      "note": null,
      "truncated": false,
      "bytes": "ffff",
      "decoded": {
        "capabilities": 255,
        "version": 255
      }
    },
    {
      "message": "syncState",
      "label": "zero seqs",
      "note": null,
      "truncated": false,
      "bytes": "2000000000000000000000000000000000000000000000000000000000000000000000",
      "decoded": {
        "feedKey": "0000000000000000000000000000000000000000000000000000000000000000",
        "localSeq": 0,
        "remoteSeq": 0
      }
    },
    {
      "message": "syncState",
      "label": "varint boundary 0xfc/0xfd",
      "note": "c.uint switches from 1 byte to 3 at 0xfd",
      "truncated": false,
      "bytes": "20ababababababababababababababababababababababababababababababababfcfdfd00",
      "decoded": {
        "feedKey": "abababababababababababababababababababababababababababababababab",
        "localSeq": 252,
        "remoteSeq": 253
      }
    },
    {
      "message": "syncState",
      "label": "varint 32-bit boundary",
      "note": null,
      "truncated": false,
      "bytes": "201111111111111111111111111111111111111111111111111111111111111111fdfffffe00000100",
      "decoded": {
        "feedKey": "1111111111111111111111111111111111111111111111111111111111111111",
        "localSeq": 65535,
        "remoteSeq": 65536
      }
    },
    {
      "message": "syncState",
      "label": "varint 64-bit",
      "note": null,
      "truncated": false,
      "bytes": "202222222222222222222222222222222222222222222222222222222222222222feffffffffff0000000001000000",
      "decoded": {
        "feedKey": "2222222222222222222222222222222222222222222222222222222222222222",
        "localSeq": 4294967295,
        "remoteSeq": 4294967296
      }
    },
    {
      "message": "fileOffer",
      "label": "ascii path",
      "note": null,
      "truncated": false,
      "bytes": "1c6173736574732f6d6f64656c732f74656c65706f727465722e676c62200101010101010101010101010101010101010101010101010101010101010101fdd204fe8032746a01",
      "decoded": {
        "contentHash": "0101010101010101010101010101010101010101010101010101010101010101",
        "mtime": 1786000000,
        "op": 1,
        "path": "assets/models/teleporter.glb",
        "size": 1234
      }
    },
    {
      "message": "fileOffer",
      "label": "utf8 path",
      "note": "c.string is UTF-8; a byte-oriented port mis-sizes this",
      "truncated": false,
      "bytes": "256173736574732f74657874757265732f636166c3a92f6e61c3af7665e28094c3bc2e706e67200202020202020202020202020202020202020202020202020202020202020202000000",
      "decoded": {
        "contentHash": "0202020202020202020202020202020202020202020202020202020202020202",
        "mtime": 0,
        "op": 0,
        "path": "assets/textures/café/naïve—ü.png",
        "size": 0
      }
    },
    {
      "message": "fileOffer",
      "label": "empty path",
      "note": null,
      "truncated": false,
      "bytes": "00200303030303030303030303030303030303030303030303030303030303030303010102",
      "decoded": {
        "contentHash": "0303030303030303030303030303030303030303030303030303030303030303",
        "mtime": 1,
        "op": 2,
        "path": "",
        "size": 1
      }
    },
    {
      "message": "fileRequest",
      "label": "no chunksHave",
      "note": "chunksHave defaults to a zero-length buffer, still length-prefixed",
      "truncated": false,
      "bytes": "05612e62696e20040404040404040404040404040404040404040404040404040404040404040400",
      "decoded": {
        "chunksHave": {
          "$buf": ""
        },
        "contentHash": "0404040404040404040404040404040404040404040404040404040404040404",
        "path": "a.bin"
      }
    },
    {
      "message": "fileRequest",
      "label": "with chunksHave bitfield",
      "note": null,
      "truncated": false,
      "bytes": "05612e62696e20050505050505050505050505050505050505050505050505050505050505050503ff000f",
      "decoded": {
        "chunksHave": {
          "$buf": "ff000f"
        },
        "contentHash": "0505050505050505050505050505050505050505050505050505050505050505",
        "path": "a.bin"
      }
    },
    {
      "message": "chunkHashes",
      "label": "empty chunk list",
      "note": null,
      "truncated": false,
      "bytes": "0166000000000000",
      "decoded": {
        "chunks": [],
        "more": 0,
        "path": "f",
        "tier": 0
      }
    },
    {
      "message": "chunkHashes",
      "label": "two chunks, final page",
      "note": "hashes here are RAW fixed-32, NOT length-prefixed like top-level c.buffer",
      "truncated": false,
      "bytes": "076269672e70616b0202000000aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafe00000100bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb0c00",
      "decoded": {
        "chunks": [
          {
            "hash": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
            "length": 65536
          },
          {
            "hash": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
            "length": 12
          }
        ],
        "more": 0,
        "path": "big.pak",
        "tier": 2
      }
    },
    {
      "message": "chunkHashes",
      "label": "paged, more=1",
      "note": null,
      "truncated": false,
      "bytes": "076269672e70616b0201000000cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc0101",
      "decoded": {
        "chunks": [
          {
            "hash": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
            "length": 1
          }
        ],
        "more": 1,
        "path": "big.pak",
        "tier": 2
      }
    },
    {
      "message": "chunkHashes",
      "label": "PRE-PAGING peer (no trailing more)",
      "note": "old encoder omitted `more` entirely; must decode more:0, not throw",
      "truncated": true,
      "bytes": "076269672e70616b0201000000cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc01",
      "decoded": {
        "chunks": [
          {
            "hash": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
            "length": 1
          }
        ],
        "more": 0,
        "path": "big.pak",
        "tier": 2
      }
    },
    {
      "message": "chunkNeed",
      "label": "empty indices",
      "note": null,
      "truncated": false,
      "bytes": "016600000000",
      "decoded": {
        "indices": [],
        "path": "f"
      }
    },
    {
      "message": "chunkNeed",
      "label": "varint-spanning indices",
      "note": null,
      "truncated": false,
      "bytes": "01660600000000fcfdfd00fdfffffe00000100feffffffff",
      "decoded": {
        "indices": [
          0,
          252,
          253,
          65535,
          65536,
          4294967295
        ],
        "path": "f"
      }
    },
    {
      "message": "chunkData",
      "label": "empty payload",
      "note": null,
      "truncated": false,
      "bytes": "01660000",
      "decoded": {
        "data": {
          "$buf": ""
        },
        "index": 0,
        "path": "f"
      }
    },
    {
      "message": "chunkData",
      "label": "binary payload",
      "note": null,
      "truncated": false,
      "bytes": "0166070500ff7f8001",
      "decoded": {
        "data": {
          "$buf": "00ff7f8001"
        },
        "index": 7,
        "path": "f"
      }
    },
    {
      "message": "chunkCancel",
      "label": "whole-transfer (pre-0.3.0 shape)",
      "note": "no indices => decodes {path} only, byte-identical to pre-0.3.0",
      "truncated": false,
      "bytes": "0166",
      "decoded": {
        "path": "f"
      }
    },
    {
      "message": "chunkCancel",
      "label": "per-chunk cancel",
      "note": null,
      "truncated": false,
      "bytes": "0166030102fd2c01",
      "decoded": {
        "indices": [
          1,
          2,
          300
        ],
        "path": "f"
      }
    },
    {
      "message": "transferComplete",
      "label": "basic",
      "note": null,
      "truncated": false,
      "bytes": "0166200606060606060606060606060606060606060606060606060606060606060606",
      "decoded": {
        "contentHash": "0606060606060606060606060606060606060606060606060606060606060606",
        "path": "f"
      }
    },
    {
      "message": "conflict",
      "label": "no ancestor",
      "note": "ancestorHash defaults to 32 zero bytes, still encoded",
      "truncated": false,
      "bytes": "0166200707070707070707070707070707070707070707070707070707070707070707200808080808080808080808080808080808080808080808080808080808080808200000000000000000000000000000000000000000000000000000000000000000",
      "decoded": {
        "ancestorHash": "0000000000000000000000000000000000000000000000000000000000000000",
        "myHash": "0707070707070707070707070707070707070707070707070707070707070707",
        "path": "f",
        "theirHash": "0808080808080808080808080808080808080808080808080808080808080808"
      }
    },
    {
      "message": "conflict",
      "label": "with ancestor",
      "note": null,
      "truncated": false,
      "bytes": "0166200909090909090909090909090909090909090909090909090909090909090909200a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a200b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b",
      "decoded": {
        "ancestorHash": "0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b",
        "myHash": "0909090909090909090909090909090909090909090909090909090909090909",
        "path": "f",
        "theirHash": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a"
      }
    },
    {
      "message": "treeRequest",
      "label": "with nonce",
      "note": null,
      "truncated": false,
      "bytes": "200c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c2a",
      "decoded": {
        "hash": "0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c",
        "nonce": 42
      }
    },
    {
      "message": "treeRequest",
      "label": "PRE-NONCE peer",
      "note": "old encoder omitted nonce; must decode nonce:0",
      "truncated": true,
      "bytes": "200c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c",
      "decoded": {
        "hash": "0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c",
        "nonce": 0
      }
    },
    {
      "message": "treeResponse",
      "label": "empty tree",
      "note": null,
      "truncated": false,
      "bytes": "200d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d000000000000",
      "decoded": {
        "entries": [],
        "hash": "0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d",
        "more": 0,
        "nonce": 0
      }
    },
    {
      "message": "treeResponse",
      "label": "file + dir entries",
      "note": null,
      "truncated": false,
      "bytes": "200e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e02000000000009726561646d652e6d6410101010101010101010101010101010101010101010101010101010101010106401010a62696e2f72756e2e73681111111111111111111111111111111111111111111111111111111111111111000007",
      "decoded": {
        "entries": [
          {
            "childHash": "1010101010101010101010101010101010101010101010101010101010101010",
            "exec": 0,
            "kind": 0,
            "name": "readme.md",
            "size": 100
          },
          {
            "childHash": "1111111111111111111111111111111111111111111111111111111111111111",
            "exec": 1,
            "kind": 1,
            "name": "bin/run.sh",
            "size": 0
          }
        ],
        "hash": "0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e",
        "more": 0,
        "nonce": 7
      }
    },
    {
      "message": "treeResponse",
      "label": "PRE-PAGING peer (no more, no nonce)",
      "note": "both trailers absent; each decodes 0 independently",
      "truncated": true,
      "bytes": "200e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e00000000",
      "decoded": {
        "entries": [],
        "hash": "0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e",
        "more": 0,
        "nonce": 0
      }
    },
    {
      "message": "contentRequest",
      "label": "with from",
      "note": null,
      "truncated": false,
      "bytes": "201212121212121212121212121212121212121212121212121212121212121212010106616263313233",
      "decoded": {
        "chunksHave": {
          "$buf": "01"
        },
        "contentHash": "1212121212121212121212121212121212121212121212121212121212121212",
        "from": "abc123"
      }
    },
    {
      "message": "contentRequest",
      "label": "empty from",
      "note": null,
      "truncated": false,
      "bytes": "2013131313131313131313131313131313131313131313131313131313131313130000",
      "decoded": {
        "chunksHave": {
          "$buf": ""
        },
        "contentHash": "1313131313131313131313131313131313131313131313131313131313131313",
        "from": ""
      }
    },
    {
      "message": "transferControl",
      "label": "paused",
      "note": null,
      "truncated": false,
      "bytes": "20141414141414141414141414141414141414141414141414141414141414141400",
      "decoded": {
        "contentHash": "1414141414141414141414141414141414141414141414141414141414141414",
        "state": 0
      }
    },
    {
      "message": "transferControl",
      "label": "stopped",
      "note": null,
      "truncated": false,
      "bytes": "20151515151515151515151515151515151515151515151515151515151515151501",
      "decoded": {
        "contentHash": "1515151515151515151515151515151515151515151515151515151515151515",
        "state": 1
      }
    },
    {
      "message": "transferProgress",
      "label": "zero have",
      "note": null,
      "truncated": false,
      "bytes": "20161616161616161616161616161616161616161616161616161616161616161600",
      "decoded": {
        "contentHash": "1616161616161616161616161616161616161616161616161616161616161616",
        "have": 0
      }
    },
    {
      "message": "transferProgress",
      "label": "large have",
      "note": null,
      "truncated": false,
      "bytes": "201717171717171717171717171717171717171717171717171717171717171717ff0000000002000000",
      "decoded": {
        "contentHash": "1717171717171717171717171717171717171717171717171717171717171717",
        "have": 8589934592
      }
    }
  ]
}