2020#include " mock/fake_server_response.h"
2121#include " model/model_impl.h"
2222#include " polaris/plugin.h"
23+ #include " test_utils.h"
2324#include " utils/string_utils.h"
2425
2526namespace polaris {
@@ -29,9 +30,10 @@ class ModelTest : public ::testing::Test {
2930 void SetUp () {
3031 service_key_.namespace_ = " test_namespace" ;
3132 service_key_.name_ = " test_service" ;
33+ TestUtils::SetUpFakeTime ();
3234 }
3335
34- void TearDown () {}
36+ void TearDown () { TestUtils::TearDownFakeTime (); }
3537
3638protected:
3739 ServiceKey service_key_;
@@ -52,26 +54,39 @@ TEST_F(ModelTest, TryChooseHalfOpenInstance) {
5254 service->SetCircuitBreakerData (circuit_breaker_data);
5355
5456 Instance *instance = NULL ;
55- ASSERT_EQ (service->TryChooseHalfOpenInstance (service_instances, instance), kReturnOk );
56- ASSERT_TRUE (instance != NULL );
57- ASSERT_EQ (instance->GetId (), " instance_0" );
58- instance = NULL ;
59- ASSERT_EQ (service->TryChooseHalfOpenInstance (service_instances, instance),
60- kReturnInstanceNotFound );
61- ASSERT_TRUE (instance == NULL );
57+ for (int i = 1 ; i <= 60 ; i++) {
58+ instance = NULL ;
59+ ReturnCode ret = service->TryChooseHalfOpenInstance (service_instances, instance);
60+ if (i == 20 ) {
61+ ASSERT_EQ (ret, kReturnOk ) << i;
62+ ASSERT_TRUE (instance != NULL );
63+ ASSERT_EQ (instance->GetId (), " instance_0" );
64+ } else {
65+ ASSERT_EQ (ret, kReturnInstanceNotFound );
66+ ASSERT_TRUE (instance == NULL );
67+ }
68+ TestUtils::FakeNowIncrement (1500 );
69+ }
6270
6371 circuit_breaker_data.version = 2 ;
6472 circuit_breaker_data.half_open_instances [" instance_0" ] = 1 ;
6573 circuit_breaker_data.half_open_instances [" instance_x" ] = 2 ;
6674 circuit_breaker_data.half_open_instances [" instance_1" ] = 5 ;
6775 service->SetCircuitBreakerData (circuit_breaker_data);
68- for (int i = 0 ; i < 5 ; i++) {
76+ for (int i = 1 ; i <= 100 ; i++) {
6977 instance = NULL ;
70- ASSERT_EQ (service->TryChooseHalfOpenInstance (service_instances, instance), kReturnOk );
71- ASSERT_TRUE (instance != NULL );
72- ASSERT_EQ (instance->GetId (), " instance_1" );
78+ TestUtils::FakeNowIncrement (1500 );
79+ ReturnCode ret = service->TryChooseHalfOpenInstance (service_instances, instance);
80+ if (i % 20 == 0 ) {
81+ ASSERT_EQ (ret, kReturnOk ) << i;
82+ ASSERT_TRUE (instance != NULL );
83+ ASSERT_EQ (instance->GetId (), " instance_1" );
84+ } else {
85+ ASSERT_EQ (ret, kReturnInstanceNotFound );
86+ }
7387 }
7488 instance = NULL ;
89+ TestUtils::FakeNowIncrement (10000 );
7590 ASSERT_EQ (service->TryChooseHalfOpenInstance (service_instances, instance),
7691 kReturnInstanceNotFound );
7792 ASSERT_TRUE (instance == NULL );
@@ -89,6 +104,8 @@ TEST_F(ModelTest, TryChooseHalfOpenInstanceRand) {
89104 Instance *instance;
90105 CircuitBreakerData circuit_breaker_data;
91106 circuit_breaker_data.version = 1 ;
107+ service->SetCircuitBreakerData (circuit_breaker_data);
108+ circuit_breaker_data.version = 2 ;
92109 for (int i = 0 ; i < 10 ; i++) {
93110 std::string instance_id = " instance_" + StringUtils::TypeToStr<int >(i);
94111 instance = new Instance (instance_id, " host" , 8000 , 100 );
@@ -98,9 +115,15 @@ TEST_F(ModelTest, TryChooseHalfOpenInstanceRand) {
98115 service->SetCircuitBreakerData (circuit_breaker_data);
99116
100117 std::set<Instance *> select_instance;
101- for (int i = 0 ; i < 10 ; i++) {
102- ASSERT_EQ (service->TryChooseHalfOpenInstance (instances, instance), kReturnOk );
103- select_instance.insert (instance);
118+ for (int i = 0 ; i < 200 ; i++) {
119+ TestUtils::FakeNowIncrement (50 );
120+ ReturnCode ret_code = service->TryChooseHalfOpenInstance (instances, instance);
121+ if (i % 40 == 0 ) {
122+ ASSERT_EQ (ret_code, kReturnOk ) << i;
123+ select_instance.insert (instance);
124+ } else {
125+ ASSERT_EQ (ret_code, kReturnInstanceNotFound ) << i;
126+ }
104127 }
105128 ASSERT_GT (select_instance.size (), 1 );
106129
0 commit comments