diff options
author | Tor Brede Vekterli <vekterli@oath.com> | 2018-03-14 13:58:53 +0000 |
---|---|---|
committer | Tor Brede Vekterli <vekterli@oath.com> | 2018-03-14 15:02:41 +0000 |
commit | 717d2a537f1e060a00657fedb61343e8e9af8bc3 (patch) | |
tree | 44836613dca48343b3021ed0b3fc53bc91da23a5 /storage/src/tests/storageserver/statemanagertest.cpp | |
parent | 374ad65f32202b68527aa1ec3d26bf94c3c3fda5 (diff) |
Expose StateManager method to immediately send GetNodeState replies
Diffstat (limited to 'storage/src/tests/storageserver/statemanagertest.cpp')
-rw-r--r-- | storage/src/tests/storageserver/statemanagertest.cpp | 32 |
1 files changed, 27 insertions, 5 deletions
diff --git a/storage/src/tests/storageserver/statemanagertest.cpp b/storage/src/tests/storageserver/statemanagertest.cpp index 8821d271e52..5c201f86f90 100644 --- a/storage/src/tests/storageserver/statemanagertest.cpp +++ b/storage/src/tests/storageserver/statemanagertest.cpp @@ -33,12 +33,14 @@ struct StateManagerTest : public CppUnit::TestFixture { void testSystemState(); void testReportedNodeState(); - void testClusterStateVersion(); + void current_cluster_state_version_is_included_in_host_info_json(); + void can_explicitly_send_get_node_state_reply(); CPPUNIT_TEST_SUITE(StateManagerTest); CPPUNIT_TEST(testSystemState); CPPUNIT_TEST(testReportedNodeState); - CPPUNIT_TEST(testClusterStateVersion); + CPPUNIT_TEST(current_cluster_state_version_is_included_in_host_info_json); + CPPUNIT_TEST(can_explicitly_send_get_node_state_reply); CPPUNIT_TEST_SUITE_END(); }; @@ -223,9 +225,7 @@ StateManagerTest::testReportedNodeState() CPPUNIT_ASSERT_EQUAL(expectedEvents, stateListener.ost.str()); } -void -StateManagerTest::testClusterStateVersion() -{ +void StateManagerTest::current_cluster_state_version_is_included_in_host_info_json() { ClusterState state(*_manager->getClusterStateBundle()->getBaselineClusterState()); state.setVersion(123); _manager->setClusterStateBundle(lib::ClusterStateBundle(state)); @@ -255,4 +255,26 @@ StateManagerTest::testClusterStateVersion() CPPUNIT_ASSERT_EQUAL(123, version); } +void StateManagerTest::can_explicitly_send_get_node_state_reply() { + { + auto lock = _manager->grabStateChangeLock(); + _manager->setReportedNodeState(NodeState(NodeType::STORAGE, State::UP)); + } + // Send down a GetNodeState with the same state as we currently have. This + // ensures that the StateManager doesn't auto-reply with the current state + // to inform the caller that the state has changed. + auto cmd = std::make_shared<api::GetNodeStateCommand>( + std::make_unique<NodeState>(NodeType::STORAGE, State::UP)); + cmd->setTimeout(10000000); + _upper->sendDown(cmd); + + CPPUNIT_ASSERT_EQUAL(size_t(0), _upper->getNumReplies()); + + _manager->immediately_send_get_node_state_replies(); + + std::shared_ptr<api::StorageReply> reply; + GET_ONLY_OK_REPLY(reply); + CPPUNIT_ASSERT_EQUAL(api::MessageType::GETNODESTATE_REPLY, reply->getType()); +} + } // storage |