ported GoogleTests to EPICS Test Harness

This commit is contained in:
Matej Sekoranja
2013-06-11 09:20:21 +02:00
parent 9c23391444
commit d0c5e1f604
9 changed files with 231 additions and 270 deletions
+16 -10
View File
@@ -2,17 +2,23 @@ TOP=../..
include $(TOP)/configure/CONFIG
ifdef GTEST
PROD_HOST += testUtils
testUtils_SRCS += hexDumpTest.cpp
testUtils_SRCS += inetAddressUtilsTest.cpp
PROD_LIBS += pvAccess pvData pvMB Com
TESTPROD += testAtomicBoolean
testAtomicBoolean_SRCS = testAtomicBoolean.cpp
TESTS += testAtomicBoolean
TESTPROD += testHexDump
testHexDump = testHexDump.cpp
TESTS += testHexDump
TESTPROD += testInetAddressUtils
testInetAddressUtils = testInetAddressUtils.cpp
# Avoid errors from inlined htonl() etc. used as template argument
inetAddressUtilsTest_CXXFLAGS = -O0
testUtils_SRCS += atomicBooleanTest.cpp
testUtils_LIBS += pvAccess pvData pvMB Com gtest_main
gtest_main_DIR = $(GTEST)/lib
testUtils_SYS_LIBS += pthread
endif
testInetAddressUtils_CXXFLAGS = -O0
TESTS += testInetAddressUtils
TESTSCRIPTS_HOST += $(TESTS:%=%.t)
#PROD_HOST += loggerTest
#loggerTest_SRCS += loggerTest.cpp
-16
View File
@@ -1,16 +0,0 @@
#include <gtest/gtest.h>
#include <remote.h>
using namespace epics::pvAccess;
TEST(atomicBooleanTest, atomicBoolean)
{
AtomicBoolean ab;
EXPECT_FALSE(ab.get());
ab.set();
EXPECT_TRUE(ab.get());
ab.clear();
EXPECT_FALSE(ab.get());
}
-15
View File
@@ -1,15 +0,0 @@
#include <gtest/gtest.h>
#include <pv/hexDump.h>
using namespace epics::pvData;
using namespace epics::pvAccess;
TEST(hexDumpTest, hexDump)
{
char TO_DUMP[] = "pvAccess dump test\0\1\2\3\4\5\6\254\255\256";
EXPECT_NO_THROW(hexDump("test", (int8*)TO_DUMP, 18+9));
EXPECT_NO_THROW(hexDump("only text", (int8*)TO_DUMP, 18));
EXPECT_NO_THROW(hexDump("22 byte test", (int8*)TO_DUMP, 22));
}
-137
View File
@@ -1,137 +0,0 @@
#include <gtest/gtest.h>
#include <pv/inetAddressUtil.h>
#include <pv/logger.h>
#include <pv/byteBuffer.h>
#include <pv/pvType.h>
#include <epicsAssert.h>
#include <osiSock.h>
#include <iostream>
#include <cstring>
using namespace epics::pvData;
using namespace epics::pvAccess;
using namespace std;
TEST(inetAddressUtils, getSocketAddressList)
{
auto_ptr<InetAddrVector> vec(getSocketAddressList("127.0.0.1 10.10.12.11:1234 192.168.3.4", 555));
ASSERT_EQ(static_cast<size_t>(3), vec->size());
osiSockAddr addr;
addr = vec->at(0);
EXPECT_EQ(AF_INET, addr.ia.sin_family);
EXPECT_EQ(htons(555), addr.ia.sin_port);
EXPECT_EQ(htonl(0x7F000001), addr.ia.sin_addr.s_addr);
EXPECT_EQ("127.0.0.1:555", inetAddressToString(addr));
addr = vec->at(1);
EXPECT_EQ(AF_INET, addr.ia.sin_family);
EXPECT_EQ(htons(1234), addr.ia.sin_port);
EXPECT_EQ(htonl(0x0A0A0C0B), addr.ia.sin_addr.s_addr);
EXPECT_EQ("10.10.12.11:1234", inetAddressToString(addr));
addr = vec->at(2);
EXPECT_EQ(AF_INET, addr.ia.sin_family);
EXPECT_EQ(htons(555), addr.ia.sin_port);
EXPECT_EQ(htonl(0xC0A80304), addr.ia.sin_addr.s_addr);
EXPECT_EQ("192.168.3.4:555", inetAddressToString(addr));
auto_ptr<InetAddrVector> vec1(getSocketAddressList("172.16.55.160", 6789, vec.get()));
ASSERT_EQ(static_cast<size_t>(4), vec1->size());
addr = vec1->at(0);
EXPECT_EQ(AF_INET, addr.ia.sin_family);
EXPECT_EQ(htons(6789), addr.ia.sin_port);
EXPECT_EQ(htonl(0xAC1037A0), addr.ia.sin_addr.s_addr);
EXPECT_EQ("172.16.55.160:6789", inetAddressToString(addr));
addr = vec1->at(1);
EXPECT_EQ(AF_INET, addr.ia.sin_family);
EXPECT_EQ(htons(555), addr.ia.sin_port);
EXPECT_EQ(htonl(0x7F000001), addr.ia.sin_addr.s_addr);
EXPECT_EQ("127.0.0.1:555", inetAddressToString(addr));
addr = vec1->at(2);
EXPECT_EQ(AF_INET, addr.ia.sin_family);
EXPECT_EQ(htons(1234), addr.ia.sin_port);
EXPECT_EQ(htonl(0x0A0A0C0B), addr.ia.sin_addr.s_addr);
EXPECT_EQ("10.10.12.11:1234", inetAddressToString(addr));
addr = vec1->at(3);
EXPECT_EQ(AF_INET, addr.ia.sin_family);
EXPECT_EQ(htons(555), addr.ia.sin_port);
EXPECT_EQ(htonl(0xC0A80304), addr.ia.sin_addr.s_addr);
EXPECT_EQ("192.168.3.4:555", inetAddressToString(addr));
}
TEST(inetAddressUtils, ipv4AddressToInt)
{
auto_ptr<InetAddrVector> vec(getSocketAddressList("127.0.0.1 10.10.12.11:1234 192.168.3.4", 555));
ASSERT_EQ(static_cast<size_t>(3), vec->size());
EXPECT_EQ((int32)0x7F000001, ipv4AddressToInt((vec->at(0))));
EXPECT_EQ((int32)0x0A0A0C0B, ipv4AddressToInt((vec->at(1))));
EXPECT_EQ((int32)0xC0A80304, ipv4AddressToInt((vec->at(2))));
}
TEST(inetAddressUtils, intToIPv4Address)
{
auto_ptr<osiSockAddr> paddr(intToIPv4Address(0x7F000001));
ASSERT_NE((uintptr_t)0, (uintptr_t)paddr.get());
EXPECT_EQ(AF_INET, paddr->ia.sin_family);
EXPECT_EQ("127.0.0.1:0", inetAddressToString(*paddr.get()));
paddr.reset(intToIPv4Address(0x0A0A0C0B));
ASSERT_NE((uintptr_t)0, (uintptr_t)paddr.get());
EXPECT_EQ(AF_INET, paddr->ia.sin_family);
EXPECT_EQ("10.10.12.11:0", inetAddressToString(*paddr.get()));
}
TEST(inetAddressUtils, encodeAsIPv6Address)
{
auto_ptr<ByteBuffer> buff(new ByteBuffer(32, EPICS_ENDIAN_LITTLE));
char src[] = { (char)0, (char)0, (char)0, (char)0, (char)0, (char)0,
(char)0, (char)0, (char)0, (char)0, (char)0xFF, (char)0xFF,
(char)0x0A, (char)0x0A, (char)0x0C, (char)0x0B };
auto_ptr<osiSockAddr> paddr(intToIPv4Address(0x0A0A0C0B));
ASSERT_NE((uintptr_t)0, (uintptr_t)paddr.get());
osiSockAddr addr = *paddr;
encodeAsIPv6Address(buff.get(), &addr);
ASSERT_EQ(static_cast<size_t>(16), buff->getPosition());
EXPECT_TRUE(strncmp(buff->getArray(), src, 16)==0);
}
TEST(inetAddressUtils, getBroadcastAddresses)
{
osiSockAttach();
SOCKET socket = epicsSocketCreate(AF_INET, SOCK_STREAM, IPPROTO_TCP);
auto_ptr<InetAddrVector> broadcasts(getBroadcastAddresses(socket,6678));
// at least one is expected
ASSERT_LT(static_cast<size_t>(0), broadcasts->size());
epicsSocketDestroy(socket);
// debug
for(size_t i = 0; i<broadcasts->size(); i++) {
cout<<"\t"<<inetAddressToString(broadcasts->at(i))<<endl;
}
}
+26
View File
@@ -0,0 +1,26 @@
#include <epicsUnitTest.h>
#include <testMain.h>
#include <pv/remote.h>
using namespace epics::pvAccess;
MAIN(testAtomicBoolean)
{
testPlan(5);
testDiag("Tests for AtomicBoolean");
AtomicBoolean ab;
testOk(ab.get() == false, "Initial state");
ab.set();
testOk(ab.get() == true, "Set to true");
ab.set();
testOk(ab.get() == true, "Set to true (again)");
ab.clear();
testOk(ab.get() == false, "Set to false");
ab.clear();
testOk(ab.get() == false, "Set to again");
return testDone();
}
+26
View File
@@ -0,0 +1,26 @@
#include <epicsUnitTest.h>
#include <testMain.h>
#include <pv/hexDump.h>
using namespace epics::pvData;
using namespace epics::pvAccess;
MAIN(testHexDump)
{
testPlan(3);
testDiag("Tests for hexDump");
char TO_DUMP[] = "pvAccess dump test\0\1\2\3\4\5\6\254\255\256";
hexDump("test", (int8*)TO_DUMP, 18+9);
testPass("Entire array");
hexDump("only text", (int8*)TO_DUMP, 18);
testPass("Only text");
hexDump("22 byte test", (int8*)TO_DUMP, 22);
testPass("22 bytes test");
return testDone();
}
+159
View File
@@ -0,0 +1,159 @@
#include <epicsUnitTest.h>
#include <testMain.h>
#include <pv/inetAddressUtil.h>
#include <pv/logger.h>
#include <pv/byteBuffer.h>
#include <pv/pvType.h>
#include <epicsAssert.h>
#include <osiSock.h>
#include <iostream>
#include <cstring>
using namespace epics::pvData;
using namespace epics::pvAccess;
using namespace std;
void test_getSocketAddressList()
{
testDiag("Test getSocketAddressList()");
auto_ptr<InetAddrVector> vec(getSocketAddressList("127.0.0.1 10.10.12.11:1234 192.168.3.4", 555));
testOk1(static_cast<size_t>(3) == vec->size());
osiSockAddr addr;
addr = vec->at(0);
testOk1(AF_INET == addr.ia.sin_family);
testOk1(htons(555) == addr.ia.sin_port);
testOk1(htonl(0x7F000001) == addr.ia.sin_addr.s_addr);
testOk1("127.0.0.1:555" == inetAddressToString(addr));
addr = vec->at(1);
testOk1(AF_INET == addr.ia.sin_family);
testOk1(htons(1234) == addr.ia.sin_port);
testOk1(htonl(0x0A0A0C0B) == addr.ia.sin_addr.s_addr);
testOk1("10.10.12.11:1234" == inetAddressToString(addr));
addr = vec->at(2);
testOk1(AF_INET == addr.ia.sin_family);
testOk1(htons(555) == addr.ia.sin_port);
testOk1(htonl(0xC0A80304) == addr.ia.sin_addr.s_addr);
testOk1("192.168.3.4:555" == inetAddressToString(addr));
auto_ptr<InetAddrVector> vec1(getSocketAddressList("172.16.55.160", 6789, vec.get()));
testOk1(static_cast<size_t>(4) == vec1->size());
addr = vec1->at(0);
testOk1(AF_INET == addr.ia.sin_family);
testOk1(htons(6789) == addr.ia.sin_port);
testOk1(htonl(0xAC1037A0) == addr.ia.sin_addr.s_addr);
testOk1("172.16.55.160:6789" == inetAddressToString(addr));
addr = vec1->at(1);
testOk1(AF_INET == addr.ia.sin_family);
testOk1(htons(555) == addr.ia.sin_port);
testOk1(htonl(0x7F000001) == addr.ia.sin_addr.s_addr);
testOk1("127.0.0.1:555" == inetAddressToString(addr));
addr = vec1->at(2);
testOk1(AF_INET == addr.ia.sin_family);
testOk1(htons(1234) == addr.ia.sin_port);
testOk1(htonl(0x0A0A0C0B) == addr.ia.sin_addr.s_addr);
testOk1("10.10.12.11:1234" == inetAddressToString(addr));
addr = vec1->at(3);
testOk1(AF_INET == addr.ia.sin_family);
testOk1(htons(555) == addr.ia.sin_port);
testOk1(htonl(0xC0A80304) == addr.ia.sin_addr.s_addr);
testOk1("192.168.3.4:555" == inetAddressToString(addr));
}
void test_ipv4AddressToInt()
{
testDiag("Test ipv4AddressToInt()");
auto_ptr<InetAddrVector> vec(getSocketAddressList("127.0.0.1 10.10.12.11:1234 192.168.3.4", 555));
testOk1(static_cast<size_t>(3) == vec->size());
testOk1((int32)0x7F000001 == ipv4AddressToInt((vec->at(0))));
testOk1((int32)0x0A0A0C0B == ipv4AddressToInt((vec->at(1))));
testOk1((int32)0xC0A80304 == ipv4AddressToInt((vec->at(2))));
}
void test_intToIPv4Address()
{
testDiag("Test intToIPv4Address()");
auto_ptr<osiSockAddr> paddr(intToIPv4Address(0x7F000001));
testOk1((uintptr_t)0 != (uintptr_t)paddr.get());
testOk1(AF_INET == paddr->ia.sin_family);
testOk1("127.0.0.1:0" == inetAddressToString(*paddr.get()));
paddr.reset(intToIPv4Address(0x0A0A0C0B));
testOk1((uintptr_t)0 != (uintptr_t)paddr.get());
testOk1(AF_INET == paddr->ia.sin_family);
testOk1("10.10.12.11:0" == inetAddressToString(*paddr.get()));
}
void test_encodeAsIPv6Address()
{
testDiag("Test encodeAsIPv6Address()");
auto_ptr<ByteBuffer> buff(new ByteBuffer(32, EPICS_ENDIAN_LITTLE));
char src[] = { (char)0, (char)0, (char)0, (char)0, (char)0, (char)0,
(char)0, (char)0, (char)0, (char)0, (char)0xFF, (char)0xFF,
(char)0x0A, (char)0x0A, (char)0x0C, (char)0x0B };
auto_ptr<osiSockAddr> paddr(intToIPv4Address(0x0A0A0C0B));
testOk1((uintptr_t)0 != (uintptr_t)paddr.get());
osiSockAddr addr = *paddr;
encodeAsIPv6Address(buff.get(), &addr);
testOk1(static_cast<size_t>(16) == buff->getPosition());
testOk1(strncmp(buff->getArray(), src, 16) == 0);
}
void test_getBroadcastAddresses()
{
testDiag("Test getBroadcastAddresses()");
osiSockAttach();
SOCKET socket = epicsSocketCreate(AF_INET, SOCK_STREAM, IPPROTO_TCP);
auto_ptr<InetAddrVector> broadcasts(getBroadcastAddresses(socket, 6678));
// at least one is expected
testOk1(static_cast<size_t>(0) < broadcasts->size());
epicsSocketDestroy(socket);
// debug
for(size_t i = 0; i<broadcasts->size(); i++) {
testDiag(inetAddressToString(broadcasts->at(i)).c_str());
}
}
MAIN(testInetAddressUtils)
{
testPlan(44);
testDiag("Tests for InetAddress utils");
test_getSocketAddressList();
test_ipv4AddressToInt();
test_intToIPv4Address();
test_encodeAsIPv6Address();
test_getBroadcastAddresses();
return testDone();
}