buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_preparation.py
changeset 587 85df38eb4012
child 588 c7c26511138f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_preparation.py	Tue Apr 27 08:33:08 2010 +0300
@@ -0,0 +1,603 @@
+#============================================================================ 
+#Name        : test_preparation.py
+#Part of     : Helium 
+
+#Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+#All rights reserved.
+#This component and the accompanying materials are made available
+#under the terms of the License "Eclipse Public License v1.0"
+#which accompanies this distribution, and is available
+#at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+#Initial Contributors:
+#Nokia Corporation - initial contribution.
+#
+#Contributors:
+#
+#Description:
+#===============================================================================
+""" Testing preparation module """  
+
+import tempfile
+from shutil import rmtree
+import os
+import logging
+import unittest
+import preparation
+import ccm
+import ccm.extra
+
+_logger = logging.getLogger('test.preparation')
+logging.basicConfig(level=logging.INFO)
+_disable_is_relative = False
+_disable_sub_projects = False
+
+# pylint: disable-msg=W0613
+#these methods are all mocking/emulating the real methods in other files so need the interface to be
+#the same and no code present hence pylint throws up warnings saying unused variables.
+def _get_role_for_status(status): 
+    """ Emulate get_role_for_status method for unit testing """
+    pass
+
+def _get_role_for_purpose(session, purpose): 
+    """ Emulate get_role_for_purpose method for unit testing """
+    pass
+
+def _sessionPool(username, password, engine, dbpath, database, size, opener):
+    """ Emulate ccm.SessionPool method for unit testing """
+    return _emulateSession()
+
+def _fastSnapshot(project, target_dir, threads): 
+    """ Emulate ccm.extra.FastSnapshot method for unit testing """
+    "Snapshot Created"
+
+def _updateResultSimple(session): 
+    """ Emulate ccm.UpdateResultSimple method for unit testing """
+    pass
+
+def _fastMaintainWorkArea(project, dir, projectname, threads): 
+    """ Emulate ccm.extra.FastMaintainWorkArea method for unit testing """
+    pass
+
+def _is_same_family(self, project): 
+    """ Emulate project.is_same_family method for unit testing """
+    pass
+
+def _checkoutException( self, session, version, purpose ): 
+    """ Emulate project.checkout method for unit testing """
+    raise ccm.CCMException('unit testing')
+
+def _checkoutNone( self, session, version, purpose ): 
+    """ Emulate project.checkout method for unit testing """
+    return _checkout(True) 
+
+def _get_workarea_info_exception(self, path):
+    """ Emulate session.get_workarea_info method for unit testing """
+    raise ccm.CCMException('unit testing')
+# pylint: enable-msg=W0613
+
+
+class PreparationTest(unittest.TestCase):
+    """Verifying preparation module"""
+    def setUp(self):
+        """SetUp: setup variables required, called before all the tests are run"""
+        self._sessionPool_safe = ccm.SessionPool 
+        self._getRoleForStatus_safe = ccm.get_role_for_status 
+        self._getRolesForPurpose_safe = ccm.get_role_for_purpose 
+        self._extraFastSnapshot_safe = ccm.extra.FastSnapshot 
+        self._updateResultSimple_safe = ccm.UpdateResultSimple 
+        self._extra_FastMaintainWorkArea_safe = ccm.extra.FastMaintainWorkArea 
+
+        ccm.SessionPool = _sessionPool
+        ccm.get_role_for_status = _get_role_for_status
+        ccm.get_role_for_purpose = _get_role_for_purpose
+        ccm.extra.FastSnapshot = _fastSnapshot
+        ccm.UpdateResultSimple = _updateResultSimple
+        ccm.extra.FastMaintainWorkArea = _fastMaintainWorkArea
+        """Setup a temporary project directory for unit testing"""
+        self.dirname = os.path.join(tempfile.gettempdir(), 'pyUnitTestHeliumProject')
+        self.filename = os.path.join(self.dirname, 'project.version')
+        if os.path.exists(self.dirname): 
+            rmtree(self.dirname)
+
+    def tearDown(self):
+        """Remove the temporary project directory after unit testing complete """
+        ccm.SessionPool = self._sessionPool_safe 
+        ccm.get_role_for_status = self._getRoleForStatus_safe 
+        ccm.get_role_for_purpose = self._getRolesForPurpose_safe 
+        ccm.extra.FastSnapshot = self._extraFastSnapshot_safe 
+        ccm.UpdateResultSimple = self._updateResultSimple_safe 
+        ccm.extra.FastMaintainWorkArea = self._extra_FastMaintainWorkArea_safe 
+        if os.path.exists(self.dirname): 
+            rmtree(self.dirname)
+
+    def test_find_valid(self):
+        """Verifying find (valid args) method"""
+        seq = range(2) 
+        assert preparation.find(dummyFunction, seq) is not None
+
+    def test_find_invalid(self):
+        """Verifying find (invalid args) method"""
+        seq = range(2, 5) 
+        assert preparation.find(dummyFunction, seq) is None
+
+    def test_prep_builder_sshot_check_valid_1(self):
+        """Verifying check (valid args - snapshot with database) method"""
+        builder = preparation.PreparationBuilder([_config('snapshot')], None, None, None)
+        assert builder.check() is None
+
+    def test_prep_builder_sshot_check_valid_2(self):
+        """Verifying check (valid args - snapshot with host + dbpath) method"""
+        confObj = _config('snapshot')
+        del confObj['database']
+        confObj['host'] = None
+        confObj['dbpath'] = None
+        builder = preparation.PreparationBuilder([confObj], None, None, None)
+        assert builder.check() is None
+
+    def test_prep_builder_sshot_check_expn_1(self):
+        """Verifying check (snapshot - exception 1) method"""
+        confObj = _config('snapshot')
+        del confObj['database']
+        builder = preparation.PreparationBuilder([confObj], None, None, None)
+        self.assertRaises(Exception, builder.check)
+
+    def test_prep_builder_sshot_check_expn_2(self):
+        """Verifying check (snapshot - exception 2) method"""
+        confObj = _config('snapshot')
+        del confObj['database']
+        confObj['host'] = None
+        builder = preparation.PreparationBuilder([confObj], None, None, None)
+        self.assertRaises(Exception, builder.check)
+
+    def test_prep_builder_sshot_check_expn_3(self):
+        """Verifying check (snapshot - exception 3) method"""
+        builder = preparation.PreparationBuilder([_config('snapshot')], None, None, None)
+        safe = _project.exists
+        _project.exists = lambda self: False
+        self.assertRaises(Exception, builder.check)
+        _project.exists = safe
+
+    def test_prep_builder_sshot_gtcnt_valid_1(self):
+        """Verifying get_content (valid args - snapshot - 1) method"""
+        builder = preparation.PreparationBuilder([_config('snapshot')], None, None, None)
+        builder.get_content()
+        versionFile = open(self.filename, 'r')
+        content = versionFile.readlines()
+        versionFile.close()
+        assert len(content) >= 1
+            
+    def test_prep_builder_sshot_gtcnt_valid_2(self):
+        """Verifying get_content (valid args - snapshot - 2) method"""
+        confObj = _config('snapshot')
+        confObj['threads'] = 2 
+        builder = preparation.PreparationBuilder([confObj], None, None, None)
+        builder.get_content()
+        versionFile = open(self.filename, 'r')
+        content = versionFile.readlines()
+        versionFile.close()
+        assert len(content) >= 1
+
+    def test_prep_builder_sshot_gtcnt_expn_1(self):
+        """Verifying get_content (exception - snapshot - 1) method"""
+        os.makedirs(self.dirname)
+        builder = preparation.PreparationBuilder([_config('snapshot')], None, None, None)
+        self.assertRaises(Exception, builder.get_content)
+
+    def test_prep_builder_ckt_check_valid(self):
+        """Verifying check (valid args - checkout) method"""
+        confObj = _config('checkout')
+        confObj['tasks'] = [ 'x', 'y' , 'z']
+        confObj['folders'] =  'x'
+        confObj['subbaselines'] = [ 'x', 'y' , 'z']
+        confObj['purpose'] = "samplePurpose"
+        builder = preparation.PreparationBuilder([confObj], None, None, None)
+        assert builder.check() is None
+
+    def test_prep_builder_ckt_check_expn_1(self):
+        """Verifying check (exception - checkout - 1) method"""
+        confObj = _config('checkout')
+        del confObj['release']
+        builder = preparation.PreparationBuilder([confObj], None, None, None)
+        self.assertRaises(Exception, builder.check)
+
+    def test_prep_builder_ckt_check_expn_2(self):
+        """Verifying check (exception - checkout - 2) method"""
+        confObj = _config('checkout')
+        confObj['folders'] = [ 'x', 'y' , 'z']
+        confObj['purpose'] = "PurposeThatDoesnotExist"
+        builder = preparation.PreparationBuilder([confObj], None, None, None)
+        self.assertRaises(Exception, builder.check)
+
+    def test_prep_builder_ckt_gtcnt_valid_1(self):
+        """Verifying get_content (valid args - checkout - 1) method"""
+        confObj = _config('checkout')
+        builder = preparation.PreparationBuilder([confObj], None, None, None)
+        result = builder.get_content() 
+        assert result is None
+
+    def test_prep_builder_ckt_gtcnt_valid_2(self):
+        """Verifying get_content (valid args - checkout - 2) method"""
+        if not os.path.exists(self.dirname): 
+            os.makedirs(self.dirname)
+        versionFile = open(self.filename , 'w+')
+        versionFile.close()
+        confObj = _config('checkout')
+        confObj['purpose'] = "samplePurpose"
+        confObj['version'] = "1"
+        confObj['use.reconfigure.template'] = "true"
+        confObj['threads'] = 2 
+        global _disable_is_relative
+        _disable_is_relative = True
+        builder = preparation.PreparationBuilder([confObj], None, None, None)
+        result = builder.get_content() 
+        _disable_is_relative = False
+        assert result is None
+
+    def test_prep_builder_ckt_gtcnt_valid_3(self):
+        """Verifying get_content (valid args - checkout - 3) method"""
+        if not os.path.exists(self.dirname): 
+            os.makedirs(self.dirname)
+        versionFile = open(self.filename , 'w+')
+        versionFile.close()
+        confObj = _config('checkout')
+        confObj['purpose'] = "samplePurpose"
+        confObj['version'] = "1"
+        confObj['use.reconfigure.template'] = "true"
+        confObj['fix.missing.baselines'] = "true"
+        confObj['threads'] = 2 
+        builder = preparation.PreparationBuilder([confObj], None, None, None)
+        global _disable_sub_projects 
+        _disable_sub_projects = True
+        result = builder.get_content() 
+        _disable_sub_projects = False
+        assert result is None
+
+    def test_prep_builder_ckt_gtcnt_valid_4(self):
+        """Verifying get_content (valid args - checkout - 4) method"""
+        if not os.path.exists(self.dirname): 
+            os.makedirs(self.dirname)
+        versionFile = open(self.filename , 'w+')
+        versionFile.close()
+        confObj = _config('checkout')
+        confObj['purpose'] = "samplePurpose"
+        confObj['version'] = "1"
+        confObj['sync'] = "true"
+        confObj['replace.subprojects'] = "true"
+        confObj['update.failonerror'] = "true"
+        confObj['fix.missing.baselines'] = "true"
+        confObj['show.conflict.objects'] = "true"
+        confObj['show.conflicts'] = "true"
+        confObj['subbaselines'] = [ 'x', 'y' , 'z']
+        confObj['tasks'] = [ 'x', 'y' , 'z']
+        confObj['folders'] = [ 'x', 'y' , 'z']
+        builder = preparation.PreparationBuilder([confObj], None, None, None)
+        result = builder.get_content() 
+        assert result is None
+
+
+    def test_prep_builder_ckt_gtcnt_expn_1(self):
+        """Verifying get_content (exception - checkout - 1) method"""
+        if not os.path.exists(self.dirname): 
+            os.makedirs(self.dirname)
+        versionFile = open(self.filename , 'w+')
+        versionFile.close()
+        confObj = _config('checkout')
+        confObj['purpose'] = "samplePurpose"
+        confObj['version'] = "1"
+        confObj['use.reconfigure.template'] = "true"
+        builder = preparation.PreparationBuilder([confObj], None, None, None)
+        safe = _project.checkout 
+        _project.checkout = _checkoutException
+        self.assertRaises(ccm.CCMException, builder.get_content)
+        _project.checkout  = safe
+
+    def test_prep_builder_ckt_gtcnt_expn_2(self):
+        """Verifying get_content (exception - checkout - 2) method"""
+        if not os.path.exists(self.dirname): 
+            os.makedirs(self.dirname)
+        versionFile = open(self.filename , 'w+')
+        versionFile.close()
+        confObj = _config('checkout')
+        confObj['purpose'] = "samplePurpose"
+        confObj['version'] = "1"
+        confObj['use.reconfigure.template'] = "true"
+        safe = _project.checkout 
+        _project.checkout = _checkoutNone
+        builder = preparation.PreparationBuilder([confObj], None, None, None)
+        self.assertRaises(Exception, builder.get_content)
+        _project.checkout  = safe
+
+    def test_prep_builder_ckt_gtcnt_expn_3(self):
+        """Verifying get_content (exception - checkout - 3) method"""
+        if not os.path.exists(self.dirname): 
+            os.makedirs(os.path.join(self.dirname, 'pyUnitTestHeliumProject'))
+        confObj = _config('checkout')
+        confObj['purpose'] = "samplePurpose"
+        confObj['version'] = "1"
+        confObj['use.reconfigure.template'] = "true"
+        safe = _emulateSession.get_workarea_info 
+        _emulateSession.get_workarea_info = _get_workarea_info_exception
+        builder = preparation.PreparationBuilder([confObj], None, None, None)
+        result = builder.get_content() 
+        _emulateSession.get_workarea_info  = safe
+        assert result is None
+
+    def test_prep_builder_ckt_gtcnt_expn_4(self):
+        """Verifying get_content (expcetion - checkout - 4) method"""
+        if not os.path.exists(self.dirname): 
+            os.makedirs(self.dirname)
+        versionFile = open(self.filename , 'w+')
+        versionFile.close()
+        confObj = _config('checkout')
+        confObj['purpose'] = "samplePurpose"
+        confObj['version'] = "1"
+        confObj['sync'] = "true"
+        confObj['fix.missing.baselines'] = "true"
+        confObj['show.conflict.objects'] = "true"
+        confObj['show.conflicts'] = "true"
+        confObj['subbaselines'] = [ 'x', 'y' , 'z']
+        safe = _subProject.is_same_family  
+        builder = preparation.PreparationBuilder([confObj], None, None, None)
+        _subProject.is_same_family = _is_same_family
+        self.assertRaises(Exception, builder.get_content)
+        _subProject.is_same_family = safe
+
+    def test_prep_builder_update_gtcnt_valid(self):
+        """Verifying get_content (valid args - update) method"""
+        confObj = _config('update')
+        confObj['replace.subprojects'] = 'False'
+        confObj['update.failonerror'] = 'true'
+        builder = preparation.PreparationBuilder([confObj], None, None, None)
+        result = builder.get_content()
+        assert result is None
+
+    def test_prep_action_execute(self):
+        """Verifying execute method"""
+        assert preparation.PreparationAction(None, None).execute() is None
+
+def dummyFunction(item):
+    """Emulating a callback method"""
+    if item in range(2):
+        return True
+    return None
+
+class _config():
+    """Emulating configuration class"""
+    def __init__(self, type):
+        self.database = 'test'
+        self.type = type
+        self.name = 'test'
+        self.data = {'database': 'test'}
+        self.data['dir'] = tempfile.gettempdir()
+        self.data['release'] = None
+        self.threads = 1
+
+    def get_int(self, key, default_value):
+        """ Get a value as an int. """
+        try:
+            value = self.__getitem__(key)
+            return int(value)
+        except KeyError:
+            return default_value
+        
+    def get_boolean(self, key, default_value):
+        """ Get a value as a boolean. """
+        try:
+            value = self.__getitem__(key)
+            return value == "true" or value == "yes" or value == "1" 
+        except KeyError:
+            return default_value
+
+    def has_key(self, key):
+        """ Check if key exists. """
+        return self.data.has_key(key)
+
+    def __getitem__(self, key):
+        """ Get an item from the configuration via dictionary interface. """
+        return self.data[key]                
+
+    def __setitem__(self, key, value):
+        """ Set an item from the configuration via dictionary interface. """
+        self.data[key] = value               
+
+    def __delitem__(self, key):
+        """ Remove an item from the configuration via dictionary interface. """
+        del self.data[key]                
+
+
+class _emulateSession():
+    """Emulating session class"""
+    def __init__(self):
+        self.size = 1
+        self.role = 'developer'
+        self.data = {'samplePurpose': None }
+
+    def __getitem__(self, key):
+        """ Get an item from the configuration via dictionary interface. """
+        return self.data[key]                
+
+    def __setitem__(self, key, value):
+        """ Set an item from the configuration via dictionary interface. """
+        self.data[key] = value               
+
+    def __delitem__(self, key):
+        """ Remove an item from the configuration via dictionary interface. """
+        del self.data[key]                
+
+    def _get_role(self):
+        """Emulating session._get_role method"""
+        pass
+
+    def has_key(self, key):
+        """ Check if key exists. """
+        return self.data.has_key(key)
+
+# pylint: disable-msg=W0613
+#need disable msg to prevent pylint warning as this is emulating the real method.
+    def create(self, fpn):
+        """Emulating session.create method"""
+        return _project()
+# pylint: enable-msg=W0613
+
+    def purposes(self):
+        """Emulating session.purposes method"""
+        return self
+
+# pylint: disable-msg=W0613
+#need disable msg to prevent pylint warning as this is emulating the real method.
+    def get_workarea_info(self, path):
+        """Emulating session.get_workarea_info method"""
+        return _getWorkAreaInfo()
+# pylint: enable-msg=W0613
+
+class _getWorkAreaInfo():
+    """Emulating work area info """
+    def __init__(self):
+        self.data = {'project': _project()}
+
+    def __getitem__(self, key):
+        """ Get an item from the configuration via dictionary interface. """
+        return self.data[key]    
+
+class _project():
+    """Emulating project class"""
+    def __init__(self):
+        global _disable_sub_projects
+        global _disable_is_relative
+        self.name = 'pyUnitTestHeliumProject'
+        self.objectname = '1'
+        self.data = {'status':None} 
+        self.data['project'] =  _subProject()
+        if _disable_is_relative:
+            self.data['is_relative'] =  None
+        self.data['release'] =  None
+        self.release = None
+        self.subprojects = []
+        if not _disable_sub_projects:
+            self.subprojects.extend([ _subProject(), _subProject()])
+        self.session = _emulateSession()
+        self.tasks =  [ 'x' , 'y', 'z' ]
+        self.folders = [ 'x' , 'y', 'z' ]
+
+    def __getitem__(self, key):
+        """ Get an item from the configuration via dictionary interface. """
+        return self.data[key]    
+
+    def __setitem__(self, key, value):
+        """ Set an item from the configuration via dictionary interface. """
+        self.data[key] = value               
+
+    def keys(self):
+        """ Get the list of item keys. """
+        return self.data.keys()
+
+    def exists(self):
+        """Emulating project.exists method"""
+        return True                
+
+    def snapshot(self, target_dir, status):
+        """Emulating project.snapshot method"""
+        print "Snapshot created"
+
+    def update(self, status, replace_subprojects, update_keepgoing, result): 
+        """Emulating project.update method"""
+        pass
+
+    def work_area(self, boolean1, boolean2, boolean3 = None, dir=None, projectname=None ):
+        """Emulating project.work_area method"""
+        pass
+
+    def conflict(self, boolean, conflictsobjects):
+        """Emulating project.conflict method"""
+        pass
+
+# pylint: disable-msg=W0613
+#need disable msg to prevent pylint warning as this is emulating the real method.
+    def checkout(self, session, version, purpose):
+        """Emulating project.checkout method"""
+        return  _checkout()
+# pylint: enable-msg=W0613
+
+    def set_update_method(self, mode, boolean):
+        """Emulating project.set_update_method method"""
+        pass
+
+    def set_baseline(self, project, boolean):
+        """Emulating project.set_baseline method"""
+        pass
+
+    def remove_task(self, task):
+        """Emulating project.remove_task method"""
+        pass
+
+    def remove_folder(self, folder):
+        """Emulating project.remove_folder method"""
+        pass
+
+    def apply_update_properties(self, baseline): 
+        """Emulating project.apply_update_properties method"""
+        pass
+
+    def create_attribute(self, is_relative, boolean1, boolean2):
+        """Emulating project.create_attribute method"""
+        pass
+
+    def sync(self, boolean1, boolean2):
+        """Emulating project.sync method"""
+        pass
+
+    def conflicts(self, boolean1, boolean2):
+        """Emulating project.conflicts method"""
+        pass
+
+    def add_task(self, project):
+        """Emulating project.add_task method"""
+        pass
+
+    def add_folder(self, project):
+        """Emulating project.add_folder method"""
+        pass
+
+class _checkout():
+    """Emulating checkout project """
+    def __init__(self, noProject=None):
+        if noProject:
+            self.project = None
+        else:
+            self.project = _project()
+
+class _subProject():
+    """Emulating sub project """
+    def __init__(self):
+        self.name = 'pyUnitTestHeliumProject'
+        self.objectname = '1'
+        self.data = {'status':'test'} 
+        self.session = _emulateSession()
+
+    def __getitem__(self, key):
+        """ Get an item from the configuration via dictionary interface. """
+        return self.data[key]    
+
+    def keys(self):
+        """ Get the list of item keys. """
+        return self.data.keys()
+
+    def exists(self):
+        """Emulating sub project.exists """
+        return True                
+
+# pylint: disable-msg=W0613
+#need disable msg to prevent pylint warning as this is emulating the real method.
+    def checkout(self, session, version, purpose, subprojects=None):
+        """Emulating sub project.checkout """
+        return  _checkout()
+
+    def is_same_family(self, project):
+        """Emulating sub project.is_same_family """
+        return True
+# pylint: enable-msg=W0613
+
+    def set_baseline(self, subbaseline, boolean1):
+        """Emulating sub project.set_baseline """
+        pass