3030const int kTimeoutMs = 5000 ;
3131const int kSleepMs = 100 ;
3232
33- // Wait for a Future to be completed. If the Future returns an error, it will
34- // be logged.
35- void Await (const firebase::FutureBase& future, const char * name) {
33+ // Waits for a Future to be completed and returns whether the future has
34+ // completed successfully. If the Future returns an error, it will be logged.
35+ bool Await (const firebase::FutureBase& future, const char * name) {
3636 int remaining_timeout = kTimeoutMs ;
3737 while (future.status () == firebase::kFutureStatusPending &&
3838 remaining_timeout > 0 ) {
@@ -42,10 +42,13 @@ void Await(const firebase::FutureBase& future, const char* name) {
4242
4343 if (future.status () != firebase::kFutureStatusComplete ) {
4444 LogMessage (" ERROR: %s returned an invalid result." , name);
45+ return false ;
4546 } else if (future.error () != 0 ) {
4647 LogMessage (" ERROR: %s returned error %d: %s" , name, future.error (),
4748 future.error_message ());
49+ return false ;
4850 }
51+ return true ;
4952}
5053
5154class Countable {
@@ -124,11 +127,11 @@ extern "C" int common_main(int argc, const char* argv[]) {
124127 // Auth caches the previously signed-in user, which can be annoying when
125128 // trying to test for sign-in failures.
126129 auth->SignOut ();
127- auto future_login = auth->SignInAnonymously ();
128- Await (future_login , " Auth sign-in" );
129- auto * future_login_result = future_login .result ();
130- if (future_login_result && *future_login_result ) {
131- const firebase::auth::User* user = *future_login_result ;
130+ auto login_future = auth->SignInAnonymously ();
131+ Await (login_future , " Auth sign-in" );
132+ auto * login_result = login_future .result ();
133+ if (login_result && *login_result ) {
134+ const firebase::auth::User* user = *login_result ;
132135 LogMessage (" Signed in as %s user, uid: %s, email: %s.\n " ,
133136 user->is_anonymous () ? " an anonymous" : " a non-anonymous" ,
134137 user->uid ().c_str (), user->email ().c_str ());
@@ -138,7 +141,7 @@ extern "C" int common_main(int argc, const char* argv[]) {
138141
139142 // Note: Auth cannot be deleted while any of the futures issued by it are
140143 // still valid.
141- future_login .Release ();
144+ login_future .Release ();
142145
143146 LogMessage (" Initialize Firebase Firestore." );
144147
@@ -170,7 +173,7 @@ extern "C" int common_main(int argc, const char* argv[]) {
170173 }
171174 LogMessage (" Successfully initialized Firebase Firestore." );
172175
173- firestore->set_log_level (firebase::LogLevel:: kLogLevelWarning );
176+ firestore->set_log_level (firebase::kLogLevelDebug );
174177
175178 if (firestore->app () != app) {
176179 LogMessage (" ERROR: failed to get App the Firestore was created with." );
@@ -219,28 +222,20 @@ extern "C" int common_main(int argc, const char* argv[]) {
219222 }
220223
221224 LogMessage (" Testing Set()." );
222- auto setResult = document.Set (firebase::firestore::MapFieldValue{
223- {" str" , firebase::firestore::FieldValue::String (" foo" )},
224- {" int" , firebase::firestore::FieldValue::Integer (123LL )}});
225- Await (setResult, " document.Set" );
226- if (setResult.status () != firebase::kFutureStatusComplete ) {
227- LogMessage (" ERROR: failed to write document." );
228- }
225+ Await (document.Set (firebase::firestore::MapFieldValue{
226+ {" str" , firebase::firestore::FieldValue::String (" foo" )},
227+ {" int" , firebase::firestore::FieldValue::Integer (123 )}}),
228+ " document.Set" );
229229
230230 LogMessage (" Testing Update()." );
231- auto updateResult = document.Update (firebase::firestore::MapFieldValue{
232- {" int" , firebase::firestore::FieldValue::Integer (321LL )}});
233- Await (updateResult, " document.Update" );
234- if (updateResult.status () != firebase::kFutureStatusComplete ) {
235- LogMessage (" ERROR: failed to write document." );
236- }
231+ Await (document.Update (firebase::firestore::MapFieldValue{
232+ {" int" , firebase::firestore::FieldValue::Integer (321 )}}),
233+ " document.Update" );
237234
238235 LogMessage (" Testing Get()." );
239- auto getDocumentResult = document.Get ();
240- Await (getDocumentResult, " document.Get" );
241- if (getDocumentResult.status () == firebase::kFutureStatusComplete ) {
242- const firebase::firestore::DocumentSnapshot* snapshot =
243- getDocumentResult.result ();
236+ auto doc_future = document.Get ();
237+ if (Await (doc_future, " document.Get" )) {
238+ const firebase::firestore::DocumentSnapshot* snapshot = doc_future.result ();
244239 if (snapshot == nullptr ) {
245240 LogMessage (" ERROR: failed to read document." );
246241 } else {
@@ -263,11 +258,7 @@ extern "C" int common_main(int argc, const char* argv[]) {
263258 }
264259
265260 LogMessage (" Testing Delete()." );
266- auto deleteResult = document.Delete ();
267- Await (deleteResult, " document.Delete" );
268- if (deleteResult.status () != firebase::kFutureStatusComplete ) {
269- LogMessage (" ERROR: failed to delete document." );
270- }
261+ Await (document.Delete (), " document.Delete" );
271262 LogMessage (" Tested document operations." );
272263
273264 TestEventListener<firebase::firestore::DocumentSnapshot>
@@ -285,34 +276,27 @@ extern "C" int common_main(int argc, const char* argv[]) {
285276 {" str" , firebase::firestore::FieldValue::String (" foo" )}});
286277 batch.Set (collection.Document (" two" ),
287278 firebase::firestore::MapFieldValue{
288- {" int" , firebase::firestore::FieldValue::Integer (123LL )}});
289- auto commitResult = batch.Commit ();
290- Await (commitResult, " batch.Commit" );
291- if (commitResult.status () != firebase::kFutureStatusComplete ) {
292- LogMessage (" ERROR: failed to write batch." );
293- }
279+ {" int" , firebase::firestore::FieldValue::Integer (123 )}});
280+ Await (batch.Commit (), " batch.Commit" );
294281 LogMessage (" Tested batch write." );
295282
296283 LogMessage (" Testing transaction." );
297- auto runTransactionResult = firestore->RunTransaction (
298- [collection](firebase::firestore::Transaction& transaction,
299- std::string& error_message) -> firebase::firestore::Error {
300- transaction.Update (
301- collection.Document (" one" ),
302- firebase::firestore::MapFieldValue{
303- {" int" , firebase::firestore::FieldValue::Integer (123LL )}});
304- transaction.Delete (collection.Document (" two" ));
305- transaction.Set (
306- collection.Document (" three" ),
307- firebase::firestore::MapFieldValue{
308- {" int" , firebase::firestore::FieldValue::Integer (321LL )}});
309- return firebase::firestore::kOk ;
310- });
311- Await (runTransactionResult, " firestore.RunTransaction" );
312- if (runTransactionResult.status () !=
313- firebase::kFutureStatusComplete ) {
314- LogMessage (" ERROR: failed to run transaction." );
315- }
284+ Await (
285+ firestore->RunTransaction (
286+ [collection](firebase::firestore::Transaction& transaction,
287+ std::string&) -> firebase::firestore::Error {
288+ transaction.Update (
289+ collection.Document (" one" ),
290+ firebase::firestore::MapFieldValue{
291+ {" int" , firebase::firestore::FieldValue::Integer (123 )}});
292+ transaction.Delete (collection.Document (" two" ));
293+ transaction.Set (
294+ collection.Document (" three" ),
295+ firebase::firestore::MapFieldValue{
296+ {" int" , firebase::firestore::FieldValue::Integer (321 )}});
297+ return firebase::firestore::kOk ;
298+ }),
299+ " firestore.RunTransaction" );
316300 LogMessage (" Tested transaction." );
317301
318302 LogMessage (" Testing query." );
@@ -321,11 +305,9 @@ extern "C" int common_main(int argc, const char* argv[]) {
321305 .WhereGreaterThan (" int" ,
322306 firebase::firestore::FieldValue::Boolean (true ))
323307 .Limit (3 );
324- auto getQueryResult = query.Get ();
325- Await (getQueryResult, " query.Get" );
326- if (getQueryResult.status () == firebase::kFutureStatusComplete ) {
327- const firebase::firestore::QuerySnapshot* snapshot =
328- getQueryResult.result ();
308+ auto query_future = query.Get ();
309+ if (Await (query_future, " query.Get" )) {
310+ const firebase::firestore::QuerySnapshot* snapshot = query_future.result ();
329311 if (snapshot == nullptr ) {
330312 LogMessage (" ERROR: failed to fetch query result." );
331313 } else {
0 commit comments