@@ -46,6 +46,22 @@ const char kServiceConfig1[] = R"(
46
46
{
47
47
"name": "bookstore.test.appspot.com",
48
48
"title": "Bookstore",
49
+ "http": {
50
+ "rules": [
51
+ {
52
+ "selector": "EchoGetMessage",
53
+ "get": "/echo"
54
+ }
55
+ ]
56
+ },
57
+ "usage": {
58
+ "rules": [
59
+ {
60
+ "selector": "EchoGetMessage",
61
+ "allowUnregisteredCalls": true
62
+ }
63
+ ]
64
+ },
49
65
"control": {
50
66
"environment": "servicecontrol.googleapis.com"
51
67
},
@@ -64,20 +80,6 @@ const char kServiceConfig2[] = R"(
64
80
}
65
81
)" ;
66
82
67
- const char kGceMetadataWithServiceNameAndConfigId [] = R"(
68
- {
69
- "project": {
70
- "projectId": "test-project"
71
- },
72
- "instance": {
73
- "attributes":{
74
- "endpoints-service-name": "service_name_from_metadata",
75
- "endpoints-service-config-id":"2017-05-01r1"
76
- }
77
- }
78
- }
79
- )" ;
80
-
81
83
const char kServiceForStatistics [] =
82
84
" name: \" service-name\"\n "
83
85
" control: {\n "
@@ -86,12 +88,22 @@ const char kServiceForStatistics[] =
86
88
87
89
class ApiManagerTest : public ::testing::Test {
88
90
protected:
91
+ ApiManagerTest () : callback_run_count_(0 ) {}
89
92
std::shared_ptr<ApiManager> MakeApiManager (
90
93
std::unique_ptr<ApiManagerEnvInterface> env, const char *service_config);
91
94
std::shared_ptr<ApiManager> MakeApiManager (
92
95
std::unique_ptr<ApiManagerEnvInterface> env, const char *service_config,
93
96
const char *server_config);
94
97
98
+ void SetUp () {
99
+ callback_run_count_ = 0 ;
100
+ call_history_.clear ();
101
+ }
102
+
103
+ protected:
104
+ std::vector<std::string> call_history_;
105
+ int callback_run_count_;
106
+
95
107
private:
96
108
ApiManagerFactory factory_;
97
109
};
@@ -147,32 +159,37 @@ TEST_F(ApiManagerTest, CorrectStatistics) {
147
159
EXPECT_EQ (0 , service_control_stat.send_report_operations );
148
160
}
149
161
150
- // ApiManager instance should be initialized on ApiManager instance creation
151
162
TEST_F (ApiManagerTest, InitializedOnApiManagerInstanceCreation) {
152
163
std::unique_ptr<MockApiManagerEnvironment> env (
153
164
new ::testing::NiceMock<MockApiManagerEnvironment>());
154
165
155
- // ServiceManagement service should not be called
156
166
EXPECT_CALL (*(env.get ()), DoRunHTTPRequest (_)).Times (0 );
157
167
158
168
std::shared_ptr<ApiManagerImpl> api_manager (
159
169
std::dynamic_pointer_cast<ApiManagerImpl>(
160
170
MakeApiManager (std::move (env), kServiceConfig1 ,
161
171
kServerConfigWithServiceNameConfigId )));
162
172
163
- // Already initialized
164
173
EXPECT_TRUE (api_manager);
165
174
EXPECT_EQ (" OK" , api_manager->ConfigLoadingStatus ().ToString ());
166
175
176
+ auto service = api_manager->SelectService ();
177
+ EXPECT_TRUE (service);
178
+ EXPECT_EQ (" bookstore.test.appspot.com" , service->service_name ());
179
+ EXPECT_EQ (" 2017-05-01r0" , service->service ().id ());
180
+
167
181
api_manager->Init ();
168
182
169
- // No change is expected
170
183
EXPECT_EQ (" OK" , api_manager->ConfigLoadingStatus ().ToString ());
171
184
EXPECT_TRUE (api_manager->Enabled ());
172
185
EXPECT_EQ (" 2017-05-01r0" , api_manager->service (" 2017-05-01r0" ).id ());
186
+
187
+ service = api_manager->SelectService ();
188
+ EXPECT_TRUE (service);
189
+ EXPECT_EQ (" bookstore.test.appspot.com" , service->service_name ());
190
+ EXPECT_EQ (" 2017-05-01r0" , service->service ().id ());
173
191
}
174
192
175
- // ApiManager was initialized by ConfigManager
176
193
TEST_F (ApiManagerTest, InitializedByConfigManager) {
177
194
std::unique_ptr<MockApiManagerEnvironment> env (
178
195
new ::testing::NiceMock<MockApiManagerEnvironment>());
@@ -196,16 +213,112 @@ TEST_F(ApiManagerTest, InitializedByConfigManager) {
196
213
EXPECT_EQ (" bookstore.test.appspot.com" , api_manager->service_name ());
197
214
EXPECT_EQ (" " , api_manager->service (" 2017-05-01r0" ).id ());
198
215
216
+ EXPECT_TRUE (api_manager->IsConfigLoadingInProgress ());
217
+ EXPECT_FALSE (api_manager->IsConfigLoadingSucceeded ());
218
+
199
219
api_manager->Init ();
200
220
201
- // Successfully initialized by ConfigManager
221
+ EXPECT_FALSE (api_manager->IsConfigLoadingInProgress ());
222
+ EXPECT_TRUE (api_manager->IsConfigLoadingSucceeded ());
223
+
202
224
EXPECT_EQ (" OK" , api_manager->ConfigLoadingStatus ().ToString ());
203
225
EXPECT_TRUE (api_manager->Enabled ());
204
226
EXPECT_EQ (" 2017-05-01r0" , api_manager->service (" 2017-05-01r0" ).id ());
227
+
228
+ auto service = api_manager->SelectService ();
229
+ EXPECT_TRUE (service);
230
+ EXPECT_EQ (" bookstore.test.appspot.com" , service->service_name ());
231
+ EXPECT_EQ (" 2017-05-01r0" , service->service ().id ());
232
+ }
233
+
234
+ TEST_F (ApiManagerTest, ConfigManagerInitializationFailed) {
235
+ std::unique_ptr<MockApiManagerEnvironment> env (
236
+ new ::testing::NiceMock<MockApiManagerEnvironment>());
237
+
238
+ EXPECT_CALL (*(env.get ()), DoRunHTTPRequest (_))
239
+ .WillOnce (Invoke ([this ](HTTPRequest *req) {
240
+ EXPECT_EQ (
241
+ " https://servicemanagement.googleapis.com/v1/services/"
242
+ " bookstore.test.appspot.com/configs/2017-05-01r0" ,
243
+ req->url ());
244
+ req->OnComplete (utils::Status (Code::NOT_FOUND, " Not Found" ), {},
245
+ std::move (kServiceConfig1 ));
246
+ }));
247
+
248
+ std::shared_ptr<ApiManagerImpl> api_manager (
249
+ std::dynamic_pointer_cast<ApiManagerImpl>(MakeApiManager (
250
+ std::move (env), " " , kServerConfigWithServiceNameConfigId )));
251
+
252
+ EXPECT_TRUE (api_manager);
253
+ EXPECT_TRUE (api_manager->IsConfigLoadingInProgress ());
254
+ EXPECT_FALSE (api_manager->IsConfigLoadingSucceeded ());
255
+
256
+ EXPECT_EQ (" UNAVAILABLE: Not initialized yet" ,
257
+ api_manager->ConfigLoadingStatus ().ToString ());
258
+ EXPECT_EQ (" bookstore.test.appspot.com" , api_manager->service_name ());
259
+ EXPECT_EQ (" " , api_manager->service (" 2017-05-01r0" ).id ());
260
+
261
+ api_manager->Init ();
262
+
263
+ EXPECT_FALSE (api_manager->IsConfigLoadingInProgress ());
264
+ EXPECT_FALSE (api_manager->IsConfigLoadingSucceeded ());
265
+
266
+ EXPECT_EQ (" ABORTED: Failed to download the service config" ,
267
+ api_manager->ConfigLoadingStatus ().ToString ());
268
+
269
+ auto service = api_manager->SelectService ();
270
+ EXPECT_FALSE (service);
271
+ }
272
+
273
+ TEST_F (ApiManagerTest, AddPendingCallbackThenInitializationSucceeded) {
274
+ std::unique_ptr<MockApiManagerEnvironment> env (
275
+ new ::testing::NiceMock<MockApiManagerEnvironment>());
276
+
277
+ EXPECT_CALL (*(env.get ()), DoRunHTTPRequest (_))
278
+ .WillOnce (Invoke ([this ](HTTPRequest *req) {
279
+ EXPECT_EQ (
280
+ " https://servicemanagement.googleapis.com/v1/services/"
281
+ " bookstore.test.appspot.com/configs/2017-05-01r0" ,
282
+ req->url ());
283
+ req->OnComplete (Status::OK, {}, std::move (kServiceConfig1 ));
284
+ }));
285
+
286
+ std::shared_ptr<ApiManagerImpl> api_manager (
287
+ std::dynamic_pointer_cast<ApiManagerImpl>(MakeApiManager (
288
+ std::move (env), " " , kServerConfigWithServiceNameConfigId )));
289
+
290
+ EXPECT_TRUE (api_manager);
291
+ EXPECT_EQ (" UNAVAILABLE: Not initialized yet" ,
292
+ api_manager->ConfigLoadingStatus ().ToString ());
293
+ EXPECT_EQ (" bookstore.test.appspot.com" , api_manager->service_name ());
294
+ EXPECT_EQ (" " , api_manager->service (" 2017-05-01r0" ).id ());
295
+
296
+ EXPECT_TRUE (api_manager->IsConfigLoadingInProgress ());
297
+ EXPECT_FALSE (api_manager->IsConfigLoadingSucceeded ());
298
+
299
+ api_manager->AddPendingRequestCallback ([this ](utils::Status status) {
300
+ callback_run_count_++;
301
+ EXPECT_OK (status);
302
+ });
303
+ EXPECT_EQ (0 , callback_run_count_);
304
+
305
+ api_manager->Init ();
306
+
307
+ EXPECT_EQ (1 , callback_run_count_);
308
+
309
+ EXPECT_FALSE (api_manager->IsConfigLoadingInProgress ());
310
+ EXPECT_TRUE (api_manager->IsConfigLoadingSucceeded ());
311
+
312
+ EXPECT_OK (api_manager->ConfigLoadingStatus ());
313
+ EXPECT_TRUE (api_manager->Enabled ());
314
+ EXPECT_EQ (" 2017-05-01r0" , api_manager->service (" 2017-05-01r0" ).id ());
315
+
316
+ auto service = api_manager->SelectService ();
317
+ EXPECT_TRUE (service);
318
+ EXPECT_EQ (" bookstore.test.appspot.com" , service->service_name ());
319
+ EXPECT_EQ (" 2017-05-01r0" , service->service ().id ());
205
320
}
206
321
207
- // ApiManager initialization was failed by ConfigManager because of different
208
- // service name
209
322
TEST_F (ApiManagerTest,
210
323
InitializationFailedByConfigManagerWithDifferentServiceName) {
211
324
std::unique_ptr<MockApiManagerEnvironment> env (
0 commit comments