From 14da52c3e69e05d6454741ae44854922118c0689 Mon Sep 17 00:00:00 2001
From: Sebastien Robin <seb@jungle.(none)>
Date: Fri, 14 Dec 2012 14:08:15 +0100
Subject: [PATCH] erp5-util/testnode : add test to check deletion of software

---
 erp5/tests/testERP5TestNode.py        | 15 ++++++++++++++-
 erp5/util/testnode/SlapOSControler.py | 20 +++++++++++++-------
 erp5/util/testnode/__init__.py        |  3 +++
 erp5/util/testnode/testnode.py        |  4 ++--
 4 files changed, 32 insertions(+), 10 deletions(-)

diff --git a/erp5/tests/testERP5TestNode.py b/erp5/tests/testERP5TestNode.py
index 7c3b34c0be..1a1d2626e8 100644
--- a/erp5/tests/testERP5TestNode.py
+++ b/erp5/tests/testERP5TestNode.py
@@ -310,7 +310,7 @@ branch = foo
          return []
       test_node = self.getTestNode()
       test_node.slapos_controler = SlapOSControler(self.working_directory,
-                                               test_node.config)
+                                               test_node.config, self.log)
       node_test_suite = test_node.getNodeTestSuite('foo')
       self.updateNodeTestSuiteData(node_test_suite)
       node_test_suite.revision = 'dummy'
@@ -457,3 +457,16 @@ branch = foo
     process_manager = ProcessManager(log=self.log, max_timeout=1)
     _checkCorrectStatus(0, *['sleep','0'])
     _checkCorrectStatus(-15, *['sleep','2'])
+
+  def test_13_SlaposControlerResetSoftware(self):
+    test_node = self.getTestNode()
+    controler = SlapOSControler(self.working_directory,
+                                test_node.config, self.log)
+    os.mkdir(controler.software_root)
+    file_name = 'AC_Ra\xc3\xadzertic\xc3\xa1ma'
+    non_ascii_file = open(os.path.join(controler.software_root, file_name), 'w')
+    non_ascii_file.close()
+    self.assertEquals([file_name], os.listdir(controler.software_root))
+    controler.software_root = unicode(controler.software_root)
+    controler._resetSoftware()
+    self.assertEquals([], os.listdir(controler.software_root))
diff --git a/erp5/util/testnode/SlapOSControler.py b/erp5/util/testnode/SlapOSControler.py
index 0644b0b759..8c9897344c 100644
--- a/erp5/util/testnode/SlapOSControler.py
+++ b/erp5/util/testnode/SlapOSControler.py
@@ -42,14 +42,24 @@ def createFolder(folder):
 
 class SlapOSControler(object):
 
-  def __init__(self, working_directory, config):
+  def __init__(self, working_directory, config, log):
     self.config = config
     self.software_root = os.path.join(working_directory, 'soft')
     self.instance_root = os.path.join(working_directory, 'inst')
     self.slapos_config = os.path.join(working_directory, 'slapos.cfg')
     self.proxy_database = os.path.join(working_directory, 'proxy.db')
+    self.log = log
+
+  def _resetSoftware(self):
+    self.log('SlapOSControler : GOING TO RESET ALL SOFTWARE : %r' %
+             (self.software_root,))
+    if os.path.exists(self.software_root):
+      shutil.rmtree(self.software_root)
+    os.mkdir(self.software_root)
+    os.chmod(self.software_root, 0750)
+
 
-  def initializeSlapOSControler(self, log, slapproxy_log=None, process_manager=None,
+  def initializeSlapOSControler(self, slapproxy_log=None, process_manager=None,
         reset_software=False, software_path_list=None):
     self.log = log
     self.process_manager = process_manager
@@ -91,11 +101,7 @@ class SlapOSControler(object):
     computer = slap.registerComputer(config['computer_id'])
     # Reset all previously generated software if needed
     if reset_software:
-      log('SlapOSControler : GOING TO RESET ALL SOFTWARE : %r' % (self.software_root,))
-      if os.path.exists(self.software_root):
-        shutil.rmtree(self.software_root)
-      os.mkdir(self.software_root)
-      os.chmod(self.software_root, 0750)
+      self._resetSoftware()
     instance_root = self.instance_root
     if os.path.exists(instance_root):
       # delete old paritions which may exists in order to not get its data
diff --git a/erp5/util/testnode/__init__.py b/erp5/util/testnode/__init__.py
index 907c3c3150..bc67f2d033 100644
--- a/erp5/util/testnode/__init__.py
+++ b/erp5/util/testnode/__init__.py
@@ -81,6 +81,9 @@ def main(*args):
   for key in ('slapos_directory', 'working_directory', 'test_suite_directory',
       'log_directory', 'run_directory'):
     d = CONFIG[key]
+    if isinstance(d, unicode):
+      d = d.encode('utf8')
+      CONFIG[key] = d
     if not os.path.isdir(d):
       raise ValueError('Directory %r does not exists.' % d)
   CONFIG['master_url'] = 'http://%s:%s' % (CONFIG['proxy_host'],
diff --git a/erp5/util/testnode/testnode.py b/erp5/util/testnode/testnode.py
index a466d5ea70..e24c6809d5 100644
--- a/erp5/util/testnode/testnode.py
+++ b/erp5/util/testnode/testnode.py
@@ -230,8 +230,8 @@ branch = %(branch)s
     self.log('testnode, retry_software_count : %r' % \
              slapos_instance.retry_software_count)
     self.slapos_controler = SlapOSControler.SlapOSControler(
-      working_directory, self.config)
-    self.slapos_controler.initializeSlapOSControler(log=self.log, slapproxy_log=slapproxy_log,
+      working_directory, self.config, self.log)
+    self.slapos_controler.initializeSlapOSControler(slapproxy_log=slapproxy_log,
        process_manager=self.process_manager, reset_software=reset_software,
        software_path_list=software_path_list)
     self.process_manager.supervisord_pid_file = os.path.join(\
-- 
2.30.9