36
36
#include " firebase/auth.h"
37
37
#include " firebase/database.h"
38
38
#include " firebase/internal/platform.h"
39
+ #include " firebase/storage.h"
39
40
#include " firebase/util.h"
40
41
#include " firebase_test_framework.h" // NOLINT
41
42
@@ -106,6 +107,14 @@ class FirebaseAppCheckTest : public FirebaseTest {
106
107
// Initialize everything needed for Database tests.
107
108
void InitializeAppAuthDatabase ();
108
109
110
+ // Initialize Firebase Storage.
111
+ void InitializeStorage ();
112
+ // Shut down Firebase Storage.
113
+ void TerminateStorage ();
114
+
115
+ // Initialize everything needed for Storage tests.
116
+ void InitializeAppAuthStorage ();
117
+
109
118
firebase::database::DatabaseReference CreateWorkingPath (
110
119
bool suppress_cleanup = false );
111
120
@@ -114,8 +123,9 @@ class FirebaseAppCheckTest : public FirebaseTest {
114
123
115
124
bool initialized_;
116
125
firebase::database::Database* database_;
117
-
118
126
std::vector<firebase::database::DatabaseReference> cleanup_paths_;
127
+
128
+ firebase::storage::Storage* storage_;
119
129
};
120
130
121
131
// Listens for token changed notifications
@@ -157,6 +167,8 @@ void FirebaseAppCheckTest::TerminateAppCheck() {
157
167
delete app_check;
158
168
}
159
169
}
170
+
171
+ firebase::app_check::AppCheck::SetAppCheckProviderFactory (nullptr );
160
172
}
161
173
162
174
void FirebaseAppCheckTest::InitializeApp () {
@@ -189,6 +201,7 @@ FirebaseAppCheckTest::FirebaseAppCheckTest()
189
201
app_ (nullptr ),
190
202
auth_(nullptr ),
191
203
database_(nullptr ),
204
+ storage_(nullptr ),
192
205
cleanup_paths_() {
193
206
FindFirebaseConfig (FIREBASE_CONFIG_STRING);
194
207
}
@@ -201,6 +214,7 @@ FirebaseAppCheckTest::~FirebaseAppCheckTest() {
201
214
void FirebaseAppCheckTest::TearDown () {
202
215
// Teardown all the products
203
216
TerminateDatabase ();
217
+ TerminateStorage ();
204
218
TerminateAuth ();
205
219
TerminateAppCheck ();
206
220
TerminateApp ();
@@ -298,6 +312,43 @@ void FirebaseAppCheckTest::InitializeAppAuthDatabase() {
298
312
InitializeDatabase ();
299
313
}
300
314
315
+ void FirebaseAppCheckTest::InitializeStorage () {
316
+ LogDebug (" Initializing Firebase Storage." );
317
+
318
+ ::firebase::ModuleInitializer initializer;
319
+ initializer.Initialize (
320
+ app_, &storage_, [](::firebase::App* app, void * target) {
321
+ LogDebug (" Attempting to initialize Firebase Storage." );
322
+ ::firebase::InitResult result;
323
+ *reinterpret_cast <firebase::storage::Storage**>(target) =
324
+ firebase::storage::Storage::GetInstance (app, &result);
325
+ return result;
326
+ });
327
+
328
+ WaitForCompletion (initializer.InitializeLastResult (), " InitializeStorage" );
329
+
330
+ ASSERT_EQ (initializer.InitializeLastResult ().error (), 0 )
331
+ << initializer.InitializeLastResult ().error_message ();
332
+
333
+ LogDebug (" Successfully initialized Firebase Storage." );
334
+ }
335
+
336
+ void FirebaseAppCheckTest::TerminateStorage () {
337
+ if (storage_) {
338
+ LogDebug (" Shutdown the Storage library." );
339
+ delete storage_;
340
+ storage_ = nullptr ;
341
+ }
342
+
343
+ ProcessEvents (100 );
344
+ }
345
+
346
+ void FirebaseAppCheckTest::InitializeAppAuthStorage () {
347
+ InitializeApp ();
348
+ InitializeAuth ();
349
+ InitializeStorage ();
350
+ }
351
+
301
352
void FirebaseAppCheckTest::SignIn () {
302
353
if (auth_->current_user () != nullptr ) {
303
354
// Already signed in.
@@ -674,4 +725,31 @@ TEST_F(FirebaseAppCheckTest, DISABLED_TestRunTransaction) {
674
725
}
675
726
}
676
727
728
+ TEST_F (FirebaseAppCheckTest, TestStorageReadFile) {
729
+ InitializeAppCheckWithDebug ();
730
+ InitializeAppAuthStorage ();
731
+ firebase::storage::StorageReference ref = storage_->GetReference (" test.txt" );
732
+ EXPECT_TRUE (ref.is_valid ());
733
+ const size_t kBufferSize = 128 ;
734
+ char buffer[kBufferSize ];
735
+ memset (buffer, 0 , sizeof (buffer));
736
+ firebase::Future<size_t > future = ref.GetBytes (buffer, kBufferSize );
737
+ WaitForCompletion (future, " GetBytes" , firebase::storage::kErrorNone );
738
+ LogDebug (" buffer: %s" , buffer);
739
+ }
740
+
741
+ TEST_F (FirebaseAppCheckTest, TestStorageReadFileUnauthenticated) {
742
+ // Don't set up AppCheck
743
+ InitializeAppAuthStorage ();
744
+ firebase::storage::StorageReference ref = storage_->GetReference (" test.txt" );
745
+ EXPECT_TRUE (ref.is_valid ());
746
+ const size_t kBufferSize = 128 ;
747
+ char buffer[kBufferSize ];
748
+ memset (buffer, 0 , sizeof (buffer));
749
+ firebase::Future<size_t > future = ref.GetBytes (buffer, kBufferSize );
750
+ WaitForCompletion (future, " GetBytes" ,
751
+ firebase::storage::kErrorUnauthenticated );
752
+ LogDebug (" buffer: %s" , buffer);
753
+ }
754
+
677
755
} // namespace firebase_testapp_automated
0 commit comments