5 * Created by Victor Grishchenko on 3/13/09.
6 * Copyright 2009 Delft University of Technology. All rights reserved.
9 #include <gtest/gtest.h>
10 //#include <glog/logging.h>
12 #include "swift.h" // Arno: for LibraryInit
14 using namespace swift;
16 TEST(Datagram, AddressTest) {
17 Address addr("127.0.0.1:1000");
18 EXPECT_EQ(INADDR_LOOPBACK,addr.ipv4());
19 EXPECT_EQ(1000,addr.port());
20 Address das2("node300.das2.ewi.tudelft.nl:20000");
21 Address das2b("130.161.211.200:20000");
22 EXPECT_EQ(das2.ipv4(),das2b.ipv4());
23 EXPECT_EQ(20000,das2.port());
27 TEST(Datagram, BinaryTest) {
28 SOCKET socket = Datagram::Bind(7001);
29 ASSERT_TRUE(socket>0);
30 struct sockaddr_in addr;
31 addr.sin_family = AF_INET;
32 addr.sin_port = htons(7001);
33 addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
34 Datagram d(socket,addr); //Address(7001));
35 const char * text = "text";
36 const uint8_t num8 = 0xab;
37 const uint16_t num16 = 0xabcd;
38 const uint32_t num32 = 0xabcdef01;
39 const uint64_t num64 = 0xabcdefabcdeffULL;
47 for(i=0; i<d.size(); i++)
48 sprintf(buf+i*2,"%02x",*(unsigned char*)(*d+i));
50 EXPECT_STREQ("74657874ababcdabcdef01000abcdefabcdeff",buf);
51 int datalen = strlen(text)+1+2+4+8;
52 ASSERT_EQ(datalen,d.Send());
53 SOCKET socks[1] = {socket};
54 // Arno: timeout 0 gives undeterministic behaviour on win32
55 SOCKET waitsocket = Datagram::Wait(1000000);
56 ASSERT_EQ(socket,waitsocket);
57 Datagram rcv(waitsocket);
58 ASSERT_EQ(datalen,rcv.Recv());
60 int pl = rcv.Pull((uint8_t**)&rbuf,strlen(text));
63 uint8_t rnum8 = rcv.Pull8();
64 uint16_t rnum16 = rcv.Pull16();
65 uint32_t rnum32 = rcv.Pull32();
66 uint64_t rnum64 = rcv.Pull64();
67 EXPECT_STREQ("text",buf);
68 EXPECT_EQ(0xab,rnum8);
69 EXPECT_EQ(0xabcd,rnum16);
70 EXPECT_EQ(0xabcdef01,rnum32);
71 EXPECT_EQ(0xabcdefabcdeffULL,rnum64);
72 Datagram::Close(socket);
75 TEST(Datagram,TwoPortTest) {
76 int sock1 = Datagram::Bind(10001);
77 int sock2 = Datagram::Bind(10002);
80 /*struct sockaddr_in addr1, addr2;
81 addr1.sin_family = AF_INET;
82 addr1.sin_port = htons(10001);
83 addr1.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
84 addr2.sin_family = AF_INET;
85 addr2.sin_port = htons(10002);
86 addr2.sin_addr.s_addr = htonl(INADDR_LOOPBACK);*/
88 Datagram send(sock1,Address(10002));
92 SOCKET socks[2] = {sock1,sock2};
93 // Arno: timeout 0 gives undeterministic behaviour on win32
94 EXPECT_EQ(sock2,Datagram::Wait(1000000));
97 uint32_t test = recv.Pull32();
100 Datagram::Close(sock1);
101 Datagram::Close(sock2);
104 int main (int argc, char** argv) {
106 swift::LibraryInit();
108 testing::InitGoogleTest(&argc, argv);
109 return RUN_ALL_TESTS();