mirror of
https://github.com/meteor/meteor.git
synced 2026-05-02 03:01:46 -04:00
We now use a smaller file (the `babel-compiler` archive instead of `meteor-tool`), and we interrupt every 500kB, which leads to three total interruptions for that file. Also, we only delay one second (instead of five) between attempts.
210 lines
5.8 KiB
JavaScript
210 lines
5.8 KiB
JavaScript
var selftest = require('../tool-testing/selftest.js');
|
|
var utils = require('../utils/utils.js');
|
|
|
|
import { sha1 } from '../fs/watch.js';
|
|
import httpHelpers from '../utils/http-helpers';
|
|
|
|
selftest.define('subset generator', function () {
|
|
var out = [];
|
|
utils.generateSubsetsOfIncreasingSize(['a', 'b', 'c'], function (x) {
|
|
out.push(x);
|
|
});
|
|
selftest.expectEqual(out, [
|
|
[],
|
|
[ 'a' ],
|
|
[ 'b' ],
|
|
[ 'c' ],
|
|
[ 'a', 'b' ],
|
|
[ 'a', 'c' ],
|
|
[ 'b', 'c' ],
|
|
[ 'a', 'b', 'c' ]
|
|
]);
|
|
out = [];
|
|
utils.generateSubsetsOfIncreasingSize(['a', 'b', 'c'], function (x) {
|
|
out.push(x);
|
|
if (x[1] === 'c') {
|
|
// stop iterating
|
|
return true;
|
|
}
|
|
});
|
|
selftest.expectEqual(out, [
|
|
[],
|
|
[ 'a' ],
|
|
[ 'b' ],
|
|
[ 'c' ],
|
|
[ 'a', 'b' ],
|
|
[ 'a', 'c' ]
|
|
]);
|
|
});
|
|
|
|
selftest.define("url has scheme", function () {
|
|
// URL scheme must start with a letter, and then can be followed by
|
|
// any number of alphanumerics, +, -, . RFC 2396 Appendix A.
|
|
selftest.expectEqual(utils.hasScheme("http://example.com"), true);
|
|
selftest.expectEqual(utils.hasScheme("https://example.com"), true);
|
|
selftest.expectEqual(utils.hasScheme("ddp://example.com"), true);
|
|
selftest.expectEqual(utils.hasScheme("http://example.com:80"), true);
|
|
selftest.expectEqual(utils.hasScheme("https://example.com:443"), true);
|
|
selftest.expectEqual(utils.hasScheme("ddp://example.com:443"), true);
|
|
selftest.expectEqual(utils.hasScheme("ddp://example"), true);
|
|
selftest.expectEqual(utils.hasScheme("ddp://"), true);
|
|
selftest.expectEqual(utils.hasScheme("example.comhttp://"), true);
|
|
selftest.expectEqual(utils.hasScheme("example+com+http://"), true);
|
|
selftest.expectEqual(utils.hasScheme("example-com+http://"), true);
|
|
|
|
selftest.expectEqual(utils.hasScheme("example"), false);
|
|
selftest.expectEqual(utils.hasScheme("example.com"), false);
|
|
selftest.expectEqual(utils.hasScheme("example.com:443"), false);
|
|
selftest.expectEqual(utils.hasScheme("http:/example"), false);
|
|
selftest.expectEqual(utils.hasScheme("http:example"), false);
|
|
selftest.expectEqual(utils.hasScheme("example_com+http://"), false);
|
|
});
|
|
|
|
selftest.define("parse url", function () {
|
|
selftest.expectEqual(utils.parseUrl("http://localhost:3000"), {
|
|
hostname: "localhost",
|
|
port: "3000",
|
|
protocol: "http"
|
|
});
|
|
selftest.expectEqual(utils.parseUrl("https://localhost:3000"), {
|
|
hostname: "localhost",
|
|
port: "3000",
|
|
protocol: "https"
|
|
});
|
|
selftest.expectEqual(utils.parseUrl("localhost:3000"), {
|
|
hostname: "localhost",
|
|
port: "3000",
|
|
protocol: undefined
|
|
});
|
|
selftest.expectEqual(utils.parseUrl("3000"), {
|
|
hostname: undefined,
|
|
port: "3000",
|
|
protocol: undefined
|
|
});
|
|
selftest.expectEqual(utils.parseUrl("3000example.com:3000"), {
|
|
hostname: "3000example.com",
|
|
port: "3000",
|
|
protocol: undefined
|
|
});
|
|
selftest.expectEqual(utils.parseUrl("http://example.com:3000"), {
|
|
hostname: "example.com",
|
|
port: "3000",
|
|
protocol: "http"
|
|
});
|
|
selftest.expectEqual(utils.parseUrl("https://example.com:3000"), {
|
|
hostname: "example.com",
|
|
port: "3000",
|
|
protocol: "https"
|
|
});
|
|
selftest.expectEqual(utils.parseUrl("example.com:3000"), {
|
|
hostname: "example.com",
|
|
port: "3000",
|
|
protocol: undefined
|
|
});
|
|
selftest.expectEqual(utils.parseUrl("127.0.0.1:3000"), {
|
|
hostname: "127.0.0.1",
|
|
port: "3000",
|
|
protocol: undefined
|
|
});
|
|
selftest.expectEqual(utils.parseUrl("[::]:3000"), {
|
|
hostname: "::",
|
|
port: "3000",
|
|
protocol: undefined
|
|
});
|
|
selftest.expectEqual(utils.parseUrl("http://[::]:3000"), {
|
|
hostname: "::",
|
|
port: "3000",
|
|
protocol: "http"
|
|
});
|
|
selftest.expectEqual(utils.parseUrl("https://[::]:3000"), {
|
|
hostname: "::",
|
|
port: "3000",
|
|
protocol: "https"
|
|
});
|
|
selftest.expectEqual(utils.parseUrl("[0000:0000:0000:0000:0000:0000:0000:0001]:3000"), {
|
|
hostname: "0000:0000:0000:0000:0000:0000:0000:0001",
|
|
port: "3000",
|
|
protocol: undefined
|
|
});
|
|
|
|
// tests for defaults
|
|
selftest.expectEqual(utils.parseUrl("http://example.com:3000", {
|
|
hostname: "foo.com",
|
|
port: "4000",
|
|
protocol: "https"
|
|
}), {
|
|
hostname: "example.com",
|
|
port: "3000",
|
|
protocol: "http"
|
|
});
|
|
selftest.expectEqual(utils.parseUrl("example.com:3000", {
|
|
port: "4000",
|
|
protocol: "https"
|
|
}), {
|
|
hostname: "example.com",
|
|
port: "3000",
|
|
protocol: "https"
|
|
});
|
|
selftest.expectEqual(utils.parseUrl("3000", {
|
|
port: "4000",
|
|
protocol: "https",
|
|
hostname: "example.com"
|
|
}), {
|
|
hostname: "example.com",
|
|
port: "3000",
|
|
protocol: "https"
|
|
});
|
|
});
|
|
|
|
selftest.define("resume downloads", ['net'], function () {
|
|
// A reasonably big file that (I think) should take more than 1s to download
|
|
// and that we know the size of
|
|
const url = 'https://warehouse.meteor.com/builds/EXSxwGqYjjJKh3WMJ/1467929945102/DRyKg3bYHL/babel-compiler-6.8.4-os+web.browser+web.cordova.tgz';
|
|
|
|
let interruptCount = 0;
|
|
let bytesSinceLastInterrupt = 0;
|
|
|
|
const resumedPromise = Promise.resolve().then(
|
|
() => httpHelpers.getUrlWithResuming({
|
|
url: url,
|
|
encoding: null,
|
|
retryDelaySecs: 1,
|
|
onRequest(request) {
|
|
request.on("data", chunk => {
|
|
bytesSinceLastInterrupt += chunk.length
|
|
if (bytesSinceLastInterrupt > 500000) {
|
|
bytesSinceLastInterrupt = 0;
|
|
++interruptCount;
|
|
request.emit('error', 'pretend-http-error');
|
|
request.emit('end');
|
|
}
|
|
});
|
|
}
|
|
})
|
|
);
|
|
|
|
const normalPromise = Promise.resolve().then(
|
|
() => httpHelpers.getUrl({
|
|
url,
|
|
encoding: null,
|
|
})
|
|
);
|
|
|
|
Promise.all([
|
|
resumedPromise,
|
|
normalPromise,
|
|
]).then(bodies => {
|
|
selftest.expectTrue(interruptCount > 1);
|
|
|
|
selftest.expectEqual(
|
|
bodies[0].length,
|
|
bodies[1].length
|
|
);
|
|
|
|
selftest.expectEqual(
|
|
sha1(bodies[0]),
|
|
sha1(bodies[1])
|
|
);
|
|
}).await();
|
|
});
|