|
19 | 19 |
|
20 | 20 | class SessionTest : public Integration { |
21 | 21 | public: |
| 22 | + SessionTest() |
| 23 | + : added_(0) |
| 24 | + , removed_(0) |
| 25 | + , up_(0) |
| 26 | + , down_(0) { } |
| 27 | + |
22 | 28 | void SetUp() { |
23 | | - logger_.add_critera("Attempted to get metrics before connecting session object"); |
24 | | - logger_.add_critera("Attempted to get speculative execution metrics before connecting session object"); |
| 29 | + is_session_requested_ = false; |
| 30 | + Integration::SetUp(); |
25 | 31 | } |
26 | 32 |
|
27 | | - void check_metrics_log_count() { |
28 | | - EXPECT_EQ(logger_.count(), 2u); |
| 33 | + const std::string& address() const { return address_; } |
| 34 | + int added() const { return added_; } |
| 35 | + int removed() const { return removed_; } |
| 36 | + int up() const { return up_; } |
| 37 | + int down() const { return down_; } |
| 38 | + |
| 39 | +protected: |
| 40 | + static void on_host_listener(CassHostListenerEvent event, |
| 41 | + CassInet inet, |
| 42 | + void* data) { |
| 43 | + SessionTest* instance = static_cast<SessionTest*>(data); |
| 44 | + |
| 45 | + char address[CASS_INET_STRING_LENGTH]; |
| 46 | + uv_inet_ntop(inet.address_length == CASS_INET_V4_LENGTH ? AF_INET : AF_INET6, |
| 47 | + inet.address, |
| 48 | + address, CASS_INET_STRING_LENGTH); |
| 49 | + instance->address_ = address; |
| 50 | + |
| 51 | + if (event == CASS_HOST_LISTENER_EVENT_ADD) { |
| 52 | + TEST_LOG("Added node " << address); |
| 53 | + ++instance->added_; |
| 54 | + } else if (event == CASS_HOST_LISTENER_EVENT_REMOVE) { |
| 55 | + TEST_LOG("Removed node " << address); |
| 56 | + ++instance->removed_; |
| 57 | + } else if (event == CASS_HOST_LISTENER_EVENT_UP) { |
| 58 | + TEST_LOG("Up node " << address); |
| 59 | + ++instance->up_; |
| 60 | + } else if (event == CASS_HOST_LISTENER_EVENT_DOWN) { |
| 61 | + TEST_LOG("Down node " << address); |
| 62 | + ++instance->down_; |
| 63 | + } |
29 | 64 | } |
| 65 | + |
| 66 | +private: |
| 67 | + std::string address_; |
| 68 | + int added_; |
| 69 | + int removed_; |
| 70 | + int up_; |
| 71 | + int down_; |
30 | 72 | }; |
31 | 73 |
|
32 | 74 | CASSANDRA_INTEGRATION_TEST_F(SessionTest, MetricsWithoutConnecting) { |
33 | | - Session session(cass_session_new()); |
| 75 | + CHECK_FAILURE; |
| 76 | + |
| 77 | + Session session; |
34 | 78 |
|
35 | 79 | CassMetrics metrics; |
| 80 | + logger_.add_critera("Attempted to get metrics before connecting session object"); |
36 | 81 | cass_session_get_metrics(session.get(), &metrics); |
37 | 82 |
|
38 | 83 | EXPECT_EQ(metrics.requests.min, 0u); |
39 | 84 | EXPECT_EQ(metrics.requests.one_minute_rate, 0.0); |
| 85 | + EXPECT_EQ(logger_.count(), 1u); |
40 | 86 |
|
41 | 87 | CassSpeculativeExecutionMetrics spec_ex_metrics; |
| 88 | + logger_.reset(); |
| 89 | + logger_.add_critera("Attempted to get speculative execution metrics before connecting session object"); |
42 | 90 | cass_session_get_speculative_execution_metrics(session.get(), &spec_ex_metrics); |
43 | 91 | EXPECT_EQ(spec_ex_metrics.min, 0u); |
44 | 92 | EXPECT_EQ(spec_ex_metrics.percentage, 0.0); |
| 93 | + EXPECT_EQ(logger_.count(), 1u); |
| 94 | +} |
| 95 | + |
| 96 | +CASSANDRA_INTEGRATION_TEST_F(SessionTest, ExternalHostListener) { |
| 97 | + CHECK_FAILURE; |
| 98 | + is_test_chaotic_ = true; // Destroy the cluster after the test completes |
| 99 | + |
| 100 | + Cluster cluster = default_cluster() |
| 101 | + .with_load_balance_round_robin() |
| 102 | + .with_host_listener_callback(on_host_listener, this); |
| 103 | + Session session = cluster.connect(); |
| 104 | + |
| 105 | + // Sanity check |
| 106 | + EXPECT_EQ(0, added()); |
| 107 | + EXPECT_EQ(0, removed()); |
| 108 | + EXPECT_EQ(0, up()); |
| 109 | + EXPECT_EQ(0, down()); |
| 110 | + |
| 111 | + logger_.add_critera("New node " + (ccm_->get_ip_prefix() + "2") + " added"); |
| 112 | + EXPECT_EQ(2, ccm_->bootstrap_node()); |
| 113 | + EXPECT_TRUE(wait_for_logger(1)); |
| 114 | + EXPECT_EQ(1, added()); |
| 115 | + EXPECT_STREQ((ccm_->get_ip_prefix() + "2").c_str(), address().c_str()); |
| 116 | + |
| 117 | + stop_node(1); |
| 118 | + EXPECT_EQ(1, down()); |
| 119 | + EXPECT_STREQ((ccm_->get_ip_prefix() + "1").c_str(), address().c_str()); |
| 120 | + |
| 121 | + ccm_->start_node(1); |
| 122 | + EXPECT_EQ(1, up()); |
| 123 | + EXPECT_STREQ((ccm_->get_ip_prefix() + "1").c_str(), address().c_str()); |
| 124 | + |
| 125 | + force_decommission_node(1); |
| 126 | + EXPECT_EQ(1, removed()); |
| 127 | + EXPECT_STREQ((ccm_->get_ip_prefix() + "1").c_str(), address().c_str()); |
45 | 128 |
|
46 | | - check_metrics_log_count(); |
| 129 | + // Sanity check |
| 130 | + EXPECT_EQ(1, added()); |
| 131 | + EXPECT_EQ(1, removed()); |
| 132 | + EXPECT_EQ(1, up()); |
| 133 | + EXPECT_EQ(1, down()); |
47 | 134 | } |
0 commit comments