Files
meteor/tools/tests/bundle.js

149 lines
3.7 KiB
JavaScript

var selftest = require('../tool-testing/selftest.js');
var Sandbox = selftest.Sandbox;
import * as files from "../fs/files";
import { execSync } from 'child_process';
// Default maxBuffer for execSync is 1024 * 1024 bytes, so this is 10x that.
const maxBuffer = 10 * 1024 * 1024;
selftest.define("bundle", function () {
var s = new Sandbox();
var run;
s.createApp("myapp", "standard-app");
s.cd("myapp");
run = s.run("bundle", "../myapp.tgz");
run.waitSecs(60);
run.expectExit(0);
var tarball = files.pathJoin(s.cwd, "../myapp.tgz");
selftest.expectEqual(files.exists(tarball), true);
});
selftest.define("bundle - verify sanitized asset names", function () {
const s = new Sandbox();
let run;
s.createApp("sanitized-app", "sanitized-app");
s.cd("sanitized-app");
run = s.run("bundle", "../sanitized-app.tgz");
run.waitSecs(60);
run.expectExit(0);
const tarball = files.pathJoin(s.cwd, "../sanitized-app.tgz");
const sanitizedFilename = 'Meteor_-@2x.png';
selftest.expectTrue(
execSync(`tar -tf ${tarball}`, {
maxBuffer,
}).toString().indexOf(sanitizedFilename) > -1
);
});
selftest.define("build - linked external npm package (#10177)", function () {
const s = new Sandbox();
s.mkdir("external-package");
s.cd("external-package");
s.write(
"package.json",
JSON.stringify({
name: "external-package",
version: "1.2.3",
"private": true,
main: "index.js"
}, null, 2) + "\n"
);
s.write(
"index.js",
"exports.id = module.id;\n"
);
s.cd(s.home);
s.createApp("app", "linked-external-npm-package");
s.cd("app");
const run = s.run();
run.waitSecs(30);
run.match("external-package/index.js");
run.stop();
const build = s.run("build", "../build");
build.waitSecs(60);
build.expectExit(0);
selftest.expectTrue(execSync(
"tar -tf " + files.pathJoin(s.home, "build", "app.tar.gz"),
{ maxBuffer },
).toString("utf8").split("\n").includes(
"bundle/programs/server/npm/node_modules/external-package/package.json"
));
});
selftest.define("build - link npm package named 'config' (#10892)", function () {
const s = new Sandbox();
s.mkdir("config-package");
s.cd("config-package");
s.write(
"package.json",
JSON.stringify({
name: "config",
version: "1.0.0",
private: true,
main: "index.js"
}, null, 2) + "\n"
);
s.write(
"index.js",
"exports.id = module.id;\n"
);
s.cd(s.home);
s.createApp("app", "link-config-npm-package");
s.cd("app");
const run = s.run();
run.waitSecs(30);
run.match("config-package/index.js");
run.stop();
const build = s.run("build", "../build");
build.waitSecs(60);
build.expectExit(0);
const command = "cd " + files.pathJoin(s.home, "build") + " && tar -xzf app.tar.gz bundle/programs/server/packages/modules.js && grep -c \"meteorInstall({\\\"node_modules\\\":{\\\"config\\\":\" bundle/programs/server/packages/modules.js";
const commandResult = execSync(command,{ maxBuffer }).toString("utf8");
selftest.expectTrue(commandResult === "1\n");
});
selftest.define("bundle - isobuild crashes with ERR_INVALID_ARG_TYPE when encountering broken symlinks (#11241)", function () {
const s = new Sandbox({ fakeMongo: true });
s.createApp("myapp", "standard-app");
s.cd("myapp");
//Add bad symlink
s.mkdir("node_modules/.bin");
const symlink = files.pathJoin(s.cwd, "node_modules/.bin/bad");
try {
files.unlink(symlink);
} catch (e) {
if (e.code !== "ENOENT") throw e;
}
files.symlink("nonexistent", symlink);
const run = s.run();
run.match("myapp");
run.match("proxy");
//make sure we get the useful error, not the cryptic one
run.matchErr("Broken symbolic link encountered at");
});