{
  "kind": "loopback HTTP contract fixture",
  "http_cases": [
    {
      "case": "unchanged",
      "request_headers": {
        "Range": "bytes=6-",
        "Accept-Encoding": "identity",
        "If-Range": "\"version-a\""
      },
      "status": 206,
      "headers": {
        "content-length": "10",
        "content-range": "bytes 6-15/16",
        "etag": "\"version-a\""
      },
      "received_bytes": 10,
      "action": "append",
      "output_bytes": 16,
      "output_sha256": "aec687920d65c44880da41dbcbceac28e8f19890c2a2e1b754956b894056b6d2"
    },
    {
      "case": "changed-protected",
      "request_headers": {
        "Range": "bytes=6-",
        "Accept-Encoding": "identity",
        "If-Range": "\"version-a\""
      },
      "status": 200,
      "headers": {
        "content-length": "16",
        "etag": "\"version-b\""
      },
      "received_bytes": 16,
      "action": "replace",
      "output_bytes": 16,
      "output_sha256": "091debcb25a6578a36ca739d87ce207d9d49722793c0e39ca4fb1b0c50fc8794"
    },
    {
      "case": "changed-unprotected",
      "request_headers": {
        "Range": "bytes=6-",
        "Accept-Encoding": "identity"
      },
      "status": 206,
      "headers": {
        "content-length": "10",
        "content-range": "bytes 6-15/16",
        "etag": "\"version-b\""
      },
      "received_bytes": 10,
      "action": "reject-validator",
      "output_bytes": null,
      "output_sha256": null
    },
    {
      "case": "range-ignored",
      "request_headers": {
        "Range": "bytes=6-",
        "Accept-Encoding": "identity",
        "If-Range": "\"version-a\""
      },
      "status": 200,
      "headers": {
        "content-length": "16",
        "etag": "\"version-a\""
      },
      "received_bytes": 16,
      "action": "replace",
      "output_bytes": 16,
      "output_sha256": "aec687920d65c44880da41dbcbceac28e8f19890c2a2e1b754956b894056b6d2"
    },
    {
      "case": "offset-at-end",
      "request_headers": {
        "Range": "bytes=16-",
        "Accept-Encoding": "identity",
        "If-Range": "\"version-a\""
      },
      "status": 416,
      "headers": {
        "content-length": "0",
        "content-range": "bytes */16",
        "etag": "\"version-a\""
      },
      "received_bytes": 0,
      "action": "reject-status",
      "output_bytes": null,
      "output_sha256": null
    },
    {
      "case": "wrong-start",
      "request_headers": {
        "Range": "bytes=6-",
        "Accept-Encoding": "identity",
        "If-Range": "\"version-a\""
      },
      "status": 206,
      "headers": {
        "content-length": "11",
        "content-range": "bytes 5-15/16",
        "etag": "\"version-a\""
      },
      "received_bytes": 11,
      "action": "reject-range",
      "output_bytes": null,
      "output_sha256": null
    },
    {
      "case": "bad-length",
      "request_headers": {
        "Range": "bytes=6-",
        "Accept-Encoding": "identity",
        "If-Range": "\"version-a\""
      },
      "status": 206,
      "headers": {
        "content-length": "9",
        "content-range": "bytes 6-15/16",
        "etag": "\"version-a\""
      },
      "received_bytes": 9,
      "action": "reject-length",
      "output_bytes": null,
      "output_sha256": null
    },
    {
      "case": "denied",
      "request_headers": {
        "Range": "bytes=6-",
        "Accept-Encoding": "identity",
        "If-Range": "\"version-a\""
      },
      "status": 403,
      "headers": {
        "content-length": "6"
      },
      "received_bytes": 6,
      "action": "reject-status",
      "output_bytes": null,
      "output_sha256": null
    }
  ],
  "assemblies": [
    {
      "case": "Range only, blind append",
      "old_bytes": 6,
      "new_bytes": 10,
      "output_bytes": 16,
      "equals_current": false,
      "sha256": "5c41bebe2923d69c6c4d0248247208b3435b866479264c6b3e6630d994d5a698"
    },
    {
      "case": "If-Range, blind 200 append",
      "old_bytes": 6,
      "new_bytes": 16,
      "output_bytes": 22,
      "equals_current": false,
      "sha256": "809f9397dcf676ffcb09d1d40184bf61fc992e88d6f57603bce21e143c430a3d"
    },
    {
      "case": "If-Range, replace on 200",
      "old_bytes": 0,
      "new_bytes": 16,
      "output_bytes": 16,
      "equals_current": true,
      "sha256": "091debcb25a6578a36ca739d87ce207d9d49722793c0e39ca4fb1b0c50fc8794"
    }
  ],
  "preflight": {
    "weak_etag": "W/\"version-a\"",
    "resume_allowed": false
  },
  "input": {
    "a_ascii": "AAAAAA1111111111",
    "b_ascii": "BBBBBB2222222222",
    "saved_prefix_bytes": 6,
    "a_sha256": "aec687920d65c44880da41dbcbceac28e8f19890c2a2e1b754956b894056b6d2",
    "b_sha256": "091debcb25a6578a36ca739d87ce207d9d49722793c0e39ca4fb1b0c50fc8794"
  },
  "exclusions": [
    "production server",
    "CDN",
    "browser download manager",
    "CORS",
    "compression",
    "multipart ranges",
    "actual interrupted socket",
    "filesystem durability",
    "throughput"
  ]
}
