diff options
Diffstat (limited to 'src/test/DBusOutputStreamTest.cpp')
-rw-r--r-- | src/test/DBusOutputStreamTest.cpp | 358 |
1 files changed, 203 insertions, 155 deletions
diff --git a/src/test/DBusOutputStreamTest.cpp b/src/test/DBusOutputStreamTest.cpp index 1549101..98d8285 100644 --- a/src/test/DBusOutputStreamTest.cpp +++ b/src/test/DBusOutputStreamTest.cpp @@ -1,19 +1,23 @@ -/* Copyright (C) 2013 BMW Group - * Author: Manfred Bathelt (manfred.bathelt@bmw.de) - * Author: Juergen Gehring (juergen.gehring@bmw.de) - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +// Copyright (C) 2013-2015 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + #include <dbus/dbus.h> #include <gtest/gtest.h> -#include <CommonAPI/DBus/DBusMessage.h> -#include <CommonAPI/DBus/DBusOutputStream.h> -#include <CommonAPI/DBus/DBusInputStream.h> -#include <CommonAPI/SerializableStruct.h> -#include <CommonAPI/SerializableVariant.h> +#ifndef COMMONAPI_INTERNAL_COMPILATION +#define COMMONAPI_INTERNAL_COMPILATION +#endif + +#include <CommonAPI/DBus/DBusAddress.hpp> +#include <CommonAPI/DBus/DBusMessage.hpp> +#include <CommonAPI/DBus/DBusOutputStream.hpp> +#include <CommonAPI/DBus/DBusInputStream.hpp> +#include <CommonAPI/Struct.hpp> +#include <CommonAPI/Variant.hpp> -#include "commonapi/tests/DerivedTypeCollection.h" +#include "commonapi/tests/DerivedTypeCollection.hpp" class OutputStreamTest: public ::testing::Test { protected: @@ -42,10 +46,10 @@ TEST_F(OutputStreamTest, CanBeConstructed) { TEST_F(OutputStreamTest, WritesBytes) { const char signature[] = "yyyyyyyyyy"; - message = CommonAPI::DBus::DBusMessage::createMethodCall(busName, objectPath, interfaceName, methodName, signature); + message = CommonAPI::DBus::DBusMessage::createMethodCall(CommonAPI::DBus::DBusAddress(busName, objectPath, interfaceName), methodName, signature); CommonAPI::DBus::DBusOutputStream outStream(message); - outStream.reserveMemory(numOfElements); + //outStream.reserveMemory(numOfElements); uint8_t val1 = 0xff; uint8_t val2 = 0x00; for (unsigned int i = 0; i < numOfElements; i += 2) { @@ -70,11 +74,11 @@ TEST_F(OutputStreamTest, WritesBytes) { } TEST_F(OutputStreamTest, WritesBools) { - const char signature[] = "bbbbbbbbbb"; - message = CommonAPI::DBus::DBusMessage::createMethodCall(busName, objectPath, interfaceName, methodName, signature); + const char signature[] = "bbbbbbbbbb"; + message = CommonAPI::DBus::DBusMessage::createMethodCall(CommonAPI::DBus::DBusAddress(busName, objectPath, interfaceName), methodName, signature); CommonAPI::DBus::DBusOutputStream outStream(message); - outStream.reserveMemory(numOfElements * 4); + //outStream.reserveMemory(numOfElements * 4); bool val1 = TRUE; bool val2 = FALSE; for (unsigned int i = 0; i < numOfElements; i += 2) { @@ -99,11 +103,11 @@ TEST_F(OutputStreamTest, WritesBools) { } TEST_F(OutputStreamTest, WritesUInt16) { - const char signature[] = "qqqqqqqqqq"; - message = CommonAPI::DBus::DBusMessage::createMethodCall(busName, objectPath, interfaceName, methodName, signature); + const char signature[] = "qqqqqqqqqq"; + message = CommonAPI::DBus::DBusMessage::createMethodCall(CommonAPI::DBus::DBusAddress(busName, objectPath, interfaceName), methodName, signature); CommonAPI::DBus::DBusOutputStream outStream(message); - outStream.reserveMemory(numOfElements * 2); + //outStream.reserveMemory(numOfElements * 2); uint16_t val1 = 0x0000; uint16_t val2 = 0xffff; for (unsigned int i = 0; i < numOfElements; i += 2) { @@ -128,11 +132,11 @@ TEST_F(OutputStreamTest, WritesUInt16) { } TEST_F(OutputStreamTest, WritesInt16) { - const char signature[] = "nnnnnnnnnn"; - message = CommonAPI::DBus::DBusMessage::createMethodCall(busName, objectPath, interfaceName, methodName, signature); + const char signature[] = "nnnnnnnnnn"; + message = CommonAPI::DBus::DBusMessage::createMethodCall(CommonAPI::DBus::DBusAddress(busName, objectPath, interfaceName), methodName, signature); CommonAPI::DBus::DBusOutputStream outStream(message); - outStream.reserveMemory(numOfElements * 2); + //outStream.reserveMemory(numOfElements * 2); int16_t val1 = 0x7fff; int16_t val2 = 0xffff; for (unsigned int i = 0; i < numOfElements; i += 2) { @@ -157,11 +161,11 @@ TEST_F(OutputStreamTest, WritesInt16) { } TEST_F(OutputStreamTest, WritesUInt32) { - const char signature[] = "uuuuuuuuuu"; - message = CommonAPI::DBus::DBusMessage::createMethodCall(busName, objectPath, interfaceName, methodName, signature); + const char signature[] = "uuuuuuuuuu"; + message = CommonAPI::DBus::DBusMessage::createMethodCall(CommonAPI::DBus::DBusAddress(busName, objectPath, interfaceName), methodName, signature); CommonAPI::DBus::DBusOutputStream outStream(message); - outStream.reserveMemory(numOfElements * 4); + //outStream.reserveMemory(numOfElements * 4); uint32_t val1 = 0x00000000; uint32_t val2 = 0xffffffff; for (unsigned int i = 0; i < numOfElements; i += 2) { @@ -186,11 +190,11 @@ TEST_F(OutputStreamTest, WritesUInt32) { } TEST_F(OutputStreamTest, WritesInt32) { - const char signature[] = "iiiiiiiiii"; - message = CommonAPI::DBus::DBusMessage::createMethodCall(busName, objectPath, interfaceName, methodName, signature); + const char signature[] = "iiiiiiiiii"; + message = CommonAPI::DBus::DBusMessage::createMethodCall(CommonAPI::DBus::DBusAddress(busName, objectPath, interfaceName), methodName, signature); CommonAPI::DBus::DBusOutputStream outStream(message); - outStream.reserveMemory(numOfElements * 4); + //outStream.reserveMemory(numOfElements * 4); int32_t val1 = 0x7fffffff; int32_t val2 = 0xffffffff; for (unsigned int i = 0; i < numOfElements; i += 2) { @@ -215,11 +219,11 @@ TEST_F(OutputStreamTest, WritesInt32) { } TEST_F(OutputStreamTest, WritesUInt64) { - const char signature[] = "tttttttttt"; - message = CommonAPI::DBus::DBusMessage::createMethodCall(busName, objectPath, interfaceName, methodName, signature); + const char signature[] = "tttttttttt"; + message = CommonAPI::DBus::DBusMessage::createMethodCall(CommonAPI::DBus::DBusAddress(busName, objectPath, interfaceName), methodName, signature); CommonAPI::DBus::DBusOutputStream outStream(message); - outStream.reserveMemory(numOfElements * 8); + //outStream.reserveMemory(numOfElements * 8); uint64_t val1 = 0x0000000000000000; uint64_t val2 = 0xffffffffffffffff; for (unsigned int i = 0; i < numOfElements; i += 2) { @@ -244,11 +248,11 @@ TEST_F(OutputStreamTest, WritesUInt64) { } TEST_F(OutputStreamTest, WritesInt64) { - const char signature[] = "xxxxxxxxxx"; - message = CommonAPI::DBus::DBusMessage::createMethodCall(busName, objectPath, interfaceName, methodName, signature); + const char signature[] = "xxxxxxxxxx"; + message = CommonAPI::DBus::DBusMessage::createMethodCall(CommonAPI::DBus::DBusAddress(busName, objectPath, interfaceName), methodName, signature); CommonAPI::DBus::DBusOutputStream outStream(message); - outStream.reserveMemory(numOfElements * 8); + //outStream.reserveMemory(numOfElements * 8); int64_t val1 = 0x7fffffffffffffff; int64_t val2 = 0xffffffffffffffff; for (unsigned int i = 0; i < numOfElements; i += 2) { @@ -273,11 +277,11 @@ TEST_F(OutputStreamTest, WritesInt64) { } TEST_F(OutputStreamTest, WritesDouble) { - const char signature[] = "dddddddddd"; - message = CommonAPI::DBus::DBusMessage::createMethodCall(busName, objectPath, interfaceName, methodName, signature); + const char signature[] = "dddddddddd"; + message = CommonAPI::DBus::DBusMessage::createMethodCall(CommonAPI::DBus::DBusAddress(busName, objectPath, interfaceName), methodName, signature); CommonAPI::DBus::DBusOutputStream outStream(message); - outStream.reserveMemory(numOfElements * 8); + //outStream.reserveMemory(numOfElements * 8); double val1 = 13.37; double val2 = 3.414; for (unsigned int i = 0; i < numOfElements; i += 2) { @@ -303,8 +307,8 @@ TEST_F(OutputStreamTest, WritesDouble) { } TEST_F(OutputStreamTest, WritesStrings) { - const char signature[] = "sss"; - message = CommonAPI::DBus::DBusMessage::createMethodCall(busName, objectPath, interfaceName, methodName, signature); + const char signature[] = "sss"; + message = CommonAPI::DBus::DBusMessage::createMethodCall(CommonAPI::DBus::DBusAddress(busName, objectPath, interfaceName), methodName, signature); CommonAPI::DBus::DBusOutputStream outStream(message); std::string val1 = "hai"; @@ -312,7 +316,7 @@ TEST_F(OutputStreamTest, WritesStrings) { std::string val3 = "salut"; //sizes of the strings + terminating null-bytes (each 1 byte) + length-fields (each 4 bytes) - outStream.reserveMemory(val1.size() + val2.size() + val3.size() + 3 + 3 * 4); + //outStream.reserveMemory(val1.size() + val2.size() + val3.size() + 3 + 3 * 4); outStream << val1 << val2 << val3; outStream.flush(); @@ -338,48 +342,65 @@ TEST_F(OutputStreamTest, WritesStrings) { namespace bmw { namespace test { -struct myStruct: CommonAPI::SerializableStruct { +struct myStruct : CommonAPI::Struct<uint32_t, int16_t, bool, std::string, double> { ~myStruct(); - uint32_t a; - int16_t b; - bool c; - std::string d; - double e; - - virtual void readFromInputStream(CommonAPI::InputStream& inputMessageStream); - virtual void writeToOutputStream(CommonAPI::OutputStream& outputMessageStream) const; + virtual uint32_t getA() { return std::get<0>(values_); } + virtual int16_t getB() { return std::get<1>(values_); } + virtual bool getC() { return std::get<2>(values_); } + virtual std::string getD() { return std::get<3>(values_); } + virtual double getE() { return std::get<4>(values_); } + + virtual void* getAderef() { return &std::get<0>(values_); } + virtual void* getBderef() { return &std::get<1>(values_); } + virtual void* getCderef() { return &std::get<2>(values_); } + virtual void* getDderef() { return &std::get<3>(values_); } + virtual void* getEderef() { return &std::get<4>(values_); } + + virtual void setA(uint32_t a) { std::get<0>(values_) = a; } + virtual void setB(int16_t b) { std::get<1>(values_) = b; } + virtual void setC(bool c) { std::get<2>(values_) = c; } + virtual void setD(std::string d) { std::get<3>(values_) = d; } + virtual void setE(double e) { std::get<4>(values_) = e; } + + virtual void readFromInputStream(CommonAPI::InputStream<CommonAPI::DBus::DBusInputStream>& inputStream) { + inputStream >> std::get<0>(values_) >> std::get<1>(values_) >> std::get<2>(values_) >> std::get<3>(values_) >> std::get<4>(values_); + } + + virtual void writeToOutputStream(CommonAPI::OutputStream<CommonAPI::DBus::DBusOutputStream>& outputStream) const { + outputStream << std::get<0>(values_) << std::get<1>(values_) << std::get<2>(values_) << std::get<3>(values_) << std::get<4>(values_); + } + + static void writeToTypeOutputStream(CommonAPI::TypeOutputStream<CommonAPI::DBus::DBusTypeOutputStream>& typeOutputStream) { + //typeOutputStream.writeType(); + //typeOutputStream.writeType(); + //typeOutputStream.writeType(); + //typeOutputStream.writeType(); + //typeOutputStream.writeType(); + } }; myStruct::~myStruct() { } -void myStruct::readFromInputStream(CommonAPI::InputStream& inputMessageStream) { - inputMessageStream >> a >> b >> c >> d >> e; -} - -void myStruct::writeToOutputStream(CommonAPI::OutputStream& outputMessageStream) const { - outputMessageStream << a << b << c << d << e; -} - } //namespace test } //namespace bmw -TEST_F(OutputStreamTest, WritesStructs) { - const char signature[] = "(unbsd)"; - message = CommonAPI::DBus::DBusMessage::createMethodCall(busName, objectPath, interfaceName, methodName, signature); +TEST_F(OutputStreamTest, DISABLED_WritesStructs) { + const char signature[] = "(unbsd)"; + message = CommonAPI::DBus::DBusMessage::createMethodCall(CommonAPI::DBus::DBusAddress(busName, objectPath, interfaceName), methodName, signature); CommonAPI::DBus::DBusOutputStream outStream(message); bmw::test::myStruct testStruct; - testStruct.a = 15; - testStruct.b = -32; - testStruct.c = FALSE; - testStruct.d = "Hello all"; - testStruct.e = 3.414; + testStruct.setA(15); + testStruct.setB(-32); + testStruct.setC(FALSE); + testStruct.setD("Hello all"); + testStruct.setE(3.414); // 40(byte length of struct) = 4(uint32_t) + 2(int16_t) + 2(padding) + 4(bool) + 4(strlength) // + 9(string) + 1(terminating '\0' of string) + 6(padding) + 8 (double) - outStream.reserveMemory(40); + //outStream.reserveMemory(40); outStream << testStruct; outStream.flush(); @@ -389,16 +410,16 @@ TEST_F(OutputStreamTest, WritesStructs) { bmw::test::myStruct verifyStruct; inStream >> verifyStruct; - EXPECT_EQ(testStruct.a, verifyStruct.a); - EXPECT_EQ(testStruct.b, verifyStruct.b); - EXPECT_EQ(testStruct.c, verifyStruct.c); - EXPECT_EQ(testStruct.d, verifyStruct.d); - EXPECT_EQ(testStruct.e, verifyStruct.e); + EXPECT_EQ(testStruct.getA(), verifyStruct.getA()); + EXPECT_EQ(testStruct.getB(), verifyStruct.getB()); + EXPECT_EQ(testStruct.getC(), verifyStruct.getC()); + EXPECT_EQ(testStruct.getD(), verifyStruct.getD()); + EXPECT_EQ(testStruct.getE(), verifyStruct.getE()); } TEST_F(OutputStreamTest, WritesArrays) { - const char signature[] = "ai"; - message = CommonAPI::DBus::DBusMessage::createMethodCall(busName, objectPath, interfaceName, methodName, signature); + const char signature[] = "ai"; + message = CommonAPI::DBus::DBusMessage::createMethodCall(CommonAPI::DBus::DBusAddress(busName, objectPath, interfaceName), methodName, signature); CommonAPI::DBus::DBusOutputStream outStream(message); std::vector<int32_t> testVector; @@ -409,7 +430,7 @@ TEST_F(OutputStreamTest, WritesArrays) { testVector.push_back(val2); } - outStream.reserveMemory(numOfElements * 4 + 4); + //outStream.reserveMemory(numOfElements * 4 + 4); outStream << testVector; outStream.flush(); @@ -430,8 +451,8 @@ TEST_F(OutputStreamTest, WritesArrays) { } TEST_F(OutputStreamTest, WritesArraysOfStrings) { - const char signature[] = "as"; - message = CommonAPI::DBus::DBusMessage::createMethodCall(busName, objectPath, interfaceName, methodName, signature); + const char signature[] = "as"; + message = CommonAPI::DBus::DBusMessage::createMethodCall(CommonAPI::DBus::DBusAddress(busName, objectPath, interfaceName), methodName, signature); CommonAPI::DBus::DBusOutputStream outStream(message); std::vector<std::string> testVector; @@ -446,7 +467,7 @@ TEST_F(OutputStreamTest, WritesArraysOfStrings) { // 4*(4(lengthField1) + 4(string1 mit \0-byte) + 4(lengthField2) + 5(string2 mit \0-byte) + 3(paddingTo4)) + // (4(lengthField1) + 4(string1 mit \0-byte) + 4(lengthField2) + 5(string2 mit \0-byte)) size_t vectorLength = 101; - outStream.reserveMemory(vectorLength); + //outStream.reserveMemory(vectorLength); outStream << testVector; outStream.flush(); @@ -467,8 +488,8 @@ TEST_F(OutputStreamTest, WritesArraysOfStrings) { } TEST_F(OutputStreamTest, WritesArraysInArrays) { - const char signature[] = "aai"; - message = CommonAPI::DBus::DBusMessage::createMethodCall(busName, objectPath, interfaceName, methodName, signature); + const char signature[] = "aai"; + message = CommonAPI::DBus::DBusMessage::createMethodCall(CommonAPI::DBus::DBusAddress(busName, objectPath, interfaceName), methodName, signature); CommonAPI::DBus::DBusOutputStream outStream(message); std::vector<std::vector<int32_t>> testVector; @@ -483,7 +504,7 @@ TEST_F(OutputStreamTest, WritesArraysInArrays) { testVector.push_back(inner); } - outStream.reserveMemory(numOfElements * numOfElements * 4 + numOfElements * 4 + 4); + //outStream.reserveMemory(numOfElements * numOfElements * 4 + numOfElements * 4 + 4); outStream << testVector; outStream.flush(); @@ -508,10 +529,10 @@ TEST_F(OutputStreamTest, WritesArraysInArrays) { typedef CommonAPI::Variant<int8_t, uint32_t, double, std::string> BasicTypeVariant; -TEST_F(OutputStreamTest, WritesArraysOfVariants) { +TEST_F(OutputStreamTest, DISABLED_WritesArraysOfVariants) { numOfElements = 4; - const char signature[] = "(yv)(yv)(yv)(yv)"; - message = CommonAPI::DBus::DBusMessage::createMethodCall(busName, objectPath, interfaceName, methodName, signature); + const char signature[] = "(yv)(yv)(yv)(yv)"; + message = CommonAPI::DBus::DBusMessage::createMethodCall(CommonAPI::DBus::DBusAddress(busName, objectPath, interfaceName), methodName, signature); CommonAPI::DBus::DBusOutputStream outStream(message); int8_t fromInt8Value = 7; @@ -535,15 +556,15 @@ TEST_F(OutputStreamTest, WritesArraysOfVariants) { // + (1(variant type byte) + 3(signature length + content + terminating null) + 8(uint32_t)) // + 4(padding) + (1(variant type byte) + 3(signature length + content + terminating null) + 4(string length field) + 7(string)) // = 55 - outStream.reserveMemory(55); - outStream << testVector; + //outStream.reserveMemory(55); + outStream.writeValue(testVector, static_cast<CommonAPI::EmptyDeployment*>(nullptr)); outStream.flush(); EXPECT_EQ(55, message.getBodyLength()); CommonAPI::DBus::DBusInputStream inStream(message); std::vector<BasicTypeVariant> verifyVector; - inStream >> verifyVector; + inStream.readValue(verifyVector, static_cast<CommonAPI::EmptyDeployment*>(nullptr)); BasicTypeVariant resultInt8Variant = verifyVector[0]; BasicTypeVariant resultUint32Variant = verifyVector[1]; @@ -560,39 +581,50 @@ namespace com { namespace bmw { namespace test { -struct TestStruct: CommonAPI::SerializableStruct { +struct TestStruct : CommonAPI::Struct<int32_t, double, double, std::string> { TestStruct(); TestStruct(int32_t v1, double v2, double v3, std::string v4); ~TestStruct(); - int32_t val1; - double val2; - double val3; - std::string val4; + virtual int32_t getVal1() { return std::get<0>(values_); } + virtual double getVal2() { return std::get<1>(values_); } + virtual double getVal3() { return std::get<2>(values_); } + virtual std::string getVal4() { return std::get<3>(values_); } - virtual void readFromInputStream(CommonAPI::InputStream& inputMessageStream); - virtual void writeToOutputStream(CommonAPI::OutputStream& outputMessageStream) const; + virtual void setVal1(int32_t val1) { std::get<0>(values_) = val1; } + virtual void setVal2(double val2) { std::get<1>(values_) = val2; } + virtual void setVal3(double val3) { std::get<2>(values_) = val3; } + virtual void setVal4(std::string val4) { std::get<3>(values_) = val4; } + + virtual void readFromInputStream(CommonAPI::InputStream<CommonAPI::DBus::DBusInputStream>& inputMessageStream); + virtual void writeToOutputStream(CommonAPI::OutputStream<CommonAPI::DBus::DBusOutputStream>& outputMessageStream) const; }; typedef std::vector<TestStruct> TestStructList; -TestStruct::TestStruct() : - val1(0), val2(0), val3(0), val4("") { +TestStruct::TestStruct() { + std::get<0>(values_) = 0; + std::get<1>(values_) = 0; + std::get<2>(values_) = 0; + std::get<3>(values_) = ""; } -TestStruct::TestStruct(int32_t v1, double v2, double v3, std::string v4) : - val1(v1), val2(v2), val3(v3), val4(v4) { +TestStruct::TestStruct(int32_t v1, double v2, double v3, std::string v4) { + std::get<0>(values_) = v1; + std::get<1>(values_) = v2; + std::get<2>(values_) = v3; + std::get<3>(values_) = v4; } TestStruct::~TestStruct() { } -void TestStruct::readFromInputStream(CommonAPI::InputStream& inputMessageStream) { - inputMessageStream >> val1 >> val2 >> val3 >> val4; +void TestStruct::readFromInputStream(CommonAPI::InputStream<CommonAPI::DBus::DBusInputStream>& inputMessageStream) { + inputMessageStream >> std::get<0>(values_) >> std::get<1>(values_) >> std::get<2>(values_) >> std::get<3>(values_); } -void TestStruct::writeToOutputStream(CommonAPI::OutputStream& outputMessageStream) const { - outputMessageStream << val1 << val2 << val3 << val4; +void TestStruct::writeToOutputStream(CommonAPI::OutputStream<CommonAPI::DBus::DBusOutputStream>& outputMessageStream) const { + outputMessageStream << std::get<0>(values_) << std::get<1>(values_) << std::get<2>(values_) << std::get<3>(values_); } } // namespace test @@ -600,15 +632,15 @@ void TestStruct::writeToOutputStream(CommonAPI::OutputStream& outputMessageStrea } // namespace com TEST_F(OutputStreamTest, WritesTestStructs) { - const char signature[] = "(idds)"; - message = CommonAPI::DBus::DBusMessage::createMethodCall(busName, objectPath, interfaceName, methodName, signature); + const char signature[] = "(idds)"; + message = CommonAPI::DBus::DBusMessage::createMethodCall(CommonAPI::DBus::DBusAddress(busName, objectPath, interfaceName), methodName, signature); CommonAPI::DBus::DBusOutputStream outStream(message); com::bmw::test::TestStruct testStruct(1, 12.6, 1e40, "XXXXXXXXXXXXXXXXXXXX"); //4(int32_t) + 4(padding) + 8(double) + 8(double) + 4(str_length) + 20(string) + 1(null-termination) uint32_t expectedSize = 49; - outStream.reserveMemory(expectedSize); + //outStream.reserveMemory(expectedSize); outStream << testStruct; outStream.flush(); @@ -618,15 +650,15 @@ TEST_F(OutputStreamTest, WritesTestStructs) { com::bmw::test::TestStruct verifyStruct; inStream >> verifyStruct; - EXPECT_EQ(testStruct.val1, verifyStruct.val1); - EXPECT_EQ(testStruct.val2, verifyStruct.val2); - EXPECT_EQ(testStruct.val3, verifyStruct.val3); - EXPECT_EQ(testStruct.val4, verifyStruct.val4); + EXPECT_EQ(testStruct.getVal1(), verifyStruct.getVal1()); + EXPECT_EQ(testStruct.getVal2(), verifyStruct.getVal2()); + EXPECT_EQ(testStruct.getVal3(), verifyStruct.getVal3()); + EXPECT_EQ(testStruct.getVal4(), verifyStruct.getVal4()); } TEST_F(OutputStreamTest, WritesTestStructLists) { - const char signature[] = "a(idds)"; - message = CommonAPI::DBus::DBusMessage::createMethodCall(busName, objectPath, interfaceName, methodName, signature); + const char signature[] = "a(idds)"; + message = CommonAPI::DBus::DBusMessage::createMethodCall(CommonAPI::DBus::DBusAddress(busName, objectPath, interfaceName), methodName, signature); CommonAPI::DBus::DBusOutputStream outStream(message); com::bmw::test::TestStructList testList; @@ -637,7 +669,7 @@ TEST_F(OutputStreamTest, WritesTestStructLists) { //struct size: 49 = 4(int32_t) + 4(padding) + 8(double) + 8(double) + 4(str_length) + 20(string) + 1(null-termination) //array size: 4(array_length) + 4(struct_padding) + (numElements-1)*(49(struct) + 7(struct_padding)) + 49(struct) uint32_t expectedSize = 8 + (numOfElements - 1) * (49 + 7) + 49; - outStream.reserveMemory(expectedSize); + //outStream.reserveMemory(expectedSize); outStream << testList; outStream.flush(); @@ -654,7 +686,7 @@ namespace com { namespace bmw { namespace test { -struct ArrayStruct: CommonAPI::SerializableStruct { +struct ArrayStruct : CommonAPI::Struct<std::vector<int64_t>, std::vector<std::string>, std::vector<double>, std::vector<std::string>, std::vector<uint16_t>> { ArrayStruct(); ArrayStruct(std::vector<int64_t> v1, std::vector<std::string> v2, @@ -663,14 +695,26 @@ struct ArrayStruct: CommonAPI::SerializableStruct { std::vector<uint16_t> v5); ~ArrayStruct(); - std::vector<int64_t> val1; - std::vector<std::string> val2; - std::vector<double> val3; - std::vector<std::string> val4; - std::vector<uint16_t> val5; - - virtual void readFromInputStream(CommonAPI::InputStream& inputMessageStream); - virtual void writeToOutputStream(CommonAPI::OutputStream& outputMessageStream) const; + virtual std::vector<int64_t> getVal1() { return std::get<0>(values_); } + virtual std::vector<std::string> getVal2() { return std::get<1>(values_); } + virtual std::vector<double> getVal3() { return std::get<2>(values_); } + virtual std::vector<std::string> getVal4() { return std::get<3>(values_); } + virtual std::vector<uint16_t> getVal5() { return std::get<4>(values_); } + + virtual void setVal1(std::vector<int64_t> val1) { std::get<0>(values_) = val1; } + virtual void setVal2(std::vector<std::string> val2) { std::get<1>(values_) = val2; } + virtual void setVal3(std::vector<double> val3) { std::get<2>(values_) = val3; } + virtual void setVal4(std::vector<std::string> val4) { std::get<3>(values_) = val4; } + virtual void setVal5(std::vector<uint16_t> val5) { std::get<4>(values_) = val5; } + + virtual void addToVal1(int64_t val1) { std::get<0>(values_).push_back(val1); } + virtual void addToVal2(std::string val2) { std::get<1>(values_).push_back(val2); } + virtual void addToVal3(double val3) { std::get<2>(values_).push_back(val3); } + virtual void addToVal4(std::string val4) { std::get<3>(values_).push_back(val4); } + virtual void addToVal5(uint16_t val5) { std::get<4>(values_).push_back(val5); } + + virtual void readFromInputStream(CommonAPI::InputStream<CommonAPI::DBus::DBusInputStream>& inputMessageStream); + virtual void writeToOutputStream(CommonAPI::OutputStream<CommonAPI::DBus::DBusOutputStream>& outputMessageStream) const; }; typedef std::vector<TestStruct> TestStructList; @@ -682,19 +726,23 @@ ArrayStruct::ArrayStruct(std::vector<int64_t> v1, std::vector<std::string> v2, std::vector<double> v3, std::vector<std::string> v4, - std::vector<uint16_t> v5) : - val1(v1), val2(v2), val3(v3), val4(v4), val5(v5) { + std::vector<uint16_t> v5) { + std::get<0>(values_) = v1; + std::get<1>(values_) = v2; + std::get<2>(values_) = v3; + std::get<3>(values_) = v4; + std::get<4>(values_) = v5; } ArrayStruct::~ArrayStruct() { } -void ArrayStruct::readFromInputStream(CommonAPI::InputStream& inputMessageStream) { - inputMessageStream >> val1 >> val2 >> val3 >> val4 >> val5; +void ArrayStruct::readFromInputStream(CommonAPI::InputStream<CommonAPI::DBus::DBusInputStream>& inputMessageStream) { + inputMessageStream >> std::get<0>(values_) >> std::get<1>(values_) >> std::get<2>(values_) >> std::get<3>(values_) >> std::get<4>(values_); } -void ArrayStruct::writeToOutputStream(CommonAPI::OutputStream& outputMessageStream) const { - outputMessageStream << val1 << val2 << val3 << val4 << val5; +void ArrayStruct::writeToOutputStream(CommonAPI::OutputStream<CommonAPI::DBus::DBusOutputStream>& outputMessageStream) const { + outputMessageStream << std::get<0>(values_) << std::get<1>(values_) << std::get<2>(values_) << std::get<3>(values_) << std::get<4>(values_); } } // namespace test @@ -702,17 +750,17 @@ void ArrayStruct::writeToOutputStream(CommonAPI::OutputStream& outputMessageStre } // namespace com TEST_F(OutputStreamTest, WritesStructsOfArraysWithSthBefore) { - const char signature[] = "(axasadasaq)"; - message = CommonAPI::DBus::DBusMessage::createMethodCall(busName, objectPath, interfaceName, methodName, signature); + const char signature[] = "(axasadasaq)"; + message = CommonAPI::DBus::DBusMessage::createMethodCall(CommonAPI::DBus::DBusAddress(busName, objectPath, interfaceName), methodName, signature); CommonAPI::DBus::DBusOutputStream outStream(message); com::bmw::test::ArrayStruct arrayStruct; for (unsigned int i = 0; i < numOfElements; i++) { - arrayStruct.val1.push_back(i * 50); - arrayStruct.val2.push_back("Hai"); - arrayStruct.val3.push_back(3.414); - arrayStruct.val4.push_back("Ciao"); - arrayStruct.val5.push_back(i * 5); + arrayStruct.addToVal1(i * 50); + arrayStruct.addToVal2("Hai"); + arrayStruct.addToVal3(3.414); + arrayStruct.addToVal4("Ciao"); + arrayStruct.addToVal5(i * 5); } uint16_t frontValue = 0; @@ -723,7 +771,7 @@ TEST_F(OutputStreamTest, WritesStructsOfArraysWithSthBefore) { // 4(LengthField) + 10 * (4(LengthField) + 5("Ciao\0") + 3(padding)) --> 124 --> 388 // 4(LengthField) + 10 * 2(uint16) --> 24 --> 412 size_t structLength = 412; - outStream.reserveMemory(structLength); + //outStream.reserveMemory(structLength); outStream << frontValue << arrayStruct; outStream.flush(); @@ -744,11 +792,11 @@ TEST_F(OutputStreamTest, WritesStructsOfArraysWithSthBefore) { uint16_t res5; for (unsigned int i = 0; i < numOfElements; i++) { - res1 = verifyStruct.val1[i]; - res2 = verifyStruct.val2[i]; - res3 = verifyStruct.val3[i]; - res4 = verifyStruct.val4[i]; - res5 = verifyStruct.val5[i]; + res1 = verifyStruct.getVal1()[i]; + res2 = verifyStruct.getVal2()[i]; + res3 = verifyStruct.getVal3()[i]; + res4 = verifyStruct.getVal4()[i]; + res5 = verifyStruct.getVal5()[i]; EXPECT_EQ(i*50, res1); EXPECT_EQ(std::string("Hai"), res2); @@ -759,15 +807,15 @@ TEST_F(OutputStreamTest, WritesStructsOfArraysWithSthBefore) { } TEST_F(OutputStreamTest, WritesEnumKeyedMaps) { - commonapi::tests::DerivedTypeCollection::TestEnumMap testEnumMap; - - commonapi::tests::DerivedTypeCollection::TestEnum key1 = - commonapi::tests::DerivedTypeCollection::TestEnum::E_NOT_USED; - commonapi::tests::DerivedTypeCollection::TestEnum key2 = commonapi::tests::DerivedTypeCollection::TestEnum::E_OK; - commonapi::tests::DerivedTypeCollection::TestEnum key3 = - commonapi::tests::DerivedTypeCollection::TestEnum::E_OUT_OF_RANGE; - commonapi::tests::DerivedTypeCollection::TestEnum key4 = - commonapi::tests::DerivedTypeCollection::TestEnum::E_UNKNOWN; + ::commonapi::tests::DerivedTypeCollection::TestEnumMap testEnumMap; + + ::commonapi::tests::DerivedTypeCollection::TestEnum key1 = + ::commonapi::tests::DerivedTypeCollection::TestEnum::E_NOT_USED; + ::commonapi::tests::DerivedTypeCollection::TestEnum key2 = ::commonapi::tests::DerivedTypeCollection::TestEnum::E_OK; + ::commonapi::tests::DerivedTypeCollection::TestEnum key3 = + ::commonapi::tests::DerivedTypeCollection::TestEnum::E_OUT_OF_RANGE; + ::commonapi::tests::DerivedTypeCollection::TestEnum key4 = + ::commonapi::tests::DerivedTypeCollection::TestEnum::E_UNKNOWN; std::string val = "Hai"; testEnumMap.insert( {key1, val}); @@ -775,14 +823,14 @@ TEST_F(OutputStreamTest, WritesEnumKeyedMaps) { testEnumMap.insert( {key3, val}); testEnumMap.insert( {key4, val}); - const char signature[] = "a{is}"; - message = CommonAPI::DBus::DBusMessage::createMethodCall(busName, objectPath, interfaceName, methodName, signature); + const char signature[] = "a{is}"; + message = CommonAPI::DBus::DBusMessage::createMethodCall(CommonAPI::DBus::DBusAddress(busName, objectPath, interfaceName), methodName, signature); CommonAPI::DBus::DBusOutputStream outStream(message); //array length (4) + struct-padding (4) + // 3 * (sizeof(int) + sizeof(string) + struct-padding) + (sizeof(int) + sizeof(string)) size_t sizeOfBody = 4 + 4 + 3 * (4 + 8 + 4) + (4 + 8); - outStream.reserveMemory(sizeOfBody); + //outStream.reserveMemory(sizeOfBody); outStream << testEnumMap; outStream.flush(); @@ -790,7 +838,7 @@ TEST_F(OutputStreamTest, WritesEnumKeyedMaps) { CommonAPI::DBus::DBusInputStream inStream(message); - commonapi::tests::DerivedTypeCollection::TestEnumMap verificationMap; + ::commonapi::tests::DerivedTypeCollection::TestEnumMap verificationMap; inStream >> verificationMap; for (auto it = verificationMap.begin(); it != verificationMap.end(); ++it) { @@ -798,9 +846,9 @@ TEST_F(OutputStreamTest, WritesEnumKeyedMaps) { } } -#ifndef WIN32 +#ifndef __NO_MAIN__ int main(int argc, char** argv) { ::testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); } -#endif
\ No newline at end of file +#endif |