|
1 | 1 | var common = require('../common'); |
2 | 2 | var assert = common.assert; |
3 | 3 | var FormData = require(common.dir.lib + '/form_data'); |
4 | | -var predictV8Randomness = require('predict-v8-randomness'); |
| 4 | +var satisfies = require('semver').satisfies; |
| 5 | +var predictV8Randomness = satisfies(process.version, '^17 - ^23') && require('predict-v8-randomness'); |
5 | 6 |
|
6 | 7 | var initialSequence = [ |
7 | 8 | Math.random(), |
8 | 9 | Math.random(), |
9 | 10 | Math.random(), |
10 | 11 | Math.random(), |
11 | 12 | ]; |
12 | | -var predictor = new predictV8Randomness.Predictor(initialSequence); |
13 | | - |
14 | | -predictor.predictNext(24).then(function (next24RandomOutputs) { |
15 | | - var predictedBoundary = next24RandomOutputs |
16 | | - .map(function (v) { |
17 | | - return Math.floor(v * 10).toString(16); |
18 | | - }) |
19 | | - .join(''); |
20 | | - |
21 | | - var boundaryIntro = '----------------------------'; |
22 | | - |
23 | | - var payload = |
24 | | - 'zzz\r\n' + |
25 | | - boundaryIntro + |
26 | | - predictedBoundary + |
27 | | - '\r\nContent-Disposition: form-data; name="is_admin"\r\n\r\ntrue\r\n' + |
28 | | - boundaryIntro + |
29 | | - predictedBoundary + |
30 | | - '--\r\n'; |
31 | | - |
32 | | - var FIELDS = { |
33 | | - my_field: { |
34 | | - value: payload, |
35 | | - }, |
36 | | - }; |
37 | | - |
38 | | - // count total |
39 | | - var fieldsPassed = Object.keys(FIELDS).length; |
40 | | - |
41 | | - // prepare form-receiving http server |
42 | | - var server = common.testFields(FIELDS, function (fields) { |
43 | | - fieldsPassed = fields; |
| 13 | +var predictor = predictV8Randomness && new predictV8Randomness.Predictor(initialSequence); |
| 14 | + |
| 15 | +if (predictor) { |
| 16 | + predictor.predictNext(24).then(function (next24RandomOutputs) { |
| 17 | + var predictedBoundary = next24RandomOutputs |
| 18 | + .map(function (v) { |
| 19 | + return Math.floor(v * 10).toString(16); |
| 20 | + }) |
| 21 | + .join(''); |
| 22 | + |
| 23 | + var boundaryIntro = '----------------------------'; |
| 24 | + |
| 25 | + var payload = |
| 26 | + 'zzz\r\n' + |
| 27 | + boundaryIntro + |
| 28 | + predictedBoundary + |
| 29 | + '\r\nContent-Disposition: form-data; name="is_admin"\r\n\r\ntrue\r\n' + |
| 30 | + boundaryIntro + |
| 31 | + predictedBoundary + |
| 32 | + '--\r\n'; |
| 33 | + |
| 34 | + var FIELDS = { |
| 35 | + my_field: { |
| 36 | + value: payload, |
| 37 | + }, |
| 38 | + }; |
| 39 | + |
| 40 | + // count total |
| 41 | + var fieldsPassed = Object.keys(FIELDS).length; |
| 42 | + |
| 43 | + // prepare form-receiving http server |
| 44 | + var server = common.testFields(FIELDS, function (fields) { |
| 45 | + fieldsPassed = fields; |
| 46 | + }); |
| 47 | + |
| 48 | + server.listen(common.port, function () { |
| 49 | + var form = new FormData(); |
| 50 | + |
| 51 | + common.actions.populateFields(form, FIELDS); |
| 52 | + |
| 53 | + common.actions.submit(form, server); |
| 54 | + }); |
| 55 | + |
| 56 | + process.on('exit', function () { |
| 57 | + assert.strictEqual(fieldsPassed, 0); |
| 58 | + }); |
44 | 59 | }); |
45 | | - |
46 | | - server.listen(common.port, function () { |
47 | | - var form = new FormData(); |
48 | | - |
49 | | - common.actions.populateFields(form, FIELDS); |
50 | | - |
51 | | - common.actions.submit(form, server); |
52 | | - }); |
53 | | - |
54 | | - process.on('exit', function () { |
55 | | - assert.strictEqual(fieldsPassed, 0); |
56 | | - }); |
57 | | -}); |
| 60 | +} |
0 commit comments