summaryrefslogtreecommitdiff
path: root/AudioManagerDaemon/test/AmTelnetServerTest/CAmTelnetServerTest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'AudioManagerDaemon/test/AmTelnetServerTest/CAmTelnetServerTest.cpp')
-rw-r--r--AudioManagerDaemon/test/AmTelnetServerTest/CAmTelnetServerTest.cpp190
1 files changed, 190 insertions, 0 deletions
diff --git a/AudioManagerDaemon/test/AmTelnetServerTest/CAmTelnetServerTest.cpp b/AudioManagerDaemon/test/AmTelnetServerTest/CAmTelnetServerTest.cpp
new file mode 100644
index 0000000..2219834
--- /dev/null
+++ b/AudioManagerDaemon/test/AmTelnetServerTest/CAmTelnetServerTest.cpp
@@ -0,0 +1,190 @@
+/*
+ * CAmTelnetServerTest.cpp
+ *
+ * Created on: Feb 7, 2012
+ * Author: demo
+ */
+
+#include <sys/socket.h> /* for socket(), connect(), (), and recv() */
+#include <arpa/inet.h> /* for sockaddr_in and inet_addr() */
+#include <netdb.h> /* for struct hostent */
+
+#include "CAmTelnetServerTest.h"
+#include "CAmCommandReceiver.h"
+#include "CAmRoutingReceiver.h"
+#include "CAmControlReceiver.h"
+
+
+using namespace testing;
+using namespace am;
+using namespace std;
+
+
+static std::string controllerPlugin = std::string(CONTROLLER_PLUGIN);
+static unsigned short servPort = 6060;
+static int staticSocket = -1;
+static CAmSocketHandler* mpSocketHandler = NULL;
+
+void* startSocketHandler(void* data)
+{
+ CAmEnvironment* Env = static_cast<CAmEnvironment*>(data);
+ CAmSocketHandler mySocketHandler;
+ Env->setSocketHandler(&mySocketHandler);
+ mySocketHandler.start_listenting();
+ Env->setSocketHandler(NULL);
+ return (NULL);
+}
+
+CAmEnvironment::CAmEnvironment()
+: mlistRoutingPluginDirs()
+, mlistCommandPluginDirs()
+//, mpSocketHandler(NULL)
+, mDatabasehandler(std::string(":memory:"))
+, mRoutingSender(mlistRoutingPluginDirs)
+, mCommandSender(mlistRoutingPluginDirs)
+, mControlSender(controllerPlugin)
+, mRouter(&mDatabasehandler,&mControlSender)
+, mpCommandReceiver(NULL)
+, mpRoutingReceiver(NULL)
+, mpControlReceiver(NULL)
+, mpTelnetServer(NULL)
+, mSocketHandlerThread(0)
+{
+}
+
+CAmEnvironment::~CAmEnvironment()
+{
+ usleep(500);
+ if(NULL != mpTelnetServer)
+ delete(mpTelnetServer);
+ if(NULL != mpControlReceiver)
+ delete(mpControlReceiver);
+ if(NULL != mpRoutingReceiver)
+ delete(mpRoutingReceiver);
+ if(NULL != mpCommandReceiver)
+ delete(mpCommandReceiver);
+}
+
+void CAmEnvironment::SetUp()
+{
+ pthread_create(&mSocketHandlerThread, NULL, startSocketHandler, this);
+ sleep(1);
+}
+
+void CAmEnvironment::TearDown()
+{
+
+}
+
+void CAmEnvironment::setSocketHandler(CAmSocketHandler* pSocketHandler)
+{
+ mpSocketHandler = pSocketHandler;
+
+ if(NULL != pSocketHandler)
+ {
+ mpCommandReceiver = new CAmCommandReceiver(&mDatabasehandler,&mControlSender,mpSocketHandler);
+ mpRoutingReceiver = new CAmRoutingReceiver(&mDatabasehandler,&mRoutingSender,&mControlSender,mpSocketHandler);
+ mpControlReceiver = new CAmControlReceiver(&mDatabasehandler,&mRoutingSender,&mCommandSender,mpSocketHandler,&mRouter);
+
+ //startup all the Plugins and Interfaces
+ mControlSender.startupController(mpControlReceiver);
+ mCommandSender.startupInterfaces(mpCommandReceiver);
+ mRoutingSender.startupInterfaces(mpRoutingReceiver);
+
+ //when the routingInterface is done, all plugins are loaded:
+ mControlSender.setControllerReady();
+
+ // Starting TelnetServer
+ mpTelnetServer = new CAmTelnetServer(mpSocketHandler,&mCommandSender,mpCommandReceiver,&mRoutingSender,mpRoutingReceiver,&mControlSender,mpControlReceiver,&mDatabasehandler,&mRouter,servPort,3);
+ }
+}
+
+void CAmEnvironment::stopSocketHandler()
+{
+ mpSocketHandler->stop_listening();
+}
+
+CAmTelnetServerTest::CAmTelnetServerTest()
+{
+
+}
+
+CAmTelnetServerTest::~CAmTelnetServerTest()
+{
+
+}
+
+void CAmTelnetServerTest::SetUp()
+{
+
+}
+
+void CAmTelnetServerTest::TearDown()
+{
+
+}
+
+TEST_F(CAmTelnetServerTest,connectTelnetServer)
+{
+ struct sockaddr_in servAddr;
+
+ staticSocket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
+ ASSERT_GE(staticSocket,0);
+
+ struct hostent *host = (struct hostent*) gethostbyname("localhost");
+ if (host == 0)
+ {
+ std::cout << " ERROR: gethostbyname() failed\n" << std::endl;
+ return;
+ }
+
+ memset(&servAddr, 0, sizeof(servAddr));
+ servAddr.sin_family = AF_INET;
+ servAddr.sin_addr.s_addr = inet_addr(inet_ntoa(*(struct in_addr*) (host->h_addr_list[0])));
+ servAddr.sin_port = htons(servPort);
+
+ int return_connect = connect(staticSocket, (struct sockaddr *) &servAddr, sizeof(servAddr));
+ ASSERT_GE(return_connect,0);
+
+ char buffer[1000];
+ int read=recv(staticSocket,buffer,sizeof(buffer),0);
+ ASSERT_GT(read,1);
+}
+
+TEST_F(CAmTelnetServerTest,sendCmdTelnetServer)
+{
+ std::string string("help");
+
+ ssize_t sizesent = send(staticSocket, string.c_str(), string.size(), 0);
+ ASSERT_EQ(sizesent,string.size());
+
+ char buffer[1000];
+ memset(buffer,0,sizeof(buffer));
+ int read=recv(staticSocket,buffer,sizeof(buffer),0);
+ ASSERT_GT(read,1);
+}
+
+TEST_F(CAmTelnetServerTest,closeTelnetServerConnection)
+{
+ std::string string ("exit");
+
+ mpSocketHandler->stop_listening();
+
+ ssize_t sizesent = send(staticSocket, string.c_str(), string.size(), 0);
+ ASSERT_EQ(sizesent,string.size());
+
+ char buffer[1000];
+ memset(buffer,0,sizeof(buffer));
+ int read=recv(staticSocket,buffer,sizeof(buffer),0);
+ ASSERT_GT(read,1);
+
+ close(staticSocket);
+ staticSocket = -1;
+}
+
+int main(int argc, char **argv) {
+ ::testing::InitGoogleTest(&argc, argv);
+ ::testing::Environment* const env = ::testing::AddGlobalTestEnvironment(new CAmEnvironment);
+ (void) env;
+ return RUN_ALL_TESTS();
+}