From 2cefc51e7bb2b3810f57e7c340c0c8857de1a05a Mon Sep 17 00:00:00 2001 From: Christian Mueller Date: Sun, 18 Dec 2011 16:34:27 +0100 Subject: - adds dbus test for command plugin --- .../test/dbuscommandpluginInterfaceTest.cpp | 615 +++++++++++++++++++++ 1 file changed, 615 insertions(+) create mode 100644 PluginCommandInterfaceDbus/test/dbuscommandpluginInterfaceTest.cpp (limited to 'PluginCommandInterfaceDbus/test/dbuscommandpluginInterfaceTest.cpp') diff --git a/PluginCommandInterfaceDbus/test/dbuscommandpluginInterfaceTest.cpp b/PluginCommandInterfaceDbus/test/dbuscommandpluginInterfaceTest.cpp new file mode 100644 index 0000000..87dfd14 --- /dev/null +++ b/PluginCommandInterfaceDbus/test/dbuscommandpluginInterfaceTest.cpp @@ -0,0 +1,615 @@ +/* + * dbuscommandpluginInterfaceTest.cpp + * + * Created on: Dec 14, 2011 + * Author: christian + */ + +#include "dbuscommandpluginInterfaceTest.h" +#include +#include +#include +#include "../include/DBusCommandSender.h" +#include "../include/DBusMessageHandler.h" +#include "DbusCommandInterfaceBackdoor.h" +#include "MockInterfaces.h" +#include "DBusWrapper.h" + +using namespace am; +using namespace testing; + +//DLT_DECLARE_CONTEXT(DLT_CONTEXT) + +std::string DBUSCOMMAND = "dbus-send --session --print-reply --dest=org.genivi.audiomanager /org/genivi/audiomanager/CommandInterface org.genivi.audiomanager.CommandInterface."; + +void* run_the_loop(void* wrapper) +{ + DBusWrapper* wrap=(DBusWrapper*)wrapper; + wrap->dbusMainLoop(); +} + +dbuscommandpluginInterfaceTest::dbuscommandpluginInterfaceTest() +{ +} + +dbuscommandpluginInterfaceTest::~dbuscommandpluginInterfaceTest() +{ + +} + +void dbuscommandpluginInterfaceTest::SetUp() +{ + +} + + + +void dbuscommandpluginInterfaceTest::TearDown() +{ + +} + +ACTION(returnListConnections) +{ + std::vector list; + am::am_MainConnectionType_s listItem; + listItem.mainConnectionID=15; + listItem.sinkID=4; + listItem.sourceID=3; + listItem.connectionState=CS_MIN; + listItem.delay=34; + list.push_back(listItem); + arg0=list; +} + +ACTION(returnListSinks) +{ + std::vector list; + am::am_SinkType_s listItem; + listItem.availability.availability=A_MIN; + listItem.availability.availabilityReason=AR_NOMEDIA; + listItem.muteState=MS_UNMUTED; + listItem.name="mySink"; + listItem.sinkClassID=34; + listItem.sinkID=24; + listItem.volume=124; + list.push_back(listItem); + arg0=list; +} + +ACTION(returnListSources) +{ + std::vector list; + am::am_SourceType_s listItem; + listItem.availability.availability=A_MAX; + listItem.availability.availabilityReason=AR_SAMEMEDIA; + listItem.name="MySource"; + listItem.sourceClassID=12; + listItem.sourceID=224; + list.push_back(listItem); + listItem.name="NextSource"; + listItem.sourceID=22; + list.push_back(listItem); + arg0=list; +} + +ACTION(returnListMainSinkSoundProperties) +{ + std::vector list; + am::am_MainSoundProperty_s listItem; + listItem.type=MSP_MAX; + listItem.value=223; + list.push_back(listItem); + listItem.type=MSP_MIN; + listItem.value=2; + list.push_back(listItem); + arg1=list; +} + +ACTION(returnListSourceClasses) +{ + std::vector list; + am::am_SourceClass_s listItem; + am::am_ClassProperty_s property; + property.classProperty=CP_SINK_TYPE; + property.value=12; + listItem.name="FirstCLass"; + listItem.sourceClassID=23; + listItem.listClassProperties.push_back(property); + list.push_back(listItem); + listItem.name="SecondCLass"; + listItem.sourceClassID=2; + listItem.listClassProperties.push_back(property); + list.push_back(listItem); + arg0=list; +} + +ACTION(returnListSinkClasses) +{ + std::vector list; + am::am_SinkClass_s listItem; + am::am_ClassProperty_s property; + property.classProperty=CP_SOURCE_TYPE; + property.value=122; + listItem.name="FirstCLass"; + listItem.sinkClassID=2123; + listItem.listClassProperties.push_back(property); + list.push_back(listItem); + listItem.name="SecondCLass"; + listItem.sinkClassID=23; + listItem.listClassProperties.push_back(property); + list.push_back(listItem); + arg0=list; +} + +ACTION(returnListSystemProperties) +{ + std::vector list; + am::am_SystemProperty_s listItem; + listItem.type=SYP_TEST; + listItem.value=-2245; + list.push_back(listItem); + arg0=list; +} + +ACTION(returnTimingInfo) +{ + am::am_timeSync_t time=23; + arg1=time; +} + + +TEST_F(dbuscommandpluginInterfaceTest,Connect) +{ + Py_Initialize(); + //unfortunatly we need to put all in one testcase because testing with the dbus loop caused problems... + DBusWrapper pDBusWrapper; + pthread_t ptestThread; + std::vector plistCommandPluginDirs; + plistCommandPluginDirs.push_back(std::string(DEFAULT_PLUGIN_COMMAND_DIR)); + + CommandSender pCommandSender(plistCommandPluginDirs); + MockCommandReceiveInterface pReceiveInterface; + + //this class just creates the thread that will handle the mainloop... + pthread_create(&ptestThread,NULL,run_the_loop,(void*)&pDBusWrapper); + +// ok, here we give the DBusWrapper pointer to the Plugin and start the interface + EXPECT_CALL(pReceiveInterface,getDBusConnectionWrapper(_)).WillRepeatedly(DoAll(SetArgReferee<0>(&pDBusWrapper),Return(E_OK))); + pCommandSender.startupInterface(&pReceiveInterface); + + EXPECT_CALL(pReceiveInterface,connect(2,3,_)).WillRepeatedly(DoAll(SetArgReferee<2>(35),Return(E_OK))); + system((DBUSCOMMAND + std::string("Connect uint16:2 uint16:3 > /tmp/result.txt ")).c_str()); + + //check the results + std::ifstream ifs("/tmp/result.txt"); + std::string line; + int lineCounter=0, result=0; + while(std::getline(ifs, line)) + { + if(lineCounter==1) + { + std::stringstream(line.substr(line.find_first_not_of(" int16 "))) >> result; + ASSERT_EQ(result,E_OK); + } + else if (lineCounter==2) + { + std::stringstream(line.substr(line.find_first_not_of(" uint16 "))) >> result; + ASSERT_EQ(result,35); + } + lineCounter++; + } + ifs.close(); + + std::cout<<"[connect ]"< /tmp/result.txt ")).c_str()); + + //check the results + lineCounter=0; + result=0; + ifs.open("/tmp/result.txt"); + while(std::getline(ifs, line)) + { + if(lineCounter==1) + { + std::stringstream(line.substr(line.find_first_not_of(" int16 "))) >> result; + ASSERT_EQ(result,E_OK); + } + lineCounter++; + } + ifs.close(); + + std::cout<<"[disconnect]"< /tmp/result.txt ")).c_str()); + + //check the results + lineCounter=0; + result=0; + ifs.open("/tmp/result.txt"); + while(std::getline(ifs, line)) + { + if(lineCounter==1) + { + std::stringstream(line.substr(line.find_first_not_of(" int16 "))) >> result; + ASSERT_EQ(result,E_OK); + } + lineCounter++; + } + ifs.close(); + + std::cout<<"[setVolume ]"< /tmp/result.txt ")).c_str()); + + //check the results + lineCounter=0; + result=0; + ifs.open("/tmp/result.txt"); + while(std::getline(ifs, line)) + { + if(lineCounter==1) + { + std::stringstream(line.substr(line.find_first_not_of(" int16 "))) >> result; + ASSERT_EQ(result,E_OK); + } + lineCounter++; + } + ifs.close(); + + std::cout<<"[volumeStep]"< /tmp/result.txt ")).c_str()); + + //check the results + lineCounter=0; + result=0; + ifs.open("/tmp/result.txt"); + while(std::getline(ifs, line)) + { + if(lineCounter==1) + { + std::stringstream(line.substr(line.find_first_not_of(" int16 "))) >> result; + ASSERT_EQ(result,E_OK); + } + lineCounter++; + } + ifs.close(); + + std::cout<<"[sinkmutest]"<> result; + } + ASSERT_EQ(result,E_ABORTED); + ifs.close(); + + std::cout<<"[sinksound ]"<> result; + } + ASSERT_EQ(result,E_ABORTED); + ifs.close(); + + std::cout<<"[sourcesnd ]"<> result; + } + ASSERT_EQ(result,E_DATABASE_ERROR); + ifs.close(); + + std::cout<<"[systemprop]"<