diff options
Diffstat (limited to 'src/components/utils/test')
-rw-r--r-- | src/components/utils/test/async_runner_test.cc | 10 | ||||
-rw-r--r-- | src/components/utils/test/conditional_variable_test.cc | 9 | ||||
-rw-r--r-- | src/components/utils/test/data_accessor_test.cc | 36 | ||||
-rw-r--r-- | src/components/utils/test/date_time_test.cc | 331 | ||||
-rw-r--r-- | src/components/utils/test/file_system_test.cc | 11 | ||||
-rw-r--r-- | src/components/utils/test/include/utils/mock_signals_posix.h (renamed from src/components/utils/test/atomic_object_test.cc) | 54 | ||||
-rw-r--r-- | src/components/utils/test/lock_boost_test.cc (renamed from src/components/utils/test/lock_posix_test.cc) | 36 | ||||
-rw-r--r-- | src/components/utils/test/log_message_loop_thread_test.cc | 2 | ||||
-rw-r--r-- | src/components/utils/test/message_queue_test.cc | 3 | ||||
-rw-r--r-- | src/components/utils/test/messagemeter_test.cc | 42 | ||||
-rw-r--r-- | src/components/utils/test/mock_signals_posix.cc | 76 | ||||
-rw-r--r-- | src/components/utils/test/shared_ptr_test.cc | 542 |
12 files changed, 292 insertions, 860 deletions
diff --git a/src/components/utils/test/async_runner_test.cc b/src/components/utils/test/async_runner_test.cc index 65abad65c2..f01dad8d58 100644 --- a/src/components/utils/test/async_runner_test.cc +++ b/src/components/utils/test/async_runner_test.cc @@ -36,8 +36,6 @@ #include "utils/lock.h" #include "utils/threads/async_runner.h" #include "utils/conditional_variable.h" -#include "utils/shared_ptr.h" -#include "utils/make_shared.h" #include "gtest/gtest.h" #include "gmock/gmock.h" @@ -92,7 +90,7 @@ class AsyncRunnerTest : public ::testing::Test { protected: ThreadDelegate** delegates_; - ::utils::SharedPtr<AsyncRunner> async_runner_; + std::shared_ptr<AsyncRunner> async_runner_; void CreateThreadsArray() { delegates_ = new ThreadDelegate* [kDelegatesAmount]; @@ -103,7 +101,7 @@ class AsyncRunnerTest : public ::testing::Test { } void CreateAsyncRunner() { - async_runner_ = ::utils::MakeShared<AsyncRunner>("test"); + async_runner_ = std::make_shared<AsyncRunner>("test"); } }; @@ -128,8 +126,8 @@ TEST_F(AsyncRunnerTest, StopThenRun_ExpectDelegateNotStarted) { // Check that delegate was not started due to Stop() called before AsyncRun() EXPECT_CALL(mock_thread_delegate, threadMain()).Times(0); { - ::utils::SharedPtr<AsyncRunner> async_runner = - ::utils::MakeShared<AsyncRunner>("test"); + std::shared_ptr<AsyncRunner> async_runner = + std::make_shared<AsyncRunner>("test"); async_runner->Stop(); async_runner->AsyncRun(&mock_thread_delegate); } diff --git a/src/components/utils/test/conditional_variable_test.cc b/src/components/utils/test/conditional_variable_test.cc index 524d53cafa..1ef29685e6 100644 --- a/src/components/utils/test/conditional_variable_test.cc +++ b/src/components/utils/test/conditional_variable_test.cc @@ -30,14 +30,14 @@ * POSSIBILITY OF SUCH DAMAGE. */ -#include <iostream> #include <pthread.h> +#include <iostream> #include "gtest/gtest.h" +#include "utils/conditional_variable.h" #include "utils/lock.h" #include "utils/macro.h" -#include "utils/conditional_variable.h" namespace test { namespace components { @@ -61,8 +61,8 @@ class ConditionalVariableTest : public ::testing::Test { protected: std::string test_value_; - sync_primitives::ConditionalVariable cond_var_; sync_primitives::Lock test_mutex_; + sync_primitives::ConditionalVariable cond_var_; unsigned counter_; }; @@ -102,6 +102,7 @@ TEST_F(ConditionalVariableTest, cond_var_.WaitFor(test_lock, 2000); std::string last_value("changed again by thread 1"); EXPECT_EQ(last_value, test_value_); + pthread_join(thread1, NULL); } TEST_F(ConditionalVariableTest, @@ -116,6 +117,8 @@ TEST_F(ConditionalVariableTest, ASSERT_FALSE(thread_created) << "thread2 is not created!"; check_counter(); EXPECT_EQ(2u, counter_); + pthread_join(thread1, NULL); + pthread_join(thread2, NULL); } TEST_F( diff --git a/src/components/utils/test/data_accessor_test.cc b/src/components/utils/test/data_accessor_test.cc index c7c728b676..24b7bab282 100644 --- a/src/components/utils/test/data_accessor_test.cc +++ b/src/components/utils/test/data_accessor_test.cc @@ -41,7 +41,8 @@ namespace utils_test { TEST(DataAccessorTest, CreateDataAccessor) { // arrange int test_value = 10; - sync_primitives::Lock testSet_lock_; + std::shared_ptr<sync_primitives::Lock> testSet_lock_ = + std::make_shared<sync_primitives::Lock>(); DataAccessor<int> testdata(test_value, testSet_lock_); int data_from_testdata = testdata.GetData(); @@ -52,17 +53,19 @@ TEST(DataAccessorTest, CreateDataAccessor) { TEST(DataAccessorTest, CreateDataAccessor_MutexIsLocked_CannotLockItAgain) { // arrange int test_value = 10; - sync_primitives::Lock testSet_lock_; + std::shared_ptr<sync_primitives::Lock> testSet_lock_ = + std::make_shared<sync_primitives::Lock>(); DataAccessor<int> testdata(test_value, testSet_lock_); // assert - EXPECT_FALSE(testSet_lock_.Try()); + EXPECT_FALSE(testSet_lock_->Try()); } TEST(DataAccessorTest, CopyDataAccessor_GetDataFromDataAccessors) { // arrange int test_value = 10; - sync_primitives::Lock testSet_lock_; + std::shared_ptr<sync_primitives::Lock> testSet_lock_ = + std::make_shared<sync_primitives::Lock>(); DataAccessor<int> testdata(test_value, testSet_lock_); DataAccessor<int> testdata_copy(testdata); @@ -72,14 +75,15 @@ TEST(DataAccessorTest, CopyDataAccessor_GetDataFromDataAccessors) { // assert EXPECT_EQ(data_from_testdata, data_from_testdata_copy); - EXPECT_FALSE(testSet_lock_.Try()); + EXPECT_FALSE(testSet_lock_->Try()); } TEST(DataAccessorTest, ChangedDataInDataAccessor_ChangeData_DataInDataAccessorIsChanged) { // arrange int test_value = 10; - sync_primitives::Lock testSet_lock_; + std::shared_ptr<sync_primitives::Lock> testSet_lock_ = + std::make_shared<sync_primitives::Lock>(); DataAccessor<int> testdata(test_value, testSet_lock_); test_value = 0; @@ -93,40 +97,42 @@ TEST(DataAccessorTest, DeleteDataAccessor_CreatedOneDeleteOneThread_MutexIsUnlocked) { // arrange int test_value = 10; - sync_primitives::Lock testSet_lock_; + std::shared_ptr<sync_primitives::Lock> testSet_lock_ = + std::make_shared<sync_primitives::Lock>(); { DataAccessor<int> testdata(test_value, testSet_lock_); // assert - EXPECT_FALSE(testSet_lock_.Try()); + EXPECT_FALSE(testSet_lock_->Try()); } // assert - EXPECT_TRUE(testSet_lock_.Try()); + EXPECT_TRUE(testSet_lock_->Try()); - testSet_lock_.Release(); + testSet_lock_->Release(); } TEST(DataAccessorTest, DeleteDataAccessor_CreatedThreadAndCopyDeleteBothThreads_MutexIsUnlocked) { // arrange int test_value = 10; - sync_primitives::Lock testSet_lock_; + std::shared_ptr<sync_primitives::Lock> testSet_lock_ = + std::make_shared<sync_primitives::Lock>(); { DataAccessor<int> testdata(test_value, testSet_lock_); { DataAccessor<int> testdata_copy(testdata); // assert - EXPECT_FALSE(testSet_lock_.Try()); + EXPECT_FALSE(testSet_lock_->Try()); } // assert - EXPECT_FALSE(testSet_lock_.Try()); + EXPECT_FALSE(testSet_lock_->Try()); } // assert - EXPECT_TRUE(testSet_lock_.Try()); - testSet_lock_.Release(); + EXPECT_TRUE(testSet_lock_->Try()); + testSet_lock_->Release(); } } // namespace utils_test diff --git a/src/components/utils/test/date_time_test.cc b/src/components/utils/test/date_time_test.cc index a209ab4d43..00085813aa 100644 --- a/src/components/utils/test/date_time_test.cc +++ b/src/components/utils/test/date_time_test.cc @@ -30,6 +30,7 @@ * POSSIBILITY OF SUCH DAMAGE. */ +#include <boost/thread/thread.hpp> #include "gtest/gtest.h" #include "utils/date_time.h" @@ -38,364 +39,270 @@ namespace components { namespace utils_test { using namespace date_time; + +namespace bpt = boost::posix_time; TEST(DateTimeTest, GetCurrentTime) { // arrange - const TimevalStruct time1 = date_time::DateTime::getCurrentTime(); + const date_time::TimeDuration time1 = getCurrentTime(); // assert - ASSERT_NE(0, time1.tv_sec); - ASSERT_GE(time1.tv_usec, 0); + ASSERT_NE(0, time1.total_seconds()); + ASSERT_GE(get_just_uSecs(time1), 0); // act - const TimevalStruct time2 = date_time::DateTime::getCurrentTime(); + const date_time::TimeDuration time2 = getCurrentTime(); // assert - ASSERT_NE(0, time2.tv_sec); - ASSERT_GE(time2.tv_usec, 0); - ASSERT_GE(time2.tv_sec, time1.tv_sec); + ASSERT_NE(0, time2.total_seconds()); + ASSERT_GE(get_just_uSecs(time1), 0); + ASSERT_GE(time2.total_seconds(), time1.total_seconds()); } TEST(DateTimeTest, GetSecs) { // arrange - TimevalStruct time; - time.tv_sec = 1; - time.tv_usec = 2 * date_time::DateTime::MICROSECONDS_IN_MILLISECOND; + date_time::TimeDuration time1 = bpt::seconds(1) + bpt::milliseconds(2); // assert - ASSERT_EQ(1, date_time::DateTime::getSecs(time)); + ASSERT_EQ(1, getSecs(time1)); } TEST(DateTimeTest, GetmSecs) { // arrange - TimevalStruct time; - time.tv_sec = 1; - time.tv_usec = 2 * date_time::DateTime::MICROSECONDS_IN_MILLISECOND; + date_time::TimeDuration time1 = bpt::seconds(1) + bpt::milliseconds(2); + int expected = 1 * MILLISECONDS_IN_SECOND + 2; - int64_t expect_value = - time.tv_sec * date_time::DateTime::MILLISECONDS_IN_SECOND + - time.tv_usec / date_time::DateTime::MICROSECONDS_IN_MILLISECOND; // assert - ASSERT_EQ(expect_value, date_time::DateTime::getmSecs(time)); + ASSERT_EQ(expected, getmSecs(time1)); } TEST(DateTimeTest, GetuSecs) { // arrange - TimevalStruct time; - time.tv_sec = 3; - time.tv_usec = 4; - - int64_t expect_value = time.tv_sec * - date_time::DateTime::MILLISECONDS_IN_SECOND * - date_time::DateTime::MICROSECONDS_IN_MILLISECOND + - time.tv_usec; + date_time::TimeDuration time1 = bpt::seconds(3) + bpt::microseconds(4); + int expect_value = + 3 * MILLISECONDS_IN_SECOND * MICROSECONDS_IN_MILLISECOND + 4; + // assert - ASSERT_EQ(expect_value, date_time::DateTime::getuSecs(time)); + ASSERT_EQ(expect_value, getuSecs(time1)); } TEST(DateTimeTest, GetuSecsmSecs) { // arrange - TimevalStruct time; - time.tv_sec = 5; - time.tv_usec = 6; + date_time::TimeDuration time1 = bpt::seconds(5) + bpt::microseconds(6); - int64_t expect_value = date_time::DateTime::getuSecs(time) / - date_time::DateTime::MICROSECONDS_IN_MILLISECOND; + int64_t expect_value = getuSecs(time1) / MICROSECONDS_IN_MILLISECOND; // assert - ASSERT_EQ(expect_value, date_time::DateTime::getmSecs(time)); + ASSERT_EQ(expect_value, getmSecs(time1)); } TEST(DateTimeTest, CalculateTimeSpan) { // arrange - const TimevalStruct time = date_time::DateTime::getCurrentTime(); + const date_time::TimeDuration time1 = getCurrentTime(); const uint32_t sleep_time_mSec = 10; - usleep(sleep_time_mSec * date_time::DateTime::MICROSECONDS_IN_MILLISECOND); + // sleep current thread + boost::this_thread::sleep(boost::posix_time::milliseconds(sleep_time_mSec)); // assert - ASSERT_GE(date_time::DateTime::calculateTimeSpan(time), sleep_time_mSec); + ASSERT_GE(calculateTimeSpan(time1), sleep_time_mSec); } TEST(DateTimeTest, CalculateTimeDiff) { // arrange - TimevalStruct time1; - time1.tv_sec = 1; - time1.tv_usec = 2 * date_time::DateTime::MICROSECONDS_IN_MILLISECOND; - TimevalStruct time2; - time2.tv_sec = 3; - time2.tv_usec = 4 * date_time::DateTime::MICROSECONDS_IN_MILLISECOND; + date_time::TimeDuration time1 = bpt::seconds(2) + bpt::milliseconds(2); + date_time::TimeDuration time2 = bpt::seconds(3) + bpt::milliseconds(4); // time2 to time1 - TimevalStruct diff1; - diff1.tv_sec = time2.tv_sec - time1.tv_sec; - diff1.tv_usec = time2.tv_usec - time1.tv_usec; - - const int64_t mSecDiff = - static_cast<int64_t>(diff1.tv_sec) * 1000 + diff1.tv_usec / 1000; + date_time::TimeDuration diff1 = bpt::seconds(1) + bpt::milliseconds(2); // assert - ASSERT_EQ(mSecDiff, date_time::DateTime::calculateTimeDiff(time2, time1)); + ASSERT_EQ(diff1.total_milliseconds(), calculateTimeDiff(time2, time1)); - // time1 to time2 - TimevalStruct diff2; - diff2.tv_sec = time1.tv_sec - time2.tv_sec; - diff2.tv_usec = time1.tv_usec - time2.tv_usec; - - const int64_t mSecDiff2 = - -(static_cast<int64_t>(diff2.tv_sec) * 1000 + diff2.tv_usec / 1000); + // time1 to time2, but calculateTimeDiff returns an absolute value + date_time::TimeDuration diff2 = -diff1.invert_sign(); // assert - ASSERT_EQ(mSecDiff2, date_time::DateTime::calculateTimeDiff(time1, time2)); + ASSERT_EQ(diff2.total_milliseconds(), calculateTimeDiff(time1, time2)); } TEST(DateTimeTest, CalculateEqualTimeDiff) { - TimevalStruct time1; - time1.tv_sec = 1; - time1.tv_usec = 2 * date_time::DateTime::MICROSECONDS_IN_MILLISECOND; + date_time::TimeDuration time1 = bpt::seconds(1) + bpt::milliseconds(2); - TimevalStruct time2; - time2.tv_sec = 1; - time2.tv_usec = 2 * date_time::DateTime::MICROSECONDS_IN_MILLISECOND; + date_time::TimeDuration time2 = bpt::seconds(1) + bpt::milliseconds(2); - ASSERT_EQ(0, date_time::DateTime::calculateTimeDiff(time2, time1)); - ASSERT_EQ(0, date_time::DateTime::calculateTimeDiff(time1, time2)); + ASSERT_EQ(0, calculateTimeDiff(time2, time1)); + ASSERT_EQ(0, calculateTimeDiff(time1, time2)); } TEST(DateTimeTest, compareTime) { // arrange - TimevalStruct time1; - time1.tv_sec = 1; - time1.tv_usec = 2 * date_time::DateTime::MICROSECONDS_IN_MILLISECOND; + date_time::TimeDuration time1 = bpt::seconds(1) + bpt::milliseconds(2); - TimevalStruct time2; - time2.tv_sec = 2; - time2.tv_usec = 4 * date_time::DateTime::MICROSECONDS_IN_MILLISECOND; + date_time::TimeDuration time2 = bpt::seconds(2) + bpt::milliseconds(4); // assert - ASSERT_EQ(LESS, date_time::DateTime::compareTime(time1, time2)); - ASSERT_EQ(GREATER, date_time::DateTime::compareTime(time2, time1)); - ASSERT_NE(EQUAL, date_time::DateTime::compareTime(time2, time1)); + ASSERT_EQ(LESS, compareTime(time1, time2)); + ASSERT_EQ(GREATER, compareTime(time2, time1)); + ASSERT_NE(EQUAL, compareTime(time2, time1)); // act - TimevalStruct time3 = date_time::DateTime::Sub(time2, time1); + date_time::TimeDuration time3 = time2 - time1; // assert - ASSERT_EQ(EQUAL, date_time::DateTime::compareTime(time1, time3)); + ASSERT_EQ(EQUAL, compareTime(time1, time3)); } TEST(DateTimeTest, GetSecs_UsecConvertedInSec) { // arrange - TimevalStruct time1; - time1.tv_sec = 0; - time1.tv_usec = date_time::DateTime::MICROSECONDS_IN_SECOND; + date_time::TimeDuration time1 = bpt::microseconds(MICROSECONDS_IN_SECOND); // assert - ASSERT_EQ(1, date_time::DateTime::getSecs(time1)); + ASSERT_EQ(1, getSecs(time1)); } TEST(DateTimeTest, compareTime_UsecConvertedInSec) { // arrange - TimevalStruct time1; - time1.tv_sec = 1; - time1.tv_usec = 0; + date_time::TimeDuration time1 = bpt::seconds(1); - TimevalStruct time2; - time2.tv_sec = 0; - time2.tv_usec = date_time::DateTime::MICROSECONDS_IN_SECOND; + date_time::TimeDuration time2 = bpt::microseconds(MICROSECONDS_IN_SECOND); // assert - ASSERT_EQ(1, date_time::DateTime::getSecs(time1)); - ASSERT_EQ(1, date_time::DateTime::getSecs(time2)); - ASSERT_EQ(EQUAL, date_time::DateTime::compareTime(time1, time2)); -} - -TEST(DateTimeTest, compareEqualTime_UsecConvertedInSec) { - // arrange - TimevalStruct time1; - time1.tv_sec = 1; - time1.tv_usec = 0; - - TimevalStruct time2; - time2.tv_sec = 0; - time2.tv_usec = date_time::DateTime::MICROSECONDS_IN_SECOND; - - // assert - ASSERT_TRUE(date_time::DateTime::Equal(time1, time2)); + ASSERT_EQ(1, getSecs(time1)); + ASSERT_EQ(1, getSecs(time2)); + ASSERT_EQ(EQUAL, compareTime(time1, time2)); + ASSERT_TRUE(Equal(time1, time2)); } TEST(DateTimeTest, compareLessTime_UsecConvertedInSec) { // arrange - TimevalStruct time1; - time1.tv_sec = 1; - time1.tv_usec = 0; + date_time::TimeDuration time1 = bpt::seconds(1); - TimevalStruct time2; - time2.tv_sec = 0; - time2.tv_usec = 2 * date_time::DateTime::MICROSECONDS_IN_SECOND; + date_time::TimeDuration time2 = bpt::microseconds(2 * MICROSECONDS_IN_SECOND); // assert - ASSERT_TRUE(date_time::DateTime::Less(time1, time2)); + ASSERT_TRUE(Less(time1, time2)); } TEST(DateTimeTest, compareGreaterTime_UsecConvertedInSec) { // arrange - TimevalStruct time1; - time1.tv_sec = 1; - time1.tv_usec = 0; + date_time::TimeDuration time1 = bpt::seconds(1); - TimevalStruct time2; - time2.tv_sec = 0; - time2.tv_usec = 2 * date_time::DateTime::MICROSECONDS_IN_SECOND; + date_time::TimeDuration time2 = bpt::milliseconds(2 * MICROSECONDS_IN_SECOND); // assert - ASSERT_TRUE(date_time::DateTime::Greater(time2, time1)); + ASSERT_TRUE(Greater(time2, time1)); } TEST(DateTimeTest, CalculateTimeSub_UsecConvertedInSec) { // arrange - TimevalStruct time1; - time1.tv_sec = 1; - time1.tv_usec = 0; + date_time::TimeDuration time1 = bpt::seconds(1); - TimevalStruct time2; - time2.tv_sec = 0; - time2.tv_usec = 2 * date_time::DateTime::MICROSECONDS_IN_SECOND; + date_time::TimeDuration time2 = bpt::microseconds(2 * MICROSECONDS_IN_SECOND); - TimevalStruct time3 = date_time::DateTime::Sub(time2, time1); + date_time::TimeDuration time3 = time2 - time1; // assert - ASSERT_EQ(EQUAL, date_time::DateTime::compareTime(time1, time3)); + ASSERT_EQ(EQUAL, compareTime(time1, time3)); } TEST(DateTimeTest, CalculateTimeDiff_UsecConvertedInSec) { // arrange - TimevalStruct time1; - time1.tv_sec = 2; - time1.tv_usec = 5 * date_time::DateTime::MICROSECONDS_IN_SECOND; - TimevalStruct time2; - time2.tv_sec = 3; - time2.tv_usec = 1 * date_time::DateTime::MICROSECONDS_IN_SECOND; + date_time::TimeDuration time1 = + bpt::seconds(2) + bpt::microseconds(5 * MICROSECONDS_IN_SECOND); + date_time::TimeDuration time2 = + bpt::seconds(3) + bpt::microseconds(1 * MICROSECONDS_IN_SECOND); // assert - ASSERT_EQ(3000, date_time::DateTime::calculateTimeDiff(time2, time1)); - ASSERT_EQ(3000, date_time::DateTime::calculateTimeDiff(time1, time2)); + ASSERT_EQ(3000, calculateTimeDiff(time2, time1)); + ASSERT_EQ(3000, calculateTimeDiff(time1, time2)); } TEST(DateTimeTest, CalculateEqualTimeDiff_UsecConvertedInSec) { - // arrange - TimevalStruct time1; - time1.tv_sec = 2; - time1.tv_usec = 2 * date_time::DateTime::MICROSECONDS_IN_SECOND; - - TimevalStruct time2; - time2.tv_sec = 3; - time2.tv_usec = 1 * date_time::DateTime::MICROSECONDS_IN_SECOND; + date_time::TimeDuration time1 = + bpt::seconds(2) + bpt::microseconds(2 * MICROSECONDS_IN_SECOND); + date_time::TimeDuration time2 = + bpt::seconds(3) + bpt::microseconds(1 * MICROSECONDS_IN_SECOND); // assert - ASSERT_EQ(0, date_time::DateTime::calculateTimeDiff(time2, time1)); - ASSERT_EQ(0, date_time::DateTime::calculateTimeDiff(time1, time2)); -} + ASSERT_EQ(0, calculateTimeDiff(time2, time1)); + ASSERT_EQ(0, calculateTimeDiff(time1, time2)); -TEST(DateTimeTest, CalculateEqualTimeSub_UsecConvertedInSec) { - // arrange - TimevalStruct time1; - time1.tv_sec = 3; - time1.tv_usec = 0; + date_time::TimeDuration time3 = time2 - time1; + date_time::TimeDuration time4 = time1 - time2; - TimevalStruct time2; - time2.tv_sec = 2; - time2.tv_usec = 1 * date_time::DateTime::MICROSECONDS_IN_SECOND; + date_time::TimeDuration time_expected(0, 0, 0, 0); - TimevalStruct time3 = date_time::DateTime::Sub(time2, time1); - TimevalStruct time4 = date_time::DateTime::Sub(time1, time2); - - TimevalStruct time_expected; - time_expected.tv_sec = 0; - time_expected.tv_usec = 0; - // assert - ASSERT_EQ(EQUAL, date_time::DateTime::compareTime(time_expected, time3)); - ASSERT_EQ(EQUAL, date_time::DateTime::compareTime(time_expected, time4)); + ASSERT_EQ(EQUAL, compareTime(time_expected, time3)); + ASSERT_EQ(EQUAL, compareTime(time_expected, time4)); } TEST(DateTimeTest, AddMilliseconds_SetMillisecondMultiplesSecond_ExpectChangeTime) { - TimevalStruct time1; - time1.tv_sec = 3; - time1.tv_usec = 0; + date_time::TimeDuration time1 = bpt::seconds(3); uint32_t milliseconds = 7000; - date_time::DateTime::AddMilliseconds(time1, milliseconds); - ASSERT_EQ(10, time1.tv_sec); - ASSERT_EQ(0, time1.tv_usec); + AddMilliseconds(time1, milliseconds); + ASSERT_EQ(10, getSecs(time1)); + ASSERT_EQ(0, get_just_mSecs(time1)); } TEST(DateTimeTest, AddMilliseconds_SetMillisecondNotMultiplesSecond_ExpectChangeTime) { - TimevalStruct time1; + date_time::TimeDuration time1 = bpt::seconds(3); uint32_t milliseconds = 7500; - time1.tv_sec = 3; - time1.tv_usec = 0; - date_time::DateTime::AddMilliseconds(time1, milliseconds); - ASSERT_EQ(10, time1.tv_sec); - ASSERT_EQ(500000, time1.tv_usec); + + AddMilliseconds(time1, milliseconds); + ASSERT_EQ(10, time1.total_seconds()); + ASSERT_EQ(500000, get_just_uSecs(time1)); } TEST(DateTimeTest, AddMilliseconds_SetMilliSecondLessThenSeconds_ExpectChangeTime) { - TimevalStruct time1; + date_time::TimeDuration time1 = bpt::seconds(3); uint32_t milliseconds = 500; - time1.tv_sec = 3; - time1.tv_usec = 0; - date_time::DateTime::AddMilliseconds(time1, milliseconds); - ASSERT_EQ(3, time1.tv_sec); - ASSERT_EQ(500000, time1.tv_usec); + + AddMilliseconds(time1, milliseconds); + ASSERT_EQ(3, getSecs(time1)); + ASSERT_EQ(500000, get_just_uSecs(time1)); } TEST(DateTimeTest, AddMilliseconds_SetMillisecondEqualNull_ExpectNotChangeTime) { - TimevalStruct time1; + date_time::TimeDuration time1 = bpt::seconds(3); uint32_t milliseconds = 0; - time1.tv_sec = 3; - time1.tv_usec = 0; - date_time::DateTime::AddMilliseconds(time1, milliseconds); - ASSERT_EQ(3, time1.tv_sec); - ASSERT_EQ(0, time1.tv_usec); + + AddMilliseconds(time1, milliseconds); + ASSERT_EQ(3, getSecs(time1)); + ASSERT_EQ(0, get_just_mSecs(time1)); } TEST(DateTimeTest, AddMilliseconds_SetOverlowMicrosecond_ExpectChangeTime) { - TimevalStruct time1; + date_time::TimeDuration time1 = bpt::seconds(3); uint32_t milliseconds = 7600; - time1.tv_sec = 3; - time1.tv_usec = 500000; - date_time::DateTime::AddMilliseconds(time1, milliseconds); - ASSERT_EQ(11, time1.tv_sec); - ASSERT_EQ(100000, time1.tv_usec); + + AddMilliseconds(time1, milliseconds); + ASSERT_EQ(10, getSecs(time1)); + ASSERT_EQ(600000, get_just_uSecs(time1)); } -TEST(DateTimeTest, Operator_minus_TimevalStruct_positive) { - TimevalStruct time1; - TimevalStruct time2; - TimevalStruct time3; - time1.tv_sec = 3; - time1.tv_usec = 0; - time2.tv_sec = 3; - time2.tv_usec = 0; - time3.tv_sec = 2; - time3.tv_usec = 9000000; - ASSERT_EQ(0, date_time::DateTime::getSecs(time1 - time2)); - ASSERT_EQ(8000000, date_time::DateTime::getuSecs(time3 - time1)); +TEST(DateTimeTest, Operator_minus_TimeDuration_positive) { + date_time::TimeDuration time1 = bpt::seconds(3); + date_time::TimeDuration time2 = bpt::seconds(3); + date_time::TimeDuration time3 = + bpt::seconds(2) + bpt::microseconds(9 * MICROSECONDS_IN_SECOND); + date_time::TimeDuration diff1 = time1 - time2; + ASSERT_EQ(0, getSecs(diff1)); + ASSERT_EQ(8000000, getuSecs(time3 - time1)); } -TEST(DateTimeTest, Operator_minus_TimevalStruct_negative) { - TimevalStruct time1; - TimevalStruct time2; - time1.tv_sec = 3; - time1.tv_usec = 0; - time2.tv_sec = 2; - time2.tv_usec = 9000000; - ASSERT_NE(1, date_time::DateTime::getSecs(time1 - time2)); - ASSERT_NE(-8000000, date_time::DateTime::getSecs(time2 - time1)); +TEST(DateTimeTest, Operator_minus_TimeDuration_negative) { + date_time::TimeDuration time1 = bpt::seconds(3); + date_time::TimeDuration time2 = + bpt::seconds(2) + bpt::microseconds(9 * MICROSECONDS_IN_SECOND); + + ASSERT_NE(1, getSecs(time1 - time2)); + ASSERT_NE(-8000000, getSecs(time2 - time1)); } } // namespace utils_test diff --git a/src/components/utils/test/file_system_test.cc b/src/components/utils/test/file_system_test.cc index 95469766f8..eb35773fc9 100644 --- a/src/components/utils/test/file_system_test.cc +++ b/src/components/utils/test/file_system_test.cc @@ -990,13 +990,13 @@ TEST(FileSystemTest, TEST(FileSystemTest, WriteFileGetSize) { ASSERT_FALSE(FileExists("./test file")); EXPECT_TRUE(CreateFile("./test file")); - EXPECT_EQ(0, FileSize("./test file")); + EXPECT_EQ(0u, FileSize("./test file")); unsigned char tmp[] = {'t', 'e', 's', 't'}; std::vector<unsigned char> data(tmp, tmp + 4); EXPECT_TRUE(Write("./test file", data)); - EXPECT_NE(0, FileSize("./test file")); + EXPECT_NE(0u, FileSize("./test file")); EXPECT_TRUE(DeleteFile("./test file")); EXPECT_FALSE(FileExists("./test file")); @@ -1022,13 +1022,14 @@ TEST(FileSystemTest, GetFileModificationTime) { EXPECT_TRUE(CreateFile("./test file")); - uint64_t modif_time = GetFileModificationTime("./test file"); - EXPECT_LE(0ul, modif_time); + time_t modif_time = GetFileModificationTime("./test file"); + EXPECT_LE(0ul, static_cast<unsigned long>(modif_time)); std::vector<uint8_t> data(1, 1); EXPECT_TRUE(WriteBinaryFile("./test file", data)); - EXPECT_LE(0ul, GetFileModificationTime("./test file")); + EXPECT_LE(0ul, + static_cast<unsigned long>(GetFileModificationTime("./test file"))); EXPECT_LE(modif_time, GetFileModificationTime("./test file")); EXPECT_TRUE(DeleteFile("./test file")); diff --git a/src/components/utils/test/atomic_object_test.cc b/src/components/utils/test/include/utils/mock_signals_posix.h index 44975fd004..1aad2d5873 100644 --- a/src/components/utils/test/atomic_object_test.cc +++ b/src/components/utils/test/include/utils/mock_signals_posix.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, Ford Motor Company + * Copyright (c) 2018, Ford Motor Company * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -30,28 +30,30 @@ * POSSIBILITY OF SUCH DAMAGE. */ -#include "utils/atomic_object.h" -#include "gtest/gtest.h" - -namespace test { -namespace components { -namespace utils_test { - -TEST(AtomicObjectTest, Construct) { - sync_primitives::atomic_int var(5); - EXPECT_EQ(5, var); - - var = 8; - EXPECT_EQ(8, var); - - sync_primitives::atomic_bool flag = true; - - EXPECT_TRUE(flag == true); - - flag = false; - EXPECT_FALSE(flag == true); -} - -} // namespace utils_test -} // namespace components -} // namespace test +#ifndef SRC_COMPONENTS_UTILS_TEST_INCLUDE_UTILS_MOCK_SIGNALS_POSIX_H_ +#define SRC_COMPONENTS_UTILS_TEST_INCLUDE_UTILS_MOCK_SIGNALS_POSIX_H_ + +#include "gmock/gmock.h" +#include "utils/signals.h" +#include <signal.h> +#include "appMain/low_voltage_signals_handler.h" + +namespace utils { + +class MockSignalsPosix { + public: + MOCK_METHOD0(UnsubscribeFromTermination, bool()); + MOCK_METHOD1(WaitTerminationSignals, bool(sighandler_t sig_handler)); + MOCK_METHOD1( + UnsubscribeFromLowVoltageSignals, + bool(const main_namespace::LowVoltageSignalsOffset& offset_data)); + MOCK_METHOD2(SendSignal, void(const int signo, const pid_t pid)); + MOCK_METHOD0(Fork, pid_t()); + MOCK_METHOD1(ExitProcess, void(const int status)); + MOCK_METHOD3(WaitPid, void(pid_t cpid, int* status, int options)); + + static MockSignalsPosix* signals_posix_mock(); +}; + +} // namespace utils +#endif // SRC_COMPONENTS_UTILS_TEST_INCLUDE_UTILS_MOCK_SIGNALS_POSIX_H_ diff --git a/src/components/utils/test/lock_posix_test.cc b/src/components/utils/test/lock_boost_test.cc index a78659ab31..0da735a990 100644 --- a/src/components/utils/test/lock_posix_test.cc +++ b/src/components/utils/test/lock_boost_test.cc @@ -38,8 +38,9 @@ namespace components { namespace utils_test { using sync_primitives::Lock; +using sync_primitives::RecursiveLock; -TEST(LockPosixTest, DefaultCtorTest_ExpectNonRecursiveMutexCreated) { +TEST(LockBoostTest, TestNonRecursive) { // Create Lock object Lock test_mutex; // Lock mutex @@ -50,20 +51,9 @@ TEST(LockPosixTest, DefaultCtorTest_ExpectNonRecursiveMutexCreated) { test_mutex.Release(); } -TEST(LockPosixTest, CtorTestWithFalseArgument_ExpectNonRecursiveMutexCreated) { +TEST(LockBoostTest, TestRecursive) { // Create Lock object - Lock test_mutex(false); - // Lock mutex - test_mutex.Acquire(); - // Check if created mutex is non-recursive - EXPECT_FALSE(test_mutex.Try()); - // Release mutex before destroy - test_mutex.Release(); -} - -TEST(LockPosixTest, CtorTestWithTrueArgument_ExpectRecursiveMutexCreated) { - // Create Lock object - Lock test_mutex(true); + RecursiveLock test_mutex; // Lock mutex test_mutex.Acquire(); // Check if created mutex is recursive @@ -73,17 +63,7 @@ TEST(LockPosixTest, CtorTestWithTrueArgument_ExpectRecursiveMutexCreated) { test_mutex.Release(); } -TEST(LockPosixTest, AcquireMutex_ExpectMutexLocked) { - // Create Lock object (non-recursive mutex) - Lock test_mutex; - // Lock mutex - test_mutex.Acquire(); - // Try to lock it again. If locked expect false - EXPECT_FALSE(test_mutex.Try()); - test_mutex.Release(); -} - -TEST(LockPosixTest, ReleaseMutex_ExpectMutexReleased) { +TEST(LockBoostTest, ReleaseMutex_ExpectMutexReleased) { // Create Lock object (non-recursive mutex) Lock test_mutex; // Lock mutex @@ -95,7 +75,7 @@ TEST(LockPosixTest, ReleaseMutex_ExpectMutexReleased) { test_mutex.Release(); } -TEST(LockPosixTest, TryLockNonRecursiveMutex_ExpectMutexNotLockedTwice) { +TEST(LockBoostTest, TryLockNonRecursiveMutex_ExpectMutexNotLockedTwice) { // Create Lock object (non-recursive mutex) Lock test_mutex; // Lock mutex @@ -105,9 +85,9 @@ TEST(LockPosixTest, TryLockNonRecursiveMutex_ExpectMutexNotLockedTwice) { test_mutex.Release(); } -TEST(LockPosixTest, TryLockRecursiveMutex_ExpectMutexLockedTwice) { +TEST(LockBoostTest, TryLockRecursiveMutex_ExpectMutexLockedTwice) { // Create Lock object (recursive mutex) - Lock test_mutex(true); + RecursiveLock test_mutex; // Lock mutex test_mutex.Try(); // Try to lock it again. Expect true and internal counter increase diff --git a/src/components/utils/test/log_message_loop_thread_test.cc b/src/components/utils/test/log_message_loop_thread_test.cc index 032c7ecae1..92287fb45b 100644 --- a/src/components/utils/test/log_message_loop_thread_test.cc +++ b/src/components/utils/test/log_message_loop_thread_test.cc @@ -57,7 +57,7 @@ TEST(LogMessageLoopThread, DestroyLogMessage_loggerStatusDeletingLogger) { logger::logger_status = LoggerThreadNotCreated; } -class MockLogMessageTest : public LogMessageHandler { +class MockLogMessageTest : public LogMessageLoopThread { public: MOCK_CONST_METHOD1(Handle, void(const LogMessage message)); }; diff --git a/src/components/utils/test/message_queue_test.cc b/src/components/utils/test/message_queue_test.cc index ddc1aa1d81..9aa70933d6 100644 --- a/src/components/utils/test/message_queue_test.cc +++ b/src/components/utils/test/message_queue_test.cc @@ -158,6 +158,8 @@ TEST_F(MessageQueueTest, ASSERT_EQ(test_val_1, test_line); // Check the size of queue after 1 element was removed ASSERT_EQ(0u, test_queue.size()); + pthread_join(thread1, NULL); + pthread_join(thread2, NULL); } TEST_F(MessageQueueTest, @@ -169,6 +171,7 @@ TEST_F(MessageQueueTest, test_queue.wait(); check_value = true; ASSERT_TRUE(check_value); + pthread_join(thread1, NULL); } } // namespace utils_test diff --git a/src/components/utils/test/messagemeter_test.cc b/src/components/utils/test/messagemeter_test.cc index 4ec14ac1cc..d45e600034 100644 --- a/src/components/utils/test/messagemeter_test.cc +++ b/src/components/utils/test/messagemeter_test.cc @@ -57,25 +57,25 @@ const TimePair testing_time_pairs[] = {TimePair(0, 50), class MessageMeterTest : public ::testing::TestWithParam<TimePair> { protected: void SetUp() OVERRIDE { - usecs = date_time::DateTime::MICROSECONDS_IN_MILLISECOND; + usecs = date_time::MICROSECONDS_IN_MILLISECOND; id1 = 0x0; id2 = 0xABCDEF; id3 = 0xFEBCDA; const TimePair time_pair = GetParam(); EXPECT_GT(usecs, time_pair.second) << "Wrong time (msecs) value"; + time_range = date_time::seconds(time_pair.first) + + date_time::microseconds(time_pair.second * usecs); - time_range.tv_sec = time_pair.first; - time_range.tv_usec = time_pair.second * usecs; - EXPECT_LT(0, date_time::DateTime::getuSecs(time_range)) + EXPECT_LT(0, date_time::getuSecs(time_range)) << "Wrong test case with null range value"; meter.set_time_range(time_range); - time_range_msecs = date_time::DateTime::getmSecs(time_range); + time_range_msecs = date_time::getmSecs(time_range); } void TearDown() OVERRIDE {} ::utils::MessageMeter<int> meter; - TimevalStruct time_range = {0, 0}; + date_time::TimeDuration time_range = date_time::TimeDurationZero(); int64_t time_range_msecs; int usecs; int id1, id2, id3; @@ -83,27 +83,25 @@ class MessageMeterTest : public ::testing::TestWithParam<TimePair> { TEST(MessageMeterTest, DefaultTimeRange) { const ::utils::MessageMeter<int> default_meter; - const TimevalStruct time_second{1, 0}; + const date_time::TimeDuration time_second = date_time::seconds(1); EXPECT_EQ(time_second, default_meter.time_range()); } TEST(MessageMeterTest, TimeRangeSetter) { ::utils::MessageMeter<int> meter; - TimevalStruct time_range{0, 0}; + date_time::TimeDuration time_range; const int test_count_secs = 1000; - // Skip 1000th msec value as wrong for TimevalStruct + // Skip 1000th msec value as wrong for date_time::TimeDuration const int test_count_msecs = 999; for (int sec = test_count_secs; sec >= 0; --sec) { for (int msec = test_count_msecs; msec >= 0; --msec) { - time_range.tv_sec = sec; - time_range.tv_usec = - msec * date_time::DateTime::MICROSECONDS_IN_MILLISECOND; - // Setter TimevalStruct + time_range = date_time::seconds(sec) + date_time::milliseconds(msec); + + // Setter date_time::TimeDuration meter.set_time_range(time_range); EXPECT_EQ(time_range, meter.time_range()) << sec << "." << msec << " sec"; // Setter mSecs - meter.set_time_range(sec * date_time::DateTime::MILLISECONDS_IN_SECOND + - msec); + meter.set_time_range(sec * date_time::MILLISECONDS_IN_SECOND + msec); EXPECT_EQ(time_range, meter.time_range()) << sec << "." << msec << " sec"; } } @@ -113,7 +111,7 @@ TEST(MessageMeterTest, AddingWithNullTimeRange) { ::utils::MessageMeter<int> meter; const int id1 = 1; const int id2 = 2; - const TimevalStruct null_time_range{0, 0}; + const date_time::TimeDuration null_time_range = date_time::TimeDurationZero(); meter.set_time_range(null_time_range); for (int i = 0; i < 10000; ++i) { // 1st Connection @@ -129,10 +127,10 @@ TEST(MessageMeterTest, AddingWithNullTimeRange) { TEST_P(MessageMeterTest, DISABLED_TrackMessage_AddingOverPeriod_CorrectCountOfMessages) { size_t messages = 0; - const TimevalStruct start_time = date_time::DateTime::getCurrentTime(); + const date_time::TimeDuration start_time = date_time::getCurrentTime(); // Add messages for less range period int64_t time_span; - while ((time_span = date_time::DateTime::calculateTimeSpan(start_time)) < + while ((time_span = date_time::calculateTimeSpan(start_time)) < time_range_msecs) { ++messages; @@ -153,10 +151,10 @@ TEST_P(MessageMeterTest, TEST_P(MessageMeterTest, DISABLED_TrackMessage_AddingOverPeriodMultiIds_CorrectCountOfMessages) { size_t messages = 0; - const TimevalStruct start_time = date_time::DateTime::getCurrentTime(); + const date_time::TimeDuration start_time = date_time::getCurrentTime(); // Add messages for less range period int64_t time_span; - while ((time_span = date_time::DateTime::calculateTimeSpan(start_time)) < + while ((time_span = date_time::calculateTimeSpan(start_time)) < time_range_msecs) { ++messages; @@ -188,14 +186,14 @@ TEST_P(MessageMeterTest, TEST_P(MessageMeterTest, DISABLED_Frequency_CountingOverPeriod_CorrectCountOfMessages) { const size_t one_message = 1; - const TimevalStruct start_time = date_time::DateTime::getCurrentTime(); + const date_time::TimeDuration start_time = date_time::getCurrentTime(); EXPECT_EQ(one_message, meter.TrackMessage(id1)); EXPECT_EQ(one_message, meter.TrackMessage(id2)); EXPECT_EQ(one_message, meter.TrackMessage(id3)); // Check messages count over period int64_t time_span; - while ((time_span = date_time::DateTime::calculateTimeSpan(start_time)) < + while ((time_span = date_time::calculateTimeSpan(start_time)) < time_range_msecs) { usleep(time_range_msecs); diff --git a/src/components/utils/test/mock_signals_posix.cc b/src/components/utils/test/mock_signals_posix.cc new file mode 100644 index 0000000000..47531b4a9f --- /dev/null +++ b/src/components/utils/test/mock_signals_posix.cc @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2018, Ford Motor Company + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following + * disclaimer in the documentation and/or other materials provided with the + * distribution. + * + * Neither the name of the Ford Motor Company nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include "gtest/gtest.h" +#include "gmock/gmock.h" +#include "utils/mock_signals_posix.h" +#include "utils/signals.h" + +namespace utils { + +bool Signals::UnsubscribeFromTermination() { + return MockSignalsPosix::signals_posix_mock()->UnsubscribeFromTermination(); +} + +bool Signals::WaitTerminationSignals(sighandler_t sig_handler) { + return MockSignalsPosix::signals_posix_mock()->WaitTerminationSignals( + sig_handler); +} + +bool Signals::UnsubscribeFromLowVoltageSignals( + const main_namespace::LowVoltageSignalsOffset& offset_data) { + return MockSignalsPosix::signals_posix_mock() + ->UnsubscribeFromLowVoltageSignals(offset_data); +} + +void Signals::SendSignal(const int signo, const pid_t pid) { + MockSignalsPosix::signals_posix_mock()->SendSignal(signo, pid); +} + +void Signals::ExitProcess(const int status) { + MockSignalsPosix::signals_posix_mock()->ExitProcess(status); +} + +void Signals::WaitPid(pid_t cpid, int* status, int options) { + MockSignalsPosix::signals_posix_mock()->WaitPid(cpid, status, options); +} + +pid_t Signals::Fork() { + return MockSignalsPosix::signals_posix_mock()->Fork(); +} + +MockSignalsPosix* MockSignalsPosix::signals_posix_mock() { + static ::testing::NiceMock<MockSignalsPosix> signals_posix_mock; + return &signals_posix_mock; +} + +} // namespace utils diff --git a/src/components/utils/test/shared_ptr_test.cc b/src/components/utils/test/shared_ptr_test.cc deleted file mode 100644 index 99fe4f7dd7..0000000000 --- a/src/components/utils/test/shared_ptr_test.cc +++ /dev/null @@ -1,542 +0,0 @@ -/* - * Copyright (c) 2015, Ford Motor Company - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following - * disclaimer in the documentation and/or other materials provided with the - * distribution. - * - * Neither the name of the Ford Motor Company nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#include <stdlib.h> -#include <vector> -#include <iostream> -#include "gmock/gmock.h" -#include "utils/shared_ptr.h" - -namespace test { -namespace components { -namespace utils_test { - -class CMockObject { - public: - CMockObject(int id); - virtual ~CMockObject(); - virtual int getId() const; - - MOCK_METHOD0(destructor, void()); - - private: - int mId_; -}; - -class CExtendedMockObject : public CMockObject { - public: - CExtendedMockObject(int id); -}; - -using ::testing::NiceMock; - -CMockObject::CMockObject(int id) : mId_(id) {} - -CMockObject::~CMockObject() { - destructor(); -} - -int CMockObject::getId() const { - return mId_; -} - -CExtendedMockObject::CExtendedMockObject(int id) : CMockObject(id) {} - -typedef utils::SharedPtr<CMockObject> tMockObjectPtr; -typedef utils::SharedPtr<CExtendedMockObject> tExtendedMockObjectPtr; - -TEST(SharedPtrTest, DefaultConstructorTest) { - // Constructor checks - tMockObjectPtr p0; - ASSERT_EQ(0, p0.get()); - ASSERT_FALSE(p0.valid()); -} - -TEST(SharedPtrTest, ConstructorWithOneParameterTest) { - // Arrange - CMockObject* object1 = new CMockObject(1); - EXPECT_CALL(*object1, destructor()).Times(1); - - // Constructor checks - tMockObjectPtr p1(object1); - ASSERT_EQ(1, p1->getId()); - ASSERT_EQ(1u, *(p1.get_ReferenceCounter())); -} - -TEST(SharedPtrTest, CopyConstructorTest) { - // Arrange - CMockObject* object1 = new CMockObject(1); - EXPECT_CALL(*object1, destructor()).Times(1); - - // Constructor checks - tMockObjectPtr p1(object1); - ASSERT_EQ(1, p1->getId()); - ASSERT_EQ(1u, *(p1.get_ReferenceCounter())); - - tMockObjectPtr p2(p1); - ASSERT_EQ(1, p2->getId()); - ASSERT_EQ(2u, *(p2.get_ReferenceCounter())); - tMockObjectPtr p3 = p2; - ASSERT_EQ(1, p3->getId()); - ASSERT_EQ(3u, *(p3.get_ReferenceCounter())); - { - tMockObjectPtr p4 = p3; - ASSERT_EQ(1, p4->getId()); - ASSERT_EQ(4u, *(p3.get_ReferenceCounter())); - } - // Check reference counter decreased - ASSERT_EQ(3u, *(p3.get_ReferenceCounter())); -} - -TEST(SharedPtrTest, SecondConstructorWithOneParameterTest) { - // Arrange - CExtendedMockObject* object1 = new CExtendedMockObject(2); - EXPECT_CALL(*object1, destructor()).Times(0); - - // Constructors checks - tExtendedMockObjectPtr p1(object1); - ASSERT_EQ(2, p1->getId()); - ASSERT_EQ(1u, *(p1.get_ReferenceCounter())); - - tMockObjectPtr p2(p1); - ASSERT_EQ(2, p2->getId()); - ASSERT_EQ(2u, *(p2.get_ReferenceCounter())); - EXPECT_CALL(*object1, destructor()); -} - -TEST(SharedPtrTest, AssignmentOperatorTest) { - // Arrange - CMockObject* object1 = new CMockObject(1); - CMockObject* object2 = new CMockObject(2); - - EXPECT_CALL(*object1, destructor()).Times(0); - EXPECT_CALL(*object2, destructor()).Times(0); - - tMockObjectPtr p1(object1); - ASSERT_EQ(1, p1->getId()); - ASSERT_EQ(1u, *(p1.get_ReferenceCounter())); - - tMockObjectPtr p2(object2); - ASSERT_EQ(2, p2->getId()); - ASSERT_EQ(1u, *(p2.get_ReferenceCounter())); - - tMockObjectPtr p3(p1); - ASSERT_EQ(1, p3->getId()); - ASSERT_EQ(2u, *(p3.get_ReferenceCounter())); - - tMockObjectPtr p4(p3); - ASSERT_EQ(1, p4->getId()); - ASSERT_EQ(3u, *(p4.get_ReferenceCounter())); - - tMockObjectPtr p5(p4); - ASSERT_EQ(1, p5->getId()); - ASSERT_EQ(4u, *(p5.get_ReferenceCounter())); - - p5 = p2; - - // Check reference counter for new SharedPtr increased - ASSERT_EQ(2, p5->getId()); - ASSERT_EQ(2u, *(p5.get_ReferenceCounter())); - - // Check reference counter for old SharedPtr decreased - ASSERT_EQ(1, p1->getId()); - ASSERT_EQ(3u, *(p1.get_ReferenceCounter())); - - EXPECT_CALL(*object1, destructor()); - EXPECT_CALL(*object2, destructor()); -} - -TEST(SharedPtrTest, SecondAssignmentOperatorTest) { - // Arrange - CMockObject* object1 = new CMockObject(1); - CExtendedMockObject* object2 = new CExtendedMockObject(2); - - EXPECT_CALL(*object1, destructor()).Times(0); - EXPECT_CALL(*object2, destructor()).Times(0); - - tMockObjectPtr p1(object1); - ASSERT_EQ(1, p1->getId()); - ASSERT_EQ(1u, *(p1.get_ReferenceCounter())); - - tExtendedMockObjectPtr p2(object2); - ASSERT_EQ(2, p2->getId()); - ASSERT_EQ(1u, *(p2.get_ReferenceCounter())); - - tMockObjectPtr p3(p1); - ASSERT_EQ(1, p3->getId()); - ASSERT_EQ(2u, *(p3.get_ReferenceCounter())); - - tMockObjectPtr p4(p3); - ASSERT_EQ(1, p4->getId()); - ASSERT_EQ(3u, *(p4.get_ReferenceCounter())); - - tMockObjectPtr p5(p4); - ASSERT_EQ(1, p5->getId()); - ASSERT_EQ(4u, *(p5.get_ReferenceCounter())); - // Use assignment operator - p5 = p2; - - // Check reference counter for new SharedPtr increased - ASSERT_EQ(2, p5->getId()); - ASSERT_EQ(2u, *(p5.get_ReferenceCounter())); - - // Check reference counter for old SharedPtr decreased - ASSERT_EQ(1, p1->getId()); - ASSERT_EQ(3u, *(p1.get_ReferenceCounter())); - - EXPECT_CALL(*object1, destructor()); - EXPECT_CALL(*object2, destructor()); -} - -TEST(SharedPtrTest, EqualOperatorTest) { - // Arrange - CMockObject* object1 = new CMockObject(1); - CMockObject* object2 = new CMockObject(2); - - EXPECT_CALL(*object1, destructor()).Times(0); - EXPECT_CALL(*object2, destructor()).Times(0); - - tMockObjectPtr p1(object1); - ASSERT_EQ(1, p1->getId()); - ASSERT_EQ(1u, *(p1.get_ReferenceCounter())); - - tMockObjectPtr p2(object2); - ASSERT_EQ(2, p2->getId()); - ASSERT_EQ(1u, *(p2.get_ReferenceCounter())); - - tMockObjectPtr p3(p1); - ASSERT_EQ(1, p3->getId()); - ASSERT_EQ(2u, *(p3.get_ReferenceCounter())); - - tMockObjectPtr p4(p3); - ASSERT_EQ(1, p4->getId()); - ASSERT_EQ(3u, *(p4.get_ReferenceCounter())); - - tMockObjectPtr p5(p4); - ASSERT_EQ(1, p5->getId()); - ASSERT_EQ(4u, *(p5.get_ReferenceCounter())); - // Checks - ASSERT_TRUE(p1 == p3); - ASSERT_TRUE(p1 == p4); - ASSERT_TRUE(p4 == p3); - ASSERT_FALSE(p1 == p2); - - EXPECT_CALL(*object1, destructor()); - EXPECT_CALL(*object2, destructor()); -} - -TEST(SharedPtrTest, LessThanOperatorTest) { - // Arrange - CMockObject* object1 = new CMockObject(1); - CMockObject* object2 = new CMockObject(2); - - EXPECT_CALL(*object1, destructor()).Times(0); - EXPECT_CALL(*object2, destructor()).Times(0); - - tMockObjectPtr p1(object1); - ASSERT_EQ(1, p1->getId()); - ASSERT_EQ(1u, *(p1.get_ReferenceCounter())); - - tMockObjectPtr p2(object2); - ASSERT_EQ(2, p2->getId()); - ASSERT_EQ(1u, *(p2.get_ReferenceCounter())); - - // Checks - if (object1 < object2) { - ASSERT_TRUE(p1 < p2); - } else { - ASSERT_FALSE(p1 < p2); - } - - EXPECT_CALL(*object1, destructor()); - EXPECT_CALL(*object2, destructor()); -} - -TEST(SharedPtrTest, StaticPointerCastTest_DerivedToBase_ExpectCastOk) { - // Arrange - CMockObject* object1 = new CMockObject(1); - CExtendedMockObject* object2 = new CExtendedMockObject(2); - - EXPECT_CALL(*object1, destructor()).Times(1); - EXPECT_CALL(*object2, destructor()).Times(0); - - tMockObjectPtr p1(object1); - ASSERT_EQ(1, p1->getId()); - ASSERT_EQ(1u, *(p1.get_ReferenceCounter())); - - tExtendedMockObjectPtr ep1(object2); - ASSERT_EQ(2, ep1->getId()); - ASSERT_EQ(1u, *(ep1.get_ReferenceCounter())); - // Cast from SharedPtr to Derived class to SharedPtr to Base class - p1 = utils::SharedPtr<CExtendedMockObject>::static_pointer_cast<CMockObject>( - ep1); - // Checks - ASSERT_EQ(2, p1->getId()); - ASSERT_EQ(2u, *(p1.get_ReferenceCounter())); - ASSERT_TRUE(p1 == ep1); - - EXPECT_CALL(*object2, destructor()); -} - -TEST(SharedPtrTest, StaticPointerCastTest_BaseToDerived_ExpectCastOk) { - // Arrange - CMockObject* object1 = new CMockObject(1); - CExtendedMockObject* object2 = new CExtendedMockObject(2); - - EXPECT_CALL(*object1, destructor()).Times(0); - EXPECT_CALL(*object2, destructor()).Times(1); - - tMockObjectPtr p1(object1); - ASSERT_EQ(1, p1->getId()); - ASSERT_EQ(1u, *(p1.get_ReferenceCounter())); - - tExtendedMockObjectPtr ep1(object2); - ASSERT_EQ(2, ep1->getId()); - ASSERT_EQ(1u, *(ep1.get_ReferenceCounter())); - // Cast from SharedPtr to Base class to SharedPtr to Derived class - ep1 = utils::SharedPtr<CMockObject>::static_pointer_cast<CExtendedMockObject>( - p1); - // Checks - ASSERT_EQ(1, ep1->getId()); - ASSERT_EQ(2u, *(ep1.get_ReferenceCounter())); - ASSERT_TRUE(p1 == ep1); - - EXPECT_CALL(*object1, destructor()); -} - -TEST(SharedPtrTest, DynamicPointerCastTest_DerivedToBase_ExpectCastOk) { - // Arrange - CMockObject* object1 = new CMockObject(1); - CExtendedMockObject* object2 = new CExtendedMockObject(2); - - EXPECT_CALL(*object1, destructor()).Times(1); - EXPECT_CALL(*object2, destructor()).Times(0); - - tMockObjectPtr p1(object1); - ASSERT_EQ(1, p1->getId()); - ASSERT_EQ(1u, *(p1.get_ReferenceCounter())); - - tExtendedMockObjectPtr ep1(object2); - ASSERT_EQ(2, ep1->getId()); - ASSERT_EQ(1u, *(ep1.get_ReferenceCounter())); - // Cast from SharedPtr to Derived class to SharedPtr to Base class - p1 = utils::SharedPtr<CExtendedMockObject>::dynamic_pointer_cast<CMockObject>( - ep1); - // Checks - ASSERT_EQ(2, p1->getId()); - ASSERT_EQ(2u, *(p1.get_ReferenceCounter())); - ASSERT_TRUE(p1 == ep1); - - EXPECT_CALL(*object2, destructor()); -} - -TEST(SharedPtrTest, DynamicPointerCastTest_BaseToDerived_ExpectNullPtr) { - // Arrange - CMockObject* object1 = new CMockObject(1); - CExtendedMockObject* object2 = new CExtendedMockObject(2); - - EXPECT_CALL(*object1, destructor()).Times(0); - EXPECT_CALL(*object2, destructor()).Times(1); - - tMockObjectPtr p1(object1); - ASSERT_EQ(1, p1->getId()); - ASSERT_EQ(1u, *(p1.get_ReferenceCounter())); - - tExtendedMockObjectPtr ep1(object2); - ASSERT_EQ(2, ep1->getId()); - ASSERT_EQ(1u, *(ep1.get_ReferenceCounter())); - // Cast from SharedPtr to Base class to SharedPtr to Derived class - ep1 = - utils::SharedPtr<CMockObject>::dynamic_pointer_cast<CExtendedMockObject>( - p1); - // Checks - ASSERT_EQ(NULL, ep1); - - EXPECT_CALL(*object1, destructor()); -} - -TEST(SharedPtrTest, ArrowOperatorTest) { - // Arrange - CExtendedMockObject* object1 = new CExtendedMockObject(1); - CExtendedMockObject* object2 = new CExtendedMockObject(2); - - EXPECT_CALL(*object1, destructor()).Times(1); - EXPECT_CALL(*object2, destructor()).Times(1); - - tExtendedMockObjectPtr ep1(object1); - // Check - ASSERT_EQ(1, ep1->getId()); - - tMockObjectPtr p1(ep1); - // Check - ASSERT_EQ(1, p1->getId()); - - tExtendedMockObjectPtr ep2(object2); - // Check - ASSERT_EQ(2, ep2->getId()); -} - -TEST(SharedPtrTest, DereferenceOperatorTest) { - // Arrange - CExtendedMockObject* object1 = new CExtendedMockObject(1); - CExtendedMockObject* object2 = new CExtendedMockObject(2); - - EXPECT_CALL(*object1, destructor()).Times(1); - EXPECT_CALL(*object2, destructor()).Times(1); - - tExtendedMockObjectPtr ep1(object1); - // Check - ASSERT_EQ(1, (*ep1).getId()); - - tMockObjectPtr p1(ep1); - // Check - ASSERT_EQ(1, (*p1).getId()); - - tExtendedMockObjectPtr ep2(object2); - // Check - ASSERT_EQ(2, (*ep2).getId()); -} - -TEST(SharedPtrTest, BoolOperatorTest) { - // Arrange - CMockObject* object1 = new CMockObject(1); - tMockObjectPtr p1(object1); - tMockObjectPtr p2; - - // Checks - ASSERT_TRUE(p1); - ASSERT_FALSE(p2); - EXPECT_CALL(*object1, destructor()); -} - -TEST(SharedPtrTest, ResetWithoutArgsTest) { - // Arrange - CMockObject* object1 = new CMockObject(1); - CMockObject* object2 = new CMockObject(2); - - EXPECT_CALL(*object1, destructor()).Times(1); - EXPECT_CALL(*object2, destructor()).Times(1); - - tMockObjectPtr p1(object1); - tMockObjectPtr p2(object2); - ASSERT_EQ(2, p2->getId()); - ASSERT_EQ(1u, *(p2.get_ReferenceCounter())); - - tMockObjectPtr p3(p1); - tMockObjectPtr p4(p3); - ASSERT_EQ(1, p4->getId()); - ASSERT_EQ(3u, *(p4.get_ReferenceCounter())); - // Act - p2.reset(); - // Check - EXPECT_EQ(NULL, p2.get()); - EXPECT_EQ(1u, *(p2.get_ReferenceCounter())); - p4.reset(); - // Check - EXPECT_EQ(NULL, p4.get()); - EXPECT_EQ(1u, *(p4.get_ReferenceCounter())); -} - -TEST(SharedPtrTest, ResetWithArgumentTest) { - // Arrange - CMockObject* object1 = new CMockObject(1); - CMockObject* object2 = new CMockObject(27); - - EXPECT_CALL(*object1, destructor()).Times(1); - EXPECT_CALL(*object2, destructor()).Times(1); - - tMockObjectPtr p1(object1); - tMockObjectPtr p3(p1); - tMockObjectPtr p4(p3); - ASSERT_EQ(1, p4->getId()); - ASSERT_EQ(3u, *(p4.get_ReferenceCounter())); - // Act - p4.reset(object2); - // Check - EXPECT_EQ(27, (*p4).getId()); - EXPECT_EQ(1u, *(p4.get_ReferenceCounter())); -} - -TEST(SharedPtrTest, GetMethodTest_ExpectObjPointer) { - // Arrange - CMockObject* object1 = new CMockObject(1); - EXPECT_CALL(*object1, destructor()).Times(1); - tMockObjectPtr p1(object1); - // Check - ASSERT_EQ(object1, p1.get()); -} - -TEST(SharedPtrTest, ValidMethodTest_ExpectCorrectValidation) { - // Arrange - CMockObject* object1 = new CMockObject(1); - EXPECT_CALL(*object1, destructor()).Times(1); - - tMockObjectPtr p1(object1); - tMockObjectPtr p2; - // Check - ASSERT_TRUE(p1.valid()); - ASSERT_FALSE(p2.valid()); -} - -TEST(SharedPtrTest, DISABLED_StressTest) { - // Arrange - const size_t kNumIterations = 1024U * 1024U; - - size_t objectCreated = 0U; - size_t pointersCopied = 0U; - std::vector<tMockObjectPtr> objects; - - for (size_t i = 0U; i < kNumIterations; ++i) { - if ((true == objects.empty()) || (0 == rand() % 256)) { - CMockObject* object = new CMockObject(0); - EXPECT_CALL(*object, destructor()); - objects.push_back(object); - ++objectCreated; - } else { - size_t objectIndex = static_cast<size_t>(rand()) % objects.size(); - - if (rand() % 2) { - objects.push_back(objects[objectIndex]); - ++pointersCopied; - } else { - objects.erase(objects.begin() + objectIndex); - } - } - } - printf("%zu objects created, %zu pointers copied\n", - objectCreated, - pointersCopied); -} - -} // namespace utils_test -} // namespace components -} // namespace test |