| #pragma once |
| |
| #ifndef GEODE_INTEGRATION_TEST_THINCLIENTDURABLERECONNECT_H_ |
| #define GEODE_INTEGRATION_TEST_THINCLIENTDURABLERECONNECT_H_ |
| |
| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| /* |
| * ThinClientDurableReconnect.hpp |
| * |
| * Created on: Nov 3, 2008 |
| * Author: abhaware |
| */ |
| |
| #include "fw_dunit.hpp" |
| #include "ThinClientHelper.hpp" |
| |
| /* This is to test |
| 1- Durable Client always reconnect to secondary to avoid data loss. |
| */ |
| |
| #define CLIENT1 s1p1 |
| #define CLIENT2 s1p2 |
| #define SERVER1 s2p1 |
| #define FEEDER s2p2 |
| |
| namespace { // NOLINT(google-build-namespaces) |
| |
| using apache::geode::client::EntryEvent; |
| |
| class OperMonitor : public CacheListener { |
| bool m_first, m_second, m_close; |
| |
| public: |
| OperMonitor() : m_first(false), m_second(false), m_close(false) {} |
| |
| void validate() { |
| LOG("validate called"); |
| ASSERT(m_first, "m_first event not recieved"); |
| ASSERT(m_close && m_second, "m_second event not recieved"); |
| } |
| |
| void afterCreate(const EntryEvent&) override { |
| if (!m_close) { |
| m_first = true; |
| LOG("First Event Recieved"); |
| } else { |
| m_second = true; |
| LOG("Duplicate Recieved"); |
| } |
| } |
| void close(Region&) override { |
| m_close = true; |
| LOG("Listener Close Called"); |
| } |
| }; |
| |
| void setCacheListener(const char* regName, |
| std::shared_ptr<OperMonitor> monitor) { |
| auto reg = getHelper()->getRegion(regName); |
| auto attrMutator = reg->getAttributesMutator(); |
| attrMutator->setCacheListener(monitor); |
| } |
| std::shared_ptr<OperMonitor> mon1 = nullptr; |
| |
| const char* mixKeys[] = {"D-Key-1"}; |
| |
| #include "ThinClientDurableInit.hpp" |
| #include "ThinClientTasks_C2S2.hpp" |
| |
| void initClientCache(int redundancy, std::shared_ptr<OperMonitor>& mon) { |
| initClientAndRegion(redundancy, 0, std::chrono::seconds(60000), |
| std::chrono::seconds(1), std::chrono::seconds(300)); |
| |
| if (mon == nullptr) { |
| mon = std::make_shared<OperMonitor>(); |
| } |
| |
| setCacheListener(regionNames[0], mon); |
| |
| getHelper()->cachePtr->readyForEvents(); |
| auto regPtr0 = getHelper()->getRegion(regionNames[0]); |
| regPtr0->registerAllKeys(true); |
| } |
| |
| DUNIT_TASK_DEFINITION(CLIENT1, ClientInit) |
| { initClientCache(1, mon1); } |
| END_TASK_DEFINITION |
| |
| DUNIT_TASK_DEFINITION(FEEDER, FeederInit) |
| { |
| initClient(true); |
| |
| createRegion(regionNames[0], USE_ACK, true); |
| LOG("FeederInit complete."); |
| |
| createIntEntry(regionNames[0], mixKeys[0], 1); |
| |
| LOG("FeederUpdate complete."); |
| } |
| END_TASK_DEFINITION |
| |
| DUNIT_TASK_DEFINITION(CLIENT1, ClientDown) |
| { |
| getHelper()->disconnect(true); |
| cleanProc(); |
| LOG("Clnt1Down complete: Keepalive = True"); |
| } |
| END_TASK_DEFINITION |
| |
| DUNIT_TASK_DEFINITION(CLIENT1, ClientReInit) |
| { initClientCache(1, mon1); } |
| END_TASK_DEFINITION |
| |
| DUNIT_TASK_DEFINITION(CLIENT1, Verify) |
| { |
| LOG("Client Verify"); |
| mon1->validate(); |
| } |
| END_TASK_DEFINITION |
| |
| DUNIT_TASK_DEFINITION(FEEDER, CloseFeeder) |
| { |
| cleanProc(); |
| LOG("FEEDER closed"); |
| } |
| END_TASK_DEFINITION |
| |
| DUNIT_TASK_DEFINITION(CLIENT1, CloseClient) |
| { |
| mon1 = nullptr; |
| cleanProc(); |
| LOG("CLIENT1 closed"); |
| } |
| END_TASK_DEFINITION |
| |
| DUNIT_TASK_DEFINITION(SERVER1, CloseServers) |
| { |
| CacheHelper::closeServer(1); |
| CacheHelper::closeServer(2); |
| LOG("SERVERs closed"); |
| } |
| END_TASK_DEFINITION |
| |
| void doThinClientDurableReconnect() { |
| CALL_TASK(StartLocator); |
| |
| startServers(); |
| |
| CALL_TASK(ClientInit); |
| CALL_TASK(FeederInit); |
| CALL_TASK(ClientDown); |
| CALL_TASK(ClientReInit); |
| CALL_TASK(Verify); |
| CALL_TASK(CloseFeeder); |
| CALL_TASK(CloseClient); |
| CALL_TASK(CloseServers); |
| |
| closeLocator(); |
| } |
| |
| } // namespace |
| |
| #endif // GEODE_INTEGRATION_TEST_THINCLIENTDURABLERECONNECT_H_ |