| OLD | NEW | 
|---|
| (Empty) |  | 
|  | 1 <!doctype html> | 
|  | 2 <html> | 
|  | 3     <head> | 
|  | 4         <meta charset="utf-8"> | 
|  | 5         <title>Request Keepalive Quota Tests</title> | 
|  | 6         <meta name="help" href="https://fetch.spec.whatwg.org/#request"> | 
|  | 7         <meta name="help" href="https://fetch.spec.whatwg.org/#body-mixin"> | 
|  | 8         <meta name="author" title="Microsoft Edge" href="https://www.microsoft.c
    om"> | 
|  | 9         <meta name="timeout" content="long"> | 
|  | 10         <script src="/resources/testharness.js"></script> | 
|  | 11         <script src="/resources/testharnessreport.js"></script> | 
|  | 12     </head> | 
|  | 13     <body> | 
|  | 14         <script> | 
|  | 15             "use strict"; | 
|  | 16 | 
|  | 17             // We want to ensure that our keepalive requests hang slightly befor
    e completing so we can validate | 
|  | 18             // the effects of a rolling quota. To do this we will utilize trickl
    e.py with a 1s delay. This should | 
|  | 19             // prevent any of the Fetch's from finishing in this window. | 
|  | 20             var trickleURL = "../resources/trickle.py?count=1&ms="; | 
|  | 21             var standardDelay = 1000; | 
|  | 22 | 
|  | 23             // We should expect 64KiB of rolling quota for any type of keep-aliv
    e request sent. | 
|  | 24             var expectedQuota = 65536; | 
|  | 25 | 
|  | 26             function CreateKeepAliveRequest(delay, bodySize) { | 
|  | 27                 // Create a body of the specified size that's filled with *'s | 
|  | 28                 var requestBody = "*".repeat(bodySize); | 
|  | 29                 return new Request(trickleURL+delay, {keepalive: true, body: req
    uestBody, method: "POST"}); | 
|  | 30             } | 
|  | 31 | 
|  | 32             // Test 1 Byte | 
|  | 33             promise_test(function(test) { | 
|  | 34                 return fetch(CreateKeepAliveRequest(0 /* delay */, 1 /* bodySize
     */)); | 
|  | 35             }, "A Keep-Alive fetch() with a small body should succeed."); | 
|  | 36 | 
|  | 37             // Test Quota full limit | 
|  | 38             promise_test(function(test) { | 
|  | 39                 return fetch(CreateKeepAliveRequest(0 /* delay */, expectedQuota
    )); | 
|  | 40             }, "A Keep-Alive fetch() with a body at the Quota Limit should succe
    ed."); | 
|  | 41 | 
|  | 42             // Test Quota + 1 Byte | 
|  | 43             promise_test(function(test) { | 
|  | 44                 return promise_rejects(test, new TypeError(), fetch(CreateKeepAl
    iveRequest(0 /* delay */, expectedQuota + 1))); | 
|  | 45             }, "A Keep-Alive fetch() with a body over the Quota Limit should rej
    ect."); | 
|  | 46 | 
|  | 47             // Test the Quota becomes available upon promise completion. | 
|  | 48             promise_test(function (test) { | 
|  | 49                 // Fill our Quota then try to send a second fetch. | 
|  | 50                 var firstFetch = fetch(CreateKeepAliveRequest(standardDelay, exp
    ectedQuota)).then(function(response) { | 
|  | 51                     // Now validate that we can send another Keep-Alive fetch fo
    r the full size of the quota. | 
|  | 52                     return fetch(CreateKeepAliveRequest(0 /* delay */, expectedQ
    uota)); | 
|  | 53                 }); | 
|  | 54 | 
|  | 55                 return firstFetch; | 
|  | 56             }, "A Keep-Alive fetch() should return it's allocated Quota upon pro
    mise resolution."); | 
|  | 57 | 
|  | 58             // Ensure only the correct amount of Quota becomes available when a 
    fetch completes. | 
|  | 59             promise_test(function(test) { | 
|  | 60                 var lastFetchSucceeded = false; | 
|  | 61                 // Create a fetch that uses all but 1 Byte of the Quota and runs
     for 2x as long as the other requests. | 
|  | 62                 var firstFetch = fetch(CreateKeepAliveRequest(standardDelay * 2,
     expectedQuota - 1)).then(function(response) { | 
|  | 63                     // This should be our last completing fetch(). We need to va
    lidate that the last fetch we sent out actually | 
|  | 64                     // completed. | 
|  | 65                     assert_true(lastFetchSucceeded, "Out last fetch after gainin
    g Quota back should have succeeded."); | 
|  | 66                 }); | 
|  | 67 | 
|  | 68                 // Now create a single Byte request that will complete quicker. | 
|  | 69                 fetch(CreateKeepAliveRequest(standardDelay, 1 /* bodySize */)).t
    hen(function(response) { | 
|  | 70                     // We shouldn't be able to create a 2 Byte request right now
     as only 1 Byte should have freed up. | 
|  | 71                     assert_throws(new TypeError(), fetch(CreateKeepAliveRequest(
    0 /* delay */, 2 /* bodySize */)), "Only 1 Byte of Quota should be available rig
    ht now."); | 
|  | 72 | 
|  | 73                     // Now validate that we can send another Keep-Alive fetch fo
    r just 1 Byte. | 
|  | 74                     fetch(CreateKeepAliveRequest(0 /* delay */, 1 /* bodySize */
    )).then(function(response) { | 
|  | 75                         // Flag we got a response from this request. | 
|  | 76                         lastFetchSucceeded = true; | 
|  | 77                     }); | 
|  | 78                 }); | 
|  | 79 | 
|  | 80                 return firstFetch; | 
|  | 81             }, "A Keep-Alive fetch() should return only it's allocated Quota upo
    n promise resolution."); | 
|  | 82 | 
|  | 83             // Test rejecting a fetch() after the quota is used up. | 
|  | 84             promise_test(function (test) { | 
|  | 85                 // Fill our Quota then try to send a second fetch. | 
|  | 86                 fetch(CreateKeepAliveRequest(standardDelay, expectedQuota)); | 
|  | 87 | 
|  | 88                 return promise_rejects(test, new TypeError(), fetch(CreateKeepAl
    iveRequest(0 /* delay */, 1 /* bodySize */))); | 
|  | 89             }, "A Keep-Alive fetch() should not be allowed if the Quota is used 
    up."); | 
|  | 90 | 
|  | 91         </script> | 
|  | 92     </body> | 
|  | 93 </html> | 
| OLD | NEW | 
|---|