def test_AbsoluteFileURI(self): domLoggingConfigArg = os.path.join(scatest.getSdrPath(), "dom/mgr/logging.properties") devLoggingConfigArg = os.path.join(scatest.getSdrPath(), "dev/mgr/logging.properties") domLoggingConfigUri, devLoggingConfigUri = self._testLoggingConfigURI(domLoggingConfigArg, devLoggingConfigArg) expectedDomLoggingConfigUri = "file://" + os.path.join(scatest.getSdrPath(), "dom/mgr/logging.properties") expectedDevLoggingConfigUri = "file://" + os.path.join(scatest.getSdrPath(), "dev/mgr/logging.properties") self.assertEqual(domLoggingConfigUri, expectedDomLoggingConfigUri) self.assertEqual(devLoggingConfigUri, expectedDevLoggingConfigUri)
def test_RelativeFileURI(self): domLoggingConfigArg = "dom/mgr/logging.properties" devLoggingConfigArg = "dev/mgr/logging.properties" domLoggingConfigUri, devLoggingConfigUri = self._testLoggingConfigURI( domLoggingConfigArg, devLoggingConfigArg) expectedDomLoggingConfigUri = "file://" + os.path.join( scatest.getSdrPath(), "dom/mgr/logging.properties") expectedDevLoggingConfigUri = "file://" + os.path.join( scatest.getSdrPath(), "dev/mgr/logging.properties") self.assertEqual(domLoggingConfigUri, expectedDomLoggingConfigUri) self.assertEqual(devLoggingConfigUri, expectedDevLoggingConfigUri)
def test_nodeBooterShutdown(self): """Test that nodeBooter correctly cleans up. In OSSIE 0.7.4, and possibly before, killing a nodebooter that was running a device manager would prevent you from restarting the devicemanager without first restarting the domainmanager. Test that this condition is fixed""" # It is important that these core pieces somewhat work for all the other tests to succeed nb1= Popen("../../control/framework/nodeBooter -D --nopersist", cwd=scatest.getSdrPath(), shell=True) domainName = scatest.getTestDomainName() domMgr = self.waitDomainManager(scatest.getDomainMgrURI()) self.assertNotEqual(domMgr, None) self.assertEqual(len(domMgr._get_deviceManagers()), 0) nb2 = Popen("../../control/framework/nodeBooter -d /nodes/test_ExecutableDevice_node/DeviceManager.dcd.xml --domainname %s" % domainName, cwd=scatest.getSdrPath(), shell=True) self.assertPredicateWithWait(lambda: len(domMgr._get_deviceManagers()) == 1) # Wait until the DeviceManager has finished launching its devices devMgr = domMgr._get_deviceManagers()[0] self.assertPredicateWithWait(lambda: len(devMgr._get_registeredDevices()) == 1) os.kill(nb2.pid, signal.SIGINT) self.assertPredicateWithWait(lambda: nb2.poll() != None) self.assertEqual(len(domMgr._get_deviceManagers()), 0) # Restart the device manager to prove that the shutdown was graceful. # In OSSIE 0.7.4 this would fail. nb3 = Popen("../../control/framework/nodeBooter -d /nodes/test_ExecutableDevice_node/DeviceManager.dcd.xml --domainname %s" % domainName, cwd=scatest.getSdrPath(), shell=True) self.assertPredicateWithWait(lambda: len(domMgr._get_deviceManagers()) == 1) # Wait until the DeviceManager has finished launching its devices devMgr = domMgr._get_deviceManagers()[0] self.assertPredicateWithWait(lambda: len(devMgr._get_registeredDevices()) == 1) os.kill(nb3.pid, signal.SIGINT) self.assertPredicateWithWait(lambda: nb3.poll() != None) self.assertEqual(len(domMgr._get_deviceManagers()), 0) os.kill(nb1.pid, signal.SIGINT) self.assertPredicateWithWait(lambda: nb1.poll() != None) # Test that we cleaned up the name; this should be automatic because # the naming context should be empty. try: domMgr = self._root.resolve(scatest.getDomainMgrURI()) self.assertEqual(domMgr, None) except CosNaming.NamingContext.NotFound: pass # This exception is expected
def test_nodeBooterDomainNameFromDMD(self): """Test that we read the correct domainname from the DMD file, the test domain should have been created by the test runner""" domainName = scatest.getTestDomainName() # Test that we don't already have a bound domain try: domMgr = self._root.resolve(scatest.getDomainMgrURI()) self.assertEqual(domMgr, None) except CosNaming.NamingContext.NotFound: pass # This exception is expected nb = Popen("../../control/framework/nodeBooter -D -debug 9 --nopersist", cwd=scatest.getSdrPath(), shell=True) time.sleep(5) # Test that the name exists and is a DomainManager domMgr = self._root.resolve(scatest.getDomainMgrURI())._narrow(CF.DomainManager) self.assertNotEqual(domMgr, None) # Kill the nodebooter os.kill(nb.pid, signal.SIGINT) time.sleep(5) # Give it time to shutdown self.assertEqual(nb.poll(), 0) # Test that we cleaned up the name; this should be automatic because # the naming context should be empty. try: domMgr = self._root.resolve(scatest.getDomainMgrURI()) self.assertEqual(domMgr, None) except CosNaming.NamingContext.NotFound: pass # This exception is expected
def test_SimpleLaunch(self): os.environ['OSSIEHOME'] = 'foo' # Simulate ScaComponentTestProgram testing.setSoftPkg( os.path.join(scatest.getSdrPath(), "dom", "components", "CommandWrapper", "CommandWrapper.spd.xml")) testing.setImplId("DCE:535a68a7-64e4-424b-9045-5ffc7659bf9d") testing.ScaComponentTestCase.runTest = lambda: None tc = testing.ScaComponentTestCase() tc.setUp() self.assertEqual(tc.comp_obj, None) self.assertEqual(tc.comp, None) tc.launch(ossiehome=os.getcwd() + '/../') pid = None comp_obj = None try: self.assertNotEqual(tc.comp_obj, None) self.assertNotEqual(tc.comp, None) comp_obj = tc.comp_obj self.assertEqual(comp_obj._non_existent(), False) self.assertEqual(comp_obj._is_a("IDL:CF/Resource:1.0"), True) finally: tc.tearDown() self.assertNotEqual(comp_obj, None) try: nonExistent = comp_obj._non_existent() except CORBA.TRANSIENT: nonExistent = True self.assertEqual(nonExistent, True) self.assertEqual(tc.comp_obj, None)
def test_nodeBooterDomainNameFromDMD(self): """Test that we read the correct domainname from the DMD file, the test domain should have been created by the test runner""" domainName = scatest.getTestDomainName() # Test that we don't already have a bound domain try: domMgr = self._root.resolve(scatest.getDomainMgrURI()) self.assertEqual(domMgr, None) except CosNaming.NamingContext.NotFound: pass # This exception is expected nb = Popen("../../control/framework/nodeBooter -D -debug 9 --nopersist", cwd=scatest.getSdrPath(), shell=True) domMgr = self.waitDomainManager(scatest.getDomainMgrURI()) self.assertNotEqual(domMgr, None) # Kill the nodebooter os.kill(nb.pid, signal.SIGINT) self.assertPredicateWithWait(lambda: nb.poll() == 0) # Test that we cleaned up the name; this should be automatic because # the naming context should be empty. try: domMgr = self._root.resolve(scatest.getDomainMgrURI()) self.assertEqual(domMgr, None) except CosNaming.NamingContext.NotFound: pass # This exception is expected
def test_cpp_DirectoryLoad(self): self.assertNotEqual(self._domMgr, None) # Verify in the devices cache is emtpy componentDir = os.path.join(scatest.getSdrPath(), "dom", "components", "CommandWrapperWithDirectoryLoad") deviceCacheDir = os.path.join(scatest.getSdrCache(), ".ExecutableDevice_node", "ExecutableDevice1", "components", "CommandWrapperWithDirectoryLoad") if os.path.exists(deviceCacheDir): os.system("rm -rf %s" % deviceCacheDir) self.assertEqual(len(self._domMgr._get_applicationFactories()), 0) self.assertEqual(len(self._domMgr._get_applications()), 0) self._domMgr.installApplication( "/waveforms/CommandWrapperWithDirectoryLoad/CommandWrapper.sad.xml" ) self.assertEqual(len(self._domMgr._get_applicationFactories()), 1) self.assertEqual(len(self._domMgr._get_applications()), 0) # Ensure the expected device is available devBooter, devMgr = self.launchDeviceManager( "/nodes/test_ExecutableDevice_node/DeviceManager.dcd.xml") self.assertNotEqual(devMgr, None) self.assertEqual(len(devMgr._get_registeredDevices()), 1) device = devMgr._get_registeredDevices()[0] appFact = self._domMgr._get_applicationFactories()[0] app = appFact.create(appFact._get_name(), [], []) # LOOK MA, NO DAS! self.assertEqual(len(self._domMgr._get_applicationFactories()), 1) self.assertEqual(len(self._domMgr._get_applications()), 1) # Verify that properties have been changed from their defaults self.assertEqual(len(app._get_componentNamingContexts()), 1) compName = app._get_componentNamingContexts()[0] comp = self._root.resolve(URI.stringToName( compName.elementId))._narrow(CF.Resource) self.assertNotEqual(comp, None) cmd = comp.query([ CF.DataType(id="DCE:a4e7b230-1d17-4a86-aeff-ddc6ea3df26e", value=any.to_any(None)) ])[0] args = comp.query([ CF.DataType(id="DCE:5d8bfe8d-bc25-4f26-8144-248bc343aa53", value=any.to_any(None)) ])[0] self.assertEqual(cmd.value._v, "/bin/echo") self.assertEqual(args.value._v, ["Hello World"]) app.stop() app.releaseObject() self.assertEqual(len(self._domMgr._get_applicationFactories()), 1) self.assertEqual(len(self._domMgr._get_applications()), 0) self._domMgr.uninstallApplication(appFact._get_identifier())
def test_DomainManagerApplicationLifecycle(self): self.assertNotEqual(self._domMgr, None) self.assertEqual(len(self._domMgr._get_applicationFactories()), 0) self.assertEqual(len(self._domMgr._get_applications()), 0) # This filename isn't in compliance with SCA, but it is necessary for OSSIE self._domMgr.installApplication( "/waveforms/CommandWrapper/CommandWrapper.sad.xml") self.assertEqual(len(self._domMgr._get_applicationFactories()), 1) self.assertEqual(len(self._domMgr._get_applications()), 0) appFact = self._domMgr._get_applicationFactories()[0] dom = minidom.parse( os.path.join( scatest.getSdrPath(), "dom/waveforms/CommandWrapper/CommandWrapper.sad.xml")) expectedId = dom.getElementsByTagName( "softwareassembly")[0].getAttribute("id") providedId = appFact._get_identifier() self.assertEqual(providedId, expectedId, msg="Violation of SR:155 and/or SR:156") expectedName = dom.getElementsByTagName( "softwareassembly")[0].getAttribute("name") providedName = appFact._get_name() self.assertEqual(providedName, expectedName, msg="Violation of SR:153") self._domMgr.uninstallApplication(providedId) self.assertEqual(len(self._domMgr._get_applicationFactories()), 0) self.assertEqual(len(self._domMgr._get_applications()), 0)
def test_nodeBooterShutdownSIGQUIT(self): """Test that nodeBooter correctly cleans up. In OSSIE 0.7.4, and possibly before, killing a nodebooter that was running a device manager would prevent you from restarting the devicemanager without first restarting the domainmanager. Test that this condition is fixed""" # It is important that these core pieces somewhat work for all the other tests to succeed nb1= Popen("../../control/framework/nodeBooter -D -debug 9 --nopersist", cwd=scatest.getSdrPath(), shell=True) time.sleep(5) # Give it time to start domainName = scatest.getTestDomainName() domMgr = self._root.resolve(scatest.getDomainMgrURI())._narrow(CF.DomainManager) self.assertNotEqual(domMgr, None) self.assertEqual(len(domMgr._get_deviceManagers()), 0) nb2 = Popen("../../control/framework/nodeBooter -d /nodes/test_ExecutableDevice_node/DeviceManager.dcd.xml -debug 9 --domainname %s" % domainName, cwd=scatest.getSdrPath(), shell=True) time.sleep(5) # Give it time to start self.assertEqual(len(domMgr._get_deviceManagers()), 1) os.kill(nb2.pid, signal.SIGQUIT) time.sleep(5) # Give it time to shutdown self.assertNotEqual(nb2.poll(), None) self.assertEqual(len(domMgr._get_deviceManagers()), 0) # Restart the device manager to prove that the shutdown was graceful. # In OSSIE 0.7.4 this would fail. nb3 = Popen("../../control/framework/nodeBooter -d /nodes/test_ExecutableDevice_node/DeviceManager.dcd.xml -debug 9 --domainname %s" % domainName, cwd=scatest.getSdrPath(), shell=True) time.sleep(5) # Give it time to start self.assertEqual(len(domMgr._get_deviceManagers()), 1) os.kill(nb3.pid, signal.SIGQUIT) time.sleep(5) # Give it time to shutdown self.assertNotEqual(nb3.poll(), None) self.assertEqual(len(domMgr._get_deviceManagers()), 0) os.kill(nb1.pid, signal.SIGQUIT) time.sleep(5) # Give it time to shutdown self.assertNotEqual(nb1.poll(), None) # Test that we cleaned up the name; this should be automatic because # the naming context should be empty. try: domMgr = self._root.resolve(scatest.getDomainMgrURI()) self.assertEqual(domMgr, None) except CosNaming.NamingContext.NotFound: pass # This exception is expected
def test_cpp_DirectoryLoad(self): self.assertNotEqual(self._domMgr, None) # Verify in the devices cache is emtpy componentDir = os.path.join(scatest.getSdrPath(), "dom", "components", "CommandWrapperWithDirectoryLoad") deviceCacheDir = os.path.join(scatest.getSdrPath(), "dev", ".ExecutableDevice_node", "ExecutableDevice1", "components", "CommandWrapperWithDirectoryLoad") if os.path.exists(deviceCacheDir): os.system("rm -rf %s" % deviceCacheDir) self.assertEqual(len(self._domMgr._get_applicationFactories()), 0) self.assertEqual(len(self._domMgr._get_applications()), 0) self._domMgr.installApplication("/waveforms/CommandWrapperWithDirectoryLoad/CommandWrapper.sad.xml") self.assertEqual(len(self._domMgr._get_applicationFactories()), 1) self.assertEqual(len(self._domMgr._get_applications()), 0) # Ensure the expected device is available devBooter, devMgr = self.launchDeviceManager("/nodes/test_ExecutableDevice_node/DeviceManager.dcd.xml", debug=9) self.assertNotEqual(devMgr, None) self.assertEqual(len(devMgr._get_registeredDevices()), 1) device = devMgr._get_registeredDevices()[0] appFact = self._domMgr._get_applicationFactories()[0] app = appFact.create(appFact._get_name(), [], []) # LOOK MA, NO DAS! self.assertEqual(len(self._domMgr._get_applicationFactories()), 1) self.assertEqual(len(self._domMgr._get_applications()), 1) # Verify that properties have been changed from their defaults self.assertEqual(len(app._get_componentNamingContexts()), 1) compName = app._get_componentNamingContexts()[0] comp = self._root.resolve(URI.stringToName(compName.elementId))._narrow(CF.Resource) self.assertNotEqual(comp, None) cmd = comp.query([CF.DataType(id="DCE:a4e7b230-1d17-4a86-aeff-ddc6ea3df26e", value=any.to_any(None))])[0] args = comp.query([CF.DataType(id="DCE:5d8bfe8d-bc25-4f26-8144-248bc343aa53", value=any.to_any(None))])[0] self.assertEqual(cmd.value._v, "/bin/echo") self.assertEqual(args.value._v, ["Hello World"]) app.stop() app.releaseObject() self.assertEqual(len(self._domMgr._get_applicationFactories()), 1) self.assertEqual(len(self._domMgr._get_applications()), 0) self._domMgr.uninstallApplication(appFact._get_identifier())
def test_ApplicationFactoryCreateURIOverride(self): domNB, domMgr = self.launchDomainManager(loggingURI="dom/mgr/logging.properties") self.assertNotEqual(domMgr, None) # Launch a device manager devNB, devMgr = self.launchDeviceManager( "/nodes/test_BasicTestDevice_node/DeviceManager.dcd.xml", loggingURI="dev/mgr/logging.properties" ) self.assertNotEqual(domMgr, None) # Double check the DomainManager LOGGING_CONFIG_URI prop = CF.DataType(id="LOGGING_CONFIG_URI", value=any.to_any(None)) result = domMgr.query([prop]) self.assertEqual(len(result), 1) self.assertEqual(result[0].id, "LOGGING_CONFIG_URI") devLoggingConfigURI = result[0].value._v expectedDomLoggingConfigUri = "file://" + os.path.join(scatest.getSdrPath(), "dom/mgr/logging.properties") self.assertEqual(devLoggingConfigURI, expectedDomLoggingConfigUri) # Launch an application domMgr.installApplication("/waveforms/CommandWrapper/CommandWrapper.sad.xml") self.assertEqual(len(domMgr._get_applicationFactories()), 1) self.assertEqual(len(domMgr._get_applications()), 0) appFact = domMgr._get_applicationFactories()[0] uriOverride = CF.DataType(id="LOGGING_CONFIG_URI", value=any.to_any("sca:///mgr/logging.properties")) app = appFact.create(appFact._get_name(), [uriOverride], []) # Get the desired component self.assertEqual(len(app._get_componentNamingContexts()), 1) compName = app._get_componentNamingContexts()[0] comp = self._root.resolve(URI.stringToName(compName.elementId))._narrow(CF.Resource) self.assertNotEqual(comp, None) # Check the components exec params execparams = comp.query([CF.DataType(id="DCE:85d133fd-1658-4e4d-b3ff-1443cd44c0e2", value=any.to_any(None))])[0] args = any.from_any(execparams.value) execparams = {} for b in args: a = eval(b) name = a[0] value = a[1] execparams[name] = value self.assert_(execparams.has_key("LOGGING_CONFIG_URI")) self.assertEqual(execparams["LOGGING_CONFIG_URI"].split("?fs=")[0], "sca:///mgr/logging.properties") execparamObj = self._orb.string_to_object(execparams["LOGGING_CONFIG_URI"].split("?fs=")[1]) # Need to compare actual objects since the IOR strings could potentially differ for the same object self.assert_(domMgr._get_fileMgr()._is_equivalent(execparamObj)) # Launch an application with a C++ component to exercise Resource_impl logging configure domMgr.installApplication("/waveforms/TestCppProps/TestCppProps.sad.xml") self.assertEqual(len(domMgr._get_applicationFactories()), 2) for appFact in domMgr._get_applicationFactories(): if appFact._get_name() == "TestCppProps": app = appFact.create(appFact._get_name(), [uriOverride], []) break self.assertEqual(len(domMgr._get_applications()), 2)
def test_Move(self): ################# # test move ################# self.assertNotEqual(self._domMgr, None) fileMgr = self._domMgr._get_fileMgr() # Test move on the same file system original = os.path.join(scatest.getSdrPath(), "dom/mgr/DomainManager.spd.xml") domoldfile = "/components/old.txt" domnewfile = "/waveforms/new.txt" devfile = "/ExecutableDevice_node/nodes/dev.txt" domlocaloldfile = os.path.join(scatest.getSdrPath(), 'dom' + domoldfile) domlocalnewfile = os.path.join(scatest.getSdrPath(), 'dom' + domnewfile) devlocalfile = os.path.join(scatest.getSdrPath(), "dev/nodes/dev.txt") shutil.copyfile(original, domlocaloldfile) if os.path.exists(domlocalnewfile): os.remove(domlocalnewfile) try: fileMgr.move(domoldfile, domnewfile) except: self.fail("Exception in local move") self.assertEqual(fileMgr.exists(domoldfile), False) self.assertEqual(fileMgr.exists(domnewfile), True) self.assertEqual(file(original).read(), file(domlocalnewfile).read()) # Test move across file systems if os.path.exists(devlocalfile): os.remove(devlocalfile) try: fileMgr.move(domnewfile, devfile) except: self.fail("Exception in local->remote move") self.assertEqual(fileMgr.exists(domnewfile), False) self.assertEqual(fileMgr.exists(devfile), True) self.assertEqual(file(original).read(), file(devlocalfile).read()) os.remove(devlocalfile)
def test_DASAllocationFail(self): self._domMgr.installApplication( "/waveforms/CapacityUsage/CapacityUsage.sad.xml") # Start the first DeviceManager nb1, node1 = self.launchDeviceManager( "/nodes/test_BasicTestDevice_node/DeviceManager.dcd.xml", debug=9) # Ensure the expected device is available self.assertNotEqual(node1, None) self.assertEqual(len(node1._get_registeredDevices()), 1) device1 = node1._get_registeredDevices()[0] self.assertEqual(self._getBogoMips(device1), 100000000) appFact = self._domMgr._get_applicationFactories()[0] # load the device assignment sequence das = minidom.parse( os.path.join(scatest.getSdrPath(), "dom/waveforms/CapacityUsage/CapacityUsage_DAS.xml")) ds = [] deviceAssignmentTypeNodeList = das.getElementsByTagName( "deviceassignmenttype") for node in deviceAssignmentTypeNodeList: componentid = node.getElementsByTagName( "componentid")[0].firstChild.data assigndeviceid = node.getElementsByTagName( "assigndeviceid")[0].firstChild.data ds.append( CF.DeviceAssignmentType(str(componentid), str(assigndeviceid))) # Create two applications to take up the capacity of the first device # first on uses DAS app1 = appFact.create(appFact._get_name(), [], ds) self.assertEqual(self._getBogoMips(device1), 50000000) # second one is sans DAS app2 = appFact.create(appFact._get_name(), [], []) self.assertEqual(self._getBogoMips(device1), 0) # Try to create another app, which should fail due to lack of capacity. # doing this with DAS since it exercises a different piece of code try: failApp = appFact.create(appFact._get_name(), [], ds) failApp.releaseObject() self.fail("Created application with no capacity") except: pass app2.releaseObject() self.assertEqual(self._getBogoMips(device1), 50000000) app1.releaseObject() self.assertEqual(self._getBogoMips(device1), 100000000) self._domMgr.uninstallApplication(appFact._get_identifier())
def test_DomainManagerId(self): self.assertNotEqual(self._domMgr, None) # Load the ID from the XML file dom = minidom.parse(os.path.join(scatest.getSdrPath(), "dom/domain/DomainManager.dmd.xml")) expectedId = dom.getElementsByTagName("domainmanagerconfiguration")[0].getAttribute("id") providedId = self._domMgr._get_identifier() self.assertEqual(providedId, expectedId, msg="Violation of SR:213 and/or SR:214") # According to SCA section D.8.1, the id is supposed to be a DCE UUID self.assertIsDceUUID(expectedId, msg="Violation of SCA D.8.1")
def test_GetPropertySet(self): testing.setSoftPkg(os.path.join(scatest.getSdrPath(), "dom", "components", "CommandWrapper", "CommandWrapper.spd.xml")) testing.setImplId("DCE:535a68a7-64e4-424b-9045-5ffc7659bf9d") testing.ScaComponentTestCase.runTest = lambda : None tc = testing.ScaComponentTestCase() tc.setUp() execparams = tc.getPropertySet(kinds=("execparam",), modes=("readwrite", "writeonly")) execparams = dict([(p.id, any.from_any(p.value)) for p in execparams]) self.assertEqual(execparams.has_key("EXEC_PARAM_1"), True) self.assertEqual(execparams.has_key("EXEC_PARAM_2"), True) self.assertEqual(execparams.has_key("EXEC_PARAM_4"), True) self.assertEqual(execparams.has_key("SOMEOBJREF"), True) self.assertEqual(execparams["EXEC_PARAM_1"], "Test1") self.assertEqual(execparams["EXEC_PARAM_2"], 2) self.assertEqual(execparams["EXEC_PARAM_4"], True) self.assertEqual(execparams["SOMEOBJREF"], None) execparams = tc.getPropertySet(kinds=("execparam",), modes=("readwrite", "writeonly"), includeNil=False) execparams = dict([(p.id, any.from_any(p.value)) for p in execparams]) self.assertEqual(execparams.has_key("EXEC_PARAM_1"), True) self.assertEqual(execparams.has_key("EXEC_PARAM_2"), True) self.assertEqual(execparams.has_key("EXEC_PARAM_4"), True) self.assertEqual(execparams.has_key("SOMEOBJREF"), False) self.assertEqual(execparams["EXEC_PARAM_1"], "Test1") self.assertEqual(execparams["EXEC_PARAM_2"], 2) self.assertEqual(execparams["EXEC_PARAM_4"], True) cfgparams = tc.getPropertySet(kinds=("configure",), modes=("readwrite", "writeonly")) cfgparams = dict([(p.id, any.from_any(p.value)) for p in cfgparams]) self.assertEqual(cfgparams.has_key("DCE:a4e7b230-1d17-4a86-aeff-ddc6ea3df26e"), True) self.assertEqual(cfgparams.has_key("DCE:5d8bfe8d-bc25-4f26-8144-248bc343aa53"), True) self.assertEqual(cfgparams.has_key("DCE:ffe634c9-096d-425b-86cc-df1cce50612f"), True) self.assertEqual(cfgparams.has_key("DCE:fa8c5924-845c-484a-81df-7941f2c5baa9"), True) self.assertEqual(cfgparams.has_key("DCE:a7de97ee-1e78-45e9-8e2b-204c141656fc"), True) self.assertEqual(cfgparams.has_key("DCE:9ec6e2ff-6a4f-4452-8f38-4df47d6eebc1"), True) self.assertEqual(cfgparams.has_key("DCE:cf623573-a09d-4fb1-a2ae-24b0b507115d"), True) self.assertEqual(cfgparams.has_key("DCE:6ad84383-49cf-4017-b7ca-0ec4c4917952"), True) self.assertEqual(cfgparams["DCE:a4e7b230-1d17-4a86-aeff-ddc6ea3df26e"], "/bin/echo") self.assertEqual(cfgparams["DCE:5d8bfe8d-bc25-4f26-8144-248bc343aa53"], ["Hello World"]) self.assertEqual(cfgparams["DCE:ffe634c9-096d-425b-86cc-df1cce50612f"], [{"id": 'item1', 'value': 'value1'}, {"id": 'item2', 'value': 100}, {"id": 'item3', 'value': 3.14156} ]) self.assertEqual(cfgparams["DCE:fa8c5924-845c-484a-81df-7941f2c5baa9"], 10000) self.assertEqual(cfgparams["DCE:a7de97ee-1e78-45e9-8e2b-204c141656fc"], 12345678901) self.assertEqual(cfgparams["DCE:9ec6e2ff-6a4f-4452-8f38-4df47d6eebc1"], 11111111111) self.assertEqual(cfgparams["DCE:cf623573-a09d-4fb1-a2ae-24b0b507115d"], 500.0) self.assertEqual(cfgparams["DCE:6ad84383-49cf-4017-b7ca-0ec4c4917952"], None)
def test_DASAllocationFail(self): self._domMgr.installApplication("/waveforms/CapacityUsage/CapacityUsage.sad.xml") # Start the first DeviceManager nb1, node1 = self.launchDeviceManager("/nodes/test_BasicTestDevice_node/DeviceManager.dcd.xml", debug=9) # Ensure the expected device is available self.assertNotEqual(node1, None) self.assertEqual(len(node1._get_registeredDevices()), 1) device1 = node1._get_registeredDevices()[0] self.assertEqual(self._getBogoMips(device1), 100000000) appFact = self._domMgr._get_applicationFactories()[0] # load the device assignment sequence das = minidom.parse(os.path.join(scatest.getSdrPath(), "dom/waveforms/CapacityUsage/CapacityUsage_DAS.xml")) ds = [] deviceAssignmentTypeNodeList = das.getElementsByTagName("deviceassignmenttype") for node in deviceAssignmentTypeNodeList: componentid = node.getElementsByTagName("componentid")[0].firstChild.data assigndeviceid = node.getElementsByTagName("assigndeviceid")[0].firstChild.data ds.append( CF.DeviceAssignmentType(str(componentid),str(assigndeviceid)) ) # Create two applications to take up the capacity of the first device # first on uses DAS app1 = appFact.create(appFact._get_name(), [], ds) self.assertEqual(self._getBogoMips(device1), 50000000) # second one is sans DAS app2 = appFact.create(appFact._get_name(), [], []) self.assertEqual(self._getBogoMips(device1), 0) # Try to create another app, which should fail due to lack of capacity. # doing this with DAS since it exercises a different piece of code try: failApp = appFact.create(appFact._get_name(), [], ds) failApp.releaseObject() self.fail("Created application with no capacity") except: pass app2.releaseObject() self.assertEqual(self._getBogoMips(device1), 50000000) app1.releaseObject() self.assertEqual(self._getBogoMips(device1), 100000000) self._domMgr.uninstallApplication(appFact._get_identifier())
def test_DomainManagerId(self): self.assertNotEqual(self._domMgr, None) # Load the ID from the XML file dom = minidom.parse( os.path.join(scatest.getSdrPath(), "dom/domain/DomainManager.dmd.xml")) expectedId = dom.getElementsByTagName( "domainmanagerconfiguration")[0].getAttribute("id") providedId = self._domMgr._get_identifier() self.assertEqual(providedId, expectedId, msg="Violation of SR:213 and/or SR:214") # According to SCA section D.8.1, the id is supposed to be a DCE UUID self.assertIsDceUUID(expectedId, msg="Violation of SCA D.8.1")
def test_DeviceLaunch(self): # Simulate ScaComponentTestProgram testing.setSoftPkg(os.path.join(scatest.getSdrPath(), "dev", "devices", "BasicTestDevice", "BasicTestDevice.spd.xml")) testing.setImplId("DCE:0ef71fab-731d-4ee1-a528-a6da2207e0c5") testing.ScaComponentTestCase.runTest = lambda : None tc = testing.ScaComponentTestCase() tc.setUp() self.assertEqual(tc.comp_obj, None) self.assertEqual(len(tc._processes), 0) tc.launch(ossiehome=os.getcwd()+'/../base/') pid = None comp_obj = None try: self.assertNotEqual(tc.comp_obj, None) self.assertEqual(len(tc._processes), 1) pid = tc._processes.keys()[0] comp_obj = tc.comp_obj try: os.kill(pid, 0) except OSError: self.fail("Component process not alive") self.assertEqual(comp_obj._non_existent(), False) self.assertEqual(tc.comp_obj._is_a("IDL:CF/Resource:1.0"), True) self.assertEqual(tc.comp_obj._is_a("IDL:CF/Device:1.0"), True) self.assertEqual(tc.comp_obj._is_a("IDL:CF/LoadableDevice:1.0"), True) self.assertEqual(tc.comp_obj._is_a("IDL:CF/ExecutableDevice:1.0"), True) finally: tc.tearDown() self.assertNotEqual(comp_obj, None) try: nonExistent = comp_obj._non_existent() except CORBA.TRANSIENT: nonExistent = True self.assertEqual(nonExistent, True) self.assertEqual(tc.comp_obj, None) self.assertEqual(len(tc._processes), 0) self.assertNotEqual(pid, None) try: os.kill(pid, 0) except OSError: pass else: self.fail("Component process did not die")
def test_SimpleLaunch(self): os.environ['OSSIEHOME'] = 'foo' # Simulate ScaComponentTestProgram testing.setSoftPkg(os.path.join(scatest.getSdrPath(), "dom", "components", "CommandWrapper", "CommandWrapper.spd.xml")) testing.setImplId("DCE:535a68a7-64e4-424b-9045-5ffc7659bf9d") testing.ScaComponentTestCase.runTest = lambda : None tc = testing.ScaComponentTestCase() tc.setUp() self.assertEqual(tc.comp_obj, None) self.assertEqual(len(tc._processes), 0) tc.launch(ossiehome=os.getcwd()+'/../base/') pid = None comp_obj = None try: self.assertNotEqual(tc.comp_obj, None) self.assertEqual(len(tc._processes), 1) pid = tc._processes.keys()[0] comp_obj = tc.comp_obj try: os.kill(pid, 0) except OSError: self.fail("Component process not alive") self.assertEqual(comp_obj._non_existent(), False) self.assertEqual(tc.comp_obj._is_a("IDL:CF/Resource:1.0"), True) finally: tc.tearDown() self.assertNotEqual(comp_obj, None) try: nonExistent = comp_obj._non_existent() except CORBA.TRANSIENT: nonExistent = True self.assertEqual(nonExistent, True) self.assertEqual(tc.comp_obj, None) self.assertEqual(len(tc._processes), 0) self.assertNotEqual(pid, None) try: os.kill(pid, 0) except OSError: pass else: self.fail("Component process did not die")
def _test_FileChanged(self, nodeName, deviceName): # Test that updating a file in the SCA filesystem causes a device to reload that file # in its cache. deviceCacheDir = os.path.join(scatest.getSdrPath(), "dev", "." + nodeName, deviceName) if os.path.exists(deviceCacheDir): os.system("rm -rf %s" % deviceCacheDir) self.assertNotEqual(self._domMgr, None) fileMgr = self._domMgr._get_fileMgr() # Ensure the expected device is available devBooter, devMgr = self.launchDeviceManager(dcdFile="/nodes/test_%s/DeviceManager.dcd.xml" % nodeName, debug=9) self.assertNotEqual(devMgr, None) self.assertEqual(len(devMgr._get_registeredDevices()), 1) device = devMgr._get_registeredDevices()[0] # Create the initial file we'll be loading. testFile = 'test.out' scaPath = '/' + testFile srcFile = os.path.join(os.environ['SDRROOT'], 'dom', testFile) f = open(srcFile, 'w') f.write('Pre') f.close() self._testFiles.append(srcFile) # Load the initial file onto the device and verify that it contains the expected text. device.load(fileMgr, scaPath, CF.LoadableDevice.EXECUTABLE) cacheFile = os.path.join(deviceCacheDir, testFile) f = open(cacheFile, 'r') self.assertEqual(f.readline(), 'Pre') f.close() # Update the file, making sure that the modification time is more recent than the cached file. f = open(srcFile, 'w') f.write('Post') f.close() os.utime(srcFile, (os.path.getatime(cacheFile), os.path.getmtime(cacheFile)+1)) # Load the file again and verify that the cache has been updated. device.load(fileMgr, scaPath, CF.LoadableDevice.EXECUTABLE) f = open(cacheFile, 'r') self.assertEqual(f.readline(), 'Post') f.close()
def test_DeviceManagerURIOverride(self): # Test that the device manager DCD can override the log4cxx URI domNB, domMgr = self.launchDomainManager(loggingURI="") self.assertNotEqual(domMgr, None) # Launch a device manager devNB, devMgr = self.launchDeviceManager( "/nodes/test_LoggingBasicTestDevice_node/DeviceManager.dcd.xml", loggingURI="dev/mgr/logging.properties") self.assertNotEqual(devMgr, None) # Double check the DeviceManager LOGGING_CONFIG_URI prop = CF.DataType(id="LOGGING_CONFIG_URI", value=any.to_any(None)) result = devMgr.query([prop]) self.assertEqual(len(result), 1) self.assertEqual(result[0].id, "LOGGING_CONFIG_URI") devLoggingConfigURI = result[0].value._v expectedDevLoggingConfigUri = "file://" + os.path.join( scatest.getSdrPath(), "dev/mgr/logging.properties") self.assertEqual(devLoggingConfigURI, expectedDevLoggingConfigUri) # Check the devices exec params self.assertEqual(len(devMgr._get_registeredDevices()), 1) device = devMgr._get_registeredDevices()[0] execparams = device.query([ CF.DataType(id="DCE:85d133fd-1658-4e4d-b3ff-1443cd44c0e2", value=any.to_any(None)) ])[0] args = execparams.value._v.split() execparams = {} while len(args) > 0: name = args.pop(0) value = args.pop(0) execparams[name] = value self.assert_(execparams.has_key("LOGGING_CONFIG_URI")) devMgrFileSysIOR = self._orb.object_to_string(devMgr._get_fileSys()) self.assertEqual(execparams["LOGGING_CONFIG_URI"].split("?fs=")[0], "sca:///mgr/logging.properties") execparamObj = self._orb.string_to_object( execparams["LOGGING_CONFIG_URI"].split("?fs=")[1]) # Need to compare actual objects since the IOR strings could potentially differ for the same object self.assert_(devMgr._get_fileSys()._is_equivalent(execparamObj))
def test_DeviceManagerURIOverride(self): # Test that the device manager DCD can override the log4cxx URI domNB, domMgr = self.launchDomainManager(loggingURI="") self.assertNotEqual(domMgr, None) # Launch a device manager devNB, devMgr = self.launchDeviceManager( "/nodes/test_LoggingBasicTestDevice_node/DeviceManager.dcd.xml", loggingURI="dev/mgr/logging.properties" ) self.assertNotEqual(devMgr, None) # Double check the DeviceManager LOGGING_CONFIG_URI prop = CF.DataType(id="LOGGING_CONFIG_URI", value=any.to_any(None)) result = devMgr.query([prop]) self.assertEqual(len(result), 1) self.assertEqual(result[0].id, "LOGGING_CONFIG_URI") devLoggingConfigURI = result[0].value._v expectedDevLoggingConfigUri = "file://" + os.path.join(scatest.getSdrPath(), "dev/mgr/logging.properties") self.assertEqual(devLoggingConfigURI, expectedDevLoggingConfigUri) # Check the devices exec params self.assertEqual(len(devMgr._get_registeredDevices()), 1) device = devMgr._get_registeredDevices()[0] execparams = device.query([CF.DataType(id="DCE:85d133fd-1658-4e4d-b3ff-1443cd44c0e2", value=any.to_any(None))])[ 0 ] args = execparams.value._v.split() execparams = {} while len(args) > 0: name = args.pop(0) value = args.pop(0) execparams[name] = value self.assert_(execparams.has_key("LOGGING_CONFIG_URI")) devMgrFileSysIOR = self._orb.object_to_string(devMgr._get_fileSys()) self.assertEqual(execparams["LOGGING_CONFIG_URI"].split("?fs=")[0], "sca:///mgr/logging.properties") execparamObj = self._orb.string_to_object(execparams["LOGGING_CONFIG_URI"].split("?fs=")[1]) # Need to compare actual objects since the IOR strings could potentially differ for the same object self.assert_(devMgr._get_fileSys()._is_equivalent(execparamObj))
def test_DomainManagerApplicationLifecycle(self): self.assertNotEqual(self._domMgr, None) self.assertEqual(len(self._domMgr._get_applicationFactories()), 0) self.assertEqual(len(self._domMgr._get_applications()), 0) # This filename isn't in compliance with SCA, but it is necessary for OSSIE self._domMgr.installApplication("/waveforms/CommandWrapper/CommandWrapper.sad.xml") self.assertEqual(len(self._domMgr._get_applicationFactories()), 1) self.assertEqual(len(self._domMgr._get_applications()), 0) appFact = self._domMgr._get_applicationFactories()[0] dom = minidom.parse(os.path.join(scatest.getSdrPath(), "dom/waveforms/CommandWrapper/CommandWrapper.sad.xml")) expectedId = dom.getElementsByTagName("softwareassembly")[0].getAttribute("id") providedId = appFact._get_identifier() self.assertEqual(providedId, expectedId, msg="Violation of SR:155 and/or SR:156") expectedName = dom.getElementsByTagName("softwareassembly")[0].getAttribute("name") providedName = appFact._get_name() self.assertEqual(providedName, expectedName, msg="Violation of SR:153") self._domMgr.uninstallApplication(providedId) self.assertEqual(len(self._domMgr._get_applicationFactories()), 0) self.assertEqual(len(self._domMgr._get_applications()), 0)
def test_DeviceLaunch(self): # Simulate ScaComponentTestProgram testing.setSoftPkg( os.path.join(scatest.getSdrPath(), "dev", "devices", "BasicTestDevice", "BasicTestDevice.spd.xml")) testing.setImplId("DCE:0ef71fab-731d-4ee1-a528-a6da2207e0c5") testing.ScaComponentTestCase.runTest = lambda: None tc = testing.ScaComponentTestCase() tc.setUp() self.assertEqual(tc.comp_obj, None) self.assertEqual(tc.comp, None) tc.launch(ossiehome=os.getcwd() + '/../') comp_obj = None try: self.assertNotEqual(tc.comp_obj, None) self.assertNotEqual(tc.comp, None) comp_obj = tc.comp_obj self.assertEqual(comp_obj._non_existent(), False) self.assertEqual(tc.comp_obj._is_a("IDL:CF/Resource:1.0"), True) self.assertEqual(tc.comp_obj._is_a("IDL:CF/Device:1.0"), True) self.assertEqual(tc.comp_obj._is_a("IDL:CF/LoadableDevice:1.0"), True) self.assertEqual(tc.comp_obj._is_a("IDL:CF/ExecutableDevice:1.0"), True) finally: tc.tearDown() self.assertNotEqual(comp_obj, None) try: nonExistent = comp_obj._non_existent() except CORBA.TRANSIENT: nonExistent = True self.assertEqual(nonExistent, True) self.assertEqual(tc.comp_obj, None)
def test_py_UnloadOnRelease(self): # Test that releasing the device unloads all files deviceCacheDir = os.path.join(scatest.getSdrPath(), "dev", ".BasicTestDevice_node", "BasicTestDevice1") if os.path.exists(deviceCacheDir): os.system("rm -rf %s" % deviceCacheDir) self.assertNotEqual(self._domMgr, None) # Ensure the expected device is available devBooter, devMgr = self.launchDeviceManager("/nodes/test_BasicTestDevice_node/DeviceManager.dcd.xml", debug=9) self.assertNotEqual(devMgr, None) self.assertEqual(len(devMgr._get_registeredDevices()), 1) device = devMgr._get_registeredDevices()[0] self.assert_(not os.path.exists(deviceCacheDir + "/components/CommandWrapper")) self.assert_(not os.path.exists(deviceCacheDir + "/components/CapacityUser")) # Load a some files and directories device.load(self._domMgr._get_fileMgr(), "/components/CommandWrapper", CF.LoadableDevice.EXECUTABLE) device.load(self._domMgr._get_fileMgr(), "/components/CapacityUser/CapacityUser.py", CF.LoadableDevice.EXECUTABLE) device.load(self._domMgr._get_fileMgr(), "/components/CapacityUser/CapacityUser.prf.xml", CF.LoadableDevice.EXECUTABLE) device.load(self._domMgr._get_fileMgr(), "/components/CapacityUser/CapacityUser.scd.xml", CF.LoadableDevice.EXECUTABLE) device.load(self._domMgr._get_fileMgr(), "/components/CapacityUser/CapacityUser.spd.xml", CF.LoadableDevice.EXECUTABLE) # Simply check that the cache dir isn't empty and has the correct number of files self.assertEqual(len(os.listdir(deviceCacheDir + "/components/CommandWrapper")), 4) self.assertEqual(len(os.listdir(deviceCacheDir + "/components/CapacityUser")), 4) device.releaseObject() # Wait for the device to unregister. self.assert_(self._waitRegisteredDevices(devMgr, 0)) self.assertEqual(len(os.listdir(deviceCacheDir + "/components/CommandWrapper")), 0) self.assertEqual(len(os.listdir(deviceCacheDir + "/components/CapacityUser")), 0) self.assertEqual(len(self._domMgr._get_deviceManagers()), 1)
def test_ComponentLoggingRedirect(self): logfile = "/var/tmp/commandwrapper.log" fp = open(logfile, "w") fp.close() domNB, domMgr = self.launchDomainManager(loggingURI="dom/mgr/logging_2.properties") self.assertNotEqual(domMgr, None) # Launch a device manager devNB, devMgr = self.launchDeviceManager( "/nodes/test_BasicTestDevice_node/DeviceManager.dcd.xml", loggingURI="dev/mgr/logging.properties" ) self.assertNotEqual(domMgr, None) # Double check the DomainManager LOGGING_CONFIG_URI prop = CF.DataType(id="LOGGING_CONFIG_URI", value=any.to_any(None)) result = domMgr.query([prop]) self.assertEqual(len(result), 1) self.assertEqual(result[0].id, "LOGGING_CONFIG_URI") devLoggingConfigURI = result[0].value._v expectedDomLoggingConfigUri = "file://" + os.path.join(scatest.getSdrPath(), "dom/mgr/logging_2.properties") self.assertEqual(devLoggingConfigURI, expectedDomLoggingConfigUri) # Launch an application domMgr.installApplication("/waveforms/CommandWrapper/CommandWrapper.sad.xml") self.assertEqual(len(domMgr._get_applicationFactories()), 1) self.assertEqual(len(domMgr._get_applications()), 0) appFact = domMgr._get_applicationFactories()[0] uriOverride = CF.DataType(id="LOGGING_CONFIG_URI", value=any.to_any("sca:///mgr/logging_2.properties")) app = appFact.create(appFact._get_name(), [uriOverride], []) # Get the desired component self.assertEqual(len(app._get_componentNamingContexts()), 1) compName = app._get_componentNamingContexts()[0] comp = self._root.resolve(URI.stringToName(compName.elementId))._narrow(CF.Resource) self.assertNotEqual(comp, None) # Check the components exec params execparams = comp.query([CF.DataType(id="DCE:85d133fd-1658-4e4d-b3ff-1443cd44c0e2", value=any.to_any(None))])[0] args = any.from_any(execparams.value) execparams = {} for a in args: name = a[0] value = a[1] execparams[name] = value app.start() app.stop() app.releaseObject() fp = open(logfile, "r") log_contents = fp.read() fp.close() count_debugs = log_contents.count("DEBUG:") count_command = log_contents.count("DEBUG:CommandWrapper") self.assertEqual(count_debugs, count_command) # Launch an application with a C++ component to exercise Resource_impl logging configure domMgr.installApplication("/waveforms/TestCppProps/TestCppProps.sad.xml") self.assertEqual(len(domMgr._get_applicationFactories()), 2) for appFact in domMgr._get_applicationFactories(): if appFact._get_name() == "TestCppProps": app = appFact.create(appFact._get_name(), [uriOverride], []) break self.assertEqual(len(domMgr._get_applications()), 1)
def test_GetPropertySet(self): testing.setSoftPkg( os.path.join(scatest.getSdrPath(), "dom", "components", "CommandWrapper", "CommandWrapper.spd.xml")) testing.setImplId("DCE:535a68a7-64e4-424b-9045-5ffc7659bf9d") testing.ScaComponentTestCase.runTest = lambda: None tc = testing.ScaComponentTestCase() tc.setUp() execparams = tc.getPropertySet(kinds=("execparam", ), modes=("readwrite", "writeonly")) execparams = dict([(p.id, any.from_any(p.value)) for p in execparams]) self.assertEqual(execparams.has_key("EXEC_PARAM_1"), True) self.assertEqual(execparams.has_key("EXEC_PARAM_2"), True) self.assertEqual(execparams.has_key("EXEC_PARAM_4"), True) self.assertEqual(execparams.has_key("SOMEOBJREF"), True) self.assertEqual(execparams["EXEC_PARAM_1"], "Test1") self.assertEqual(execparams["EXEC_PARAM_2"], 2) self.assertEqual(execparams["EXEC_PARAM_4"], True) self.assertEqual(execparams["SOMEOBJREF"], None) execparams = tc.getPropertySet(kinds=("execparam", ), modes=("readwrite", "writeonly"), includeNil=False) execparams = dict([(p.id, any.from_any(p.value)) for p in execparams]) self.assertEqual(execparams.has_key("EXEC_PARAM_1"), True) self.assertEqual(execparams.has_key("EXEC_PARAM_2"), True) self.assertEqual(execparams.has_key("EXEC_PARAM_4"), True) self.assertEqual(execparams.has_key("SOMEOBJREF"), False) self.assertEqual(execparams["EXEC_PARAM_1"], "Test1") self.assertEqual(execparams["EXEC_PARAM_2"], 2) self.assertEqual(execparams["EXEC_PARAM_4"], True) cfgparams = tc.getPropertySet(kinds=("configure", ), modes=("readwrite", "writeonly")) cfgparams = dict([(p.id, any.from_any(p.value)) for p in cfgparams]) self.assertEqual( cfgparams.has_key("DCE:a4e7b230-1d17-4a86-aeff-ddc6ea3df26e"), True) self.assertEqual( cfgparams.has_key("DCE:5d8bfe8d-bc25-4f26-8144-248bc343aa53"), True) self.assertEqual( cfgparams.has_key("DCE:ffe634c9-096d-425b-86cc-df1cce50612f"), True) self.assertEqual( cfgparams.has_key("DCE:fa8c5924-845c-484a-81df-7941f2c5baa9"), True) self.assertEqual( cfgparams.has_key("DCE:a7de97ee-1e78-45e9-8e2b-204c141656fc"), True) self.assertEqual( cfgparams.has_key("DCE:9ec6e2ff-6a4f-4452-8f38-4df47d6eebc1"), True) self.assertEqual( cfgparams.has_key("DCE:cf623573-a09d-4fb1-a2ae-24b0b507115d"), True) self.assertEqual( cfgparams.has_key("DCE:6ad84383-49cf-4017-b7ca-0ec4c4917952"), True) self.assertEqual(cfgparams["DCE:a4e7b230-1d17-4a86-aeff-ddc6ea3df26e"], "/bin/echo") self.assertEqual(cfgparams["DCE:5d8bfe8d-bc25-4f26-8144-248bc343aa53"], ["Hello World"]) self.assertEqual(cfgparams["DCE:ffe634c9-096d-425b-86cc-df1cce50612f"], [{ "id": 'item1', 'value': 'value1' }, { "id": 'item2', 'value': 100 }, { "id": 'item3', 'value': 3.14156 }]) self.assertEqual(cfgparams["DCE:fa8c5924-845c-484a-81df-7941f2c5baa9"], 10000) self.assertEqual(cfgparams["DCE:a7de97ee-1e78-45e9-8e2b-204c141656fc"], 12345678901) self.assertEqual(cfgparams["DCE:9ec6e2ff-6a4f-4452-8f38-4df47d6eebc1"], 11111111111) self.assertEqual(cfgparams["DCE:cf623573-a09d-4fb1-a2ae-24b0b507115d"], 500.0) self.assertEqual(cfgparams["DCE:6ad84383-49cf-4017-b7ca-0ec4c4917952"], None)
def test_DirectoryOperation(self): ################# # test mkdir ################# self.assertNotEqual(self._domMgr, None) fileMgr = self._domMgr._get_fileMgr() domdir = '/mkdir_test_directory_tmp_local' localdomdir = 'dom/mkdir_test_directory_tmp_local' devdir = "/DeviceManager/mkdir_test_directory_tmp_mounted" localdevdir = "dev/mkdir_test_directory_tmp_mounted" domdir_nestedbase = '/mkdir_test_directory_tmp_nested1' localdomdir_nestedbase = 'dom/mkdir_test_directory_tmp_nested1' devdir_nestedbase = '/DeviceManager/mkdir_test_directory_tmp_nested1' localdevdir_nestedbase = 'dev/mkdir_test_directory_tmp_nested1' tmpdevfile = '/DeviceManager/mkdir_test_directory_tmp_nested1/foo.txt' tmpdevfilenested = '/DeviceManager/mkdir_test_directory_tmp_nested1/nested2/foo.txt' # test local mkdir if os.path.exists(os.path.join(scatest.getSdrPath(), localdomdir)): os.rmdir(os.path.join(scatest.getSdrPath(), localdomdir)) try: fileMgr.mkdir(domdir) except: self.fail("Something bad happened in fileMgr.mkdir(newdir_local)") self.assertEqual(fileMgr.exists(domdir), True) # test mounted mkdir if os.path.exists(os.path.join(scatest.getSdrPath(), localdevdir)): os.rmdir(os.path.join(scatest.getSdrPath(), localdevdir)) try: fileMgr.mkdir(devdir) except: self.fail( "Something bad happened in fileMgr.mkdir(newdir_mounted)") self.assertEqual(fileMgr.exists(devdir), True) # test nested mkdir local if os.path.exists( os.path.join(scatest.getSdrPath(), localdomdir_nestedbase + '/nested2')): os.rmdir( os.path.join(scatest.getSdrPath(), localdomdir_nestedbase + '/nested2')) if os.path.exists( os.path.join(scatest.getSdrPath(), localdomdir_nestedbase)): os.rmdir(os.path.join(scatest.getSdrPath(), localdomdir_nestedbase)) try: fileMgr.mkdir(domdir_nestedbase + '/nested2') except: self.fail( "Something bad happened in fileMgr.mkdir(domdir_nestedbase)") self.assertEqual(fileMgr.exists(domdir_nestedbase + '/nested2'), True) # test nested mkdir mounted # also test trailing '/' if os.path.exists( os.path.join(scatest.getSdrPath(), localdevdir_nestedbase + '/nested2')): os.rmdir( os.path.join(scatest.getSdrPath(), localdevdir_nestedbase + '/nested2')) if os.path.exists( os.path.join(scatest.getSdrPath(), localdevdir_nestedbase)): os.rmdir(os.path.join(scatest.getSdrPath(), localdevdir_nestedbase)) try: fileMgr.mkdir(devdir_nestedbase + '/nested2/') except: self.fail( "Something bad happened in fileMgr.mkdir(devdir_nestedbase)") self.assertEqual(fileMgr.exists(devdir_nestedbase + '/nested2'), True) ################# # test rmdir ################# #remove empty directory try: fileMgr.rmdir(domdir) fileMgr.rmdir(devdir) except: self.fail("Something bad happened in fileMgr.rmdir()") self.assertEqual(fileMgr.exists(domdir), False) self.assertEqual(fileMgr.exists(devdir), False) #remove nested empty directories try: fileMgr.rmdir(domdir_nestedbase) except: self.fail( "Something bad happened in fileMgr.rmdir(domdir_nestedbase)") self.assertEqual(fileMgr.exists(domdir_nestedbase + '/nested2'), False) self.assertEqual(fileMgr.exists(domdir_nestedbase), False) #make sure remove doesn't happen if files are in directory newfile = fileMgr.create(tmpdevfile) newfile.close() try: fileMgr.rmdir(devdir_nestedbase) self.fail("rmdir should not have worked. Directory not empty") except: self.assertEqual(fileMgr.exists(devdir_nestedbase + '/nested2'), True) fileMgr.remove(tmpdevfile) self.assertEqual(fileMgr.exists(tmpdevfile), False) #same thing as above, but in a nested directory newfile = fileMgr.create(tmpdevfilenested) newfile.close() try: fileMgr.rmdir(devdir_nestedbase) self.fail("rmdir should not have worked. Directory not empty") except: self.assertEqual(fileMgr.exists(devdir_nestedbase + '/nested2'), True) fileMgr.remove(tmpdevfilenested) self.assertEqual(fileMgr.exists(tmpdevfilenested), False) #remove the mounted nested directories try: fileMgr.rmdir(devdir_nestedbase) except: self.fail( "Something bad happened in fileMgr.rmdir(devdir_nestedbase)") self.assertEqual(fileMgr.exists(devdir_nestedbase + '/nested2'), False) self.assertEqual(fileMgr.exists(devdir_nestedbase), False) # make sure error is thrown if trying to remove a directory that doesn't exists try: fileMgr.rmdir(domdir) self.fail("mdir should not have worked. Directory does not exist") except: self.assertEqual(fileMgr.exists(domdir), False)
def test_ComponentLoggingRedirect(self): logfile = '/var/tmp/commandwrapper.log' fp = open(logfile, 'w') fp.close() domNB, domMgr = self.launchDomainManager( loggingURI="dom/mgr/logging_2.properties") self.assertNotEqual(domMgr, None) # Launch a device manager devNB, devMgr = self.launchDeviceManager( "/nodes/test_BasicTestDevice_node/DeviceManager.dcd.xml", loggingURI="dev/mgr/logging.properties") self.assertNotEqual(domMgr, None) # Double check the DomainManager LOGGING_CONFIG_URI prop = CF.DataType(id="LOGGING_CONFIG_URI", value=any.to_any(None)) result = domMgr.query([prop]) self.assertEqual(len(result), 1) self.assertEqual(result[0].id, "LOGGING_CONFIG_URI") devLoggingConfigURI = result[0].value._v expectedDomLoggingConfigUri = "file://" + os.path.join( scatest.getSdrPath(), "dom/mgr/logging_2.properties") self.assertEqual(devLoggingConfigURI, expectedDomLoggingConfigUri) # Launch an application domMgr.installApplication( "/waveforms/CommandWrapper/CommandWrapper.sad.xml") self.assertEqual(len(domMgr._get_applicationFactories()), 1) self.assertEqual(len(domMgr._get_applications()), 0) appFact = domMgr._get_applicationFactories()[0] uriOverride = CF.DataType( id="LOGGING_CONFIG_URI", value=any.to_any("sca:///mgr/logging_2.properties")) app = appFact.create(appFact._get_name(), [uriOverride], []) # Get the desired component self.assertEqual(len(app._get_componentNamingContexts()), 1) compName = app._get_componentNamingContexts()[0] comp = self._root.resolve(URI.stringToName( compName.elementId))._narrow(CF.Resource) self.assertNotEqual(comp, None) # Check the components exec params execparams = comp.query([ CF.DataType(id="DCE:85d133fd-1658-4e4d-b3ff-1443cd44c0e2", value=any.to_any(None)) ])[0] args = any.from_any(execparams.value) execparams = {} for a in args: name = a[0] value = a[1] execparams[name] = value app.start() app.stop() app.releaseObject() fp = open(logfile, 'r') log_contents = fp.read() fp.close() count_debugs = log_contents.count('DEBUG:') count_command = log_contents.count('DEBUG:CommandWrapper') self.assertEqual(count_debugs, count_command) # Launch an application with a C++ component to exercise Resource_impl logging configure domMgr.installApplication( "/waveforms/TestCppProps/TestCppProps.sad.xml") self.assertEqual(len(domMgr._get_applicationFactories()), 2) for appFact in domMgr._get_applicationFactories(): if appFact._get_name() == "TestCppProps": app = appFact.create(appFact._get_name(), [uriOverride], []) break self.assertEqual(len(domMgr._get_applications()), 1)
def test_nodeBooterDomainNameOverride(self): """Test that we can allow the user to override the domainname with the --domainname argument.""" domainName = scatest.getTestDomainName() domainMgrURI = URI.stringToName("%s/%s" % (domainName, domainName)) # Test that we don't already have a bound domain try: domMgr = self._root.resolve(domainMgrURI) self.assertEqual(domMgr, None) except CosNaming.NamingContext.NotFound: pass # This exception is expected nb = Popen("../../control/framework/nodeBooter -D --domainname %s -debug 9 --nopersist" % (domainName), cwd=scatest.getSdrPath(), shell=True) domMgr = self.waitDomainManager(domainMgrURI) self.assertNotEqual(domMgr, None) # Kill the nodebooter os.kill(nb.pid, signal.SIGINT) self.assertPredicateWithWait(lambda: nb.poll() == 0) # Test that we cleaned up the name; this should be automatic because # the naming context should be empty. try: domMgr = self._root.resolve(domainMgrURI) self.assertEqual(domMgr, None) except CosNaming.NamingContext.NotFound: pass # This exception is expected
def test_nodeBooterDomainNameOverride(self): """Test that we can allow the user to override the domainname with the --domainname argument.""" domainName = scatest.getTestDomainName() domainMgrURI = URI.stringToName("%s/%s" % (domainName, domainName)) # Test that we don't already have a bound domain try: domMgr = self._root.resolve(domainMgrURI) self.assertEqual(domMgr, None) except CosNaming.NamingContext.NotFound: pass # This exception is expected nb = Popen("../../control/framework/nodeBooter -D --domainname %s -debug 9 --nopersist" % (domainName), cwd=scatest.getSdrPath(), shell=True) time.sleep(5) # Test that the name exists and is a DomainManager domMgr = self._root.resolve(domainMgrURI)._narrow(CF.DomainManager) self.assertNotEqual(domMgr, None) # Kill the nodebooter os.kill(nb.pid, signal.SIGINT) time.sleep(5) # Give it time to shutdown self.assertEqual(nb.poll(), 0) # Test that we cleaned up the name; this should be automatic because # the naming context should be empty. try: domMgr = self._root.resolve(domainMgrURI) self.assertEqual(domMgr, None) except CosNaming.NamingContext.NotFound: pass # This exception is expected
def setUp(self): self.devRoot = os.path.join(scatest.getSdrPath(), 'dev')
"OSSIEUNITTESTSLOGCONFIG already exists as %s. Do you want to continue [Y]/N? " % os.environ[OSSIEUNITTESTSLOGCONFIG]).upper() if ans == "N": sys.exit() else: os.environ['OSSIEUNITTESTSLOGCONFIG'] = os.path.abspath( options.logconfig) print "" print "Creating the Test Domain" print "" scatest.createTestDomain() print "" print "R U N N I N G T E S T S" print "SDRROOT: ", scatest.getSdrPath() print "" suite = TestCollector(files, testMethodPrefix=options.prefix, prompt=options.prompt) if options.xmlfile == None: runner = unittest.TextTestRunner(verbosity=options.verbosity) else: stream = open(options.xmlfile, "w") runner = xmlrunner.XMLTestRunner(stream) if options.debug: import pdb pdb.run("runner.run(suite)") else:
def test_py_DirectoryLoad(self): self.assertNotEqual(self._domMgr, None) self.assertEqual(len(self._domMgr._get_applicationFactories()), 0) self.assertEqual(len(self._domMgr._get_applications()), 0) # Verify in the devices cache is emtpy componentDir = os.path.join(scatest.getSdrPath(), "dom", "components", "CommandWrapperWithDirectoryLoad") deviceCacheDir = os.path.join(scatest.getSdrPath(), "dev", ".BasicTestDevice_node", "BasicTestDevice1", "components", "CommandWrapperWithDirectoryLoad") if os.path.exists(deviceCacheDir): os.system("rm -rf %s" % deviceCacheDir) self._domMgr.installApplication("/waveforms/CommandWrapperWithDirectoryLoad/CommandWrapper.sad.xml") self.assertEqual(len(self._domMgr._get_applicationFactories()), 1) self.assertEqual(len(self._domMgr._get_applications()), 0) # Ensure the expected device is available devBooter, devMgr = self.launchDeviceManager("/nodes/test_BasicTestDevice_node/DeviceManager.dcd.xml", debug=9) self.assertNotEqual(devMgr, None) self.assertEqual(len(devMgr._get_registeredDevices()), 1) device = devMgr._get_registeredDevices()[0] appFact = self._domMgr._get_applicationFactories()[0] app = appFact.create(appFact._get_name(), [], []) # LOOK MA, NO DAS! self.assertEqual(len(self._domMgr._get_applicationFactories()), 1) self.assertEqual(len(self._domMgr._get_applications()), 1) # Verify that properties have been changed from their defaults self.assertEqual(len(app._get_componentNamingContexts()), 1) compName = app._get_componentNamingContexts()[0] comp = self._root.resolve(URI.stringToName(compName.elementId))._narrow(CF.Resource) self.assertNotEqual(comp, None) cmd = comp.query([CF.DataType(id="DCE:a4e7b230-1d17-4a86-aeff-ddc6ea3df26e", value=any.to_any(None))])[0] args = comp.query([CF.DataType(id="DCE:5d8bfe8d-bc25-4f26-8144-248bc343aa53", value=any.to_any(None))])[0] self.assertEqual(cmd.value._v, "/bin/echo") self.assertEqual(args.value._v, ["Hello World"]) # Verify in the devices cache that the directory structure was mirrored exactly for root, dirs, files in os.walk(componentDir): # turn the abs path in to a relative path rel_root = root[len(componentDir)+1:] for dir in dirs: # Hidden files aren't loaded if dir[0] != ".": expectedDir = os.path.join(deviceCacheDir, rel_root, dir) self.assertEqual(os.path.isdir(expectedDir), True, "Dir %s not found at %s" % (dir, expectedDir)) else: # Don't descend into hidden sub-dirs dirs.remove(dir) for f in files: # Hidden files aren't loaded if f[0] != ".": expectedFile = os.path.join(deviceCacheDir, rel_root, f) self.assertEqual(os.path.isfile(expectedFile), True, "File %s not found at %s" % (f, expectedFile)) app.stop() app.releaseObject() self.assertEqual(len(self._domMgr._get_applicationFactories()), 1) self.assertEqual(len(self._domMgr._get_applications()), 0) self._domMgr.uninstallApplication(appFact._get_identifier())
def test_BasicOperation(self): nodebooter, domMgr = self.launchDomainManager(debug=9) self.assertNotEqual(domMgr, None) self.assertEqual(len(domMgr._get_applicationFactories()), 0) self.assertEqual(len(domMgr._get_applications()), 0) domMgr.installApplication("/waveforms/CommandWrapper/CommandWrapper.sad.xml") self.assertEqual(len(domMgr._get_applicationFactories()), 1) self.assertEqual(len(domMgr._get_applications()), 0) # Load on the device ID das = minidom.parse(os.path.join(scatest.getSdrPath(), "dom/waveforms/CommandWrapper/CommandWrapper_DAS.xml")) ds = [] deviceAssignmentTypeNodeList = das.getElementsByTagName("deviceassignmenttype") for node in deviceAssignmentTypeNodeList: componentid = node.getElementsByTagName("componentid")[0].firstChild.data assigndeviceid = node.getElementsByTagName("assigndeviceid")[0].firstChild.data ds.append( CF.DeviceAssignmentType(str(componentid),str(assigndeviceid)) ) # Ensure the expected device is available nodebooter, devMgr = self.launchDeviceManager(dcdFile="/nodes/test_BasicTestDevice_node/DeviceManager.dcd.xml", debug=9) self.assertNotEqual(devMgr, None) self.assertEqual(len(ds), 1) self.assertEqual(len(devMgr._get_registeredDevices()), 1) device = devMgr._get_registeredDevices()[0] self.assertEqual(device._get_identifier(), ds[0].assignedDeviceId) # Query the known allocation properties memCapacity = device.query([CF.DataType(id="DCE:8dcef419-b440-4bcf-b893-cab79b6024fb", value=any.to_any(None))])[0] bogoMips = device.query([CF.DataType(id="DCE:5636c210-0346-4df7-a5a3-8fd34c5540a8", value=any.to_any(None))])[0] self.assertEqual(memCapacity.value._v, 100000000) self.assertEqual(bogoMips.value._v, 100000000) # query all properties, make sure that only 'external' properties show up allProps = device.query([]) # convert props to a dict allProps = dict([(x.id, x.value) for x in allProps]) # This isn't all of them...but a fair amount self.assertEqual(allProps.has_key("DCE:4a23ad60-0b25-4121-a630-68803a498f75"), False) # os_name self.assertEqual(allProps.has_key("DCE:fefb9c66-d14a-438d-ad59-2cfd1adb272b"), False) # processor_name self.assertEqual(allProps.has_key("DCE:7f36cdfb-f828-4e4f-b84f-446e17f1a85b"), False) # DeviceKind self.assertEqual(allProps.has_key("DCE:64303822-4c67-4c04-9a5c-bf670f27cf39"), False) # RunsAs self.assertEqual(allProps.has_key("DCE:021f10cf-7a05-46ec-a507-04b513b84bd4"), False) # HasXMIDAS appFact = domMgr._get_applicationFactories()[0] app = appFact.create(appFact._get_name(), [], ds) self.assertEqual(len(domMgr._get_applicationFactories()), 1) self.assertEqual(len(domMgr._get_applications()), 1) self.assertEqual(app._get_started(), False) app.start() self.assertEqual(app._get_started(), True) # Verify that capacity was allocated memCapacity = device.query([CF.DataType(id="DCE:8dcef419-b440-4bcf-b893-cab79b6024fb", value=any.to_any(None))])[0] bogoMips = device.query([CF.DataType(id="DCE:5636c210-0346-4df7-a5a3-8fd34c5540a8", value=any.to_any(None))])[0] self.assertEqual(memCapacity.value._v, 100000000-5000) self.assertEqual(bogoMips.value._v, 100000000-1000) app.stop() self.assertEqual(app._get_started(), False) app.releaseObject() self.assertEqual(len(domMgr._get_applicationFactories()), 1) self.assertEqual(len(domMgr._get_applications()), 0) # Verify that capacity was deallocated memCapacity = device.query([CF.DataType(id="DCE:8dcef419-b440-4bcf-b893-cab79b6024fb", value=any.to_any(None))])[0] bogoMips = device.query([CF.DataType(id="DCE:5636c210-0346-4df7-a5a3-8fd34c5540a8", value=any.to_any(None))])[0] self.assertEqual(memCapacity.value._v, 100000000) self.assertEqual(bogoMips.value._v, 100000000) domMgr.uninstallApplication(appFact._get_identifier())
def test_BasicOperation(self): self.assertNotEqual(self._domMgr, None) fileMgr = self._domMgr._get_fileMgr() devfile = "/ExecutableDevice_node/nodes/test_ExecutableDevice_node/DeviceManager.dcd.xml" devlocalfile = "dev/nodes/test_ExecutableDevice_node/DeviceManager.dcd.xml" domfile = "/waveforms/CommandWrapper/CommandWrapper_DAS.xml" domlocalfile = "dom/waveforms/CommandWrapper/CommandWrapper_DAS.xml" addon = "foo.txt" devnewfile = "/ExecutableDevice_node/nodes/testdev.txt" devlocalnewfile = "dev/nodes/testdev.txt" domnewfile = "/waveforms/testdom.txt" domlocalnewfile = "dom/waveforms/testdom.txt" str_to_write_dev = "testing 1,2,3 dev" str_to_write_dom = "testing 1,2,3 dom" ################# # Test exists ################# try: fileMgr.exists(devfile) except: self.fail("Something bad happened in fileMgr.exists(devfile) for mountPoint lookup") try: fileMgr.exists(domfile) except: self.fail("Something bad happened in fileMgr.exists(domfile) for domain (local fs) lookup") try: fileMgr.exists(devfile + addon) except: self.fail("Something bad happened in fileMgr.exists(devfile + addon) for mountPoint lookup") try: fileMgr.exists(domfile + addon) except: self.fail("Something bad happened in fileMgr.exists(domfile + addon) for domain (local fs) lookup") self.assertEqual(fileMgr.exists(devfile), True) self.assertEqual(fileMgr.exists(domfile), True) self.assertEqual(fileMgr.exists(devfile+addon), False) self.assertEqual(fileMgr.exists(domfile+addon), False) ################# # test open ################# try: myfile = fileMgr.open(devfile, True) except: self.fail("Something bad happened in fileMgr.open(devfile, True) for mountPoint lookup") expectedSize = os.stat(os.path.join(scatest.getSdrPath(), devlocalfile))[6] self.assertEqual(myfile.sizeOf(), expectedSize) try: myfile.close() except: self.fail("Something bad happened in fileMgr.close(devfile, True) for mountPoint lookup") try: myfile = fileMgr.open(domfile, True) except: self.fail("Something bad happened in fileMgr.open(domfile, True) for domain (local fs) lookup") expectedSize = os.stat(os.path.join(scatest.getSdrPath(), domlocalfile))[6] self.assertEqual(myfile.sizeOf(), expectedSize) try: myfile.close() except: self.fail("Something bad happened in fileMgr.close(devfile, True) for mountPoint lookup") try: myfile = fileMgr.open(devfile+addon, True) self.fail("fileMgr.open(devfile+addon, True) should have thrown and exception and it didn't") except: pass try: myfile = fileMgr.open(domfile+addon, True) self.fail("fileMgr.open(domfile+addon, True) should have thrown and exception and it didn't") except: pass ################# # test create ################# if os.path.exists(os.path.join(scatest.getSdrPath(), devlocalnewfile)): os.remove(os.path.join(scatest.getSdrPath(), devlocalnewfile)) try: myfile = fileMgr.create(devnewfile) myfile.write(str_to_write_dev) myfile.close() except: self.fail("Something bad happened in fileMgr.create(devnewfile) for mountPoint lookup") self.assertEqual(fileMgr.exists(devnewfile), True) if os.path.exists(os.path.join(scatest.getSdrPath(), domlocalnewfile)): os.remove(os.path.join(scatest.getSdrPath(), domlocalnewfile)) try: myfile = fileMgr.create(domnewfile) myfile.write(str_to_write_dom) myfile.close() except: self.fail("Something bad happened in fileMgr.create(domnewfile) for domain (local fs) lookup") self.assertEqual(fileMgr.exists(domnewfile), True) ################# # test remove ################# try: fileMgr.remove(devnewfile) except: self.fail("Something bad happened in fileMgr.remove(devnewfile) for mountPoint lookup") self.assertEqual(fileMgr.exists(devnewfile), False) try: fileMgr.remove(domnewfile) except: self.fail("Something bad happened in fileMgr.remove(domnewfile) for domain (local fs) lookup") self.assertEqual(fileMgr.exists(domnewfile), False)
def test_DirectoryOperation(self): ################# # test mkdir ################# self.assertNotEqual(self._domMgr, None) fileMgr = self._domMgr._get_fileMgr() domdir = '/mkdir_test_directory_tmp_local' localdomdir = 'dom/mkdir_test_directory_tmp_local' devdir = "/DeviceManager/mkdir_test_directory_tmp_mounted" localdevdir = "dev/mkdir_test_directory_tmp_mounted" domdir_nestedbase = '/mkdir_test_directory_tmp_nested1' localdomdir_nestedbase = 'dom/mkdir_test_directory_tmp_nested1' devdir_nestedbase = '/DeviceManager/mkdir_test_directory_tmp_nested1' localdevdir_nestedbase = 'dev/mkdir_test_directory_tmp_nested1' tmpdevfile = '/DeviceManager/mkdir_test_directory_tmp_nested1/foo.txt' tmpdevfilenested = '/DeviceManager/mkdir_test_directory_tmp_nested1/nested2/foo.txt' # test local mkdir if os.path.exists(os.path.join(scatest.getSdrPath(), localdomdir)): os.rmdir(os.path.join(scatest.getSdrPath(), localdomdir)) try: fileMgr.mkdir(domdir) except: self.fail("Something bad happened in fileMgr.mkdir(newdir_local)") self.assertEqual(fileMgr.exists(domdir), True) # test mounted mkdir if os.path.exists(os.path.join(scatest.getSdrPath(), localdevdir)): os.rmdir(os.path.join(scatest.getSdrPath(), localdevdir)) try: fileMgr.mkdir(devdir) except: self.fail("Something bad happened in fileMgr.mkdir(newdir_mounted)") self.assertEqual(fileMgr.exists(devdir), True) # test nested mkdir local if os.path.exists(os.path.join(scatest.getSdrPath(), localdomdir_nestedbase + '/nested2')): os.rmdir(os.path.join(scatest.getSdrPath(), localdomdir_nestedbase + '/nested2')) if os.path.exists(os.path.join(scatest.getSdrPath(), localdomdir_nestedbase)): os.rmdir(os.path.join(scatest.getSdrPath(), localdomdir_nestedbase)) try: fileMgr.mkdir(domdir_nestedbase + '/nested2') except: self.fail("Something bad happened in fileMgr.mkdir(domdir_nestedbase)") self.assertEqual(fileMgr.exists(domdir_nestedbase + '/nested2'), True) # test nested mkdir mounted # also test trailing '/' if os.path.exists(os.path.join(scatest.getSdrPath(), localdevdir_nestedbase + '/nested2')): os.rmdir(os.path.join(scatest.getSdrPath(), localdevdir_nestedbase + '/nested2')) if os.path.exists(os.path.join(scatest.getSdrPath(), localdevdir_nestedbase)): os.rmdir(os.path.join(scatest.getSdrPath(), localdevdir_nestedbase)) try: fileMgr.mkdir(devdir_nestedbase + '/nested2/') except: self.fail("Something bad happened in fileMgr.mkdir(devdir_nestedbase)") self.assertEqual(fileMgr.exists(devdir_nestedbase + '/nested2'), True) ################# # test rmdir ################# #remove empty directory try: fileMgr.rmdir(domdir) fileMgr.rmdir(devdir) except: self.fail("Something bad happened in fileMgr.rmdir()") self.assertEqual(fileMgr.exists(domdir), False) self.assertEqual(fileMgr.exists(devdir), False) #remove nested empty directories try: fileMgr.rmdir(domdir_nestedbase) except: self.fail("Something bad happened in fileMgr.rmdir(domdir_nestedbase)") self.assertEqual(fileMgr.exists(domdir_nestedbase + '/nested2'), False) self.assertEqual(fileMgr.exists(domdir_nestedbase), False) #make sure remove doesn't happen if files are in directory newfile = fileMgr.create(tmpdevfile) newfile.close() try: fileMgr.rmdir(devdir_nestedbase) self.fail("rmdir should not have worked. Directory not empty") except: self.assertEqual(fileMgr.exists(devdir_nestedbase + '/nested2'), True) fileMgr.remove(tmpdevfile) self.assertEqual(fileMgr.exists(tmpdevfile), False) #same thing as above, but in a nested directory newfile = fileMgr.create(tmpdevfilenested) newfile.close() try: fileMgr.rmdir(devdir_nestedbase) self.fail("rmdir should not have worked. Directory not empty") except: self.assertEqual(fileMgr.exists(devdir_nestedbase + '/nested2'), True) fileMgr.remove(tmpdevfilenested) self.assertEqual(fileMgr.exists(tmpdevfilenested), False) #remove the mounted nested directories try: fileMgr.rmdir(devdir_nestedbase) except: self.fail("Something bad happened in fileMgr.rmdir(devdir_nestedbase)") self.assertEqual(fileMgr.exists(devdir_nestedbase + '/nested2'), False) self.assertEqual(fileMgr.exists(devdir_nestedbase), False) # make sure error is thrown if trying to remove a directory that doesn't exists try: fileMgr.rmdir(domdir) self.fail("mdir should not have worked. Directory does not exist") except: self.assertEqual(fileMgr.exists(domdir), False)
def test_BasicOperation(self): self._nb_domMgr, self._domMgr = self.launchDomainManager( endpoint="giop:tcp::5679", dbURI=self._dbfile) self._nb_devMgr, devMgr = self.launchDeviceManager( "/nodes/test_PortTestDevice_node/DeviceManager.dcd.xml") self._fileMgr = self._domMgr._get_fileMgr() self._files = self._fileMgr.list("/") self.assertEqual(len(self._domMgr._get_applicationFactories()), 0) self.assertEqual(len(self._domMgr._get_applications()), 0) self._domMgr.installApplication( "/waveforms/PortConnectProvidesPort/PortConnectProvidesPort.sad.xml" ) self.assertEqual(len(self._domMgr._get_applicationFactories()), 1) self.assertEqual(len(self._domMgr._get_applications()), 0) # Load on the device ID das = minidom.parse( os.path.join( scatest.getSdrPath(), "dom/waveforms/PortConnectProvidesPort/PortConnectProvidesPort_DAS.xml" )) ds = [] deviceAssignmentTypeNodeList = das.getElementsByTagName( "deviceassignmenttype") for node in deviceAssignmentTypeNodeList: componentid = node.getElementsByTagName( "componentid")[0].firstChild.data assigndeviceid = node.getElementsByTagName( "assigndeviceid")[0].firstChild.data ds.append( CF.DeviceAssignmentType(str(componentid), str(assigndeviceid))) # Ensure the expected device is available self.assertNotEqual(devMgr, None) self.assertEqual(len(devMgr._get_registeredDevices()), 2) device1 = None device2 = None for dev in devMgr._get_registeredDevices(): if dev._get_identifier( ) == "DCE:322fb9b2-de57-42a2-ad03-217bcb244262": device1 = dev elif dev._get_identifier( ) == "DCE:47dc45d8-19b5-4b7e-bcd4-b165babe5b84": device2 = dev self.assertNotEqual(device1, None) self.assertNotEqual(device2, None) # Query the known allocation properties memCapacity1 = device1.query([ CF.DataType(id="DCE:8dcef419-b440-4bcf-b893-cab79b6024fb", value=any.to_any(None)) ])[0] bogoMips1 = device1.query([ CF.DataType(id="DCE:5636c210-0346-4df7-a5a3-8fd34c5540a8", value=any.to_any(None)) ])[0] self.assertEqual(memCapacity1.value._v, 100000000) self.assertEqual(bogoMips1.value._v, 100000000) memCapacity2 = device2.query([ CF.DataType(id="DCE:8dcef419-b440-4bcf-b893-cab79b6024fb", value=any.to_any(None)) ])[0] bogoMips2 = device2.query([ CF.DataType(id="DCE:5636c210-0346-4df7-a5a3-8fd34c5540a8", value=any.to_any(None)) ])[0] self.assertEqual(memCapacity2.value._v, 100000000) self.assertEqual(bogoMips2.value._v, 100000000) appFact = self._domMgr._get_applicationFactories()[0] app = appFact.create(appFact._get_name(), [], ds) self.assertEqual(len(self._domMgr._get_applicationFactories()), 1) self.assertEqual(len(self._domMgr._get_applications()), 1) app = self._domMgr._get_applications()[0] # cache off some variables for later for testing purposes self.assertEqual(len(app._get_componentNamingContexts()), 2) self.assertEqual(len(app._get_componentProcessIds()), 2) self.assertEqual(len(app._get_componentDevices()), 4) self.assertEqual(len(app._get_componentImplementations()), 2) origNamingContexts = app._get_componentNamingContexts() origProcessIds = app._get_componentProcessIds() origDevices = app._get_componentDevices() origImplementations = app._get_componentImplementations() origQuery = app.query([]) # Verify that capacity was allocated memCapacity1 = device1.query([ CF.DataType(id="DCE:8dcef419-b440-4bcf-b893-cab79b6024fb", value=any.to_any(None)) ])[0] bogoMips1 = device1.query([ CF.DataType(id="DCE:5636c210-0346-4df7-a5a3-8fd34c5540a8", value=any.to_any(None)) ])[0] self.assertEqual(memCapacity1.value._v, 100000000 - (5000)) self.assertEqual(bogoMips1.value._v, 100000000 - (1000)) memCapacity2 = device2.query([ CF.DataType(id="DCE:8dcef419-b440-4bcf-b893-cab79b6024fb", value=any.to_any(None)) ])[0] bogoMips2 = device2.query([ CF.DataType(id="DCE:5636c210-0346-4df7-a5a3-8fd34c5540a8", value=any.to_any(None)) ])[0] self.assertEqual(memCapacity2.value._v, 100000000 - (5000)) self.assertEqual(bogoMips2.value._v, 100000000 - (1000)) # Kill the domainMgr os.kill(self._nb_domMgr.pid, signal.SIGTERM) # TODO if SIGKILL is used (simulating a nodeBooter unexpected abort, # the IOR and the newly spawned domain manager do not work if not self.waitTermination(self._nb_domMgr): self.fail("Domain Manager Failed to Die") # Start the domainMgr again self._nb_domMgr, newDomMgr = self.launchDomainManager( endpoint="giop:tcp::5679", dbURI=self._dbfile) # Verify our client reference still is valid newDomMgr._get_identifier() self.assertEqual(False, newDomMgr._non_existent()) #self.assertEqual(self._orb.object_to_string(newDomMgr), self._orb.object_to_string(self._domMgr)) self.assertEqual(False, self._domMgr._non_existent()) # Verify that the file manager is still valid self.new_files = self._fileMgr.list("/") self.assertEqual(len(self._files), len(self.new_files)) self.assertEqual(len(self._domMgr._get_deviceManagers()), 1) newDevMgr = self._domMgr._get_deviceManagers()[0] self.assertEqual(self._orb.object_to_string(devMgr), self._orb.object_to_string(newDevMgr)) self.assertEqual(len(devMgr._get_registeredDevices()), 2) newDevice1 = None newDevice2 = None for dev in devMgr._get_registeredDevices(): if dev._get_identifier( ) == "DCE:322fb9b2-de57-42a2-ad03-217bcb244262": newDevice1 = dev elif dev._get_identifier( ) == "DCE:47dc45d8-19b5-4b7e-bcd4-b165babe5b84": newDevice2 = dev self.assertNotEqual(newDevice1, None) self.assertNotEqual(newDevice2, None) self.assertEqual(self._orb.object_to_string(device1), self._orb.object_to_string(newDevice1)) self.assertEqual(self._orb.object_to_string(device2), self._orb.object_to_string(newDevice2)) self.assertEqual(len(self._domMgr._get_applicationFactories()), 1) newAppFact = self._domMgr._get_applicationFactories()[0] self.assertEqual(appFact._get_identifier(), newAppFact._get_identifier()) self.assertEqual(appFact._get_name(), newAppFact._get_name()) self.assertEqual(len(self._domMgr._get_applications()), 1) newApp = self._domMgr._get_applications()[0] # Applications are currently not using persistent POAs, so the IORs will change # self.assertEqual(self._orb.object_to_string(app), self._orb.object_to_string(newApp)) newNamingContexts = app._get_componentNamingContexts() newProcessIds = app._get_componentProcessIds() newDevices = app._get_componentDevices() newImplementations = app._get_componentImplementations() # We have to compare elements individually since newDevices == origDevices even when the contents are identical self.assertEqual(len(newDevices), len(origDevices)) for x in xrange(len(newDevices)): self.assertEqual(newDevices[x].componentId, origDevices[x].componentId) self.assertEqual(newDevices[x].assignedDeviceId, origDevices[x].assignedDeviceId) self.assertEqual(len(newProcessIds), len(origProcessIds)) for x in xrange(len(newProcessIds)): self.assertEqual(newProcessIds[x].componentId, origProcessIds[x].componentId) self.assertEqual(newProcessIds[x].processId, origProcessIds[x].processId) self.assertEqual(len(newImplementations), len(origImplementations)) for x in xrange(len(newImplementations)): self.assertEqual(newImplementations[x].componentId, origImplementations[x].componentId) self.assertEqual(newImplementations[x].elementId, origImplementations[x].elementId) self.assertEqual(len(newNamingContexts), len(origNamingContexts)) for x in xrange(len(newNamingContexts)): self.assertEqual(newNamingContexts[x].componentId, origNamingContexts[x].componentId) self.assertEqual(newNamingContexts[x].elementId, origNamingContexts[x].elementId) # Verify that the connection between the CF::Application and the assemblyController was # restored. newQuery = app.query([]) self.assertEqual(len(newQuery), len(origQuery)) for x in xrange(len(newQuery)): self.assertEqual(newQuery[x].id, origQuery[x].id) self.assertEqual(newQuery[x].value._v, origQuery[x].value._v) # app.stop() app.releaseObject() # TODO how can we verify that the ports were disconnected as part of release? time.sleep(1) self.assertEqual(len(self._domMgr._get_applicationFactories()), 1) self.assertEqual(len(self._domMgr._get_applications()), 0) # Verify that capacity was deallocated memCapacity1 = device1.query([ CF.DataType(id="DCE:8dcef419-b440-4bcf-b893-cab79b6024fb", value=any.to_any(None)) ])[0] bogoMips1 = device1.query([ CF.DataType(id="DCE:5636c210-0346-4df7-a5a3-8fd34c5540a8", value=any.to_any(None)) ])[0] self.assertEqual(memCapacity1.value._v, 100000000) self.assertEqual(bogoMips1.value._v, 100000000) memCapacity2 = device2.query([ CF.DataType(id="DCE:8dcef419-b440-4bcf-b893-cab79b6024fb", value=any.to_any(None)) ])[0] bogoMips2 = device2.query([ CF.DataType(id="DCE:5636c210-0346-4df7-a5a3-8fd34c5540a8", value=any.to_any(None)) ])[0] self.assertEqual(memCapacity2.value._v, 100000000) self.assertEqual(bogoMips2.value._v, 100000000) newDevMgr.shutdown() self.assertEqual(len(self._domMgr._get_deviceManagers()), 0) self._domMgr.uninstallApplication(appFact._get_identifier()) self.assertEqual(len(self._domMgr._get_applicationFactories()), 0)
if os.environ.has_key('OSSIEUNITTESTSLOGCONFIG'): ans = raw_input("OSSIEUNITTESTSLOGCONFIG already exists as %s. Do you want to continue [Y]/N? " % os.environ[OSSIEUNITTESTSLOGCONFIG]).upper() if ans == "N": sys.exit() else: os.environ['OSSIEUNITTESTSLOGCONFIG'] = os.path.abspath(options.logconfig) print "" print "Creating the Test Domain" print "" scatest.createTestDomain() print "" print "R U N N I N G T E S T S" print "SDRROOT: ", scatest.getSdrPath() print "" suite = TestCollector(files, testMethodPrefix=options.prefix, prompt=options.prompt) if options.xmlfile == None: runner = unittest.TextTestRunner(verbosity=options.verbosity) else: stream = open(options.xmlfile, "w") runner = xmlrunner.XMLTestRunner(stream) if options.debug: import pdb pdb.run("runner.run(suite)") else: runner.run(suite)
def test_BasicOperation(self): nodebooter, domMgr = self.launchDomainManager(debug=9) self.assertNotEqual(domMgr, None) self.assertEqual(len(domMgr._get_applicationFactories()), 0) self.assertEqual(len(domMgr._get_applications()), 0) domMgr.installApplication( "/waveforms/CommandWrapper/CommandWrapper.sad.xml") self.assertEqual(len(domMgr._get_applicationFactories()), 1) self.assertEqual(len(domMgr._get_applications()), 0) # Load on the device ID das = minidom.parse( os.path.join( scatest.getSdrPath(), "dom/waveforms/CommandWrapper/CommandWrapper_DAS.xml")) ds = [] deviceAssignmentTypeNodeList = das.getElementsByTagName( "deviceassignmenttype") for node in deviceAssignmentTypeNodeList: componentid = node.getElementsByTagName( "componentid")[0].firstChild.data assigndeviceid = node.getElementsByTagName( "assigndeviceid")[0].firstChild.data ds.append( CF.DeviceAssignmentType(str(componentid), str(assigndeviceid))) # Ensure the expected device is available nodebooter, devMgr = self.launchDeviceManager( dcdFile="/nodes/test_BasicTestDevice_node/DeviceManager.dcd.xml", debug=9) self.assertNotEqual(devMgr, None) self.assertEqual(len(ds), 1) self.assertEqual(len(devMgr._get_registeredDevices()), 1) device = devMgr._get_registeredDevices()[0] self.assertEqual(device._get_identifier(), ds[0].assignedDeviceId) # Query the known allocation properties memCapacity = device.query([ CF.DataType(id="DCE:8dcef419-b440-4bcf-b893-cab79b6024fb", value=any.to_any(None)) ])[0] bogoMips = device.query([ CF.DataType(id="DCE:5636c210-0346-4df7-a5a3-8fd34c5540a8", value=any.to_any(None)) ])[0] self.assertEqual(memCapacity.value._v, 100000000) self.assertEqual(bogoMips.value._v, 100000000) # query all properties, make sure that only 'external' properties show up allProps = device.query([]) # convert props to a dict allProps = dict([(x.id, x.value) for x in allProps]) # This isn't all of them...but a fair amount self.assertEqual( allProps.has_key("DCE:4a23ad60-0b25-4121-a630-68803a498f75"), False) # os_name self.assertEqual( allProps.has_key("DCE:fefb9c66-d14a-438d-ad59-2cfd1adb272b"), False) # processor_name self.assertEqual( allProps.has_key("DCE:7f36cdfb-f828-4e4f-b84f-446e17f1a85b"), False) # DeviceKind self.assertEqual( allProps.has_key("DCE:64303822-4c67-4c04-9a5c-bf670f27cf39"), False) # RunsAs self.assertEqual( allProps.has_key("DCE:021f10cf-7a05-46ec-a507-04b513b84bd4"), False) # HasXMIDAS appFact = domMgr._get_applicationFactories()[0] app = appFact.create(appFact._get_name(), [], ds) self.assertEqual(len(domMgr._get_applicationFactories()), 1) self.assertEqual(len(domMgr._get_applications()), 1) self.assertEqual(app._get_started(), False) app.start() self.assertEqual(app._get_started(), True) # Verify that capacity was allocated memCapacity = device.query([ CF.DataType(id="DCE:8dcef419-b440-4bcf-b893-cab79b6024fb", value=any.to_any(None)) ])[0] bogoMips = device.query([ CF.DataType(id="DCE:5636c210-0346-4df7-a5a3-8fd34c5540a8", value=any.to_any(None)) ])[0] self.assertEqual(memCapacity.value._v, 100000000 - 5000) self.assertEqual(bogoMips.value._v, 100000000 - 1000) app.stop() self.assertEqual(app._get_started(), False) app.releaseObject() self.assertEqual(len(domMgr._get_applicationFactories()), 1) self.assertEqual(len(domMgr._get_applications()), 0) # Verify that capacity was deallocated memCapacity = device.query([ CF.DataType(id="DCE:8dcef419-b440-4bcf-b893-cab79b6024fb", value=any.to_any(None)) ])[0] bogoMips = device.query([ CF.DataType(id="DCE:5636c210-0346-4df7-a5a3-8fd34c5540a8", value=any.to_any(None)) ])[0] self.assertEqual(memCapacity.value._v, 100000000) self.assertEqual(bogoMips.value._v, 100000000) domMgr.uninstallApplication(appFact._get_identifier())
def test_ApplicationFactoryCreateURIOverride(self): domNB, domMgr = self.launchDomainManager( loggingURI="dom/mgr/logging.properties") self.assertNotEqual(domMgr, None) # Launch a device manager devNB, devMgr = self.launchDeviceManager( "/nodes/test_BasicTestDevice_node/DeviceManager.dcd.xml", loggingURI="dev/mgr/logging.properties") self.assertNotEqual(domMgr, None) # Double check the DomainManager LOGGING_CONFIG_URI prop = CF.DataType(id="LOGGING_CONFIG_URI", value=any.to_any(None)) result = domMgr.query([prop]) self.assertEqual(len(result), 1) self.assertEqual(result[0].id, "LOGGING_CONFIG_URI") devLoggingConfigURI = result[0].value._v expectedDomLoggingConfigUri = "file://" + os.path.join( scatest.getSdrPath(), "dom/mgr/logging.properties") self.assertEqual(devLoggingConfigURI, expectedDomLoggingConfigUri) # Launch an application domMgr.installApplication( "/waveforms/CommandWrapper/CommandWrapper.sad.xml") self.assertEqual(len(domMgr._get_applicationFactories()), 1) self.assertEqual(len(domMgr._get_applications()), 0) appFact = domMgr._get_applicationFactories()[0] uriOverride = CF.DataType( id="LOGGING_CONFIG_URI", value=any.to_any("sca:///mgr/logging.properties")) app = appFact.create(appFact._get_name(), [uriOverride], []) # Get the desired component self.assertEqual(len(app._get_componentNamingContexts()), 1) compName = app._get_componentNamingContexts()[0] comp = self._root.resolve(URI.stringToName( compName.elementId))._narrow(CF.Resource) self.assertNotEqual(comp, None) # Check the components exec params execparams = comp.query([ CF.DataType(id="DCE:85d133fd-1658-4e4d-b3ff-1443cd44c0e2", value=any.to_any(None)) ])[0] args = any.from_any(execparams.value) execparams = {} for b in args: a = eval(b) name = a[0] value = a[1] execparams[name] = value self.assert_(execparams.has_key("LOGGING_CONFIG_URI")) self.assertEqual(execparams["LOGGING_CONFIG_URI"].split("?fs=")[0], "sca:///mgr/logging.properties") execparamObj = self._orb.string_to_object( execparams["LOGGING_CONFIG_URI"].split("?fs=")[1]) # Need to compare actual objects since the IOR strings could potentially differ for the same object self.assert_(domMgr._get_fileMgr()._is_equivalent(execparamObj)) # Launch an application with a C++ component to exercise Resource_impl logging configure domMgr.installApplication( "/waveforms/TestCppProps/TestCppProps.sad.xml") self.assertEqual(len(domMgr._get_applicationFactories()), 2) for appFact in domMgr._get_applicationFactories(): if appFact._get_name() == "TestCppProps": app = appFact.create(appFact._get_name(), [uriOverride], []) break self.assertEqual(len(domMgr._get_applications()), 2)
def test_py_DirectoryLoad(self): self.assertNotEqual(self._domMgr, None) self.assertEqual(len(self._domMgr._get_applicationFactories()), 0) self.assertEqual(len(self._domMgr._get_applications()), 0) # Verify in the devices cache is emtpy componentDir = os.path.join(scatest.getSdrPath(), "dom", "components", "CommandWrapperWithDirectoryLoad") deviceCacheDir = os.path.join(scatest.getSdrCache(), ".BasicTestDevice_node", "BasicTestDevice1", "components", "CommandWrapperWithDirectoryLoad") if os.path.exists(deviceCacheDir): os.system("rm -rf %s" % deviceCacheDir) self._domMgr.installApplication( "/waveforms/CommandWrapperWithDirectoryLoad/CommandWrapper.sad.xml" ) self.assertEqual(len(self._domMgr._get_applicationFactories()), 1) self.assertEqual(len(self._domMgr._get_applications()), 0) # Ensure the expected device is available devBooter, devMgr = self.launchDeviceManager( "/nodes/test_BasicTestDevice_node/DeviceManager.dcd.xml") self.assertNotEqual(devMgr, None) self.assertEqual(len(devMgr._get_registeredDevices()), 1) device = devMgr._get_registeredDevices()[0] appFact = self._domMgr._get_applicationFactories()[0] app = appFact.create(appFact._get_name(), [], []) # LOOK MA, NO DAS! self.assertEqual(len(self._domMgr._get_applicationFactories()), 1) self.assertEqual(len(self._domMgr._get_applications()), 1) # Verify that properties have been changed from their defaults self.assertEqual(len(app._get_componentNamingContexts()), 1) compName = app._get_componentNamingContexts()[0] comp = self._root.resolve(URI.stringToName( compName.elementId))._narrow(CF.Resource) self.assertNotEqual(comp, None) cmd = comp.query([ CF.DataType(id="DCE:a4e7b230-1d17-4a86-aeff-ddc6ea3df26e", value=any.to_any(None)) ])[0] args = comp.query([ CF.DataType(id="DCE:5d8bfe8d-bc25-4f26-8144-248bc343aa53", value=any.to_any(None)) ])[0] self.assertEqual(cmd.value._v, "/bin/echo") self.assertEqual(args.value._v, ["Hello World"]) # Verify in the devices cache that the directory structure was mirrored exactly for root, dirs, files in os.walk(componentDir): # turn the abs path in to a relative path rel_root = root[len(componentDir) + 1:] for dir in dirs: # Hidden files aren't loaded if dir[0] != ".": expectedDir = os.path.join(deviceCacheDir, rel_root, dir) self.assertEqual( os.path.isdir(expectedDir), True, "Dir %s not found at %s" % (dir, expectedDir)) else: # Don't descend into hidden sub-dirs dirs.remove(dir) for f in files: # Hidden files aren't loaded if f[0] != ".": expectedFile = os.path.join(deviceCacheDir, rel_root, f) self.assertEqual( os.path.isfile(expectedFile), True, "File %s not found at %s" % (f, expectedFile)) app.stop() app.releaseObject() self.assertEqual(len(self._domMgr._get_applicationFactories()), 1) self.assertEqual(len(self._domMgr._get_applications()), 0) self._domMgr.uninstallApplication(appFact._get_identifier())
def test_cpp_LoadUnload(self): # Test that releasing the device unloads all files deviceCacheDir = os.path.join(scatest.getSdrPath(), "dev", ".ExecutableDevice_node", "ExecutableDevice1") if os.path.exists(deviceCacheDir): os.system("rm -rf %s" % deviceCacheDir) self.assertNotEqual(self._domMgr, None) # Ensure the expected device is available devBooter, devMgr = self.launchDeviceManager("/nodes/test_ExecutableDevice_node/DeviceManager.dcd.xml", debug=9) self.assertNotEqual(devMgr, None) self.assertEqual(len(devMgr._get_registeredDevices()), 1) device = devMgr._get_registeredDevices()[0] self.assert_(not os.path.exists(deviceCacheDir + "/components/CommandWrapper")) self.assert_(not os.path.exists(deviceCacheDir + "/components/CapacityUser")) # Load a some files and directories device.load(self._domMgr._get_fileMgr(), "/components/CommandWrapper", CF.LoadableDevice.EXECUTABLE) device.load(self._domMgr._get_fileMgr(), "/components/CapacityUser/CapacityUser.py", CF.LoadableDevice.EXECUTABLE) device.load(self._domMgr._get_fileMgr(), "/components/CapacityUser/CapacityUser.prf.xml", CF.LoadableDevice.EXECUTABLE) device.load(self._domMgr._get_fileMgr(), "/components/CapacityUser/CapacityUser.scd.xml", CF.LoadableDevice.EXECUTABLE) device.load(self._domMgr._get_fileMgr(), "/components/CapacityUser/CapacityUser.spd.xml", CF.LoadableDevice.EXECUTABLE) # Simply check that the cache dir isn't empty and has the correct number of files self.assertEqual(len(os.listdir(deviceCacheDir + "/components/CommandWrapper")), 4) self.assertEqual(len(os.listdir(deviceCacheDir + "/components/CapacityUser")), 4) # Check that a second load doesn't do anything weird device.load(self._domMgr._get_fileMgr(), "/components/CommandWrapper", CF.LoadableDevice.EXECUTABLE) device.load(self._domMgr._get_fileMgr(), "/components/CapacityUser/CapacityUser.py", CF.LoadableDevice.EXECUTABLE) device.load(self._domMgr._get_fileMgr(), "/components/CapacityUser/CapacityUser.prf.xml", CF.LoadableDevice.EXECUTABLE) device.load(self._domMgr._get_fileMgr(), "/components/CapacityUser/CapacityUser.scd.xml", CF.LoadableDevice.EXECUTABLE) device.load(self._domMgr._get_fileMgr(), "/components/CapacityUser/CapacityUser.spd.xml", CF.LoadableDevice.EXECUTABLE) self.assertEqual(len(os.listdir(deviceCacheDir + "/components/CommandWrapper")), 4) self.assertEqual(len(os.listdir(deviceCacheDir + "/components/CapacityUser")), 4) # Clear out the deviceCache os.system("rm -rf %s" % (deviceCacheDir + "/components/CommandWrapper")) os.system("rm -rf %s" % (deviceCacheDir + "/components/CapacityUser/CapacityUser.py")) self.assertEqual(os.path.exists(deviceCacheDir + "/components/CommandWrapper"), False) self.assertEqual(len(os.listdir(deviceCacheDir + "/components/CapacityUser")), 3) # Load files and directories, this should copy the files over because they don't exist, even if though the refCnt > 0 device.load(self._domMgr._get_fileMgr(), "/components/CommandWrapper", CF.LoadableDevice.EXECUTABLE) device.load(self._domMgr._get_fileMgr(), "/components/CapacityUser/CapacityUser.py", CF.LoadableDevice.EXECUTABLE) device.load(self._domMgr._get_fileMgr(), "/components/CapacityUser/CapacityUser.prf.xml", CF.LoadableDevice.EXECUTABLE) device.load(self._domMgr._get_fileMgr(), "/components/CapacityUser/CapacityUser.scd.xml", CF.LoadableDevice.EXECUTABLE) device.load(self._domMgr._get_fileMgr(), "/components/CapacityUser/CapacityUser.spd.xml", CF.LoadableDevice.EXECUTABLE) self.assertEqual(len(os.listdir(deviceCacheDir + "/components/CommandWrapper")), 4) self.assertEqual(len(os.listdir(deviceCacheDir + "/components/CapacityUser")), 4) # Now we need to unload 3 times print os.listdir(deviceCacheDir + "/components") for i in xrange(3): self.assertEqual(len(os.listdir(deviceCacheDir + "/components/CommandWrapper")), 4) self.assertEqual(len(os.listdir(deviceCacheDir + "/components/CapacityUser")), 4) device.unload("/components/CommandWrapper") device.unload("/components/CapacityUser/CapacityUser.py") device.unload("/components/CapacityUser/CapacityUser.prf.xml") device.unload("/components/CapacityUser/CapacityUser.scd.xml") device.unload("/components/CapacityUser/CapacityUser.spd.xml") #self.assertEqual(len(os.listdir(deviceCacheDir + "/components/CommandWrapper")), 0) # Empty directories get deleted self.assert_(not os.path.exists(deviceCacheDir + "/components/CommandWrapper")) self.assertEqual(len(os.listdir(deviceCacheDir + "/components/CapacityUser")), 0) device.releaseObject() # Wait for the device to unregister. self.assert_(self._waitRegisteredDevices(devMgr, 0)) self.assertEqual(len(self._domMgr._get_deviceManagers()), 1)
def test_BasicOperation(self): self._nb_domMgr, self._domMgr = self.launchDomainManager(endpoint="giop:tcp::5679", dbURI=self._dbfile) self._nb_devMgr, devMgr = self.launchDeviceManager("/nodes/test_PortTestDevice_node/DeviceManager.dcd.xml") self._fileMgr = self._domMgr._get_fileMgr() self._files = self._fileMgr.list("/") self.assertEqual(len(self._domMgr._get_applicationFactories()), 0) self.assertEqual(len(self._domMgr._get_applications()), 0) self._domMgr.installApplication("/waveforms/PortConnectProvidesPort/PortConnectProvidesPort.sad.xml") self.assertEqual(len(self._domMgr._get_applicationFactories()), 1) self.assertEqual(len(self._domMgr._get_applications()), 0) # Load on the device ID das = minidom.parse(os.path.join(scatest.getSdrPath(), "dom/waveforms/PortConnectProvidesPort/PortConnectProvidesPort_DAS.xml")) ds = [] deviceAssignmentTypeNodeList = das.getElementsByTagName("deviceassignmenttype") for node in deviceAssignmentTypeNodeList: componentid = node.getElementsByTagName("componentid")[0].firstChild.data assigndeviceid = node.getElementsByTagName("assigndeviceid")[0].firstChild.data ds.append( CF.DeviceAssignmentType(str(componentid),str(assigndeviceid)) ) # Ensure the expected device is available self.assertNotEqual(devMgr, None) self.assertEqual(len(devMgr._get_registeredDevices()), 2) device1 = None device2 = None for dev in devMgr._get_registeredDevices(): if dev._get_identifier() == "DCE:322fb9b2-de57-42a2-ad03-217bcb244262": device1 = dev elif dev._get_identifier() == "DCE:47dc45d8-19b5-4b7e-bcd4-b165babe5b84": device2 = dev self.assertNotEqual(device1, None) self.assertNotEqual(device2, None) # Query the known allocation properties memCapacity1 = device1.query([CF.DataType(id="DCE:8dcef419-b440-4bcf-b893-cab79b6024fb", value=any.to_any(None))])[0] bogoMips1 = device1.query([CF.DataType(id="DCE:5636c210-0346-4df7-a5a3-8fd34c5540a8", value=any.to_any(None))])[0] self.assertEqual(memCapacity1.value._v, 100000000) self.assertEqual(bogoMips1.value._v, 100000000) memCapacity2 = device2.query([CF.DataType(id="DCE:8dcef419-b440-4bcf-b893-cab79b6024fb", value=any.to_any(None))])[0] bogoMips2 = device2.query([CF.DataType(id="DCE:5636c210-0346-4df7-a5a3-8fd34c5540a8", value=any.to_any(None))])[0] self.assertEqual(memCapacity2.value._v, 100000000) self.assertEqual(bogoMips2.value._v, 100000000) appFact = self._domMgr._get_applicationFactories()[0] app = appFact.create(appFact._get_name(), [], ds) self.assertEqual(len(self._domMgr._get_applicationFactories()), 1) self.assertEqual(len(self._domMgr._get_applications()), 1) app = self._domMgr._get_applications()[0] # cache off some variables for later for testing purposes self.assertEqual(len(app._get_componentNamingContexts()), 2) self.assertEqual(len(app._get_componentProcessIds()), 2) self.assertEqual(len(app._get_componentDevices()), 4) self.assertEqual(len(app._get_componentImplementations()), 2) origNamingContexts = app._get_componentNamingContexts() origProcessIds = app._get_componentProcessIds() origDevices = app._get_componentDevices() origImplementations = app._get_componentImplementations() origQuery = app.query([]) # Verify that capacity was allocated memCapacity1 = device1.query([CF.DataType(id="DCE:8dcef419-b440-4bcf-b893-cab79b6024fb", value=any.to_any(None))])[0] bogoMips1 = device1.query([CF.DataType(id="DCE:5636c210-0346-4df7-a5a3-8fd34c5540a8", value=any.to_any(None))])[0] self.assertEqual(memCapacity1.value._v, 100000000-(5000)) self.assertEqual(bogoMips1.value._v, 100000000-(1000)) memCapacity2 = device2.query([CF.DataType(id="DCE:8dcef419-b440-4bcf-b893-cab79b6024fb", value=any.to_any(None))])[0] bogoMips2 = device2.query([CF.DataType(id="DCE:5636c210-0346-4df7-a5a3-8fd34c5540a8", value=any.to_any(None))])[0] self.assertEqual(memCapacity2.value._v, 100000000-(5000)) self.assertEqual(bogoMips2.value._v, 100000000-(1000)) # Kill the domainMgr os.kill(self._nb_domMgr.pid, signal.SIGTERM) # TODO if SIGKILL is used (simulating a nodeBooter unexpected abort, # the IOR and the newly spawned domain manager do not work if not self.waitTermination(self._nb_domMgr): self.fail("Domain Manager Failed to Die") # Start the domainMgr again self._nb_domMgr, newDomMgr = self.launchDomainManager(endpoint="giop:tcp::5679", dbURI=self._dbfile) # Verify our client reference still is valid newDomMgr._get_identifier() self.assertEqual(False, newDomMgr._non_existent()) #self.assertEqual(self._orb.object_to_string(newDomMgr), self._orb.object_to_string(self._domMgr)) self.assertEqual(False, self._domMgr._non_existent()) # Verify that the file manager is still valid self.new_files = self._fileMgr.list("/") self.assertEqual(len(self._files), len(self.new_files)) self.assertEqual(len(self._domMgr._get_deviceManagers()), 1) newDevMgr = self._domMgr._get_deviceManagers()[0] self.assertEqual(self._orb.object_to_string(devMgr), self._orb.object_to_string(newDevMgr)) self.assertEqual(len(devMgr._get_registeredDevices()), 2) newDevice1 = None newDevice2 = None for dev in devMgr._get_registeredDevices(): if dev._get_identifier() == "DCE:322fb9b2-de57-42a2-ad03-217bcb244262": newDevice1 = dev elif dev._get_identifier() == "DCE:47dc45d8-19b5-4b7e-bcd4-b165babe5b84": newDevice2 = dev self.assertNotEqual(newDevice1, None) self.assertNotEqual(newDevice2, None) self.assertEqual(self._orb.object_to_string(device1), self._orb.object_to_string(newDevice1)) self.assertEqual(self._orb.object_to_string(device2), self._orb.object_to_string(newDevice2)) self.assertEqual(len(self._domMgr._get_applicationFactories()), 1) newAppFact = self._domMgr._get_applicationFactories()[0] self.assertEqual(appFact._get_identifier(), newAppFact._get_identifier()); self.assertEqual(appFact._get_name(), newAppFact._get_name()); self.assertEqual(len(self._domMgr._get_applications()), 1) newApp = self._domMgr._get_applications()[0] # Applications are currently not using persistent POAs, so the IORs will change # self.assertEqual(self._orb.object_to_string(app), self._orb.object_to_string(newApp)) newNamingContexts = app._get_componentNamingContexts() newProcessIds = app._get_componentProcessIds() newDevices = app._get_componentDevices() newImplementations = app._get_componentImplementations() # We have to compare elements individually since newDevices == origDevices even when the contents are identical self.assertEqual(len(newDevices), len(origDevices)) for x in xrange(len(newDevices)): self.assertEqual(newDevices[x].componentId, origDevices[x].componentId) self.assertEqual(newDevices[x].assignedDeviceId, origDevices[x].assignedDeviceId) self.assertEqual(len(newProcessIds), len(origProcessIds)) for x in xrange(len(newProcessIds)): self.assertEqual(newProcessIds[x].componentId, origProcessIds[x].componentId) self.assertEqual(newProcessIds[x].processId, origProcessIds[x].processId) self.assertEqual(len(newImplementations), len(origImplementations)) for x in xrange(len(newImplementations)): self.assertEqual(newImplementations[x].componentId, origImplementations[x].componentId) self.assertEqual(newImplementations[x].elementId, origImplementations[x].elementId) self.assertEqual(len(newNamingContexts), len(origNamingContexts)) for x in xrange(len(newNamingContexts)): self.assertEqual(newNamingContexts[x].componentId, origNamingContexts[x].componentId) self.assertEqual(newNamingContexts[x].elementId, origNamingContexts[x].elementId) # Verify that the connection between the CF::Application and the assemblyController was # restored. newQuery = app.query([]) self.assertEqual(len(newQuery), len(origQuery)) for x in xrange(len(newQuery)): self.assertEqual(newQuery[x].id, origQuery[x].id) self.assertEqual(newQuery[x].value._v, origQuery[x].value._v) # app.stop() app.releaseObject() # TODO how can we verify that the ports were disconnected as part of release? time.sleep(1) self.assertEqual(len(self._domMgr._get_applicationFactories()), 1) self.assertEqual(len(self._domMgr._get_applications()), 0) # Verify that capacity was deallocated memCapacity1 = device1.query([CF.DataType(id="DCE:8dcef419-b440-4bcf-b893-cab79b6024fb", value=any.to_any(None))])[0] bogoMips1 = device1.query([CF.DataType(id="DCE:5636c210-0346-4df7-a5a3-8fd34c5540a8", value=any.to_any(None))])[0] self.assertEqual(memCapacity1.value._v, 100000000) self.assertEqual(bogoMips1.value._v, 100000000) memCapacity2 = device2.query([CF.DataType(id="DCE:8dcef419-b440-4bcf-b893-cab79b6024fb", value=any.to_any(None))])[0] bogoMips2 = device2.query([CF.DataType(id="DCE:5636c210-0346-4df7-a5a3-8fd34c5540a8", value=any.to_any(None))])[0] self.assertEqual(memCapacity2.value._v, 100000000) self.assertEqual(bogoMips2.value._v, 100000000) newDevMgr.shutdown() self.assertEqual(len(self._domMgr._get_deviceManagers()), 0) self._domMgr.uninstallApplication(appFact._get_identifier()) self.assertEqual(len(self._domMgr._get_applicationFactories()), 0)
def test_BasicOperation(self): self.assertNotEqual(self._domMgr, None) fileMgr = self._domMgr._get_fileMgr() devfile = "/ExecutableDevice_node/nodes/test_ExecutableDevice_node/DeviceManager.dcd.xml" devlocalfile = "dev/nodes/test_ExecutableDevice_node/DeviceManager.dcd.xml" domfile = "/waveforms/CommandWrapper/CommandWrapper_DAS.xml" domlocalfile = "dom/waveforms/CommandWrapper/CommandWrapper_DAS.xml" addon = "foo.txt" devnewfile = "/ExecutableDevice_node/nodes/testdev.txt" devlocalnewfile = "dev/nodes/testdev.txt" domnewfile = "/waveforms/testdom.txt" domlocalnewfile = "dom/waveforms/testdom.txt" str_to_write_dev = "testing 1,2,3 dev" str_to_write_dom = "testing 1,2,3 dom" ################# # Test exists ################# try: fileMgr.exists(devfile) except: self.fail( "Something bad happened in fileMgr.exists(devfile) for mountPoint lookup" ) try: fileMgr.exists(domfile) except: self.fail( "Something bad happened in fileMgr.exists(domfile) for domain (local fs) lookup" ) try: fileMgr.exists(devfile + addon) except: self.fail( "Something bad happened in fileMgr.exists(devfile + addon) for mountPoint lookup" ) try: fileMgr.exists(domfile + addon) except: self.fail( "Something bad happened in fileMgr.exists(domfile + addon) for domain (local fs) lookup" ) self.assertEqual(fileMgr.exists(devfile), True) self.assertEqual(fileMgr.exists(domfile), True) self.assertEqual(fileMgr.exists(devfile + addon), False) self.assertEqual(fileMgr.exists(domfile + addon), False) ################# # test open ################# try: myfile = fileMgr.open(devfile, True) except: self.fail( "Something bad happened in fileMgr.open(devfile, True) for mountPoint lookup" ) expectedSize = os.stat(os.path.join(scatest.getSdrPath(), devlocalfile))[6] self.assertEqual(myfile.sizeOf(), expectedSize) try: myfile.close() except: self.fail( "Something bad happened in fileMgr.close(devfile, True) for mountPoint lookup" ) try: myfile = fileMgr.open(domfile, True) except: self.fail( "Something bad happened in fileMgr.open(domfile, True) for domain (local fs) lookup" ) expectedSize = os.stat(os.path.join(scatest.getSdrPath(), domlocalfile))[6] self.assertEqual(myfile.sizeOf(), expectedSize) try: myfile.close() except: self.fail( "Something bad happened in fileMgr.close(devfile, True) for mountPoint lookup" ) try: myfile = fileMgr.open(devfile + addon, True) self.fail( "fileMgr.open(devfile+addon, True) should have thrown and exception and it didn't" ) except: pass try: myfile = fileMgr.open(domfile + addon, True) self.fail( "fileMgr.open(domfile+addon, True) should have thrown and exception and it didn't" ) except: pass ################# # test create ################# if os.path.exists(os.path.join(scatest.getSdrPath(), devlocalnewfile)): os.remove(os.path.join(scatest.getSdrPath(), devlocalnewfile)) try: myfile = fileMgr.create(devnewfile) myfile.write(str_to_write_dev) myfile.close() except: self.fail( "Something bad happened in fileMgr.create(devnewfile) for mountPoint lookup" ) self.assertEqual(fileMgr.exists(devnewfile), True) if os.path.exists(os.path.join(scatest.getSdrPath(), domlocalnewfile)): os.remove(os.path.join(scatest.getSdrPath(), domlocalnewfile)) try: myfile = fileMgr.create(domnewfile) myfile.write(str_to_write_dom) myfile.close() except: self.fail( "Something bad happened in fileMgr.create(domnewfile) for domain (local fs) lookup" ) self.assertEqual(fileMgr.exists(domnewfile), True) ################# # test remove ################# try: fileMgr.remove(devnewfile) except: self.fail( "Something bad happened in fileMgr.remove(devnewfile) for mountPoint lookup" ) self.assertEqual(fileMgr.exists(devnewfile), False) try: fileMgr.remove(domnewfile) except: self.fail( "Something bad happened in fileMgr.remove(domnewfile) for domain (local fs) lookup" ) self.assertEqual(fileMgr.exists(domnewfile), False)