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 cef17d913e..e88893cd1e 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 e3b5647d6e..53ca743b06 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 ec97604921..e2223e20f2 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 f77b86e436..91a2701e1c 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 a1b89898fe..5933f8b9b6 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 @@ class SimpleTestCase(test.TestCase): 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())