[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");