3636#include " firebase/auth.h"
3737#include " firebase/database.h"
3838#include " firebase/internal/platform.h"
39+ #include " firebase/storage.h"
3940#include " firebase/util.h"
4041#include " firebase_test_framework.h" // NOLINT
4142
@@ -106,6 +107,14 @@ class FirebaseAppCheckTest : public FirebaseTest {
106107 // Initialize everything needed for Database tests.
107108 void InitializeAppAuthDatabase ();
108109
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+
109118 firebase::database::DatabaseReference CreateWorkingPath (
110119 bool suppress_cleanup = false );
111120
@@ -114,8 +123,9 @@ class FirebaseAppCheckTest : public FirebaseTest {
114123
115124 bool initialized_;
116125 firebase::database::Database* database_;
117-
118126 std::vector<firebase::database::DatabaseReference> cleanup_paths_;
127+
128+ firebase::storage::Storage* storage_;
119129};
120130
121131// Listens for token changed notifications
@@ -157,6 +167,8 @@ void FirebaseAppCheckTest::TerminateAppCheck() {
157167 delete app_check;
158168 }
159169 }
170+
171+ firebase::app_check::AppCheck::SetAppCheckProviderFactory (nullptr );
160172}
161173
162174void FirebaseAppCheckTest::InitializeApp () {
@@ -189,6 +201,7 @@ FirebaseAppCheckTest::FirebaseAppCheckTest()
189201 app_ (nullptr ),
190202 auth_(nullptr ),
191203 database_(nullptr ),
204+ storage_(nullptr ),
192205 cleanup_paths_() {
193206 FindFirebaseConfig (FIREBASE_CONFIG_STRING);
194207}
@@ -201,6 +214,7 @@ FirebaseAppCheckTest::~FirebaseAppCheckTest() {
201214void FirebaseAppCheckTest::TearDown () {
202215 // Teardown all the products
203216 TerminateDatabase ();
217+ TerminateStorage ();
204218 TerminateAuth ();
205219 TerminateAppCheck ();
206220 TerminateApp ();
@@ -298,6 +312,43 @@ void FirebaseAppCheckTest::InitializeAppAuthDatabase() {
298312 InitializeDatabase ();
299313}
300314
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+
301352void FirebaseAppCheckTest::SignIn () {
302353 if (auth_->current_user () != nullptr ) {
303354 // Already signed in.
@@ -674,4 +725,31 @@ TEST_F(FirebaseAppCheckTest, DISABLED_TestRunTransaction) {
674725 }
675726}
676727
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+
677755} // namespace firebase_testapp_automated
0 commit comments