From 5c2e9ea5733fc41e54d4d16d1e4a06c7cfa39ad6 Mon Sep 17 00:00:00 2001 From: Jason Dillaman Date: Thu, 16 Jul 2015 14:42:30 -0400 Subject: [PATCH] tests: fix journal test issues discovered via valgrind Signed-off-by: Jason Dillaman --- src/test/journal/RadosTestFixture.cc | 2 +- src/test/journal/test_FutureImpl.cc | 2 ++ src/test/journal/test_JournalMetadata.cc | 12 +++++++++ src/test/journal/test_JournalPlayer.cc | 32 +++++++++++++++++------- src/test/journal/test_JournalTrimmer.cc | 7 ++++++ src/test/journal/test_ObjectPlayer.cc | 2 ++ src/test/journal/test_ObjectRecorder.cc | 15 +++++++++++ 7 files changed, 62 insertions(+), 10 deletions(-) diff --git a/src/test/journal/RadosTestFixture.cc b/src/test/journal/RadosTestFixture.cc index 2a6634baf8f5e..36282fd3f1b3a 100644 --- a/src/test/journal/RadosTestFixture.cc +++ b/src/test/journal/RadosTestFixture.cc @@ -26,7 +26,7 @@ std::string RadosTestFixture::get_temp_oid() { void RadosTestFixture::SetUp() { ASSERT_EQ(0, _rados.ioctx_create(_pool_name.c_str(), m_ioctx)); m_timer = new SafeTimer(reinterpret_cast(m_ioctx.cct()), - m_timer_lock, false); + m_timer_lock, true); m_timer->init(); } diff --git a/src/test/journal/test_FutureImpl.cc b/src/test/journal/test_FutureImpl.cc index 370bf740a87c2..943c764dcf534 100644 --- a/src/test/journal/test_FutureImpl.cc +++ b/src/test/journal/test_FutureImpl.cc @@ -145,6 +145,8 @@ TEST_F(TestFutureImpl, FlushInProgress) { future1->flush(NULL); ASSERT_EQ(0U, m_flush_handler.flushes); + + future1->safe(0); } TEST_F(TestFutureImpl, FlushAlreadyComplete) { diff --git a/src/test/journal/test_JournalMetadata.cc b/src/test/journal/test_JournalMetadata.cc index 1852718cad9f3..fc4fd0f5a2b26 100644 --- a/src/test/journal/test_JournalMetadata.cc +++ b/src/test/journal/test_JournalMetadata.cc @@ -10,13 +10,25 @@ class TestJournalMetadata : public RadosTestFixture { public: + virtual void TearDown() { + for (MetadataList::iterator it = m_metadata_list.begin(); + it != m_metadata_list.end(); ++it) { + (*it)->remove_listener(&m_listener); + } + RadosTestFixture::TearDown(); + } + journal::JournalMetadataPtr create_metadata(const std::string &oid, const std::string &client_id) { journal::JournalMetadataPtr metadata(new journal::JournalMetadata( m_ioctx, oid, client_id, 0.1)); + m_metadata_list.push_back(metadata); metadata->add_listener(&m_listener); return metadata; } + + typedef std::list MetadataList; + MetadataList m_metadata_list; }; TEST_F(TestJournalMetadata, JournalDNE) { diff --git a/src/test/journal/test_JournalPlayer.cc b/src/test/journal/test_JournalPlayer.cc index cd640575f9d30..6a0663f24715e 100644 --- a/src/test/journal/test_JournalPlayer.cc +++ b/src/test/journal/test_JournalPlayer.cc @@ -15,6 +15,7 @@ class TestJournalPlayer : public RadosTestFixture { public: + typedef std::list JournalPlayers; typedef std::list Entries; struct ReplayHandler : public journal::ReplayHandler { @@ -28,6 +29,9 @@ public: : lock("lock"), entries_available(false), complete(false), complete_result(0) {} + virtual void get() {} + virtual void put() {} + virtual bool filter_entry(const std::string &tag) { return false; } @@ -46,6 +50,14 @@ public: } }; + virtual void TearDown() { + for (JournalPlayers::iterator it = m_players.begin(); + it != m_players.end(); ++it) { + delete *it; + } + RadosTestFixture::TearDown(); + } + int create(const std::string &oid) { return RadosTestFixture::create(oid, 14, 2); } @@ -71,14 +83,15 @@ public: return metadata; } - journal::JournalPlayerPtr create_player(const std::string &oid, + journal::JournalPlayer *create_player(const std::string &oid, const journal::JournalMetadataPtr &metadata) { - journal::JournalPlayerPtr player(new journal::JournalPlayer( + journal::JournalPlayer *player(new journal::JournalPlayer( m_ioctx, oid + ".", metadata, &m_replay_hander)); + m_players.push_back(player); return player; } - bool wait_for_entries(journal::JournalPlayerPtr player, uint32_t count, + bool wait_for_entries(journal::JournalPlayer *player, uint32_t count, Entries *entries) { entries->clear(); while (entries->size() < count) { @@ -104,7 +117,7 @@ public: return entries->size() == count; } - bool wait_for_complete(journal::JournalPlayerPtr player) { + bool wait_for_complete(journal::JournalPlayer *player) { journal::Entry entry; journal::JournalPlayer::ObjectSetPosition object_set_position; player->try_pop_front(&entry, &object_set_position); @@ -128,6 +141,7 @@ public: return append(oid + "." + stringify(object_num), bl); } + JournalPlayers m_players; ReplayHandler m_replay_hander; }; @@ -146,7 +160,7 @@ TEST_F(TestJournalPlayer, Prefetch) { journal::JournalMetadataPtr metadata = create_metadata(oid); ASSERT_EQ(0, init_metadata(metadata)); - journal::JournalPlayerPtr player = create_player(oid, metadata); + journal::JournalPlayer *player = create_player(oid, metadata); ASSERT_EQ(0, write_entry(oid, 0, "tag1", 122)); ASSERT_EQ(0, write_entry(oid, 1, "tag1", 123)); @@ -183,7 +197,7 @@ TEST_F(TestJournalPlayer, PrefetchWithoutCommit) { journal::JournalMetadataPtr metadata = create_metadata(oid); ASSERT_EQ(0, init_metadata(metadata)); - journal::JournalPlayerPtr player = create_player(oid, metadata); + journal::JournalPlayer *player = create_player(oid, metadata); ASSERT_EQ(0, write_entry(oid, 0, "tag1", 122)); ASSERT_EQ(0, write_entry(oid, 1, "tag1", 123)); @@ -217,7 +231,7 @@ TEST_F(TestJournalPlayer, PrefetchMultipleTags) { journal::JournalMetadataPtr metadata = create_metadata(oid); ASSERT_EQ(0, init_metadata(metadata)); - journal::JournalPlayerPtr player = create_player(oid, metadata); + journal::JournalPlayer *player = create_player(oid, metadata); ASSERT_EQ(0, write_entry(oid, 0, "tag1", 120)); ASSERT_EQ(0, write_entry(oid, 0, "tag2", 0)); @@ -253,7 +267,7 @@ TEST_F(TestJournalPlayer, PrefetchCorruptSequence) { journal::JournalMetadataPtr metadata = create_metadata(oid); ASSERT_EQ(0, init_metadata(metadata)); - journal::JournalPlayerPtr player = create_player(oid, metadata); + journal::JournalPlayer *player = create_player(oid, metadata); ASSERT_EQ(0, write_entry(oid, 0, "tag1", 120)); ASSERT_EQ(0, write_entry(oid, 0, "tag2", 0)); @@ -286,7 +300,7 @@ TEST_F(TestJournalPlayer, PrefetchAndWatch) { journal::JournalMetadataPtr metadata = create_metadata(oid); ASSERT_EQ(0, init_metadata(metadata)); - journal::JournalPlayerPtr player = create_player(oid, metadata); + journal::JournalPlayer *player = create_player(oid, metadata); ASSERT_EQ(0, write_entry(oid, 0, "tag1", 122)); diff --git a/src/test/journal/test_JournalTrimmer.cc b/src/test/journal/test_JournalTrimmer.cc index 80226df835279..f715affb0c4fe 100644 --- a/src/test/journal/test_JournalTrimmer.cc +++ b/src/test/journal/test_JournalTrimmer.cc @@ -11,6 +11,10 @@ class TestJournalTrimmer : public RadosTestFixture { public: virtual void TearDown() { + for (MetadataList::iterator it = m_metadata_list.begin(); + it != m_metadata_list.end(); ++it) { + (*it)->remove_listener(&m_listener); + } for (std::list::iterator it = m_trimmers.begin(); it != m_trimmers.end(); ++it) { delete *it; @@ -26,6 +30,7 @@ public: journal::JournalMetadataPtr create_metadata(const std::string &oid) { journal::JournalMetadataPtr metadata(new journal::JournalMetadata( m_ioctx, oid, "client", 0.1)); + m_metadata_list.push_back(metadata); metadata->add_listener(&m_listener); return metadata; } @@ -44,6 +49,8 @@ public: return m_ioctx.operate(oid, &op); } + typedef std::list MetadataList; + MetadataList m_metadata_list; std::list m_trimmers; }; diff --git a/src/test/journal/test_ObjectPlayer.cc b/src/test/journal/test_ObjectPlayer.cc index 5ec7f69970434..f00c053cdc6f8 100644 --- a/src/test/journal/test_ObjectPlayer.cc +++ b/src/test/journal/test_ObjectPlayer.cc @@ -274,6 +274,8 @@ TEST_F(TestObjectPlayer, Unwatch) { int rval = 0; C_SafeCond *ctx = new C_SafeCond(&mutex, &cond, &done, &rval); object->watch(ctx, 0.1); + + usleep(200000); ASSERT_FALSE(done); object->unwatch(); } diff --git a/src/test/journal/test_ObjectRecorder.cc b/src/test/journal/test_ObjectRecorder.cc index e1ffb29bb23da..50e9503f98dfd 100644 --- a/src/test/journal/test_ObjectRecorder.cc +++ b/src/test/journal/test_ObjectRecorder.cc @@ -44,6 +44,10 @@ public: } }; + typedef std::list ObjectRecorders; + + ObjectRecorders m_object_recorders; + uint32_t m_flush_interval; uint64_t m_flush_bytes; double m_flush_age; @@ -57,6 +61,16 @@ public: m_finisher->start(); } + void TearDown() { + for (ObjectRecorders::iterator it = m_object_recorders.begin(); + it != m_object_recorders.end(); ++it) { + C_SaferCond cond; + (*it)->flush(&cond); + cond.wait(); + } + RadosTestFixture::TearDown(); + } + inline void set_flush_interval(uint32_t i) { m_flush_interval = i; } @@ -84,6 +98,7 @@ public: journal::ObjectRecorderPtr object(new journal::ObjectRecorder( m_ioctx, oid, 0, *m_timer, m_timer_lock, &m_overflow_handler, order, m_flush_interval, m_flush_bytes, m_flush_age)); + m_object_recorders.push_back(object); return object; } }; -- 2.39.5