Пример #1
0
    def test_supported_os(self):
        """Tests pre instalation command call. """

        waf = ModuleBuild.create("waf")
        self.assertNotEqual(waf, None)
        self.assertEqual(waf.name(), "waf")
        import platform
        osName = platform.system().lower()

#        self.assertTrue(osName.startswith('linux'))
        
        waf.attribute("supported_os").value = osName # "linux"
        testResult = waf.check_os(waf.attribute("supported_os").value)
        self.assertTrue(testResult)    

        waf.attribute("supported_os").value = "xypto;linux;"+osName
        testResult = waf.check_os(waf.attribute("supported_os").value)
        self.assertTrue(testResult)    

        waf.attribute("supported_os").value = "darwin;bsd;linux".replace(osName, "xypto")
        testResult = waf.check_os(waf.attribute("supported_os").value)
        self.assertFalse(testResult)
            
        waf.attribute("supported_os").value = ""
        testResult = waf.check_os(waf.attribute("supported_os").value)
        self.assertFalse(testResult)    
Пример #2
0
    def test_pre_installation(self):
        """Tests pre instalation command call. """

        waf = ModuleBuild.create("waf")
        self._env.start_build("testModule", "testModule",
                        waf.supports_objdir)
        self.assertNotEqual(waf, None)
        self.assertEqual(waf.name(), "waf")
        
        waf.attribute("pre_installation").value = "ls"
        testResult = waf.perform_pre_installation(self._env)
        self.assertTrue(testResult)    

        waf.attribute("pre_installation").value = "ls or mm567"
        testResult = waf.perform_pre_installation(self._env)
        self.assertTrue(testResult)    

        waf.attribute("pre_installation").value = "mm567 or ls"
        testResult = waf.perform_pre_installation(self._env)
        self.assertTrue(testResult)    

        waf.attribute("pre_installation").value = "mm567 or mm567"
        testResult = waf.perform_pre_installation(self._env)
        self.assertFalse(testResult)  
          
        waf.attribute("pre_installation").value = "mm567 or mm567 or ls"
        testResult = waf.perform_pre_installation(self._env)
        self.assertTrue(testResult)    
        
        waf.attribute("pre_installation").value = "mm576 or VARTT=/;ls $VARTT"
        testResult = waf.perform_pre_installation(self._env)
        self.assertTrue(testResult)    
Пример #3
0
    def test_fullclean(self):
        """Tests distclean command call. """

        waf = ModuleBuild.create("waf")
        self.assertNotEqual(waf, None)
        self.assertEqual(waf.name(), "waf")

        # Environment settings        
        mercurial = ModuleSource.create("mercurial")
        testResult = mercurial.check_version(self._env)
        self.assertTrue(testResult)


        mercurial.attribute("url").value = "http://code.nsnam.org/bhurd/openflow"
        self._env._module_name="openflow-ns3"
        self._env._module_dir="openflow-ns3"
        self._env._objdir = "/tmp/object_openflow"
        self._env._installdir = "/tmp/install_openflow"
        testStatus = commands.getoutput('rm -rf /tmp/source')
        self._logger.set_current_module(self._env._module_name)
        testResult = mercurial.download(self._env)
        self.assertEqual(testResult, None)
        self._env.start_build("openflow-ns3", "/tmp/source/openflow-ns3", True)
        waf.attribute('configure_arguments').value = 'configure  --prefix='+ self._env.installdir + ' --destdir=' + self._env.installdir + ' --blddir=' + self._env.objdir 

        try:
            testResult = waf.build(self._env, "1")
        except TaskError as t:
            print(t.reason)

        self.assertEqual(testResult, None)
        testStatus = os.path.isdir('/tmp/source/openflow-ns3')
        self.assertTrue(testStatus)
        
        testStatus = os.path.isdir('/tmp/object_openflow')
        self.assertTrue(testStatus)

        module = Module(self._env._module_name, 
                        mercurial, 
                        waf)
        module._module_supports_objdir = True
        self._env.end_build()

        try:
            testResult = module.fullclean(self._env)
        except TaskError as t:
            print(t.reason)

        self.assertTrue(testResult)    
        testStatus = os.path.isdir('/tmp/source/openflow-ns3')
        self.assertFalse(testStatus)
        
        testStatus = os.path.isdir('/tmp/source/object_openflow')
        self.assertFalse(testStatus)

        testStatus = os.path.isdir('/tmp/source/install_openflow')
        self.assertFalse(testStatus)
Пример #4
0
    def test_genneral_build_arguments(self):
        """Tests the genneral arguments passed to the Build. """

        waf = ModuleBuild.create("waf")
        self.assertNotEqual(waf, None)
        self.assertEqual(waf.name(), "waf")
        waf.attribute("configure_arguments").value = "configure"
        self._env._module_name="pybindgen"

        self._env.start_build("genneral", "/tmp", waf.supports_objdir)
        
#        # Environment settings        
#        bazaar = ModuleSource.create("bazaar")
#        testResult = bazaar.check_version(self._env)
#        self.assertTrue(testResult)
#        
#        bazaar.attribute("url").value = "https://launchpad.net/pybindgen"
#        self._env._module_dir="pybindgen"
#        self._logger.set_current_module(self._env._module_name)
#        testResult = bazaar.download(self._env)
#        self.assertEqual(testResult, None)

        
        waf.attribute("v_PATH").value = "test_Path_added_value"
        waf.threat_variables(self._env)
        self.assertTrue(len(self._env._libpaths) == 1)
        self.assertTrue(len(self._env._binpaths) == 1)
        self.assertTrue(self._env._libpaths.__contains__("test_Path_added_value"))
        self.assertTrue(self._env._binpaths.__contains__("test_Path_added_value"))
 
        waf.attribute("v_PATH").value = "secondTest;thirdValue"
        waf.threat_variables(self._env)
        self.assertTrue(len(self._env._libpaths) == 3)
        self.assertTrue(len(self._env._binpaths) == 3)
        self.assertTrue(self._env._libpaths.__contains__("test_Path_added_value"))
        self.assertTrue(self._env._binpaths.__contains__("test_Path_added_value"))
        self.assertTrue(self._env._libpaths.__contains__("secondTest"))
        self.assertTrue(self._env._binpaths.__contains__("secondTest"))
        self.assertTrue(self._env._libpaths.__contains__("thirdValue"))
        self.assertTrue(self._env._binpaths.__contains__("thirdValue"))
        
        waf.attribute("v_PATH").value = ""
        waf.attribute("v_LD_LIBRARY").value = "test_ld_Path_added_value"
        waf.threat_variables(self._env)
        self.assertTrue(len(self._env._libpaths) == 4)
        self.assertTrue(len(self._env._binpaths) == 3)
        self.assertTrue(self._env._libpaths.__contains__("test_ld_Path_added_value"))
 
        waf.attribute("v_LD_LIBRARY").value = "secondTestLD;thirdValueLD"
        waf.threat_variables(self._env)
        self.assertTrue(len(self._env._libpaths) == 6)
        self.assertTrue(len(self._env._binpaths) == 3)
        self.assertTrue(self._env._libpaths.__contains__("test_Path_added_value"))
        self.assertTrue(self._env._libpaths.__contains__("secondTest"))
        self.assertTrue(self._env._libpaths.__contains__("thirdValue"))
        self.assertTrue(self._env._libpaths.__contains__("test_ld_Path_added_value"))
        self.assertTrue(self._env._libpaths.__contains__("secondTestLD"))
        self.assertTrue(self._env._libpaths.__contains__("thirdValueLD"))
        
        # try to add repeated values
        waf.attribute("v_LD_LIBRARY").value = "secondTestLD;thirdValueLD"
        waf.threat_variables(self._env)
        self.assertTrue(len(self._env._libpaths) == 6)
        self.assertTrue(len(self._env._binpaths) == 3)

        waf.attribute("v_PATH").value = ""
        waf.attribute("v_LD_LIBRARY").value = ""
        
        self.assertTrue(len(self._env._pkgpaths) == 0)
        waf.attribute("v_PKG_CONFIG").value = "test_pkg_added_value"
        waf.threat_variables(self._env)
        self.assertTrue(len(self._env._pkgpaths) == 1)
        self.assertTrue(len(self._env._binpaths) == 3)
        self.assertTrue(len(self._env._libpaths) == 6)
        self.assertTrue(self._env._pkgpaths.__contains__("test_pkg_added_value"))
 
        waf.attribute("v_PKG_CONFIG").value = "secondTestPkg;thirdValuePkg"
        waf.threat_variables(self._env)
        self.assertTrue(len(self._env._pkgpaths) == 3)
        self.assertTrue(len(self._env._libpaths) == 6)
        self.assertTrue(len(self._env._binpaths) == 3)
        self.assertTrue(self._env._pkgpaths.__contains__("test_pkg_added_value"))
        self.assertTrue(self._env._pkgpaths.__contains__("secondTestPkg"))
        self.assertTrue(self._env._pkgpaths.__contains__("thirdValuePkg"))

        # try to add repeated values
        waf.attribute("v_PKG_CONFIG").value = "secondTestPkg;thirdValuePkg"
        waf.threat_variables(self._env)
        self.assertTrue(len(self._env._pkgpaths) == 3)
        self.assertTrue(len(self._env._libpaths) == 6)
        self.assertTrue(len(self._env._binpaths) == 3)
Пример #5
0
    def test_PythonModuleBuild(self):
        """Tests the WafModuleBuild Class from ModuleBuild. """

        # creating python build module test
        python = ModuleBuild.create("python")
        self.assertNotEqual(python, None)
        self.assertEqual(python.name(), "python")

        self._env.start_build("python", "/tmp", python.supports_objdir)

        
        #checks that the machine has python installed
        self._logger.set_current_module(self._env._module_name)
        testResult = python.check_version(self._env)
        self.assertTrue(testResult)

        # set up the environment: create directories and download the target code
        archive = ModuleSource.create("archive")
        archive.attribute("url").value = "http://switch.dl.sourceforge.net/project/pygccxml/pygccxml/pygccxml-1.0/pygccxml-1.0.0.zip"
        self._env._module_name="pygccxml"
        self._env._module_dir="pygccxml"
        testStatus = commands.getoutput('rm -rf /tmp/source/pygccxml')
        testStatus = commands.getoutput('mkdir /tmp/source')
        self._logger.set_current_module(self._env._module_name)
        testResult = archive.download(self._env)
        self.assertEqual(testResult, None)
        testStatus = commands.getoutput('ls /tmp/source/pygccxml|wc')
        created = re.compile(' +\d+').search(testStatus).group().strip()
        self.assertNotEqual(created, "0")
     
        # Expected case test
        self._env.objdir = self._env.srcdir+"/object_bake"
        self._env._installdir = self._env.srcdir+"/install_bake"
        
        # test patch
        self.assertEqual(python.attribute('patch').value, '')
        python.attribute('patch').value = self._env.srcdir + '/test.patch'
        self.assertEqual(python.attribute('patch').value, self._env.srcdir + 
                         '/test.patch')

        testResult = None
        try:
            testResult = python.add_attribute('patch',  'ERRROR', 
                                              'SHOULD NOT HAVE BEEN ADDED')
            self.fail("The attribute patch exists already, " + 
                      "should not be able to add it. ")
        except AssertionError as e:
            self.assertNotEqual(e, None)    
            self.assertEqual(testResult, None)
        
        try:
            testResult = python.build(self._env, "1")
            self.fail("The patch does not exist, should not have being able" +
                      " to find the path file and give an error. ")
        except TaskError as e:
            self.assertNotEqual(e._reason, None)    
            self.assertEqual(testResult, None)
        
        # creates the file, empty, but created    
        testStatus = commands.getoutput('touch ' + self._env.srcdir + 
                                        '/test.patch')
       
        testResult = python.build(self._env, "1")
        self.assertEqual(testResult, None)       

# TODO: find a python module that accepts the distclean      
#        testResult = python.distclean(self._env)
#        self.assertEqual(testResult, None)       
        
        
        python.attribute('patch').value = ''
       
        testStatus = commands.getoutput('rm -rf ' + self._env.objdir)
        testStatus = commands.getoutput('rm -rf ' + self._env._installdir)
        testResult = python.build(self._env, "1")
        self.assertEqual(testResult, None)
        testStatus = commands.getoutput('ls /tmp/source/pygccxml/object_bake|wc')
        created = re.compile(' +\d+').search(testStatus).group().strip()
        self.assertNotEqual(created, "0")
        testStatus = commands.getoutput('ls /tmp/source/pygccxml/install_bake|wc')
        created = re.compile(' +\d+').search(testStatus).group().strip()
        self.assertNotEqual(created, "0")
        

        # No permission in the target directories 
        self._env.objdir = "/tmp/source/test1/testobj"
        self._env._installdir = "/tmp/source/test1/testinst"
        testStatus = commands.getoutput('rm -rf ' + "/tmp/source/test1")
        testStatus = commands.getoutput('mkdir ' + "/tmp/source/test1")
        testStatus = commands.getoutput('chmod 000 ' +"/tmp/source/test1")
        testResult = None
        try:
            testResult = python.build(self._env, "1")
            self.fail("Has no permission in the target directory, and " + 
                      "passed any way. ")
        except TaskError as e:
            self.assertNotEqual(e._reason, None)    
            self.assertEqual(testResult, None)
            
        testStatus = commands.getoutput('chmod 755 ' + "/tmp/source/test1")
        testStatus = commands.getoutput('rm -rf ' + "/tmp/source/test1")
Пример #6
0
    def test_makeModule(self):
        """Tests the WafModuleBuild Class from ModuleBuild. """

        make = ModuleBuild.create("make")
        self.assertNotEqual(make, None)
        self.assertEqual(make.name(), "make")
        make.attribute('install_arguments').value = 'PREFIX=/tmp/source/readversiondef'

        self._env.start_build("make", "/tmp", make.supports_objdir)

        # Environment settings        
        mercurial = ModuleSource.create("mercurial")
        testResult = mercurial.check_version(self._env)
        self.assertTrue(testResult)

        mercurial.attribute("url").value = "http://code.nsnam.org/mathieu/readversiondef"
        self._env._module_name="readversiondef"
        self._env._module_dir="readversiondef"
        testStatus = commands.getoutput('rm -rf /tmp/source')
        self._logger.set_current_module(self._env._module_name)
        testResult = mercurial.download(self._env)
        self.assertEqual(testResult, None)

        #check that has the make version required is installed in the machine
        testResult = make.check_version(self._env)
        self.assertTrue(testResult)
        
        # Expected case test
        self._env.objdir = self._env.srcdir+"/object"
        
        # test patch
        self.assertEqual(make.attribute('patch').value, '')
        make.attribute('patch').value = self._env.srcdir + '/test.patch'
        self.assertEqual(make.attribute('patch').value, self._env.srcdir + 
                         '/test.patch')
        
        testResult = None
        try:
            testResult = make.add_attribute('patch',  'ERRROR', 
                                            'SHOULD NOT HAVE BEEN ADDED')
            self.fail("The attribute patch exists already, should not be" +
                      " able to add it. ")
        except AssertionError as e:
            self.assertNotEqual(e, None)    
            self.assertEqual(testResult, None)
        
        try:
            testResult = make.build(self._env, "1")
            self.fail("The patch does not exist, should not have being able" +
                      " to find the path file and give an error. ")
        except TaskError as e:
            self.assertNotEqual(e._reason, None)    
            self.assertEqual(testResult, None)
        
        # creates the file, empty, but created    
        testStatus = commands.getoutput('touch ' + self._env.srcdir + 
                                        '/test.patch')

        testStatus = commands.getoutput('rm -rf /tmp/source/readversiondef/object')
        
        try:
            testResult = make.build(self._env, "1")
        except TaskError as t:
            print(t.reason) 
            
        self.assertEqual(testResult, None)
        make.attribute('patch').value = ''

        testStatus = commands.getoutput('ls /tmp/source/readversiondef/bin|wc')
        created = re.compile(' +\d+').search(testStatus).group().strip()
        self.assertNotEqual(created, "0")

        #TODO: This module does not accepts distclean find another one to test
#        testResult = make.distclean(self._env)
#        self.assertEqual(testResult, None)
#        testStatus = commands.getoutput('ls /tmp/source/readversiondef/bin|wc')
#        created = re.compile(' +\d+').search(testStatus).group().strip()
#        self.assertEqual(created, "0")


        # call the clean to remove the build
        # TODO:  This module does not support make clean find another one        
#         testResult = make.clean(self._env)
#         self.assertEqual(testResult, None)
#        testStatus = commands.getoutput('ls /tmp/source/readversiondef/*.o|wc')
#        created = re.compile(' +\d+').search(testStatus).group().strip()
#        self.assertEqual(created, "0")
        
        # TODO: neither the --generate-version appears but I couldn't also 
        # find a configuration argument for pybindgen :(
        # Call with extra options
        make.attribute("configure_arguments").value = "all"
        
        try:
            testResult = make.build(self._env, "1")
        except TaskError as t:
            print(t.reason) 
        self.assertEqual(testResult, None)
        make.attribute('configure_arguments').value = ''

        make.attribute("post_installation").value = "rm -rf /tmp/source/readversiondef/readversiondef.o"
        try:
            testResult = make.build(self._env, "1")
        except TaskError as t:
            print(t.reason) 
        self.assertEqual(testResult, None)
        make.perform_post_installation(self._env)
        testStatus = commands.getoutput('ls /tmp/source/readversiondef/*.o|wc')
        created = re.compile(' +\d+').search(testStatus).group().strip()
        self.assertEqual(created, "0")
Пример #7
0
    def test_CmakeModule(self):
        """Tests the WafModuleBuild Class from ModuleBuild. """

        
        cmake = ModuleBuild.create("cmake")
        self.assertNotEqual(cmake, None)
        self.assertEqual(cmake.name(), "cmake")

        self._env.start_build("cmake", "/tmp", cmake.supports_objdir)


        # Environment settings        
        cvs = ModuleSource.create("cvs")
        testResult = cvs.check_version(self._env)
        self.assertTrue(testResult)
        cvs.attribute("root").value = ":pserver:anoncvs:@www.gccxml.org:/cvsroot/GCC_XML"
        cvs.attribute("module").value="gccxml"
        cvs.attribute("date").value="2009-09-21"
       
        self._env._module_name="gccxml"
        self._env._module_dir="gccxml"
        self._logger.set_current_module(self._env._module_name)
#        bazaar.attribute("revision").value = "revno:795"

        testStatus = commands.getoutput('mkdir /tmp/source')
        testResult = cvs.download(self._env)
        self.assertEqual(testResult, None)

        #check that has the cmake version required is installed in the machine
        testResult = cmake.check_version(self._env)
        self.assertTrue(testResult)
        
        # Expected case test
        self._env.objdir = self._env.srcdir+"/object"
        
        # test patch
        self.assertEqual(cmake.attribute('patch').value, '')
        cmake.attribute('patch').value = self._env.srcdir + '/test.patch'
        self.assertEqual(cmake.attribute('patch').value, self._env.srcdir + 
                         '/test.patch')

        testResult = None
        try:
            testResult = cmake.add_attribute('patch',  'ERRROR', 
                                             'SHOULD NOT HAVE BEEN ADDED')
            self.fail("The attribute patch exists already, should not be" +
                      " able to add it. ")
        except AssertionError as e:
            self.assertNotEqual(e, None)    
            self.assertEqual(testResult, None)
        
        try:
            testResult = cmake.build(self._env, "1")
            self.fail("The patch does not exist, should not have being able" +
                      " to find the path file and give an error. ")
        except TaskError as e:
            self.assertNotEqual(e._reason, None)    
            self.assertEqual(testResult, None)
        
        # creates the file, empty, but created    
        testStatus = commands.getoutput('touch ' + self._env.srcdir + 
                                        '/test.patch')

        testStatus = commands.getoutput('rm -rf /tmp/source/gccxml/object')
        try:
            testResult = cmake.build(self._env, "1")
        except TaskError as t:
            print("Error compiling the module, maybe gccxml is not compatible with this architecture")
            
        self.assertEqual(testResult, None)
        testStatus = commands.getoutput('ls /tmp/source/gccxml/object|wc')
        created = re.compile(' +\d+').search(testStatus).group().strip()
        self.assertNotEqual(created, "0")
        
        
        # call the distclean to remove the build
        #TODO: This module does not accepts distclean find another one to test
#        testResult = cmake.distclean(self._env)
#        self.assertEqual(testResult, None)
#        testStatus = commands.getoutput('ls /tmp/source/gccxml/object|wc')
#        created = re.compile(' +\d+').search(testStatus).group().strip()
#        self.assertEqual(created, "0")


        # call the clean to remove the build
        # TODO:  Find a solution for the remaining directories
        #    - It is strange because the waf does not remove the directories, 
        # just the object files.... Should this  be like that??!?!        
        testResult = cmake.clean(self._env)
        self.assertEqual(testResult, None)
        testStatus = commands.getoutput('ls /tmp/source/gccxml/object/GCC/' 
                                        'gcc/CMakeFiles/backend.dir/*.o|wc')
        created = re.compile(' +\d+').search(testStatus).group().strip()
        self.assertEqual(created, "0")
        
        # TODO: neighter the --generate-version appears but I couldn't also 
        # find a configuration argument for pybindgen :(
        # Call with extra options
        cmake.attribute("CFLAGS").value = "-g"
#        waf.attribute("configure_arguments").value = "--enable-examples --enable-tests"
#        cmake.attribute("builarguments").value = "--generate-version"
        
        try:
            testResult = cmake.build(self._env, "1")
        except TaskError as t:
            print("Error compiling the module, maybe gccxml is not compatible with this architecture")
        self.assertEqual(testResult, None)
        testStatus = commands.getoutput('ls -l /tmp/source/gccxml/object|wc')
        created = re.compile(' +\d+').search(testStatus).group().strip()
        self.assertNotEqual(created, "0")
Пример #8
0
    def test_WafModuleBuildPybind(self):
        """Tests the WafModuleBuild Class from ModuleBuild. """
        
        waf = ModuleBuild.create("waf")
        self.assertNotEqual(waf, None)
        self.assertEqual(waf.name(), "waf")
        waf.attribute("configure_arguments").value = "configure"

        self._env.start_build("waf", "/tmp", waf.supports_objdir)
        
        testResult = None
        testResult = waf.check_version(self._env)
        self.assertFalse(testResult)

        # Environment settings        
        bazaar = ModuleSource.create("bazaar")
        testResult = bazaar.check_version(self._env)
        self.assertTrue(testResult)
        
        bazaar.attribute("url").value = "https://launchpad.net/pybindgen"
        self._env._module_name="pybindgen"
        self._env._module_dir="pybindgen"
        self._logger.set_current_module(self._env._module_name)
#        bazaar.attribute("revision").value = "revno:795"

        self._env._module_name="pybindgen"
        self._env._module_dir="pybindgen"
        testStatus = commands.getoutput('mkdir /tmp/source')
        self._logger.set_current_module(self._env._module_name)
        testResult = bazaar.download(self._env)
        self.assertEqual(testResult, None)

        #check that has the waf version required installed in the machine
        testResult = waf.check_version(self._env)
        self.assertTrue(testResult)
 
        # Verirfies the path to the waf file
        testResult = waf._binary(self._env.srcdir)
        self.assertEqual(testResult, "/tmp/source/pybindgen/waf")
      
        # wrong path
        testResult = waf._binary("/tmp/source")
        self.assertEqual(testResult, "waf")
        
        # non existing path
        testResult = waf._binary("/NonExistant/Path")
        self.assertEqual(testResult, "waf")
        
        # Expected case test
        self._env.objdir = self._env.srcdir+"/object"

        # test patch
        self.assertEqual(waf.attribute('patch').value, '')
        waf.attribute('patch').value = self._env.srcdir + '/test.patch'
        self.assertEqual(waf.attribute('patch').value, self._env.srcdir + 
                         '/test.patch')

        testResult = None
        try:
            testResult = waf.add_attribute('patch',  'ERRROR', 
                                           'SHOULD NOT HAVE BEEN ADDED')
            self.fail("The attribute patch exists already, should not be" +
                      " able to add it. ")
        except AssertionError as e:
            self.assertNotEqual(e, None)    
            self.assertEqual(testResult, None)
        
        try:
            testResult = waf.build(self._env, "1")
            self.fail("The patch does not exist, should not have being able" +
                      " to find the path file and give an error. ")
        except TaskError as e:
            self.assertNotEqual(e._reason, None)    
            self.assertEqual(testResult, None)
        
        # creates the file, empty, but created    
        testStatus = commands.getoutput('touch ' + self._env.srcdir + 
                                        '/test.patch')
        
        testStatus = commands.getoutput('rm -rf /tmp/source/pybindgen/object')
        try:
            testResult = waf.build(self._env, "1")
        except TaskError as e:
            self.assertTrue(e._reason.startswith('Could not install') or e._reason.startswith('Subprocess failed'))
             
        self.assertEqual(testResult, None)
        testStatus = os.path.exists('/tmp/source/pybindgen/object')
        self.assertFalse(testStatus)

        # call the clean to remove the build
        # TODO:  Find a solution for the remaining directories
        #    - It is strange because the waf does not remove the directories, 
        # just the object files.... Should this  be like that??!?!        
        testResult = waf.clean(self._env)
        self.assertEqual(testResult, None)
        testStatus = os.path.exists('/tmp/source/pybindgen/object/default/tests')
        self.assertFalse(testStatus)
        
        # TODO: neighter the --generate-version appears but I couldn't also 
        # find a configuration argument for pybindgen :(
        # Call with extra options
        waf.attribute("CFLAGS").value = "-g"
        waf.attribute("configure_arguments").value = "configure"
        waf.attribute("build_arguments").value = "--generate-version"
        
        try:
            testResult = waf.build(self._env, "1")
        except TaskError as e:
            self.assertTrue(e._reason.startswith('Could not install') or e._reason.startswith('Subprocess failed'))
        self.assertEqual(testResult, None)
        testStatus = os.path.exists('/tmp/source/openflow-ns3/object')
        self.assertFalse(testStatus)
Пример #9
0
    def test_WafModuleBuild(self):
        """Tests the WafModuleBuild Class from ModuleBuild. """

        waf = ModuleBuild.create("waf")
        self.assertNotEqual(waf, None)
        self.assertEqual(waf.name(), "waf")

        testStatus = commands.getoutput('cp test.patch /tmp/source/' 
                                        'openflow-ns3/test.patch' )
        self._env.start_build("waf", "/tmp", waf.supports_objdir)

        testResult = None
        testResult = waf.check_version(self._env)
        self.assertFalse(testResult)    

#        try:
#            self.fail("There was a miss configuration problem and there was no error.")
#        except TaskError as e:
#            self.assertNotEqual(e._reason, None)    
#            self.assertEqual(testResult, None)

        # Environment settings        
        mercurial = ModuleSource.create("mercurial")
        testResult = mercurial.check_version(self._env)
        self.assertTrue(testResult)
 
        mercurial.attribute("url").value = "http://code.nsnam.org/bhurd/openflow"
        self._env._module_name="openflow-ns3"
        self._env._module_dir="openflow-ns3"
        testStatus = commands.getoutput('rm -rf /tmp/source')
        self._logger.set_current_module(self._env._module_name)
        testResult = mercurial.download(self._env)
        self.assertEqual(testResult, None)

        #check that has the waf version required installed in the machine
        testResult = waf.check_version(self._env)
        self.assertTrue(testResult)
 
        # Verirfies the path to the waf file
        testResult = waf._binary(self._env.srcdir)
        self.assertEqual(testResult, "/tmp/source/openflow-ns3/waf")
      
        # wrong path
        testResult = waf._binary("/tmp/source")
        self.assertEqual(testResult, "waf")
        
        # non existing path
        testResult = waf._binary("/NonExistant/Path")
        self.assertEqual(testResult, "waf")
        
        # Expected case test
        self._env.objdir = self._env.srcdir+"/object"
        
        # test patch
        self.assertEqual(waf.attribute('patch').value, '')
        waf.attribute('patch').value = self._env.srcdir + '/test.patch'
        self.assertEqual(waf.attribute('patch').value, self._env.srcdir + 
                         '/test.patch')

        testResult = None
        try:
            testResult = waf.add_attribute('patch',  'ERRROR', 
                                           'SHOULD NOT HAVE BEEN ADDED')
            self.fail("The attribute patch exists already, should not be" +
                      " able to add it. ")
        except AssertionError as e:
            self.assertNotEqual(e, None)    
            self.assertEqual(testResult, None)
        
        try:
            testResult = waf.build(self._env, "1")
            self.fail("The patch does not exist, should not have being able" +
                      " to find the path file and give an error. ")
        except TaskError as e:
            self.assertNotEqual(e._reason, None)    
            self.assertEqual(testResult, None)
 
        testStatus = commands.getoutput('cp test.patch /tmp/source/' 
                                        'openflow-ns3/test.patch' )
       
        # creates the file, empty, but created    
        waf.attribute('patch').value = '/tmp/source/openflow-ns3/test.patch'
        self.assertEqual(waf.attribute('patch').value, '/tmp/source/' 
                         'openflow-ns3/test.patch')
        waf.attribute('configure_arguments').value = 'configure'
        try:
            testResult = waf.build(self._env, "1")
        except TaskError as t:
            print(t.reason)
        self.assertEqual(testResult, None)
        testStatus = commands.getoutput('ls /tmp/source/openflow-ns3/build|wc')
        created = re.compile(' +\d+').search(testStatus).group().strip()
        self.assertNotEqual(created, "0")
        waf.attribute('patch').value = ''
        
        # call the distclean to remove the build
        testResult = waf.distclean(self._env)
        self.assertEqual(testResult, None)
        testStatus = commands.getoutput('ls /tmp/source/openflow-ns3/build|wc')
        created = re.compile(' +\d+').search(testStatus).group().strip()
        self.assertEqual(created, "0")
       

        # Call with extra options
        # TODO: find a solution either use another packet, like pybindgen, that
        # uses waf, or see to fix the openflow, because open flow does not accept
        # the configure arguments even though it is in the example of the
        # man page --enable-examples --enable-tests does not compile gives an error
        # flolowed the steps of http://www.nsnam.org/docs/models/html/openflow-switch.html
        waf.attribute("CFLAGS").value = "-g"
#        waf.attribute("configure_arguments").value = " "
#        waf.attribute("builarguments").value = "-O2"
        
        try:
            testResult = waf.build(self._env, "1")
        except TaskError as t:
            print(t.reason)
        self.assertEqual(testResult, None)
        testStatus = commands.getoutput('ls /tmp/source/openflow-ns3/build/default/lib|wc')
        created = re.compile(' +\d+').search(testStatus).group().strip()
        self.assertNotEqual(created, "0")
        
        # call the clean to remove the build
        testResult = waf.clean(self._env)
        self.assertEqual(testResult, None)
        testStatus = commands.getoutput('ls /tmp/source/openflow-ns3/build/default/lib|wc')
        created = re.compile(' +\d+').search(testStatus).group().strip()
        self.assertEqual(created, "0")