Adding no-reboot capability + clean-up
Labstation requires that reboots be done after provisioning is complete
due to synchronization issues; as such we add the capability to noop
dut reboot in those cases via command line arg. Also general clean-up.
BUG=None
TEST=unit
Change-Id: I8e4cea7841a35988889c201440bf07617b016f4d
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/dev-util/+/3027288
Reviewed-by: Jaques Clapauch <jaquesc@google.com>
Reviewed-by: C Shapiro <shapiroc@chromium.org>
Commit-Queue: Jaques Clapauch <jaquesc@google.com>
Tested-by: Jaques Clapauch <jaquesc@google.com>
Auto-Submit: Jaques Clapauch <jaquesc@google.com>
diff --git a/src/chromiumos/test/provision/cmd/provisionserver/bootstrap/services/ashservice/ashservice.go b/src/chromiumos/test/provision/cmd/provisionserver/bootstrap/services/ashservice/ashservice.go
index 3fcc3d0..622e4b9 100644
--- a/src/chromiumos/test/provision/cmd/provisionserver/bootstrap/services/ashservice/ashservice.go
+++ b/src/chromiumos/test/provision/cmd/provisionserver/bootstrap/services/ashservice/ashservice.go
@@ -22,7 +22,7 @@
// File specific consts
const (
autotestDir = "/usr/local/autotest/deps/chrome_test/test_src/out/Release/"
- stagingDirectory = "/tmp/_tls_chrome_deploy"
+ stagingDirectory = "/tmp/_provisioning_service_chrome_deploy"
targetDir = "/opt/google/chrome"
tastDir = "/usr/local/libexec/chrome-binary-tests/"
)
@@ -76,7 +76,7 @@
func NewAshService(dutName string, dutClient api.DutServiceClient, wiringConn *grpc.ClientConn, req *api.InstallAshRequest) AshService {
service := AshService{
- connection: services.NewServiceAdapter(dutName, dutClient, wiringConn),
+ connection: services.NewServiceAdapter(dutName, dutClient, wiringConn, false /*noRebot*/),
imagePath: req.AshImagePath,
}
diff --git a/src/chromiumos/test/provision/cmd/provisionserver/bootstrap/services/crosservice/crosservice.go b/src/chromiumos/test/provision/cmd/provisionserver/bootstrap/services/crosservice/crosservice.go
index 37009c5..449c359 100644
--- a/src/chromiumos/test/provision/cmd/provisionserver/bootstrap/services/crosservice/crosservice.go
+++ b/src/chromiumos/test/provision/cmd/provisionserver/bootstrap/services/crosservice/crosservice.go
@@ -28,9 +28,9 @@
dlcSpecs []*api.InstallCrosRequest_DLCSpec
}
-func NewCrOSService(dutName string, dutClient api.DutServiceClient, wiringConn *grpc.ClientConn, req *api.InstallCrosRequest) CrOSService {
+func NewCrOSService(dutName string, dutClient api.DutServiceClient, wiringConn *grpc.ClientConn, noReboot bool, req *api.InstallCrosRequest) CrOSService {
return CrOSService{
- connection: services.NewServiceAdapter(dutName, dutClient, wiringConn),
+ connection: services.NewServiceAdapter(dutName, dutClient, wiringConn, noReboot),
imagePath: req.CrosImagePath,
preserverStateful: req.PreserveStateful,
dlcSpecs: req.DlcSpecs,
diff --git a/src/chromiumos/test/provision/cmd/provisionserver/bootstrap/services/lacrosservice/lacrosservice.go b/src/chromiumos/test/provision/cmd/provisionserver/bootstrap/services/lacrosservice/lacrosservice.go
index 06298dd..f85ee74 100644
--- a/src/chromiumos/test/provision/cmd/provisionserver/bootstrap/services/lacrosservice/lacrosservice.go
+++ b/src/chromiumos/test/provision/cmd/provisionserver/bootstrap/services/lacrosservice/lacrosservice.go
@@ -31,7 +31,7 @@
func NewLaCrOSService(dutName string, dutClient api.DutServiceClient, wiringConn *grpc.ClientConn, req *api.InstallLacrosRequest) (LaCrOSService, error) {
service := LaCrOSService{
- connection: services.NewServiceAdapter(dutName, dutClient, wiringConn),
+ connection: services.NewServiceAdapter(dutName, dutClient, wiringConn, false /*noReboot*/),
imagePath: req.LacrosImagePath,
}
diff --git a/src/chromiumos/test/provision/cmd/provisionserver/bootstrap/services/serviceadapterinterface.go b/src/chromiumos/test/provision/cmd/provisionserver/bootstrap/services/serviceadapterinterface.go
index b4fdc37..ea3f12e 100644
--- a/src/chromiumos/test/provision/cmd/provisionserver/bootstrap/services/serviceadapterinterface.go
+++ b/src/chromiumos/test/provision/cmd/provisionserver/bootstrap/services/serviceadapterinterface.go
@@ -32,13 +32,15 @@
dutName string
dutClient api.DutServiceClient
wiringConn *grpc.ClientConn
+ noReboot bool
}
-func NewServiceAdapter(dutName string, dutClient api.DutServiceClient, wiringConn *grpc.ClientConn) ServiceAdapter {
+func NewServiceAdapter(dutName string, dutClient api.DutServiceClient, wiringConn *grpc.ClientConn, noReboot bool) ServiceAdapter {
return ServiceAdapter{
dutName: dutName,
dutClient: dutClient,
wiringConn: wiringConn,
+ noReboot: noReboot,
}
}
@@ -67,6 +69,10 @@
// Restart restarts a DUT
func (s ServiceAdapter) Restart(ctx context.Context) error {
+ if s.noReboot {
+ return nil
+ }
+
req := api.RestartRequest{
Args: []string{},
}
diff --git a/src/chromiumos/test/provision/cmd/provisionserver/main.go b/src/chromiumos/test/provision/cmd/provisionserver/main.go
index a4b4c8d..2eb94af 100644
--- a/src/chromiumos/test/provision/cmd/provisionserver/main.go
+++ b/src/chromiumos/test/provision/cmd/provisionserver/main.go
@@ -49,8 +49,9 @@
os.Exit(func() int {
version := flag.Bool("version", false, "print version and exit.")
dutServiceAddress := flag.String("dut-service-address", "", "grcp address for dut-service.")
- dutName := flag.String("dut-name", "", "The name of the DUT to be interfaced with.")
+ dutName := flag.String("dut-name", "", "the name of the DUT to be interfaced with.")
wiringAddress := flag.String("wiring-address", "", "wiring address TLW.")
+ noReboot := flag.Bool("no-reboot", false, "don't reboot DUT after install (labstation-specific).")
flag.Parse()
if *version {
@@ -96,7 +97,7 @@
}
defer wiringConn.Close()
- server, err := newProvisionServer(l, logger, *dutName, dutConn, wiringConn)
+ server, err := newProvisionServer(l, logger, *dutName, dutConn, wiringConn, *noReboot)
if err != nil {
logger.Fatalln("Failed to start provisionservice server: ", err)
}
diff --git a/src/chromiumos/test/provision/cmd/provisionserver/provisionserver.go b/src/chromiumos/test/provision/cmd/provisionserver/provisionserver.go
index fcf4bd7..ee92d60 100644
--- a/src/chromiumos/test/provision/cmd/provisionserver/provisionserver.go
+++ b/src/chromiumos/test/provision/cmd/provisionserver/provisionserver.go
@@ -34,10 +34,11 @@
dutName string
dutClient api.DutServiceClient
wiringConn *grpc.ClientConn
+ noReboot bool
}
// newProvisionServer creates a new provision service server to listen to rpc requests.
-func newProvisionServer(l net.Listener, logger *log.Logger, dutName string, conn *grpc.ClientConn, wiringConn *grpc.ClientConn) (*grpc.Server, error) {
+func newProvisionServer(l net.Listener, logger *log.Logger, dutName string, conn *grpc.ClientConn, wiringConn *grpc.ClientConn, noReboot bool) (*grpc.Server, error) {
s := &ProvisionServer{
Manager: lro.New(),
logger: logger,
@@ -61,7 +62,7 @@
func (s *ProvisionServer) InstallCros(ctx context.Context, req *api.InstallCrosRequest) (*longrunning.Operation, error) {
s.logger.Println("Received api.InstallCrosRequest: ", *req)
op := s.Manager.NewOperation()
- cs := crosservice.NewCrOSService(s.dutName, s.dutClient, s.wiringConn, req)
+ cs := crosservice.NewCrOSService(s.dutName, s.dutClient, s.wiringConn, s.noReboot, req)
response := api.InstallCrosResponse{}
if s.provision(ctx, &cs, op) == nil {
response.Outcome = &api.InstallCrosResponse_Success{}
diff --git a/src/chromiumos/test/provision/cmd/provisionserver/provisionserver_test.go b/src/chromiumos/test/provision/cmd/provisionserver/provisionserver_test.go
index 9ee6d18..9502e25 100644
--- a/src/chromiumos/test/provision/cmd/provisionserver/provisionserver_test.go
+++ b/src/chromiumos/test/provision/cmd/provisionserver/provisionserver_test.go
@@ -532,10 +532,10 @@
st := as.GetFirstState()
gomock.InOrder(
- sam.EXPECT().DeleteDirectory(gomock.Any(), gomock.Eq("/tmp/_tls_chrome_deploy")).Return(nil),
- sam.EXPECT().CreateDirectories(gomock.Any(), gomock.Eq([]string{"/tmp/_tls_chrome_deploy"})).Return(nil),
+ sam.EXPECT().DeleteDirectory(gomock.Any(), gomock.Eq("/tmp/_provisioning_service_chrome_deploy")).Return(nil),
+ sam.EXPECT().CreateDirectories(gomock.Any(), gomock.Eq([]string{"/tmp/_provisioning_service_chrome_deploy"})).Return(nil),
sam.EXPECT().CopyData(gomock.Any(), "path/to/image").Return("image_url", nil),
- sam.EXPECT().RunCmd(gomock.Any(), "", []string{"curl", "image_url", "|", "tar", "--ignore-command-error", "--overwrite", "--preserve-permissions", "--directory=/tmp/_tls_chrome_deploy", "-xf", "-"}).Return("", nil),
+ sam.EXPECT().RunCmd(gomock.Any(), "", []string{"curl", "image_url", "|", "tar", "--ignore-command-error", "--overwrite", "--preserve-permissions", "--directory=/tmp/_provisioning_service_chrome_deploy", "-xf", "-"}).Return("", nil),
sam.EXPECT().CreateDirectories(gomock.Any(), gomock.Eq([]string{"/opt/google/chrome", "/usr/local/autotest/deps/chrome_test/test_src/out/Release/", "/usr/local/libexec/chrome-binary-tests/"})).Return(nil),
sam.EXPECT().RunCmd(gomock.Any(), "stop", []string{"ui"}).Return("", nil),
sam.EXPECT().RunCmd(gomock.Any(), "lsof", []string{"/opt/google/chrome/chrome"}).Return("", errors.New("chrome is in use!")),
@@ -556,42 +556,42 @@
gomock.InOrder(
sam.EXPECT().RunCmd(gomock.Any(), "mount", []string{"-o", "remount,rw", "/"}).Return("", nil),
- sam.EXPECT().PathExists(gomock.Any(), gomock.Eq("/tmp/_tls_chrome_deploy/ash_shell")).Return(true, nil),
- sam.EXPECT().RunCmd(gomock.Any(), "rsync", []string{"-av", "/tmp/_tls_chrome_deploy/ash_shell", "/opt/google/chrome"}).Return("", nil),
+ sam.EXPECT().PathExists(gomock.Any(), gomock.Eq("/tmp/_provisioning_service_chrome_deploy/ash_shell")).Return(true, nil),
+ sam.EXPECT().RunCmd(gomock.Any(), "rsync", []string{"-av", "/tmp/_provisioning_service_chrome_deploy/ash_shell", "/opt/google/chrome"}).Return("", nil),
// For all items after we make them exist so we don't need to double every item (we assume that the test isn't breakable here):
- sam.EXPECT().PathExists(gomock.Any(), gomock.Eq("/tmp/_tls_chrome_deploy/aura_demo")).Return(false, nil),
- sam.EXPECT().PathExists(gomock.Any(), gomock.Eq("/tmp/_tls_chrome_deploy/chrome")).Return(false, nil),
- sam.EXPECT().PathExists(gomock.Any(), gomock.Eq("/tmp/_tls_chrome_deploy/chrome-wrapper")).Return(false, nil),
- sam.EXPECT().PathExists(gomock.Any(), gomock.Eq("/tmp/_tls_chrome_deploy/chrome.pak")).Return(false, nil),
- sam.EXPECT().PathExists(gomock.Any(), gomock.Eq("/tmp/_tls_chrome_deploy/chrome_100_percent.pak")).Return(false, nil),
- sam.EXPECT().PathExists(gomock.Any(), gomock.Eq("/tmp/_tls_chrome_deploy/chrome_200_percent.pak")).Return(false, nil),
- sam.EXPECT().PathExists(gomock.Any(), gomock.Eq("/tmp/_tls_chrome_deploy/content_shell")).Return(false, nil),
- sam.EXPECT().PathExists(gomock.Any(), gomock.Eq("/tmp/_tls_chrome_deploy/content_shell.pak")).Return(false, nil),
+ sam.EXPECT().PathExists(gomock.Any(), gomock.Eq("/tmp/_provisioning_service_chrome_deploy/aura_demo")).Return(false, nil),
+ sam.EXPECT().PathExists(gomock.Any(), gomock.Eq("/tmp/_provisioning_service_chrome_deploy/chrome")).Return(false, nil),
+ sam.EXPECT().PathExists(gomock.Any(), gomock.Eq("/tmp/_provisioning_service_chrome_deploy/chrome-wrapper")).Return(false, nil),
+ sam.EXPECT().PathExists(gomock.Any(), gomock.Eq("/tmp/_provisioning_service_chrome_deploy/chrome.pak")).Return(false, nil),
+ sam.EXPECT().PathExists(gomock.Any(), gomock.Eq("/tmp/_provisioning_service_chrome_deploy/chrome_100_percent.pak")).Return(false, nil),
+ sam.EXPECT().PathExists(gomock.Any(), gomock.Eq("/tmp/_provisioning_service_chrome_deploy/chrome_200_percent.pak")).Return(false, nil),
+ sam.EXPECT().PathExists(gomock.Any(), gomock.Eq("/tmp/_provisioning_service_chrome_deploy/content_shell")).Return(false, nil),
+ sam.EXPECT().PathExists(gomock.Any(), gomock.Eq("/tmp/_provisioning_service_chrome_deploy/content_shell.pak")).Return(false, nil),
// Testing this one specifically as it should map to the designated folder rather than the top-most:
- sam.EXPECT().PathExists(gomock.Any(), gomock.Eq("/tmp/_tls_chrome_deploy/extensions/")).Return(true, nil),
- sam.EXPECT().RunCmd(gomock.Any(), "rsync", []string{"-av", "/tmp/_tls_chrome_deploy/extensions/", "/opt/google/chrome/extensions"}).Return("", nil),
- sam.EXPECT().PathExists(gomock.Any(), gomock.Eq("/tmp/_tls_chrome_deploy/lib/*.so")).Return(false, nil),
- sam.EXPECT().PathExists(gomock.Any(), gomock.Eq("/tmp/_tls_chrome_deploy/libffmpegsumo.so")).Return(false, nil),
- sam.EXPECT().PathExists(gomock.Any(), gomock.Eq("/tmp/_tls_chrome_deploy/libpdf.so")).Return(false, nil),
- sam.EXPECT().PathExists(gomock.Any(), gomock.Eq("/tmp/_tls_chrome_deploy/libppGoogleNaClPluginChrome.so")).Return(false, nil),
- sam.EXPECT().PathExists(gomock.Any(), gomock.Eq("/tmp/_tls_chrome_deploy/libosmesa.so")).Return(false, nil),
- sam.EXPECT().PathExists(gomock.Any(), gomock.Eq("/tmp/_tls_chrome_deploy/libwidevinecdmadapter.so")).Return(false, nil),
- sam.EXPECT().PathExists(gomock.Any(), gomock.Eq("/tmp/_tls_chrome_deploy/libwidevinecdm.so")).Return(false, nil),
- sam.EXPECT().PathExists(gomock.Any(), gomock.Eq("/tmp/_tls_chrome_deploy/locales/")).Return(false, nil),
- sam.EXPECT().PathExists(gomock.Any(), gomock.Eq("/tmp/_tls_chrome_deploy/nacl_helper_bootstrap")).Return(false, nil),
- sam.EXPECT().PathExists(gomock.Any(), gomock.Eq("/tmp/_tls_chrome_deploy/nacl_irt_*.nexe")).Return(false, nil),
- sam.EXPECT().PathExists(gomock.Any(), gomock.Eq("/tmp/_tls_chrome_deploy/nacl_helper")).Return(false, nil),
- sam.EXPECT().PathExists(gomock.Any(), gomock.Eq("/tmp/_tls_chrome_deploy/resources/")).Return(false, nil),
- sam.EXPECT().PathExists(gomock.Any(), gomock.Eq("/tmp/_tls_chrome_deploy/resources.pak")).Return(false, nil),
- sam.EXPECT().PathExists(gomock.Any(), gomock.Eq("/tmp/_tls_chrome_deploy/xdg-settings")).Return(false, nil),
- sam.EXPECT().PathExists(gomock.Any(), gomock.Eq("/tmp/_tls_chrome_deploy/*.png")).Return(false, nil),
+ sam.EXPECT().PathExists(gomock.Any(), gomock.Eq("/tmp/_provisioning_service_chrome_deploy/extensions/")).Return(true, nil),
+ sam.EXPECT().RunCmd(gomock.Any(), "rsync", []string{"-av", "/tmp/_provisioning_service_chrome_deploy/extensions/", "/opt/google/chrome/extensions"}).Return("", nil),
+ sam.EXPECT().PathExists(gomock.Any(), gomock.Eq("/tmp/_provisioning_service_chrome_deploy/lib/*.so")).Return(false, nil),
+ sam.EXPECT().PathExists(gomock.Any(), gomock.Eq("/tmp/_provisioning_service_chrome_deploy/libffmpegsumo.so")).Return(false, nil),
+ sam.EXPECT().PathExists(gomock.Any(), gomock.Eq("/tmp/_provisioning_service_chrome_deploy/libpdf.so")).Return(false, nil),
+ sam.EXPECT().PathExists(gomock.Any(), gomock.Eq("/tmp/_provisioning_service_chrome_deploy/libppGoogleNaClPluginChrome.so")).Return(false, nil),
+ sam.EXPECT().PathExists(gomock.Any(), gomock.Eq("/tmp/_provisioning_service_chrome_deploy/libosmesa.so")).Return(false, nil),
+ sam.EXPECT().PathExists(gomock.Any(), gomock.Eq("/tmp/_provisioning_service_chrome_deploy/libwidevinecdmadapter.so")).Return(false, nil),
+ sam.EXPECT().PathExists(gomock.Any(), gomock.Eq("/tmp/_provisioning_service_chrome_deploy/libwidevinecdm.so")).Return(false, nil),
+ sam.EXPECT().PathExists(gomock.Any(), gomock.Eq("/tmp/_provisioning_service_chrome_deploy/locales/")).Return(false, nil),
+ sam.EXPECT().PathExists(gomock.Any(), gomock.Eq("/tmp/_provisioning_service_chrome_deploy/nacl_helper_bootstrap")).Return(false, nil),
+ sam.EXPECT().PathExists(gomock.Any(), gomock.Eq("/tmp/_provisioning_service_chrome_deploy/nacl_irt_*.nexe")).Return(false, nil),
+ sam.EXPECT().PathExists(gomock.Any(), gomock.Eq("/tmp/_provisioning_service_chrome_deploy/nacl_helper")).Return(false, nil),
+ sam.EXPECT().PathExists(gomock.Any(), gomock.Eq("/tmp/_provisioning_service_chrome_deploy/resources/")).Return(false, nil),
+ sam.EXPECT().PathExists(gomock.Any(), gomock.Eq("/tmp/_provisioning_service_chrome_deploy/resources.pak")).Return(false, nil),
+ sam.EXPECT().PathExists(gomock.Any(), gomock.Eq("/tmp/_provisioning_service_chrome_deploy/xdg-settings")).Return(false, nil),
+ sam.EXPECT().PathExists(gomock.Any(), gomock.Eq("/tmp/_provisioning_service_chrome_deploy/*.png")).Return(false, nil),
- sam.EXPECT().PathExists(gomock.Any(), gomock.Eq("/tmp/_tls_chrome_deploy/*test")).Return(true, nil),
- sam.EXPECT().RunCmd(gomock.Any(), "rsync", []string{"-av", "/tmp/_tls_chrome_deploy/*test", "/usr/local/autotest/deps/chrome_test/test_src/out/Release"}).Return("", nil),
- sam.EXPECT().PathExists(gomock.Any(), gomock.Eq("/tmp/_tls_chrome_deploy/*test")).Return(true, nil),
- sam.EXPECT().RunCmd(gomock.Any(), "rsync", []string{"-av", "/tmp/_tls_chrome_deploy/*test", "/usr/local/libexec/chrome-binary-tests"}).Return("", nil),
- sam.EXPECT().PathExists(gomock.Any(), gomock.Eq("/tmp/_tls_chrome_deploy/*tests")).Return(false, nil),
- sam.EXPECT().PathExists(gomock.Any(), gomock.Eq("/tmp/_tls_chrome_deploy/*tests")).Return(false, nil),
+ sam.EXPECT().PathExists(gomock.Any(), gomock.Eq("/tmp/_provisioning_service_chrome_deploy/*test")).Return(true, nil),
+ sam.EXPECT().RunCmd(gomock.Any(), "rsync", []string{"-av", "/tmp/_provisioning_service_chrome_deploy/*test", "/usr/local/autotest/deps/chrome_test/test_src/out/Release"}).Return("", nil),
+ sam.EXPECT().PathExists(gomock.Any(), gomock.Eq("/tmp/_provisioning_service_chrome_deploy/*test")).Return(true, nil),
+ sam.EXPECT().RunCmd(gomock.Any(), "rsync", []string{"-av", "/tmp/_provisioning_service_chrome_deploy/*test", "/usr/local/libexec/chrome-binary-tests"}).Return("", nil),
+ sam.EXPECT().PathExists(gomock.Any(), gomock.Eq("/tmp/_provisioning_service_chrome_deploy/*tests")).Return(false, nil),
+ sam.EXPECT().PathExists(gomock.Any(), gomock.Eq("/tmp/_provisioning_service_chrome_deploy/*tests")).Return(false, nil),
)
if err := st.Execute(ctx); err != nil {
@@ -604,7 +604,7 @@
gomock.InOrder(
sam.EXPECT().RunCmd(gomock.Any(), "killall", []string{"-HUP", "dbus-daemon"}).Return("", nil),
sam.EXPECT().RunCmd(gomock.Any(), "start", []string{"ui"}).Return("", nil),
- sam.EXPECT().DeleteDirectory(gomock.Any(), gomock.Eq("/tmp/_tls_chrome_deploy")).Return(nil),
+ sam.EXPECT().DeleteDirectory(gomock.Any(), gomock.Eq("/tmp/_provisioning_service_chrome_deploy")).Return(nil),
)
if err := st.Execute(ctx); err != nil {
@@ -636,10 +636,10 @@
st := as.GetFirstState()
gomock.InOrder(
- sam.EXPECT().DeleteDirectory(gomock.Any(), gomock.Eq("/tmp/_tls_chrome_deploy")).Return(nil),
- sam.EXPECT().CreateDirectories(gomock.Any(), gomock.Eq([]string{"/tmp/_tls_chrome_deploy"})).Return(nil),
+ sam.EXPECT().DeleteDirectory(gomock.Any(), gomock.Eq("/tmp/_provisioning_service_chrome_deploy")).Return(nil),
+ sam.EXPECT().CreateDirectories(gomock.Any(), gomock.Eq([]string{"/tmp/_provisioning_service_chrome_deploy"})).Return(nil),
sam.EXPECT().CopyData(gomock.Any(), "path/to/image").Return("image_url", nil),
- sam.EXPECT().RunCmd(gomock.Any(), "", []string{"curl", "image_url", "|", "tar", "--ignore-command-error", "--overwrite", "--preserve-permissions", "--directory=/tmp/_tls_chrome_deploy", "-xf", "-"}).Return("", nil),
+ sam.EXPECT().RunCmd(gomock.Any(), "", []string{"curl", "image_url", "|", "tar", "--ignore-command-error", "--overwrite", "--preserve-permissions", "--directory=/tmp/_provisioning_service_chrome_deploy", "-xf", "-"}).Return("", nil),
sam.EXPECT().CreateDirectories(gomock.Any(), gomock.Eq([]string{"/opt/google/chrome", "/usr/local/autotest/deps/chrome_test/test_src/out/Release/", "/usr/local/libexec/chrome-binary-tests/"})).Return(nil),
sam.EXPECT().RunCmd(gomock.Any(), "stop", []string{"ui"}).Return("", nil),
)