summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/fetch/api/redirect/redirect-upload.h2.any.js
blob: 521bd3adc28bffff38fd2bbdfa7154e566cae3bb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
// META: global=window,worker
// META: script=../resources/utils.js
// META: script=/common/utils.js
// META: script=/common/get-host-info.sub.js

const redirectUrl = RESOURCES_DIR + "redirect.h2.py";
const redirectLocation = "top.txt";

async function fetchStreamRedirect(statusCode) {
  const url = RESOURCES_DIR + "redirect.h2.py" +
   `?redirect_status=${statusCode}&location=${redirectLocation}`;
  const requestInit = {method: "POST"};
  requestInit["body"] = new ReadableStream({start: controller => {
    const encoder = new TextEncoder();
    controller.enqueue(encoder.encode("Test"));
    controller.close();
  }});
  requestInit.duplex = "half";
  return fetch(url, requestInit);
}

promise_test(async () => {
  const resp = await fetchStreamRedirect(303);
  assert_equals(resp.status, 200);
  assert_true(new URL(resp.url).pathname.endsWith(redirectLocation),
   "Response's url should be the redirected one");
}, "Fetch upload streaming should be accepted on 303");

for (const statusCode of [301, 302, 307, 308]) {
  promise_test(t => {
    return promise_rejects_js(t, TypeError, fetchStreamRedirect(statusCode));
  }, `Fetch upload streaming should fail on ${statusCode}`);
}