Commit b5f9c351 authored by Sebastien Robin's avatar Sebastien Robin

erp5testnode: fixed profile generation when software repos is not defined first

parent c147b2bc
...@@ -30,18 +30,20 @@ import tempfile ...@@ -30,18 +30,20 @@ import tempfile
class ERP5TestNode(TestCase): class ERP5TestNode(TestCase):
def setUp(self): def setUp(self):
self._tempdir = tempfile.mkdtemp() self._temp_dir = tempfile.mkdtemp()
self.working_directory = os.path.join(self._tempdir, 'testnode') self.working_directory = os.path.join(self._temp_dir, 'testnode')
self.slapos_directory = os.path.join(self._tempdir, 'slapos') self.slapos_directory = os.path.join(self._temp_dir, 'slapos')
self.remote_repository0 = os.path.join(self._tempdir, 'rep0') self.remote_repository0 = os.path.join(self._temp_dir, 'rep0')
self.remote_repository1 = os.path.join(self._tempdir, 'rep1') self.remote_repository1 = os.path.join(self._temp_dir, 'rep1')
self.remote_repository2 = os.path.join(self._temp_dir, 'rep2')
os.mkdir(self.working_directory) os.mkdir(self.working_directory)
os.mkdir(self.slapos_directory) os.mkdir(self.slapos_directory)
os.mkdir(self.remote_repository0) os.mkdir(self.remote_repository0)
os.mkdir(self.remote_repository1) os.mkdir(self.remote_repository1)
os.mkdir(self.remote_repository2)
def tearDown(self): def tearDown(self):
shutil.rmtree(self._tempdir, True) shutil.rmtree(self._temp_dir, True)
def getTestNode(self): def getTestNode(self):
def log(*args): def log(*args):
...@@ -53,8 +55,8 @@ class ERP5TestNode(TestCase): ...@@ -53,8 +55,8 @@ class ERP5TestNode(TestCase):
config["working_directory"] = self.working_directory config["working_directory"] = self.working_directory
return TestNode(log, config) return TestNode(log, config)
def getTestSuiteData(self): def getTestSuiteData(self, add_third_repository=False):
return [{ data = [{
"test_suite": "Foo", "test_suite": "Foo",
"project_title": "Foo", "project_title": "Foo",
"test_suite_title": "Foo-Test", "test_suite_title": "Foo-Test",
...@@ -66,10 +68,20 @@ class ERP5TestNode(TestCase): ...@@ -66,10 +68,20 @@ class ERP5TestNode(TestCase):
{'url': self.remote_repository1, {'url': self.remote_repository1,
'buildout_section_id': 'rep1', 'buildout_section_id': 'rep1',
'branch': 'master'}]}] 'branch': 'master'}]}]
if add_third_repository:
# add a third repository
# insert in position zero since we already had bug when the profile_path
# was defined in non-zero position when generating the profile
data[0]['vcs_repository_list'].insert(0,
{'url': self.remote_repository2,
'buildout_section_id': 'rep2',
'branch': 'foo'})
return data
def updateNodeTestSuiteData(self, node_test_suite): def updateNodeTestSuiteData(self, node_test_suite,
add_third_repository=False):
node_test_suite.edit(working_directory=self.working_directory, node_test_suite.edit(working_directory=self.working_directory,
**self.getTestSuiteData()[0]) **self.getTestSuiteData(add_third_repository=add_third_repository)[0])
def getCaller(self, **kw): def getCaller(self, **kw):
class Caller(object): class Caller(object):
...@@ -81,10 +93,12 @@ class ERP5TestNode(TestCase): ...@@ -81,10 +93,12 @@ class ERP5TestNode(TestCase):
return subprocess.check_output(command, **self.__dict__) return subprocess.check_output(command, **self.__dict__)
return Caller(**kw) return Caller(**kw)
def generateTestRepositoryList(self): def generateTestRepositoryList(self, add_third_repository=False):
commit_dict = {} commit_dict = {}
for i, repository_path in enumerate([self.remote_repository0, repository_list = [self.remote_repository0, self.remote_repository1]
self.remote_repository1]): if add_third_repository:
repository_list.append(self.remote_repository2)
for i, repository_path in enumerate(repository_list):
call = self.getCaller(cwd=repository_path) call = self.getCaller(cwd=repository_path)
call("git init".split()) call("git init".split())
call("touch first_file".split()) call("touch first_file".split())
...@@ -103,6 +117,8 @@ class ERP5TestNode(TestCase): ...@@ -103,6 +117,8 @@ class ERP5TestNode(TestCase):
commit_subject_list = [x.split()[1] for x in output_line_list] commit_subject_list = [x.split()[1] for x in output_line_list]
self.assertEquals(expected_commit_subject_list, commit_subject_list) self.assertEquals(expected_commit_subject_list, commit_subject_list)
commit_dict['rep%i' % i] = [x.split() for x in output_line_list] commit_dict['rep%i' % i] = [x.split() for x in output_line_list]
if repository_path == self.remote_repository2:
output = call('git checkout master -b foo'.split())
# commit_dict looks like # commit_dict looks like
# {'rep1': [['6669613db7239c0b7f6e1fdb82af6f583dcb3a94', 'next_commit'], # {'rep1': [['6669613db7239c0b7f6e1fdb82af6f583dcb3a94', 'next_commit'],
# ['4f1d14de1b04b4f878a442ee859791fa337bcf85', 'first_commit']], # ['4f1d14de1b04b4f878a442ee859791fa337bcf85', 'first_commit']],
...@@ -155,19 +171,23 @@ class ERP5TestNode(TestCase): ...@@ -155,19 +171,23 @@ class ERP5TestNode(TestCase):
""" """
test_node = self.getTestNode() test_node = self.getTestNode()
node_test_suite = test_node.getNodeTestSuite('foo') node_test_suite = test_node.getNodeTestSuite('foo')
self.updateNodeTestSuiteData(node_test_suite) self.updateNodeTestSuiteData(node_test_suite, add_third_repository=True)
test_node.constructProfile(node_test_suite) test_node.constructProfile(node_test_suite)
self.assertEquals("%s/software.cfg" % (node_test_suite.working_directory,), self.assertEquals("%s/software.cfg" % (node_test_suite.working_directory,),
node_test_suite.custom_profile_path) node_test_suite.custom_profile_path)
profile = open(node_test_suite.custom_profile_path, 'r') profile = open(node_test_suite.custom_profile_path, 'r')
expected_profile = """ expected_profile = """
[buildout] [buildout]
extends = %s/testnode/foo/rep0/software.cfg extends = %(temp_dir)s/testnode/foo/rep0/software.cfg
[rep1] [rep1]
repository = %s/testnode/foo/rep1 repository = %(temp_dir)s/testnode/foo/rep1
branch = master branch = master
""" % (self._tempdir, self._tempdir)
[rep2]
repository = %(temp_dir)s/testnode/foo/rep2
branch = foo
""" % {'temp_dir': self._temp_dir}
self.assertEquals(expected_profile, profile.read()) self.assertEquals(expected_profile, profile.read())
profile.close() profile.close()
...@@ -234,7 +254,7 @@ branch = master ...@@ -234,7 +254,7 @@ branch = master
def test_07_checkOldTestSuite(self): def test_07_checkOldTestSuite(self):
test_node = self.getTestNode() test_node = self.getTestNode()
test_suite_data = self.getTestSuiteData() test_suite_data = self.getTestSuiteData(add_third_repository=True)
self.assertEquals([], os.listdir(self.working_directory)) self.assertEquals([], os.listdir(self.working_directory))
test_node.checkOldTestSuite(test_suite_data) test_node.checkOldTestSuite(test_suite_data)
self.assertEquals([], os.listdir(self.working_directory)) self.assertEquals([], os.listdir(self.working_directory))
......
...@@ -131,6 +131,7 @@ class TestNode(object): ...@@ -131,6 +131,7 @@ class TestNode(object):
profile_content = '' profile_content = ''
assert len(node_test_suite.vcs_repository_list), "we must have at least one repository" assert len(node_test_suite.vcs_repository_list), "we must have at least one repository"
profile_path_count = 0 profile_path_count = 0
profile_content_list = []
for vcs_repository in node_test_suite.vcs_repository_list: for vcs_repository in node_test_suite.vcs_repository_list:
url = vcs_repository['url'] url = vcs_repository['url']
buildout_section_id = vcs_repository.get('buildout_section_id', None) buildout_section_id = vcs_repository.get('buildout_section_id', None)
...@@ -143,23 +144,25 @@ class TestNode(object): ...@@ -143,23 +144,25 @@ class TestNode(object):
profile_path_count += 1 profile_path_count += 1
if profile_path_count > 1: if profile_path_count > 1:
raise ValueError(PROFILE_PATH_KEY + ' defined more than once') raise ValueError(PROFILE_PATH_KEY + ' defined more than once')
profile_content = """ profile_content_list.append("""
[buildout] [buildout]
extends = %(software_config_path)s extends = %(software_config_path)s
""" % {'software_config_path': os.path.join(repository_path, profile_path)} """ % {'software_config_path': os.path.join(repository_path, profile_path)})
if not(buildout_section_id is None): if not(buildout_section_id is None):
profile_content += """ profile_content_list.append("""
[%(buildout_section_id)s] [%(buildout_section_id)s]
repository = %(repository_path)s repository = %(repository_path)s
branch = %(branch)s branch = %(branch)s
""" % {'buildout_section_id': buildout_section_id, """ % {'buildout_section_id': buildout_section_id,
'repository_path' : repository_path, 'repository_path' : repository_path,
'branch' : vcs_repository.get('branch','master')} 'branch' : vcs_repository.get('branch','master')})
if not profile_path_count: if not profile_path_count:
raise ValueError(PROFILE_PATH_KEY + ' not defined') raise ValueError(PROFILE_PATH_KEY + ' not defined')
custom_profile = open(node_test_suite.custom_profile_path, 'w') custom_profile = open(node_test_suite.custom_profile_path, 'w')
custom_profile.write(profile_content) # sort to have buildout section first
profile_content_list.sort(key=lambda x: [x, ''][x.startswith('\n[buildout]')])
custom_profile.write(''.join(profile_content_list))
custom_profile.close() custom_profile.close()
sys.path.append(repository_path) sys.path.append(repository_path)
......
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