/************************************************************************ * * Copyright (c) 2017 Alibaba.com, Inc. All Rights Reserved * $Id: consensus1-t.cc,v 1.0 03/21/2017 09:19:25 PM yingqiang.zyq(yingqiang.zyq@alibaba-inc.com) $ * ************************************************************************/ /** * @file consensus1-t.cc * @author yingqiang.zyq(yingqiang.zyq@alibaba-inc.com) * @date 03/21/2017 09:19:25 PM * @version 1.0 * @brief * **/ #include #include #include #include "easyNet.h" #include "service.h" #include "paxos.h" #include "paxos_log.h" #include "paxos_server.h" #include "paxos_configuration.h" #include "paxos.pb.h" #include "files.h" #include "rd_paxos_log.h" #include "file_paxos_log.h" using namespace alisql; TEST(consensus, paxos_leader_state_order) { std::vector strConfig; strConfig.emplace_back("127.0.0.1:11001"); strConfig.emplace_back("127.0.0.1:11002"); strConfig.emplace_back("127.0.0.1:11003"); uint64_t timeout= 2000; std::shared_ptr rlog; rlog= std::make_shared("paxosLogTestDir61"); Paxos *paxos1= new Paxos(timeout, rlog, 3000); paxos1->init(strConfig, 1, NULL); rlog= std::make_shared("paxosLogTestDir62"); Paxos *paxos2= new Paxos(timeout, rlog, 3000); paxos2->init(strConfig, 2, NULL); rlog= std::make_shared("paxosLogTestDir63"); Paxos *paxos3= new Paxos(timeout, rlog, 3000); paxos3->init(strConfig, 3, NULL); while (paxos1->getCurrentLeader() == 0) ; Paxos::StateType state= paxos1->getState(); EXPECT_TRUE(state == Paxos::LEADER || state == Paxos::FOLLOWER); while (paxos2->getCurrentLeader() == 0) ; state= paxos2->getState(); EXPECT_TRUE(state == Paxos::LEADER || state == Paxos::FOLLOWER); while (paxos3->getCurrentLeader() == 0) ; state= paxos3->getState(); EXPECT_TRUE(state == Paxos::LEADER || state == Paxos::FOLLOWER); sleep(1); delete paxos1; delete paxos2; delete paxos3; deleteDir("paxosLogTestDir61"); deleteDir("paxosLogTestDir62"); deleteDir("paxosLogTestDir63"); } TEST(consensus, paxos_group_send) { std::vector strConfig; strConfig.emplace_back("127.0.0.1:11001"); strConfig.emplace_back("127.0.0.1:11002"); //strConfig.emplace_back("127.0.0.1:11003"); uint64_t timeout= 2000; std::shared_ptr rlog, rlog1; rlog1= rlog= std::make_shared("paxosLogTestDir1"); Paxos *paxos1= new Paxos(timeout, rlog, 3000); paxos1->init(strConfig, 1, NULL); rlog= std::make_shared("paxosLogTestDir2"); Paxos *paxos2= new Paxos(timeout, rlog, 3000); paxos2->init(strConfig, 2, NULL); //rlog= std::make_shared("paxosLogTestDir3"); //Paxos *paxos3= new Paxos(timeout, rlog, 3000); //paxos3->init(strConfig, 3, NULL); LogEntry le; le.set_index(0); le.set_optype(0); le.set_value("AAAAAAAAAA"); sleep(2); paxos1->setMaxPacketSize(1); paxos1->requestVote(); for (uint i = 0; i < 30; ++i) { if (paxos1->getState() != Paxos::LEADER) sleep(1); else break; } ASSERT_TRUE(paxos1->getState() == Paxos::LEADER); paxos1->replicateLog(le); for (uint i = 0; i < 30; ++i) { if (paxos2->getLastLogIndex() != 2) sleep(1); else break; } ASSERT_TRUE(paxos2->getLastLogIndex() == 2); const Paxos::StatsType &stats= paxos2->getStats(); uint64_t last_countOnMsgAppendLog= stats.countOnMsgAppendLog; uint64_t last_countOnHeartbeat= stats.countOnHeartbeat; std::cout<< "countMsgAppendLog:"< entries; le.set_index(3); *(entries.Add())= le; le.set_index(4); *(entries.Add())= le; rlog1->append(entries); sleep(1); EXPECT_EQ(paxos2->getLastLogIndex(), 4); std::cout<< "countMsgAppendLog:"<append(entries); sleep(1); EXPECT_EQ(paxos2->getLastLogIndex(), 6); std::cout<< "countMsgAppendLog:"<append(entries); sleep(1); EXPECT_EQ(paxos2->getLastLogIndex(), 10); std::cout<< "countMsgAppendLog:"<append(entries); sleep(1); EXPECT_EQ(paxos2->getLastLogIndex(), 12); std::cout<< "countMsgAppendLog:"<