[pkg][tests] Clarify lifetimes
Change-Id: I343be8cf354c06a470bde3277489a0dabc751c29
Reviewed-on: https://fuchsia-review.googlesource.com/c/fuchsia/+/692528
Reviewed-by: Ben Keller <galbanum@google.com>
Fuchsia-Auto-Submit: Tamir Duberstein <tamird@google.com>
Commit-Queue: Auto-Submit <auto-submit@fuchsia-infra.iam.gserviceaccount.com>
diff --git a/src/sys/pkg/tests/omaha-client/src/lib.rs b/src/sys/pkg/tests/omaha-client/src/lib.rs
index 8f47f6fa..40fbb79 100644
--- a/src/sys/pkg/tests/omaha-client/src/lib.rs
+++ b/src/sys/pkg/tests/omaha-client/src/lib.rs
@@ -272,8 +272,10 @@
mounts.write_eager_package_config(json.to_string());
}
+ let mut svc = fs.dir("svc");
+
let paver = Arc::new(self.paver.unwrap_or_else(|| MockPaverServiceBuilder::new().build()));
- fs.dir("svc").add_fidl_service(move |stream: PaverRequestStream| {
+ svc.add_fidl_service(move |stream: PaverRequestStream| {
fasync::Task::spawn(
Arc::clone(&paver)
.run_paver_service(stream)
@@ -283,31 +285,34 @@
});
let resolver = Arc::new(MockResolverService::new(None));
- let resolver_clone = resolver.clone();
- fs.dir("svc").add_fidl_service(move |stream: PackageResolverRequestStream| {
- let resolver_clone = resolver_clone.clone();
- fasync::Task::spawn(
- Arc::clone(&resolver_clone)
- .run_resolver_service(stream)
- .unwrap_or_else(|e| panic!("error running resolver service {:#}", anyhow!(e))),
- )
- .detach()
- });
+ {
+ let resolver = resolver.clone();
+ svc.add_fidl_service(move |stream: PackageResolverRequestStream| {
+ fasync::Task::spawn(
+ Arc::clone(&resolver).run_resolver_service(stream).unwrap_or_else(|e| {
+ panic!("error running resolver service {:#}", anyhow!(e))
+ }),
+ )
+ .detach()
+ });
+ }
let cache = Arc::new(MockCache::new());
- let cache_clone = cache.clone();
- fs.dir("svc").add_fidl_service(move |stream: PackageCacheRequestStream| {
- fasync::Task::spawn(Arc::clone(&cache_clone).run_cache_service(stream)).detach()
- });
+ {
+ let cache = cache.clone();
+ svc.add_fidl_service(move |stream: PackageCacheRequestStream| {
+ fasync::Task::spawn(Arc::clone(&cache).run_cache_service(stream)).detach()
+ });
+ }
let config_optout = Arc::new(fuchsia_update_config_optout::Mock::new());
- fs.dir("svc").add_fidl_service({
+ svc.add_fidl_service({
let config_optout = Arc::clone(&config_optout);
move |stream| fasync::Task::spawn(Arc::clone(&config_optout).serve(stream)).detach()
});
let cup = Arc::new(fuchsia_pkg_cup::Mock::new(self.cup_info_map));
- fs.dir("svc").add_fidl_service({
+ svc.add_fidl_service({
let cup = Arc::clone(&cup);
move |stream| fasync::Task::spawn(Arc::clone(&cup).serve(stream)).detach()
});
@@ -319,7 +324,7 @@
send.lock().take().unwrap().send(()).unwrap();
Ok(())
})));
- fs.dir("svc").add_fidl_service(move |stream| {
+ svc.add_fidl_service(move |stream| {
fasync::Task::spawn(
Arc::clone(&reboot_service)
.run_reboot_service(stream)
@@ -330,32 +335,36 @@
// Set up verifier service.
let verifier = Arc::new(MockVerifierService::new(|_| Ok(())));
- let verifier_clone = Arc::clone(&verifier);
- fs.dir("svc").add_fidl_service(move |stream| {
- fasync::Task::spawn(Arc::clone(&verifier_clone).run_blobfs_verifier_service(stream))
- .detach()
- });
+ {
+ let verifier = Arc::clone(&verifier);
+ svc.add_fidl_service(move |stream| {
+ fasync::Task::spawn(Arc::clone(&verifier).run_blobfs_verifier_service(stream))
+ .detach()
+ });
+ }
// Set up crash reporter service.
let crash_reporter = Arc::new(
self.crash_reporter.unwrap_or_else(|| MockCrashReporterService::new(|_| Ok(()))),
);
- let crash_reporter_clone = Arc::clone(&crash_reporter);
- fs.dir("svc").add_fidl_service(move |stream| {
- fasync::Task::spawn(
- Arc::clone(&crash_reporter_clone).run_crash_reporter_service(stream),
- )
- .detach()
- });
+ {
+ let crash_reporter = Arc::clone(&crash_reporter);
+ svc.add_fidl_service(move |stream| {
+ fasync::Task::spawn(Arc::clone(&crash_reporter).run_crash_reporter_service(stream))
+ .detach()
+ });
+ }
let mut use_real_system_updater = true;
if let Some(installer) = self.installer {
use_real_system_updater = false;
let installer = Arc::new(installer);
- let installer_clone = Arc::clone(&installer);
- fs.dir("svc").add_fidl_service(move |stream| {
- fasync::Task::spawn(Arc::clone(&installer_clone).run_service(stream)).detach()
- });
+ {
+ let installer = Arc::clone(&installer);
+ svc.add_fidl_service(move |stream| {
+ fasync::Task::spawn(Arc::clone(&installer).run_service(stream)).detach()
+ });
+ }
}
let fs_holder = Mutex::new(Some(fs));
@@ -1530,19 +1539,21 @@
async fn test_omaha_client_installation_deferred() {
let (throttle_hook, throttler) = mphooks::throttle();
let config_status_response = Arc::new(Mutex::new(Some(paver::ConfigurationStatus::Pending)));
- let config_status_response_clone = Arc::clone(&config_status_response);
- let env = TestEnvBuilder::new()
- .paver(
- MockPaverServiceBuilder::new()
- .insert_hook(throttle_hook)
- .insert_hook(mphooks::config_status(move |_| {
- Ok(config_status_response_clone.lock().as_ref().unwrap().clone())
- }))
- .build(),
- )
- .default_with_response(OmahaResponse::Update)
- .build()
- .await;
+ let env = {
+ let config_status_response = Arc::clone(&config_status_response);
+ TestEnvBuilder::new()
+ .paver(
+ MockPaverServiceBuilder::new()
+ .insert_hook(throttle_hook)
+ .insert_hook(mphooks::config_status(move |_| {
+ Ok(config_status_response.lock().as_ref().unwrap().clone())
+ }))
+ .build(),
+ )
+ .default_with_response(OmahaResponse::Update)
+ .build()
+ .await
+ };
// Allow the paver to emit enough events to unblock the CommitStatusProvider FIDL server, but
// few enough to guarantee the commit is still pending.
diff --git a/src/sys/pkg/tests/pkg-cache/src/lib.rs b/src/sys/pkg/tests/pkg-cache/src/lib.rs
index af4d6a7..88f3c82 100644
--- a/src/sys/pkg/tests/pkg-cache/src/lib.rs
+++ b/src/sys/pkg/tests/pkg-cache/src/lib.rs
@@ -323,59 +323,67 @@
// Cobalt mocks so we can assert that we emit the correct events
let logger_factory = Arc::new(MockLoggerFactory::new());
- let logger_factory_clone = Arc::clone(&logger_factory);
- local_child_svc_dir
- .add_entry(
- fidl_fuchsia_cobalt::LoggerFactoryMarker::PROTOCOL_NAME,
- vfs::service::host(move |stream| {
- Arc::clone(&logger_factory_clone).run_logger_factory(stream)
- }),
- )
- .unwrap();
+ {
+ let logger_factory = Arc::clone(&logger_factory);
+ local_child_svc_dir
+ .add_entry(
+ fidl_fuchsia_cobalt::LoggerFactoryMarker::PROTOCOL_NAME,
+ vfs::service::host(move |stream| {
+ Arc::clone(&logger_factory).run_logger_factory(stream)
+ }),
+ )
+ .unwrap();
+ }
// Paver service, so we can verify that we submit the expected requests and so that
// we can verify if the paver service returns errors, that we handle them correctly.
let paver_service = Arc::new(
self.paver_service_builder.unwrap_or_else(|| MockPaverServiceBuilder::new()).build(),
);
- let paver_service_clone = Arc::clone(&paver_service);
- local_child_svc_dir
- .add_entry(
- fidl_fuchsia_paver::PaverMarker::PROTOCOL_NAME,
- vfs::service::host(move |stream| {
- Arc::clone(&paver_service_clone)
- .run_paver_service(stream)
- .unwrap_or_else(|e| panic!("error running paver service: {:#}", anyhow!(e)))
- }),
- )
- .unwrap();
+ {
+ let paver_service = Arc::clone(&paver_service);
+ local_child_svc_dir
+ .add_entry(
+ fidl_fuchsia_paver::PaverMarker::PROTOCOL_NAME,
+ vfs::service::host(move |stream| {
+ Arc::clone(&paver_service).run_paver_service(stream).unwrap_or_else(|e| {
+ panic!("error running paver service: {:#}", anyhow!(e))
+ })
+ }),
+ )
+ .unwrap();
+ }
// Set up verifier service so we can verify that we reject GC until after the verifier
// commits this boot/slot as successful, lest we break rollbacks.
let verifier_service = Arc::new(MockVerifierService::new(|_| Ok(())));
- let verifier_service_clone = Arc::clone(&verifier_service);
- local_child_svc_dir
- .add_entry(
- fidl_fuchsia_update_verify::BlobfsVerifierMarker::PROTOCOL_NAME,
- vfs::service::host(move |stream| {
- Arc::clone(&verifier_service_clone).run_blobfs_verifier_service(stream)
- }),
- )
- .unwrap();
+ {
+ let verifier_service = Arc::clone(&verifier_service);
+ local_child_svc_dir
+ .add_entry(
+ fidl_fuchsia_update_verify::BlobfsVerifierMarker::PROTOCOL_NAME,
+ vfs::service::host(move |stream| {
+ Arc::clone(&verifier_service).run_blobfs_verifier_service(stream)
+ }),
+ )
+ .unwrap();
+ }
// fuchsia.boot/Arguments service to supply the hash of the system_image package.
let mut arguments_service = MockBootArgumentsService::new(HashMap::new());
system_image.map(|hash| arguments_service.insert_pkgfs_boot_arg(hash));
let arguments_service = Arc::new(arguments_service);
- let arguments_service_clone = Arc::clone(&arguments_service);
- local_child_svc_dir
- .add_entry(
- fidl_fuchsia_boot::ArgumentsMarker::PROTOCOL_NAME,
- vfs::service::host(move |stream| {
- Arc::clone(&arguments_service_clone).handle_request_stream(stream)
- }),
- )
- .unwrap();
+ {
+ let arguments_service = Arc::clone(&arguments_service);
+ local_child_svc_dir
+ .add_entry(
+ fidl_fuchsia_boot::ArgumentsMarker::PROTOCOL_NAME,
+ vfs::service::host(move |stream| {
+ Arc::clone(&arguments_service).handle_request_stream(stream)
+ }),
+ )
+ .unwrap();
+ }
let local_child_out_dir = vfs::pseudo_directory! {
"blob" => vfs::remote::remote_dir(blobfs.root_proxy()),
diff --git a/src/sys/pkg/tests/system-update-checker/src/lib.rs b/src/sys/pkg/tests/system-update-checker/src/lib.rs
index fc70438..a436ab8 100644
--- a/src/sys/pkg/tests/system-update-checker/src/lib.rs
+++ b/src/sys/pkg/tests/system-update-checker/src/lib.rs
@@ -98,28 +98,34 @@
.unwrap();
fs.dir("pkgfs").add_remote("system", pkgfs_system);
+ let mut svc = fs.dir("svc");
+
// Setup the mock resolver service.
let resolver = Arc::new(MockResolverService::new(None));
- let resolver_clone = Arc::clone(&resolver);
- fs.dir("svc").add_fidl_service(move |stream| {
- fasync::Task::spawn(
- Arc::clone(&resolver_clone)
- .run_resolver_service(stream)
- .unwrap_or_else(|e| panic!("error running resolver service {:?}", e)),
- )
- .detach()
- });
+ {
+ let resolver = Arc::clone(&resolver);
+ svc.add_fidl_service(move |stream| {
+ fasync::Task::spawn(
+ Arc::clone(&resolver)
+ .run_resolver_service(stream)
+ .unwrap_or_else(|e| panic!("error running resolver service {:?}", e)),
+ )
+ .detach()
+ });
+ }
// Setup the mock installer service.
let installer = Arc::new(self.installer);
- let installer_clone = Arc::clone(&installer);
- fs.dir("svc").add_fidl_service(move |stream| {
- fasync::Task::spawn(Arc::clone(&installer_clone).run_service(stream)).detach()
- });
+ {
+ let installer = Arc::clone(&installer);
+ svc.add_fidl_service(move |stream| {
+ fasync::Task::spawn(Arc::clone(&installer).run_service(stream)).detach()
+ });
+ }
// Setup the mock paver service
let paver = Arc::new(self.paver.unwrap_or_else(|| MockPaverServiceBuilder::new().build()));
- fs.dir("svc").add_fidl_service(move |stream: PaverRequestStream| {
+ svc.add_fidl_service(move |stream: PaverRequestStream| {
fasync::Task::spawn(
Arc::clone(&paver)
.run_paver_service(stream)
@@ -131,23 +137,27 @@
// Setup the mock space service
let space =
Arc::new(self.space.unwrap_or_else(|| MockSpaceService::new(Box::new(|| Ok(())))));
- let space_clone = Arc::clone(&space);
- fs.dir("svc").add_fidl_service(move |stream| {
- fasync::Task::spawn(
- Arc::clone(&space_clone)
- .run_space_service(stream)
- .unwrap_or_else(|e| panic!("error running space service {:?}", e)),
- )
- .detach()
- });
+ {
+ let space = Arc::clone(&space);
+ svc.add_fidl_service(move |stream| {
+ fasync::Task::spawn(
+ Arc::clone(&space)
+ .run_space_service(stream)
+ .unwrap_or_else(|e| panic!("error running space service {:?}", e)),
+ )
+ .detach()
+ });
+ }
// Setup the mock verifier service.
let verifier = Arc::new(MockVerifierService::new(|_| Ok(())));
- let verifier_clone = Arc::clone(&verifier);
- fs.dir("svc").add_fidl_service(move |stream| {
- fasync::Task::spawn(Arc::clone(&verifier_clone).run_blobfs_verifier_service(stream))
- .detach()
- });
+ {
+ let verifier = Arc::clone(&verifier);
+ svc.add_fidl_service(move |stream| {
+ fasync::Task::spawn(Arc::clone(&verifier).run_blobfs_verifier_service(stream))
+ .detach()
+ });
+ }
let fs_holder = Mutex::new(Some(fs));
let builder = RealmBuilder::new().await.expect("Failed to create test realm builder");
@@ -600,11 +610,13 @@
#[fasync::run_singlethreaded(test)]
async fn test_update_manager_out_of_space_gc_succeeds() {
let called = Arc::new(AtomicU32::new(0));
- let called_clone = Arc::clone(&called);
- let space = MockSpaceService::new(Box::new(move || {
- called_clone.fetch_add(1, Ordering::SeqCst);
- Ok(())
- }));
+ let space = {
+ let called = Arc::clone(&called);
+ MockSpaceService::new(Box::new(move || {
+ called.fetch_add(1, Ordering::SeqCst);
+ Ok(())
+ }))
+ };
let env = TestEnvBuilder::new().space(space).build().await;
@@ -660,11 +672,13 @@
#[fasync::run_singlethreaded(test)]
async fn test_update_manager_out_of_space_gc_fails() {
let called = Arc::new(AtomicU32::new(0));
- let called_clone = Arc::clone(&called);
- let space = MockSpaceService::new(Box::new(move || {
- called_clone.fetch_add(1, Ordering::SeqCst);
- Err(ErrorCode::Internal)
- }));
+ let space = {
+ let called = Arc::clone(&called);
+ MockSpaceService::new(Box::new(move || {
+ called.fetch_add(1, Ordering::SeqCst);
+ Err(ErrorCode::Internal)
+ }))
+ };
let env = TestEnvBuilder::new().space(space).build().await;
@@ -721,18 +735,20 @@
async fn test_installation_deferred() {
let (throttle_hook, throttler) = mphooks::throttle();
let config_status_response = Arc::new(Mutex::new(Some(paver::ConfigurationStatus::Pending)));
- let config_status_response_clone = Arc::clone(&config_status_response);
- let env = TestEnvBuilder::new()
- .paver(
- MockPaverServiceBuilder::new()
- .insert_hook(throttle_hook)
- .insert_hook(mphooks::config_status(move |_| {
- Ok(config_status_response_clone.lock().as_ref().unwrap().clone())
- }))
- .build(),
- )
- .build()
- .await;
+ let env = {
+ let config_status_response = Arc::clone(&config_status_response);
+ TestEnvBuilder::new()
+ .paver(
+ MockPaverServiceBuilder::new()
+ .insert_hook(throttle_hook)
+ .insert_hook(mphooks::config_status(move |_| {
+ Ok(config_status_response.lock().as_ref().unwrap().clone())
+ }))
+ .build(),
+ )
+ .build()
+ .await
+ };
env.proxies.resolver.url("fuchsia-pkg://fuchsia.com/update").resolve(
&env.proxies
diff --git a/src/sys/pkg/tests/system-update-committer/src/lib.rs b/src/sys/pkg/tests/system-update-committer/src/lib.rs
index 4d6d79c..df9c1a6 100644
--- a/src/sys/pkg/tests/system-update-committer/src/lib.rs
+++ b/src/sys/pkg/tests/system-update-committer/src/lib.rs
@@ -70,44 +70,52 @@
.unwrap();
fs.dir("config").add_remote("data", config_data_proxy);
+ let mut svc = fs.dir("svc");
+
// Set up paver service.
let paver_service_builder =
self.paver_service_builder.unwrap_or_else(|| MockPaverServiceBuilder::new());
let paver_service = Arc::new(paver_service_builder.build());
- let paver_service_clone = Arc::clone(&paver_service);
- fs.dir("svc").add_fidl_service(move |stream| {
- fasync::Task::spawn(
- Arc::clone(&paver_service_clone)
- .run_paver_service(stream)
- .unwrap_or_else(|e| panic!("error running paver service: {:#}", anyhow!(e))),
- )
- .detach()
- });
+ {
+ let paver_service = Arc::clone(&paver_service);
+ svc.add_fidl_service(move |stream| {
+ fasync::Task::spawn(
+ Arc::clone(&paver_service).run_paver_service(stream).unwrap_or_else(|e| {
+ panic!("error running paver service: {:#}", anyhow!(e))
+ }),
+ )
+ .detach()
+ });
+ }
// Set up reboot service.
let reboot_service = Arc::new(self.reboot_service.unwrap_or_else(|| {
MockRebootService::new(Box::new(|_| panic!("unexpected call to reboot")))
}));
- let reboot_service_clone = Arc::clone(&reboot_service);
- fs.dir("svc").add_fidl_service(move |stream| {
- fasync::Task::spawn(
- Arc::clone(&reboot_service_clone)
- .run_reboot_service(stream)
- .unwrap_or_else(|e| panic!("error running reboot service: {:#}", anyhow!(e))),
- )
- .detach()
- });
+ {
+ let reboot_service = Arc::clone(&reboot_service);
+ svc.add_fidl_service(move |stream| {
+ fasync::Task::spawn(
+ Arc::clone(&reboot_service).run_reboot_service(stream).unwrap_or_else(|e| {
+ panic!("error running reboot service: {:#}", anyhow!(e))
+ }),
+ )
+ .detach()
+ });
+ }
// Set up verifier service.
let verifier_service =
Arc::new(self.verifier_service.unwrap_or_else(|| MockVerifierService::new(|_| Ok(()))));
- let verifier_service_clone = Arc::clone(&verifier_service);
- fs.dir("svc").add_fidl_service(move |stream| {
- fasync::Task::spawn(
- Arc::clone(&verifier_service_clone).run_blobfs_verifier_service(stream),
- )
- .detach()
- });
+ {
+ let verifier_service = Arc::clone(&verifier_service);
+ svc.add_fidl_service(move |stream| {
+ fasync::Task::spawn(
+ Arc::clone(&verifier_service).run_blobfs_verifier_service(stream),
+ )
+ .detach()
+ });
+ }
let fs_holder = Mutex::new(Some(fs));
let builder = RealmBuilder::new().await.expect("Failed to create test realm builder");