Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Create a module for the tests that are going to be performed:

Code Block
languagebash
linenumberstrue
collapsetrue
> getTemplateForDirectory MODROOT_WS sim_comp
> cd sim_comp/test




> mkdir -p CDB/MACI/Components
> mkdir -p CDB/MACI/Managers/Manager

Put the IDL file:

Code Block
languagecpp
titleidl/MountExample.idl
linenumberstrue
collapsetrue
#ifndef _MOUNT_EXAMPLE_IDL_
#define _MOUNT_EXAMPLE_IDL_

#include <acscomponent.idl>

#pragma prefix "alma"

module ACS_COURSE
{
    interface MountExample : ACS::ACSComponent {
        void objfix (in double az, in double elev);
    };    
};

#endif

...

Code Block
languagexml
titletest/CDB/MACI/Managers/Manager/Manager.xml
linenumberstrue
collapsetrue
<Manager xmlns:cdb="urn:schemas-cosylab-com:CDB:1.0" xmlns="urn:schemas-cosylab-com:Manager:1.0" xmlns:log="urn:schemas-cosylab-com:LoggingConfig:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Timeout="50.0" ContainerPingInterval="20.0">
<Startup> </Startup>
<ServiceComponents>
<cdb:e string="Log"/>
<cdb:e string="LogFactory"/>
<cdb:e string="NotifyEventChannelFactory"/>
<cdb:e string="InterfaceRepository"/>
<cdb:e string="CDB"/>
<cdb:e string="ACSLogSvc"/>
</ServiceComponents>
<LoggingConfig>
<log:e Name="jacorb@Manager" minLogLevel="5" minLogLevelLocal="5"/>
</LoggingConfig>
</Manager>

...

Code Block
languagexml
titletest/CDB/MACI/Components/Components.xml
linenumberstrue
collapsetrue
<Components xmlns="urn:schemas-cosylab-com:Components:1.0" xmlns:cdb="urn:schemas-cosylab-com:CDB:1.0" xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<e Name="MOUNT" Code="Acssim.Servants.Simulator" 
   Type="IDL:alma/ACS_COURSE/MountExample:1.0"
   Container="pyContainer"
   ImplLang="py"/>
</Components>

Prepare the Makefile:

Code Block
languagebash
linenumberstrue
collapsetrue
> cp src/Makefile test/Makefile

Add the following to IDL entry:

Code Block
titletest/Makefile
linenumberstrue
collapsetrue
# 
# IDL Files and flags
# 
IDL_FILES = MountExample
TAO_IDLFLAGS =
USER_IDL =

Generate code stubs and skeletons:

Code Block
languagebash
linenumberstrue
collapsetrue
> cd test
> make all

Simulated Component

The simulation code needs to be put in the CDB:

Code Block
languagexml
titletest/CDB/alma/simulated/MOUNT.xml
linenumberstrue
collapsetrue
<SimulatedComponent xmlns="urn:schemas-cosylab-com:SimulatedComponent:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<pythonImports>
from acstime import Duration
</pythonImports>
<initialize>
logger=parameters[0].getLogger()
logger.logInfo("Component initialized!")
</initialize>
<cleanUp>
print('Simulated component cleaning up')
</cleanUp>
<_corbaMethod Name="objfix" Timeout="0">
print("objfix called with params ",parameters)
</_corbaMethod>
</SimulatedComponent>

Client

A simple client could be prepared:

Code Block
languagepy
titletest/client.py
linenumberstrue
collapsetrue
from Acspy.Clients.SimpleClient import PySimpleClient
client = PySimpleClient()
m = client.getComponent("MOUNT")
m.objfix(3,6)

Executing

Start ACS:

Code Block
languagebash
titleConsole 1
linenumberstrue
collapsetrue
> export ACS_CDB=$PWD
> acsStart

On a different console start pyContainer:

Code Block
languagebash
titleConsole 2
linenumberstrue
collapsetrue
acsStartContainer -py pyContainer

Execute objexp or the client in a third console:

Code Block
languagebash
titleConsole 3
linenumberstrue
collapsetrue
> python client.py

The expected behavior is that no error is shown in "Console 3" and "Console 2 shold have the following output:

Code Block
2020-07-25T23:27:14.390 INFO [acsStartContainer] Running the container with these arguments: 'ACSStartContainerPy pyContainer -ORBendPoint giop:tcp:127.0.1.1:4000 -m corbaloc::127.0.1.1:3000/Manager'
ContainerStatusMsg: Startup begins
2020-07-25T23:27:14.997 AlarmSystemInterfaceFactory init - Using ACS alarm system
ContainerStatusMsg: ORB initialization begins
ContainerStatusMsg: ORB initialization ends
ContainerStatusMsg: Manager access initialization begins
ContainerStatusMsg: Manager access initialization ends
ContainerStatusMsg: Automatic component loading begins
2020-07-25T23:27:15.042 pyContainer taggedmessage - Info message from the manager: Startup statistics: 0 components queued to be activated.
2020-07-25T23:27:15.114 pyContainer taggedmessage - Info message from the manager: Startup statistics: 0 of 0 components activated.
ContainerStatusMsg: Automatic component loading ends
ContainerStatusMsg: Ready
2020-07-25T23:27:15.180 pyContainer getCDBInfo - No container information found in the CDB
2020-07-25T23:27:15.284 pyContainer __init__ - Container pyContainer waiting for requests
2020-07-25T23:27:15.289 pyContainer __init__ - Container pyContainer used libraries from /home/almamgr/mod/src/../lib/python/site-packages/:/alma/ACS-2020AUG/ACSSW/lib/python/site-packages:
ContainerStatusMsg: Startup ends
2020-07-25T23:27:18.076 pyContainer activate_component_async - Starting async activation of MOUNT(type IDL:alma/workshop/MountExample:1.0)
2020-07-25T23:27:18.080 pyContainer run - Activating MOUNT (type IDL:alma/workshop/MountExample:1.0)
2020-07-25T23:27:18.083 pyContainer aboutToActivate - The container is asking the clearance to activate MOUNT
2020-07-25T23:27:18.084 pyContainer _aboutToProcess - The container is not dealing with MOUNT: the operation can go ahead
2020-07-25T23:27:18.111 pyContainer aboutToActivate - The container has been cleared to activate MOUNT
2020-07-25T23:27:18.658 loggingts -- Successfully loaded component code. [ logName=LOG_CompAct_Loading_OK TimeMillis=538 CompName=MOUNT ]
2020-07-25T23:27:18.974 loggingts -- Successfully instantiated component. [ logName=LOG_CompAct_Instance_OK TimeMillis=306 CompName=MOUNT ]
2020-07-25T23:27:19.487 Servants.Representations.Dynamic.Dynamic'>(MOUNT) __initialize - Simulated lifecyle method
2020-07-25T23:27:19.488 Servants.Executor _execute - initialize return value looks like:None of type:<class 'NoneType'>
2020-07-25T23:27:19.489 EventDispatcher (MOUNT) setupEventDispatching - Setting up event dispatching.
2020-07-25T23:27:19.494 EventDispatcher (MOUNT) setupEventDispatching - No CDB entry found. Bailing.
2020-07-25T23:27:19.691 loggingts -- Successfully activated component with Corba. [ logName=LOG_CompAct_Corba_OK TimeMillis=0 CompName=MOUNT ]
2020-07-25T23:27:19.692 loggingts -- Successfully initialized component. [ logName=LOG_CompAct_Init_OK TimeMillis=0 CompName=MOUNT ]
2020-07-25T23:27:19.696 pyContainer activate_component - Activated component: MOUNT
2020-07-25T23:27:19.766 pyContainer activate_component - Component 'MOUNT' has KeepAliveTime '0'.
2020-07-25T23:27:19.771 pyContainer activated - The container terminated the activation of MOUNT: awakening waiting threads
2020-07-25T23:27:19.775 pyContainer _processTerminated - The container terminated dealing with MOUNT
2020-07-25T23:27:19.778 pyContainer run - Calling maci::CBComponentInfo::done with descOut.id_tag = 1 for 'MOUNT'
2020-07-25T23:27:19.889 pyContainer run - Call to maci::CBComponentInfo::done with descOut.id_tag = 1 for 'MOUNT' completed
2020-07-25T23:27:19.922 Servants.Representations.Dynamic.Dynamic'>(MOUNT) __handleNormalMethod - Method:objfix
2020-07-25T23:27:19.930 Servants.Representations.Dynamic.Dynamic'>(MOUNT) getMethod - retVal looks like:objfix {'Value': [None], 'Timeout': 0.2}
2020-07-25T23:27:20.132 Servants.Executor _executeList - Failed to evaluate the 'None' statement!
2020-07-25T23:27:20.132 Servants.Executor _execute - objfix return value looks like:None of type:<class 'NoneType'>
2020-07-25T23:27:20.189 pyContainer aboutToDeactivate - The container is asking the clearance to deactivate MOUNT
2020-07-25T23:27:20.203 pyContainer _aboutToProcess - The container is not dealing with MOUNT: the operation can go ahead
2020-07-25T23:27:20.204 pyContainer aboutToDeactivate - The container has been cleared to activate MOUNT
2020-07-25T23:27:20.204 pyContainer deactivate_component - Deactivating component: MOUNT
2020-07-25T23:27:20.205 Servants.Representations.Dynamic.Dynamic'>(MOUNT) __cleanUp - Simulated lifecyle method
2020-07-25T23:27:20.206 Servants.Executor _execute - cleanUp return value looks like:None of type:<class 'NoneType'>
2020-07-25T23:27:20.208 pyContainer deactivated - The container terminated the deactivation of MOUNT: awakening waiting threads
2020-07-25T23:27:20.211 pyContainer _processTerminated - The container terminated dealing with MOUNT