Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
63 changes: 33 additions & 30 deletions test/e2e/e2e_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -39,13 +39,13 @@ import 'tests/scheduler_tests.dart';
import 'tests/storage_tests.dart';

void main() {
late EmulatorHelper emulator;
late FunctionsHttpClient client;
late PubSubClient pubsubClient;
late FirestoreClient firestoreClient;
late DatabaseClient databaseClient;
late AuthClient authClient;
late StorageClient storageClient;
EmulatorHelper? emulator;
FunctionsHttpClient? client;
PubSubClient? pubsubClient;
FirestoreClient? firestoreClient;
DatabaseClient? databaseClient;
AuthClient? authClient;
StorageClient? storageClient;

// Debug: Show Directory.current.path at module load time
print('DEBUG e2e_test: Directory.current.path = ${Directory.current.path}');
Expand Down Expand Up @@ -89,26 +89,26 @@ void main() {

// Start the emulator
emulator = EmulatorHelper(projectPath: examplePath);
await emulator.start();
await emulator!.start();

// Create HTTP client
client = FunctionsHttpClient(emulator.functionsUrl);
client = FunctionsHttpClient(emulator!.functionsUrl);

// Create Pub/Sub client
pubsubClient = PubSubClient(emulator.pubsubUrl, 'demo-test');
pubsubClient = PubSubClient(emulator!.pubsubUrl, 'demo-test');

// Create Firestore client
firestoreClient = FirestoreClient(emulator.firestoreUrl);
firestoreClient = FirestoreClient(emulator!.firestoreUrl);

// Create Database client
databaseClient = DatabaseClient(emulator.databaseUrl, 'demo-test');
databaseClient = DatabaseClient(emulator!.databaseUrl, 'demo-test');

// Create Auth client
authClient = AuthClient(emulator.authUrl, 'demo-test');
authClient = AuthClient(emulator!.authUrl, 'demo-test');

// Create Storage client
storageClient = StorageClient(
emulator.storageUrl,
emulator!.storageUrl,
'demo-test.firebasestorage.app',
);

Expand All @@ -123,27 +123,30 @@ void main() {
print('========================================');
print('');

client.close();
pubsubClient.close();
firestoreClient.close();
databaseClient.close();
authClient.close();
storageClient.close();
await emulator.stop();
try {
client?.close();
pubsubClient?.close();
firestoreClient?.close();
databaseClient?.close();
authClient?.close();
storageClient?.close();
} finally {
await emulator?.stop();
}
});

// Run all test groups (pass closures to defer value access)
runHttpsOnRequestTests(() => client, () => emulator);
runHttpsOnCallTests(() => client);
runHttpsOnRequestTests(() => client!, () => emulator!);
runHttpsOnCallTests(() => client!);
runIntegrationTests(() => examplePath);
runPubSubTests(() => examplePath, () => pubsubClient, () => emulator);
runFirestoreTests(() => examplePath, () => firestoreClient, () => emulator);
runDatabaseTests(() => examplePath, () => databaseClient, () => emulator);
runIdentityTests(() => examplePath, () => authClient, () => emulator);
runStorageTests(() => examplePath, () => storageClient, () => emulator);
runPubSubTests(() => examplePath, () => pubsubClient!, () => emulator!);
runFirestoreTests(() => examplePath, () => firestoreClient!, () => emulator!);
runDatabaseTests(() => examplePath, () => databaseClient!, () => emulator!);
runIdentityTests(() => examplePath, () => authClient!, () => emulator!);
runStorageTests(() => examplePath, () => storageClient!, () => emulator!);
runSchedulerTests(
() => examplePath,
() => emulator,
() => emulator.functionsPort,
() => emulator!,
() => emulator!.functionsPort,
);
}
22 changes: 14 additions & 8 deletions test/e2e/helpers/emulator.dart
Original file line number Diff line number Diff line change
Expand Up @@ -116,14 +116,20 @@ class EmulatorHelper {
});

// Wait for emulator to be ready
print('Waiting for emulator to be ready...');
await _waitForReady();

// Additional wait to ensure Dart runtime is fully initialized
// The first request triggers Dart process startup which takes ~2-3 seconds
print('Waiting for Dart runtime to stabilize...');
await Future<void>.delayed(const Duration(seconds: 2));
print('✓ Emulator is ready');
try {
print('Waiting for emulator to be ready...');
await _waitForReady();

// Additional wait to ensure Dart runtime is fully initialized
// The first request triggers Dart process startup which takes ~2-3 seconds
print('Waiting for Dart runtime to stabilize...');
await Future<void>.delayed(const Duration(seconds: 2));
print('✓ Emulator is ready');
} catch (e) {
print('Error starting emulator: $e');
await stop();
rethrow;
}
}

/// Stops the Firebase emulator.
Expand Down
Loading