From a6b8ee19b85bbd798510191f0aee596f36b909d2 Mon Sep 17 00:00:00 2001 From: Rich Trott Date: Tue, 2 Jun 2015 20:44:03 -0700 Subject: [PATCH] test: create temp dir in common.js Move creation of temporary directories for tests out of the Python harness and into common.js. This allows all tests to be run reliably outside of the Python wrapper. PR-URL: https://github.com/nodejs/io.js/pull/1877 Reviewed-By: Rod Vagg Reviewed-By: Jeremiah Senkpiel --- test/common.js | 55 ++++++++++++++++++++++ test/fixtures/print-chars-from-buffer.js | 1 - test/fixtures/print-chars.js | 1 - test/sequential/test-fs-watch-recursive.js | 6 +-- test/testpy/__init__.py | 30 ------------ 5 files changed, 57 insertions(+), 36 deletions(-) diff --git a/test/common.js b/test/common.js index cef17d913eaefa..e88893cd1e8768 100644 --- a/test/common.js +++ b/test/common.js @@ -12,6 +12,59 @@ exports.tmpDirName = 'tmp'; exports.PORT = +process.env.NODE_COMMON_PORT || 12346; exports.isWindows = process.platform === 'win32'; +function rimrafSync(p) { + try { + var st = fs.lstatSync(p); + } catch (e) { + if (e.code === 'ENOENT') + return; + } + + try { + if (st && st.isDirectory()) + rmdirSync(p, null); + else + fs.unlinkSync(p); + } catch (e) { + if (e.code === 'ENOENT') + return; + if (e.code === 'EPERM') + return rmdirSync(p, er); + if (e.code !== 'EISDIR') + throw e; + rmdirSync(p, e); + } +} + +function rmdirSync(p, originalEr) { + try { + fs.rmdirSync(p); + } catch (e) { + if (e.code === 'ENOTDIR') + throw originalEr; + if (e.code === 'ENOTEMPTY' || e.code === 'EEXIST' || e.code === 'EPERM') { + fs.readdirSync(p).forEach(function(f) { + rimrafSync(path.join(p, f)); + }); + fs.rmdirSync(p); + } + } +} + +function refreshTmpDir() { + if (!process.send) { // Not a child process + try { + rimrafSync(exports.tmpDir); + } catch (e) { + } + + try { + fs.mkdirSync(exports.tmpDir); + } catch (e) { + } + } +} + if (process.env.TEST_THREAD_ID) { // Distribute ports in parallel tests if (!process.env.NODE_COMMON_PORT) @@ -21,6 +74,8 @@ if (process.env.TEST_THREAD_ID) { } exports.tmpDir = path.join(exports.testDir, exports.tmpDirName); +refreshTmpDir(); + var opensslCli = null; var inFreeBSDJail = null; var localhostIPv4 = null; diff --git a/test/fixtures/print-chars-from-buffer.js b/test/fixtures/print-chars-from-buffer.js index e3b5647d6ed615..53ca743b06ef0a 100644 --- a/test/fixtures/print-chars-from-buffer.js +++ b/test/fixtures/print-chars-from-buffer.js @@ -1,4 +1,3 @@ -var common = require('../common'); var assert = require('assert'); var n = parseInt(process.argv[2]); diff --git a/test/fixtures/print-chars.js b/test/fixtures/print-chars.js index ec97604921fa48..e2223e20f25508 100644 --- a/test/fixtures/print-chars.js +++ b/test/fixtures/print-chars.js @@ -1,4 +1,3 @@ -var common = require('../common'); var assert = require('assert'); var n = parseInt(process.argv[2]); diff --git a/test/sequential/test-fs-watch-recursive.js b/test/sequential/test-fs-watch-recursive.js index f77b86e436985b..91a2701e1c0830 100644 --- a/test/sequential/test-fs-watch-recursive.js +++ b/test/sequential/test-fs-watch-recursive.js @@ -31,12 +31,10 @@ if (process.platform === 'darwin') { watcher.on('change', function(event, filename) { assert.ok('change' === event || 'rename' === event); - // Ignore stale events generated by mkdir - if (filename === testsubdirName) + // Ignore stale events generated by mkdir and other tests + if (filename !== relativePathOne) return; - assert.equal(relativePathOne, filename); - watcher.close(); cleanup(); ++watchSeenOne; diff --git a/test/testpy/__init__.py b/test/testpy/__init__.py index a1b89898fe1e27..5933f8b9b62fc3 100644 --- a/test/testpy/__init__.py +++ b/test/testpy/__init__.py @@ -28,7 +28,6 @@ import test import os import shutil -from shutil import rmtree from os import mkdir from glob import glob from os.path import join, dirname, exists @@ -50,35 +49,6 @@ def __init__(self, path, file, arch, mode, context, config, additional=[]): self.tmpdir = join(dirname(self.config.root), 'tmp') self.additional_flags = additional - def GetTmpDir(self): - return "%s.%d" % (self.tmpdir, self.thread_id) - - - def AfterRun(self, result): - # delete the whole tmp dir - try: - rmtree(self.GetTmpDir()) - except: - pass - # make it again. - try: - mkdir(self.GetTmpDir()) - except: - pass - - def BeforeRun(self): - # delete the whole tmp dir - try: - rmtree(self.GetTmpDir()) - except: - pass - # make it again. - # intermittently fails on win32, so keep trying - while not os.path.exists(self.GetTmpDir()): - try: - mkdir(self.GetTmpDir()) - except: - pass def GetLabel(self): return "%s %s" % (self.mode, self.GetName())