aboutsummaryrefslogtreecommitdiffstats
path: root/storage/src/tests/storageserver/statemanagertest.cpp
diff options
context:
space:
mode:
authorTor Brede Vekterli <vekterli@oath.com>2018-03-14 13:58:53 +0000
committerTor Brede Vekterli <vekterli@oath.com>2018-03-14 15:02:41 +0000
commit717d2a537f1e060a00657fedb61343e8e9af8bc3 (patch)
tree44836613dca48343b3021ed0b3fc53bc91da23a5 /storage/src/tests/storageserver/statemanagertest.cpp
parent374ad65f32202b68527aa1ec3d26bf94c3c3fda5 (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.cpp32
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