1 #include <cppunit/extensions/HelperMacros.h>
2 #include "xmlserver.h"
3 extern "C"
4 {
5 #include <sys/types.h>
6 #include <sys/stat.h>
7 #include <fcntl.h>
8 }
9 
10 class XmlServerTest : public CppUnit::TestFixture
11 {
12     CPPUNIT_TEST_SUITE( XmlServerTest );
13     CPPUNIT_TEST( testReadEmptyMessage );
14     CPPUNIT_TEST( testReadMessage );
15     CPPUNIT_TEST( testReadUnterminatedMessage );
16     CPPUNIT_TEST( testReadMultipleMessage );
17     CPPUNIT_TEST( testReadLongMessage );
18 //    CPPUNIT_TEST(  );
19 
20     CPPUNIT_TEST_SUITE_END();
21 
22 private:
23     ClientConnection* cc_m;
24 public:
setUp()25     void setUp()
26     {
27         cc_m = 0;
28         system ("rm -rf /tmp/linknx_unittest_tmp");
29     }
30 
tearDown()31     void tearDown()
32     {
33         if (cc_m)
34             delete(cc_m);
35     }
36 
createMsgFd(const char * msg)37     int createMsgFd(const char *msg)
38     {
39         int fd = creat("/tmp/linknx_unittest_tmp", 00644);
40         write(fd, msg, strlen(msg));
41         close(fd);
42         return open("/tmp/linknx_unittest_tmp", O_RDONLY);
43     }
44 
testReadEmptyMessage()45     void testReadEmptyMessage()
46     {
47         pth_event_t stop = pth_event(PTH_EVENT_TIME, pth_timeout(1,0));
48         cc_m = new ClientConnection(NULL, createMsgFd(""));
49         CPPUNIT_ASSERT_EQUAL(-1, cc_m->readmessage(stop));
50     }
51 
testReadMessage()52     void testReadMessage()
53     {
54         pth_event_t stop = pth_event(PTH_EVENT_TIME, pth_timeout(1,0));
55         cc_m = new ClientConnection(NULL, createMsgFd("test\004"));
56         CPPUNIT_ASSERT_EQUAL(1, cc_m->readmessage(stop));
57         CPPUNIT_ASSERT(cc_m->msg_m == "test");
58         CPPUNIT_ASSERT_EQUAL(-1, cc_m->readmessage(stop));
59     }
60 
testReadUnterminatedMessage()61     void testReadUnterminatedMessage()
62     {
63         pth_event_t stop = pth_event(PTH_EVENT_TIME, pth_timeout(1,0));
64         cc_m = new ClientConnection(NULL, createMsgFd("a message without ending ascii 0x04"));
65         CPPUNIT_ASSERT_EQUAL(-1, cc_m->readmessage(stop));
66     }
67 
testReadMultipleMessage()68     void testReadMultipleMessage()
69     {
70         pth_event_t stop = pth_event(PTH_EVENT_TIME, pth_timeout(1,0));
71         cc_m = new ClientConnection(NULL, createMsgFd("test\004second message\004"));
72         CPPUNIT_ASSERT_EQUAL(1, cc_m->readmessage(stop));
73         CPPUNIT_ASSERT(cc_m->msg_m == "test");
74         CPPUNIT_ASSERT_EQUAL(1, cc_m->readmessage(stop));
75         CPPUNIT_ASSERT(cc_m->msg_m == "second message");
76         CPPUNIT_ASSERT_EQUAL(-1, cc_m->readmessage(stop));
77     }
78 
testReadLongMessage()79     void testReadLongMessage()
80     {
81         const char *msg = "first part must be at least 256 bytes long, first part must be at least 256 bytes long, first part must be at least 256 bytes long, first part must be at least 256 bytes long, first part must be at least 256 bytes long, first part must be at least 256 byte, and this is second part\004";
82         pth_event_t stop = pth_event(PTH_EVENT_TIME, pth_timeout(1,0));
83         cc_m = new ClientConnection(NULL, createMsgFd(msg));
84         CPPUNIT_ASSERT_EQUAL(1, cc_m->readmessage(stop));
85         cc_m->msg_m.push_back('\004');
86         CPPUNIT_ASSERT(cc_m->msg_m == msg);
87         CPPUNIT_ASSERT_EQUAL(-1, cc_m->readmessage(stop));
88     }
89 
90 };
91 
92 CPPUNIT_TEST_SUITE_REGISTRATION( XmlServerTest );
93