Get run-tools-tests.sh passing.

In addition to minor "make the tests match the code" changes, there's also:

 - missing require('tar') in tarball download code
 - fix an fd leak in the bundler that was causing EMFILE on mac
 - switch run.js to listening for 'exit' to 'close' so that the end
   of stdout/err can be read
 - some concerningly necessary deletions of .build directories

Also, the version of cli-test.sh that runs against a fixed release is disabled,
since we're not building releases with the new package format for now.
This commit is contained in:
David Glasser
2013-05-17 12:35:35 -07:00
parent d475b1f72f
commit 957729c8ce
7 changed files with 45 additions and 20 deletions

View File

@@ -244,6 +244,7 @@ if (Meteor.isServer) {
EOF
$METEOR -p $PORT --settings='settings.json' --once >> $OUTPUT
rm settings.js
# prepare die.js so that we have a server that loads packages and dies
@@ -257,8 +258,6 @@ echo "... local-package-sets -- new package"
mkdir -p "$TEST_TMPDIR/local-packages/a-package-named-bar/"
cat > "$TEST_TMPDIR/local-packages/a-package-named-bar/package.js" <<EOF
console.log("loaded a-package-named-bar");
Npm.depends({gcd: '0.0.0'});
Package.on_use(function(api) {
@@ -267,6 +266,8 @@ Package.on_use(function(api) {
EOF
cat > "$TEST_TMPDIR/local-packages/a-package-named-bar/call_gcd.js" <<EOF
console.log("loaded a-package-named-bar");
var gcd = Npm.require('gcd');
console.log("gcd(4,6)=" + gcd(4,6));
EOF

View File

@@ -29,7 +29,9 @@ admin/launch-meteor --version # downloads the bootstrap tarball
# Test springboarding specifically
./tools-springboard-test.sh
# CLI tests (without springboarding, but with a warehouse)
./cli-test.sh
# XXX For now, we turn this off, because it requires us to have a built release
# which is compatible with the current tools.
# ./cli-test.sh
unset METEOR_TOOLS_TREE_DIR
unset METEOR_WAREHOUSE_DIR

View File

@@ -425,6 +425,7 @@ _.extend(exports, {
var future = new Future;
var tar = require("tar");
var zlib = require("zlib");
var gunzip = zlib.createGunzip()
.on('error', function (e) {

View File

@@ -1104,9 +1104,12 @@ _.extend(Package.prototype, {
"." + path.basename(compileStep.inputPath));
} while (fs.existsSync(tempFilePath));
var tempFile = fs.openSync(tempFilePath, "wx");
var data = compileStep.read();
fs.writeSync(tempFile, data, 0, data.length);
fs.closeSync(tempFile);
try {
var data = compileStep.read();
fs.writeSync(tempFile, data, 0, data.length);
} finally {
fs.closeSync(tempFile);
}
try {
callback(api, tempFilePath,
@@ -1721,8 +1724,13 @@ _.extend(Package.prototype, {
throw new Error("bad resource file path in unipackage");
var fd = fs.openSync(path.join(sliceBasePath, resource.file), "r");
var data = new Buffer(resource.length);
var count = fs.readSync(fd, data, 0, resource.length, resource.offset);
try {
var data = new Buffer(resource.length);
var count = fs.readSync(
fd, data, 0, resource.length, resource.offset);
} finally {
fs.closeSync(fd);
}
if (count !== resource.length)
throw new Error("couldn't read entire resource");

View File

@@ -312,7 +312,7 @@ var startServer = function (options) {
}
});
proc.on('exit', function (code, signal) {
proc.on('close', function (code, signal) {
if (signal) {
logToClients({'exit': '=> Exited from signal: ' + signal});
} else {

View File

@@ -107,9 +107,10 @@ var _assertCorrectPackageNpmDir = function(deps) {
var _assertCorrectBundleNpmContents = function(bundleDir, deps) {
// sanity check -- main.js has expected contents.
assert.strictEqual(fs.readFileSync(path.join(bundleDir, "main.js"), "utf8").trim(),
"require('./programs/server/server.js');");
"require('./programs/server/boot.js');");
var bundledPackageNodeModulesDir = path.join(bundleDir, 'programs', 'server', 'npm', 'test-package');
var bundledPackageNodeModulesDir = path.join(
bundleDir, 'programs', 'server', 'npm', 'test-package', 'main', 'node_modules');
// bundle actually has the npm modules
_.each(deps, function(version, name) {
@@ -162,6 +163,10 @@ assert.doesNotThrow(function () {
var nodeModulesDir = path.join(testPackageDir, ".npm", "node_modules");
assert(fs.existsSync(path.join(nodeModulesDir)));
files.rm_recursive(nodeModulesDir);
// We also have to delete the .build directory or else we won't rebuild at
// all.
// XXX this seems wrong!
files.rm_recursive(path.join(testPackageDir, ".build"));
assert(!fs.existsSync(path.join(nodeModulesDir)));
lib.refresh();
@@ -203,6 +208,10 @@ assert.doesNotThrow(function () {
var nodeModulesMimeDir = path.join(testPackageDir, ".npm", "node_modules", "mime");
assert(fs.existsSync(path.join(nodeModulesMimeDir)));
files.rm_recursive(nodeModulesMimeDir);
// We also have to delete the .build directory or else we won't rebuild at
// all.
// XXX this seems wrong!
files.rm_recursive(path.join(testPackageDir, ".build"));
assert(!fs.existsSync(path.join(nodeModulesMimeDir)));
lib.refresh();
@@ -227,8 +236,12 @@ assert.doesNotThrow(function () {
updateTestPackage({gcd: '0.0.0', mime: '0.1.2'});
var tmpOutputDir = tmpDir();
var result = bundler.bundle(appWithPackageDir, tmpOutputDir, {nodeModulesMode: 'skip', releaseStamp: 'none', library: lib});
assert.strictEqual(result.errors.length, 1);
assert(/version not found/.test(result.errors[0]));
assert(result.errors);
var job = _.find(result.errors.jobs, function (job) {
return job.title === "building package `test-package`";
});
assert(job);
assert(/mime version 0.1.2 is not available/.test(job.messages[0].message));
_assertCorrectPackageNpmDir({gcd: '0.0.0', mime: '1.2.8'}); // shouldn't've changed
});

View File

@@ -22,7 +22,7 @@ assert.doesNotThrow(function () {
// sanity check -- main.js has expected contents.
assert.strictEqual(fs.readFileSync(path.join(tmpOutputDir, "main.js"), "utf8").trim(),
"require('./programs/server/server.js');");
"require('./programs/server/boot.js');");
// no top level node_modules directory
assert(!fs.existsSync(path.join(tmpOutputDir,
"programs", "server", "node_modules")));
@@ -46,7 +46,7 @@ assert.doesNotThrow(function () {
// sanity check -- main.js has expected contents.
assert.strictEqual(fs.readFileSync(path.join(tmpOutputDir, "main.js"), "utf8").trim(),
"require('./programs/server/server.js');");
"require('./programs/server/boot.js');");
// verify that contents are not minified
var appHtml = fs.readFileSync(path.join(tmpOutputDir, "programs",
"client", "app.html"));
@@ -66,11 +66,11 @@ assert.doesNotThrow(function () {
// sanity check -- main.js has expected contents.
assert.strictEqual(fs.readFileSync(path.join(tmpOutputDir, "main.js"), "utf8").trim(),
"require('./programs/server/server.js');");
"require('./programs/server/boot.js');");
// verify that tests for the meteor package are included
var appHtml = fs.readFileSync(path.join(tmpOutputDir, "programs",
"client", "app.html"));
assert(/src=\"\/package-tests\/meteor.js/.test(appHtml));
assert(/src=\"\/packages\/meteor\.tests\.js/.test(appHtml));
});
console.log("nodeModules: 'copy'");
@@ -81,7 +81,7 @@ assert.doesNotThrow(function () {
// sanity check -- main.js has expected contents.
assert.strictEqual(fs.readFileSync(path.join(tmpOutputDir, "main.js"), "utf8").trim(),
"require('./programs/server/server.js');");
"require('./programs/server/boot.js');");
// node_modules directory exists and is not a symlink
assert(!fs.lstatSync(path.join(tmpOutputDir, "programs", "server", "node_modules")).isSymbolicLink());
// node_modules contains fibers
@@ -96,7 +96,7 @@ assert.doesNotThrow(function () {
// sanity check -- main.js has expected contents.
assert.strictEqual(fs.readFileSync(path.join(tmpOutputDir, "main.js"), "utf8").trim(),
"require('./programs/server/server.js');");
"require('./programs/server/boot.js');");
// node_modules directory exists and is a symlink
assert(fs.lstatSync(path.join(tmpOutputDir, "programs", "server", "node_modules")).isSymbolicLink());
// node_modules contains fibers
@@ -104,6 +104,6 @@ assert.doesNotThrow(function () {
// package node_modules directory also a symlink
assert(fs.lstatSync(path.join(
tmpOutputDir, "programs", "server", "npm", "livedata"))
tmpOutputDir, "programs", "server", "npm", "livedata", "main", "node_modules"))
.isSymbolicLink());
});