test: create temp dir in common.js
authorRich Trott <rtrott@gmail.com>
Wed, 3 Jun 2015 03:44:03 +0000 (20:44 -0700)
committerRod Vagg <rod@vagg.org>
Fri, 12 Jun 2015 00:27:29 +0000 (10:27 +1000)
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 <rod@vagg.org>
Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com>
test/common.js
test/fixtures/print-chars-from-buffer.js
test/fixtures/print-chars.js
test/sequential/test-fs-watch-recursive.js
test/testpy/__init__.py

index cef17d9..e88893c 100644 (file)
@@ -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;
index e3b5647..53ca743 100644 (file)
@@ -1,4 +1,3 @@
-var common = require('../common');
 var assert = require('assert');
 
 var n = parseInt(process.argv[2]);
index ec97604..e2223e2 100644 (file)
@@ -1,4 +1,3 @@
-var common = require('../common');
 var assert = require('assert');
 
 var n = parseInt(process.argv[2]);
index f77b86e..91a2701 100644 (file)
@@ -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;
index a1b8989..5933f8b 100644 (file)
@@ -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())