Commit 2977aeec authored by Tatuya Kamada's avatar Tatuya Kamada Committed by Sebastien Robin

erp5testnode: Use a test suite dedicated log file instead of addWatcher()

parent 3d7e4345
...@@ -15,6 +15,8 @@ import subprocess ...@@ -15,6 +15,8 @@ import subprocess
import tempfile import tempfile
import json import json
import time import time
import types
import re
class ERP5TestNode(TestCase): class ERP5TestNode(TestCase):
...@@ -497,7 +499,7 @@ branch = foo ...@@ -497,7 +499,7 @@ branch = foo
createFolder(folder, clean=True) createFolder(folder, clean=True)
self.assertEquals(False, os.path.exists(to_drop_path)) self.assertEquals(False, os.path.exists(to_drop_path))
def test_15_log_directory(self): def test_15_suite_log_directory(self):
def doNothing(self, *args, **kw): def doNothing(self, *args, **kw):
pass pass
test_self = self test_self = self
...@@ -508,16 +510,11 @@ branch = foo ...@@ -508,16 +510,11 @@ branch = foo
def patch_startTestSuite(self,test_node_title): def patch_startTestSuite(self,test_node_title):
global counter global counter
config_list = [] config_list = []
def _checkExistingTestSuite(reference_set):
test_self.assertEquals(set(reference_set),
set(os.listdir(test_node.config["working_directory"])))
for x in reference_set:
test_self.assertTrue(os.path.exists(os.path.join(
test_node.config["working_directory"],x)),True)
if counter == 0: if counter == 0:
config_list.append(test_self.getTestSuiteData(reference='foo')[0]) config_list.append(test_self.getTestSuiteData(reference='aa')[0])
elif counter == 1: if counter == 1:
_checkExistingTestSuite(set(['foo'])) config_list.append(test_self.getTestSuiteData(reference='bb')[0])
elif counter == 2:
raise StopIteration raise StopIteration
counter += 1 counter += 1
return json.dumps(config_list) return json.dumps(config_list)
...@@ -527,6 +524,20 @@ branch = foo ...@@ -527,6 +524,20 @@ branch = foo
result = TestResultProxy(self._proxy, self._retry_time, result = TestResultProxy(self._proxy, self._retry_time,
self._logger, test_result_path, node_title, revision) self._logger, test_result_path, node_title, revision)
return result return result
def checkTestSuite(test_node):
test_node.node_test_suite_dict
rand_part_set = set()
for ref, suite in test_node.node_test_suite_dict.items():
assert(suite.suite_log is not None)
assert(isinstance(suite.suite_log, types.MethodType))
assert('var/log/suite/%s' % suite.reference in suite.suite_log_path)
assert(suite.suite_log_path.endswith('suite.log'))
m = re.match('.*\/(.*)\/suite.log', suite.suite_log_path)
rand_part = m.groups()[0]
assert(len(rand_part) == 32)
assert(rand_part not in rand_part_set)
rand_part_set.add(rand_part)
original_sleep = time.sleep original_sleep = time.sleep
time.sleep = doNothing time.sleep = doNothing
self.generateTestRepositoryList() self.generateTestRepositoryList()
...@@ -543,6 +554,7 @@ branch = foo ...@@ -543,6 +554,7 @@ branch = foo
try: try:
test_node.run() test_node.run()
except Exception as e: except Exception as e:
checkTestSuite(test_node)
self.assertEqual(type(e),StopIteration) self.assertEqual(type(e),StopIteration)
finally: finally:
time.sleep = original_sleep time.sleep = original_sleep
......
...@@ -35,6 +35,8 @@ import json ...@@ -35,6 +35,8 @@ import json
import time import time
import shutil import shutil
import logging import logging
import string
import random
from ProcessManager import SubprocessError, ProcessManager, CancellationError from ProcessManager import SubprocessError, ProcessManager, CancellationError
from subprocess import CalledProcessError from subprocess import CalledProcessError
from Updater import Updater from Updater import Updater
...@@ -109,11 +111,14 @@ class NodeTestSuite(SlapOSInstance): ...@@ -109,11 +111,14 @@ class NodeTestSuite(SlapOSInstance):
def createSuiteLog(self): def createSuiteLog(self):
# /srv/slapgrid/slappartXX/srv/var/log/suite/az/mlksjfmlk234Sljssdflkj23KSdfslj/suite.log # /srv/slapgrid/slappartXX/srv/var/log/suite/az/mlksjfmlk234Sljssdflkj23KSdfslj/suite.log
# /srv/slapgrid/slappartXX/srv/testnode is working directory
if getattr(self, "log_directory", None) is not None: if getattr(self, "log_directory", None) is not None:
if getattr(self, "suite_log_path", None) is None: if getattr(self, "suite_log_path", None) is None:
alphabets = string.digits + string.letters
rand_part = ''.join(random.choice(alphabets) for i in xrange(32))
suite_log_directory = os.path.join(self.log_directory, suite_log_directory = os.path.join(self.log_directory,
'suite', self.reference) 'suite',
self.reference,
rand_part)
SlapOSControler.createFolders(suite_log_directory) SlapOSControler.createFolders(suite_log_directory)
self.suite_log_path = os.path.join(suite_log_directory, self.suite_log_path = os.path.join(suite_log_directory,
'suite.log') 'suite.log')
...@@ -134,7 +139,7 @@ class NodeTestSuite(SlapOSInstance): ...@@ -134,7 +139,7 @@ class NodeTestSuite(SlapOSInstance):
logger_format = '%(asctime)s %(name)-13s: %(levelname)-8s %(message)s' logger_format = '%(asctime)s %(name)-13s: %(levelname)-8s %(message)s'
formatter = logging.Formatter(logger_format) formatter = logging.Formatter(logger_format)
logging.basicConfig(level=logging.INFO, format=logger_format) logging.basicConfig(level=logging.INFO, format=logger_format)
logger = logging.getLogger('erp5testsuite') logger = logging.getLogger('testsuite')
file_handler = logging.FileHandler(filename=self.suite_log_path) file_handler = logging.FileHandler(filename=self.suite_log_path)
file_handler.setFormatter(formatter) file_handler.setFormatter(formatter)
logger.addHandler(file_handler) logger.addHandler(file_handler)
...@@ -241,15 +246,16 @@ branch = %(branch)s ...@@ -241,15 +246,16 @@ branch = %(branch)s
node_test_suite.revision = ','.join(full_revision_list) node_test_suite.revision = ','.join(full_revision_list)
return full_revision_list return full_revision_list
def addWatcher(self,test_result, node_test_suite): def registerSuiteLog(self, test_result, node_test_suite):
"""
Create a log dedicated for the test suite,
and register the url to master node.
"""
log_file_name = node_test_suite.createSuiteLog() log_file_name = node_test_suite.createSuiteLog()
if log_file_name is None and config.get('log_file'): if log_file_name is None and config.get('log_file'):
log_file_name = config['log_file'] log_file_name = config['log_file']
if log_file_name is not None: # TODO make the path into url
log_file = open(log_file_name) test_result.reportStatus('registerSuiteLog', log_file_name, '')
log_file.seek(0, 2)
log_file.seek(-min(5000, log_file.tell()), 2)
test_result.addWatch(log_file_name,log_file,max_history_bytes=10000)
return log_file_name return log_file_name
def checkRevision(self, test_result, node_test_suite): def checkRevision(self, test_result, node_test_suite):
...@@ -284,7 +290,6 @@ branch = %(branch)s ...@@ -284,7 +290,6 @@ branch = %(branch)s
reset_software = slapos_instance.retry_software_count > 10 reset_software = slapos_instance.retry_software_count > 10
log('testnode, retry_software_count : %r' % \ log('testnode, retry_software_count : %r' % \
slapos_instance.retry_software_count) slapos_instance.retry_software_count)
# XXX:TATUYA TO BE FIXED
self.slapos_controler = SlapOSControler.SlapOSControler( self.slapos_controler = SlapOSControler.SlapOSControler(
working_directory, self.config, log) working_directory, self.config, log)
self.slapos_controler.initializeSlapOSControler(slapproxy_log=slapproxy_log, self.slapos_controler.initializeSlapOSControler(slapproxy_log=slapproxy_log,
...@@ -379,13 +384,6 @@ branch = %(branch)s ...@@ -379,13 +384,6 @@ branch = %(branch)s
log = self.log log = self.log
log('Testnode.cleanUp') log('Testnode.cleanUp')
self.process_manager.killPreviousRun() self.process_manager.killPreviousRun()
if test_result is not None:
try:
for node_test_suite in self.node_test_suite_dict.values():
log_file = node_test_suite.getSuiteLogPath()
test_result.removeWatch(log_file)
except KeyError:
log("KeyError, Watcher already deleted or not added correctly")
def run(self): def run(self):
log = self.log log = self.log
...@@ -434,7 +432,7 @@ branch = %(branch)s ...@@ -434,7 +432,7 @@ branch = %(branch)s
remote_test_result_needs_cleanup = True remote_test_result_needs_cleanup = True
log("testnode, test_result : %r" % (test_result, )) log("testnode, test_result : %r" % (test_result, ))
if test_result is not None: if test_result is not None:
log_file_name = self.addWatcher(test_result, node_test_suite) self.registerSuiteLog(test_result, node_test_suite)
self.checkRevision(test_result,node_test_suite) self.checkRevision(test_result,node_test_suite)
# Now prepare the installation of SlapOS and create instance # Now prepare the installation of SlapOS and create instance
status_dict = self.prepareSlapOSForTestSuite(node_test_suite) status_dict = self.prepareSlapOSForTestSuite(node_test_suite)
...@@ -443,7 +441,6 @@ branch = %(branch)s ...@@ -443,7 +441,6 @@ branch = %(branch)s
# a reliable way to check if they are up or not ... # a reliable way to check if they are up or not ...
time.sleep(20) time.sleep(20)
self.runTestSuite(node_test_suite,portal_url) self.runTestSuite(node_test_suite,portal_url)
test_result.removeWatch(log_file_name)
# break the loop to get latest priorities from master # break the loop to get latest priorities from master
break break
self.cleanUp(test_result) self.cleanUp(test_result)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment