Verifies: SYS-REQ-116 (bounded window over a large stream) SYS-REQ-116:boundary:nominal reqproof:proptest:skip deterministic 100 MiB streaming boundary witness
(t *testing.T)
| 136 | // SYS-REQ-116:boundary:nominal |
| 137 | // reqproof:proptest:skip deterministic 100 MiB streaming boundary witness |
| 138 | func TestReaderParserLargeFile(t *testing.T) { |
| 139 | const paddingSize = int64(100 * 1024 * 1024) |
| 140 | const maxBufferSize = 32 * 1024 |
| 141 | |
| 142 | source := io.MultiReader( |
| 143 | strings.NewReader(`{"padding":"`), |
| 144 | &repeatedByteReader{remaining: paddingSize, value: 'x'}, |
| 145 | strings.NewReader(`","target":"found"}`), |
| 146 | ) |
| 147 | rp := NewReaderParser(source, Config{MaxBufferSize: maxBufferSize}) |
| 148 | |
| 149 | value, vt, err := rp.Get("target") |
| 150 | if err != nil { |
| 151 | t.Fatalf("Get after 100 MiB field returned error: %v", err) |
| 152 | } |
| 153 | if vt != String || string(value) != "found" { |
| 154 | t.Fatalf("Get after 100 MiB field = (%q, %v), want (found, String)", value, vt) |
| 155 | } |
| 156 | if rp.bufStart < paddingSize { |
| 157 | t.Fatalf("sliding buffer discarded through offset %d, want at least %d", rp.bufStart, paddingSize) |
| 158 | } |
| 159 | if cap(rp.buf) > 2*maxBufferSize { |
| 160 | t.Fatalf("sliding buffer capacity = %d, want <= %d", cap(rp.buf), 2*maxBufferSize) |
| 161 | } |
| 162 | } |
| 163 | |
| 164 | // Verifies: SYS-REQ-116 (malformed and truncated streams) |
| 165 | // SYS-REQ-116:malformed_input:nominal |
nothing calls this directly
no test coverage detected