@@ -32,7 +32,7 @@ class LeaderElectorTest : public TESTBASE {
3232 // 准备选举器参数
3333 lock_key_ = " test_lock_key" ;
3434 lock_value_ = " 127.0.0.1-" + std::to_string (getpid ());
35- lease_ms_ = 100 ; // 较短的租约时间以便测试
35+ lease_ms_ = 1000 ; // 较短的租约时间以便测试
3636 loop_interval_ms_ = 10 ;
3737 }
3838
@@ -118,8 +118,13 @@ TEST_F(LeaderElectorTest, SingleElectorBecomesLeader) {
118118
119119 EXPECT_TRUE (elector->Start ());
120120
121- // 等待足够时间让选举器有机会成为领导者
122- std::this_thread::sleep_for (std::chrono::milliseconds (200 ));
121+ for (int i = 0 ; i < 100 ; i++) {
122+ // 等待足够时间让选举发生
123+ if (become_leader_called) {
124+ break ;
125+ }
126+ std::this_thread::sleep_for (std::chrono::milliseconds (100 ));
127+ }
123128
124129 // 应该成为领导者
125130 EXPECT_TRUE (become_leader_called);
@@ -145,8 +150,13 @@ TEST_F(LeaderElectorTest, ManualDemote) {
145150
146151 EXPECT_TRUE (elector->Start ());
147152
148- // 等待成为领导者
149- std::this_thread::sleep_for (std::chrono::milliseconds (200 ));
153+ for (int i = 0 ; i < 100 ; i++) {
154+ // 等待足够时间让选举发生
155+ if (elector->IsLeader ()) {
156+ break ;
157+ }
158+ std::this_thread::sleep_for (std::chrono::milliseconds (100 ));
159+ }
150160
151161 ASSERT_TRUE (elector->IsLeader ());
152162 ASSERT_TRUE (become_leader_called);
@@ -188,17 +198,22 @@ TEST_F(LeaderElectorTest, TwoElectorsCompetition) {
188198 EXPECT_TRUE (elector1->Start ());
189199 EXPECT_TRUE (elector2->Start ());
190200
191- // 等待足够时间让选举发生
192- std::this_thread::sleep_for (std::chrono::milliseconds (300 ));
201+ for (int i = 0 ; i < 100 ; i++) {
202+ // 等待足够时间让选举发生
203+ if ((elector1->IsLeader () || elector2->IsLeader ()) && (elector1_leader || elector2_leader)) {
204+ break ;
205+ }
206+ std::this_thread::sleep_for (std::chrono::milliseconds (100 ));
207+ }
193208
194209 // 检查只有一个选举器成为领导者
195- const bool is_elector1_first_leader = elector1->IsLeader ();
210+ const bool is_elector1_leader = elector1->IsLeader ();
196211 const bool is_elector2_leader = elector2->IsLeader ();
197212
198- EXPECT_NE (is_elector1_first_leader , is_elector2_leader) << " 只有一个选举器应该成为领导者" ;
213+ EXPECT_NE (is_elector1_leader , is_elector2_leader) << " 只有一个选举器应该成为领导者" ;
199214
200215 // 验证相应的回调被调用
201- if (is_elector1_first_leader ) {
216+ if (is_elector1_leader ) {
202217 EXPECT_TRUE (elector1_leader);
203218 EXPECT_FALSE (elector2_leader);
204219 elector1_leader = false ;
@@ -215,7 +230,7 @@ TEST_F(LeaderElectorTest, TwoElectorsCompetition) {
215230 std::this_thread::sleep_for (std::chrono::milliseconds (300 ));
216231
217232 // 另外一个elector应该能够成为领导者
218- if (is_elector1_first_leader ) {
233+ if (is_elector1_leader ) {
219234 EXPECT_TRUE (elector2->IsLeader ());
220235 EXPECT_TRUE (elector2_leader);
221236 elector2->Stop ();
@@ -413,8 +428,13 @@ TEST_F(LeaderElectorTest, MultipleElectorsDifferentKeys) {
413428 EXPECT_TRUE (elector1->Start ());
414429 EXPECT_TRUE (elector2->Start ());
415430
416- // 等待足够时间
417- std::this_thread::sleep_for (std::chrono::milliseconds (300 ));
431+ for (int i = 0 ; i < 100 ; i++) {
432+ // 等待足够时间让选举发生
433+ if (elector1_leader && elector2_leader) {
434+ break ;
435+ }
436+ std::this_thread::sleep_for (std::chrono::milliseconds (100 ));
437+ }
418438
419439 // 两个选举器都应该成为领导者,因为它们使用不同的锁键
420440 EXPECT_TRUE (elector1_leader);
@@ -567,8 +587,8 @@ TEST_F(LeaderElectorTest, LeaseExpirationWithCompetition) {
567587 EXPECT_FALSE (elector2_leader_called) << " elector2's become leader callback should not be called yet" ;
568588
569589 // 模拟 elector1 长时间未续约,导致租约过期
570- // 等待足够时间让租约过期(租约时间是100ms,我们等待150ms)
571- std::this_thread::sleep_for (std::chrono::milliseconds (150 ));
590+ // 等待足够时间让租约过期
591+ std::this_thread::sleep_for (std::chrono::milliseconds (lease_ms_ * 2 ));
572592
573593 // 现在 elector2 应该能够获得领导者身份
574594 elector2->WorkLoop ();
0 commit comments