Commit 1d9d4f26 authored by Ryo Hashimoto's avatar Ryo Hashimoto Committed by Commit Bot

arc: Use arcvm-post-login-services upstart job to control jobs

This CL depends on CL:2517272

BUG=b:171408795
TEST=components_unittests
TEST=Launch Play Store

Change-Id: Ie79568e6f03b3433b8d9af1b50fd1db817d76794
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2517269
Commit-Queue: Ryo Hashimoto <hashimoto@chromium.org>
Reviewed-by: default avatarYusuke Sato <yusukes@chromium.org>
Cr-Commit-Position: refs/heads/master@{#825721}
parent d2400bbb
...@@ -60,20 +60,18 @@ namespace { ...@@ -60,20 +60,18 @@ namespace {
// The "_2d" in job names below corresponds to "-". Upstart escapes characters // The "_2d" in job names below corresponds to "-". Upstart escapes characters
// that aren't valid in D-Bus object paths with underscore followed by its // that aren't valid in D-Bus object paths with underscore followed by its
// ascii code in hex. So "arc_2dcreate_2ddata" becomes "arc-create-data". // ascii code in hex. So "arc_2dcreate_2ddata" becomes "arc-create-data".
constexpr const char kArcCreateDataJobName[] = "arc_2dcreate_2ddata";
constexpr const char kArcHostClockServiceJobName[] = constexpr const char kArcHostClockServiceJobName[] =
"arc_2dhost_2dclock_2dservice"; "arc_2dhost_2dclock_2dservice";
constexpr const char kArcKeymasterJobName[] = "arc_2dkeymasterd"; constexpr const char kArcKeymasterJobName[] = "arc_2dkeymasterd";
constexpr const char kArcSensorServiceJobName[] = "arc_2dsensor_2dservice"; constexpr const char kArcSensorServiceJobName[] = "arc_2dsensor_2dservice";
constexpr const char kArcVmMountMyFilesJobName[] = "arcvm_2dmount_2dmyfiles";
constexpr const char kArcVmMountRemovableMediaJobName[] =
"arcvm_2dmount_2dremovable_2dmedia";
constexpr const char kArcVmServerProxyJobName[] = "arcvm_2dserver_2dproxy";
constexpr const char kArcVmAdbdJobName[] = "arcvm_2dadbd"; constexpr const char kArcVmAdbdJobName[] = "arcvm_2dadbd";
constexpr const char kArcVmPerBoardFeaturesJobName[] = constexpr const char kArcVmPerBoardFeaturesJobName[] =
"arcvm_2dper_2dboard_2dfeatures"; "arcvm_2dper_2dboard_2dfeatures";
constexpr const char kArcVmBootNotificationServerJobName[] = constexpr const char kArcVmBootNotificationServerJobName[] =
"arcvm_2dboot_2dnotification_2dserver"; "arcvm_2dboot_2dnotification_2dserver";
// TODO(hashimoto): Introduce another job for pre-login services.
constexpr char kArcVmPostLoginServicesJobName[] =
"arcvm_2dpost_2dlogin_2dservices";
constexpr const char kCrosSystemPath[] = "/usr/bin/crossystem"; constexpr const char kCrosSystemPath[] = "/usr/bin/crossystem";
constexpr const char kArcVmBootNotificationServerSocketPath[] = constexpr const char kArcVmBootNotificationServerSocketPath[] =
...@@ -643,10 +641,7 @@ class ArcVmClientAdapter : public ArcClientAdapter, ...@@ -643,10 +641,7 @@ class ArcVmClientAdapter : public ArcClientAdapter,
// exist. // exist.
JobDesc{kArcVmPerBoardFeaturesJobName, UpstartOperation::JOB_START, {}}, JobDesc{kArcVmPerBoardFeaturesJobName, UpstartOperation::JOB_START, {}},
JobDesc{kArcVmServerProxyJobName, UpstartOperation::JOB_STOP, {}}, JobDesc{kArcVmPostLoginServicesJobName, UpstartOperation::JOB_STOP, {}},
JobDesc{kArcVmMountMyFilesJobName, UpstartOperation::JOB_STOP, {}},
JobDesc{
kArcVmMountRemovableMediaJobName, UpstartOperation::JOB_STOP, {}},
JobDesc{kArcKeymasterJobName, UpstartOperation::JOB_STOP_AND_START, {}}, JobDesc{kArcKeymasterJobName, UpstartOperation::JOB_STOP_AND_START, {}},
JobDesc{ JobDesc{
kArcSensorServiceJobName, UpstartOperation::JOB_STOP_AND_START, {}}, kArcSensorServiceJobName, UpstartOperation::JOB_STOP_AND_START, {}},
...@@ -722,20 +717,15 @@ class ArcVmClientAdapter : public ArcClientAdapter, ...@@ -722,20 +717,15 @@ class ArcVmClientAdapter : public ArcClientAdapter,
return; return;
} }
std::vector<std::string> environment_for_create_data = { std::vector<std::string> environment{
"CHROMEOS_USER=" + "CHROMEOS_USER=" +
cryptohome::CreateAccountIdentifierFromIdentification(cryptohome_id_) cryptohome::CreateAccountIdentifierFromIdentification(
.account_id()}; cryptohome_id_)
std::vector<std::string> environment_for_arcvm_mount_myfiles = { .account_id(),
"CHROMEOS_USER_ID_HASH=" + user_id_hash_}; "CHROMEOS_USER_ID_HASH=" + user_id_hash_};
std::deque<JobDesc> jobs{ std::deque<JobDesc> jobs{
JobDesc{kArcVmServerProxyJobName, UpstartOperation::JOB_START, {}}, JobDesc{kArcVmPostLoginServicesJobName, UpstartOperation::JOB_START,
JobDesc{kArcCreateDataJobName, UpstartOperation::JOB_START, std::move(environment)},
std::move(environment_for_create_data)},
JobDesc{kArcVmMountMyFilesJobName, UpstartOperation::JOB_START,
std::move(environment_for_arcvm_mount_myfiles)},
JobDesc{
kArcVmMountRemovableMediaJobName, UpstartOperation::JOB_START, {}},
}; };
ConfigureUpstartJobs( ConfigureUpstartJobs(
std::move(jobs), std::move(jobs),
......
...@@ -43,15 +43,10 @@ ...@@ -43,15 +43,10 @@
namespace arc { namespace arc {
namespace { namespace {
constexpr const char kArcCreateDataJobName[] = "arc_2dcreate_2ddata";
constexpr const char kArcHostClockServiceJobName[] = constexpr const char kArcHostClockServiceJobName[] =
"arc_2dhost_2dclock_2dservice"; "arc_2dhost_2dclock_2dservice";
constexpr const char kArcKeymasterJobName[] = "arc_2dkeymasterd"; constexpr const char kArcKeymasterJobName[] = "arc_2dkeymasterd";
constexpr const char kArcSensorServiceJobName[] = "arc_2dsensor_2dservice"; constexpr const char kArcSensorServiceJobName[] = "arc_2dsensor_2dservice";
constexpr const char kArcVmMountMyFilesJobName[] = "arcvm_2dmount_2dmyfiles";
constexpr const char kArcVmMountRemovableMediaJobName[] =
"arcvm_2dmount_2dremovable_2dmedia";
constexpr const char kArcVmServerProxyJobName[] = "arcvm_2dserver_2dproxy";
constexpr const char kArcVmAdbdJobName[] = "arcvm_2dadbd"; constexpr const char kArcVmAdbdJobName[] = "arcvm_2dadbd";
constexpr const char kArcVmPerBoardFeaturesJobName[] = constexpr const char kArcVmPerBoardFeaturesJobName[] =
"arcvm_2dper_2dboard_2dfeatures"; "arcvm_2dper_2dboard_2dfeatures";
...@@ -60,6 +55,8 @@ constexpr const char kArcVmBootNotificationServerJobName[] = ...@@ -60,6 +55,8 @@ constexpr const char kArcVmBootNotificationServerJobName[] =
constexpr const size_t kUnixMaxPathLen = sizeof(sockaddr_un::sun_path); constexpr const size_t kUnixMaxPathLen = sizeof(sockaddr_un::sun_path);
constexpr const char kArcVmBootNotificationServerAddress[kUnixMaxPathLen] = constexpr const char kArcVmBootNotificationServerAddress[kUnixMaxPathLen] =
"\0test_arcvm_boot_notification_server"; "\0test_arcvm_boot_notification_server";
constexpr char kArcVmPostLoginServicesJobName[] =
"arcvm_2dpost_2dlogin_2dservices";
constexpr const char kUserIdHash[] = "this_is_a_valid_user_id_hash"; constexpr const char kUserIdHash[] = "this_is_a_valid_user_id_hash";
constexpr const char kSerialNumber[] = "AAAABBBBCCCCDDDD1234"; constexpr const char kSerialNumber[] = "AAAABBBBCCCCDDDD1234";
...@@ -500,10 +497,10 @@ TEST_F(ArcVmClientAdapterTest, StartMiniArc) { ...@@ -500,10 +497,10 @@ TEST_F(ArcVmClientAdapterTest, StartMiniArc) {
} }
// Tests that StartMiniArc() still succeeds even when Upstart fails to stop // Tests that StartMiniArc() still succeeds even when Upstart fails to stop
// the arcvm-server-proxy job. // the arcvm-post-login-services job.
TEST_F(ArcVmClientAdapterTest, StartMiniArc_StopArcVmServerProxyJobFail) { TEST_F(ArcVmClientAdapterTest, StartMiniArc_StopArcVmPostLoginServicesJobFail) {
// Inject failure to FakeUpstartClient. // Inject failure to FakeUpstartClient.
InjectUpstartStopJobFailure(kArcVmServerProxyJobName); InjectUpstartStopJobFailure(kArcVmPostLoginServicesJobName);
StartMiniArc(); StartMiniArc();
// Confirm that no VM is started. ARCVM doesn't support mini ARC yet. // Confirm that no VM is started. ARCVM doesn't support mini ARC yet.
...@@ -577,29 +574,6 @@ TEST_F(ArcVmClientAdapterTest, StartMiniArc_StopArcSensorServiceJobFail) { ...@@ -577,29 +574,6 @@ TEST_F(ArcVmClientAdapterTest, StartMiniArc_StopArcSensorServiceJobFail) {
EXPECT_FALSE(GetTestConciergeClient()->start_arc_vm_called()); EXPECT_FALSE(GetTestConciergeClient()->start_arc_vm_called());
} }
// Tests that StartMiniArc() still succeeds even when Upstart fails to stop
// arcvm-mount-myfiles.
TEST_F(ArcVmClientAdapterTest, StartMiniArc_StopArcVmMountMyFilesJobFail) {
// Inject failure to FakeUpstartClient.
InjectUpstartStopJobFailure(kArcVmMountMyFilesJobName);
StartMiniArc();
// Confirm that no VM is started. ARCVM doesn't support mini ARC yet.
EXPECT_FALSE(GetTestConciergeClient()->start_arc_vm_called());
}
// Tests that StartMiniArc() still succeeds even when Upstart fails to stop
// arcvm-mount-removable-media.
TEST_F(ArcVmClientAdapterTest,
StartMiniArc_StopArcVmMountRemovableMediaJobFail) {
// Inject failure to FakeUpstartClient.
InjectUpstartStopJobFailure(kArcVmMountRemovableMediaJobName);
StartMiniArc();
// Confirm that no VM is started. ARCVM doesn't support mini ARC yet.
EXPECT_FALSE(GetTestConciergeClient()->start_arc_vm_called());
}
// Tests that StartMiniArc() fails when Upstart fails to start the job. // Tests that StartMiniArc() fails when Upstart fails to start the job.
TEST_F(ArcVmClientAdapterTest, StartMiniArc_StartArcVmPerBoardFeaturesJobFail) { TEST_F(ArcVmClientAdapterTest, StartMiniArc_StartArcVmPerBoardFeaturesJobFail) {
// Inject failure to FakeUpstartClient. // Inject failure to FakeUpstartClient.
...@@ -808,13 +782,14 @@ TEST_F(ArcVmClientAdapterTest, StopArcInstance_Fail) { ...@@ -808,13 +782,14 @@ TEST_F(ArcVmClientAdapterTest, StopArcInstance_Fail) {
EXPECT_TRUE(arc_instance_stopped_called()); EXPECT_TRUE(arc_instance_stopped_called());
} }
// Tests that UpgradeArc() handles arcvm-server-proxy startup failures properly. // Tests that UpgradeArc() handles arcvm-post-login-services startup failures
TEST_F(ArcVmClientAdapterTest, UpgradeArc_StartArcVmProxyFailure) { // properly.
TEST_F(ArcVmClientAdapterTest, UpgradeArc_StartArcVmPostLoginServicesFailure) {
SetValidUserInfo(); SetValidUserInfo();
StartMiniArc(); StartMiniArc();
// Inject failure to FakeUpstartClient. // Inject failure to FakeUpstartClient.
InjectUpstartStartJobFailure(kArcVmServerProxyJobName); InjectUpstartStartJobFailure(kArcVmPostLoginServicesJobName);
UpgradeArc(false); UpgradeArc(false);
EXPECT_FALSE(GetTestConciergeClient()->start_arc_vm_called()); EXPECT_FALSE(GetTestConciergeClient()->start_arc_vm_called());
...@@ -868,69 +843,6 @@ TEST_F(ArcVmClientAdapterTest, UpgradeArc_StartArcVmAdbdFailure) { ...@@ -868,69 +843,6 @@ TEST_F(ArcVmClientAdapterTest, UpgradeArc_StartArcVmAdbdFailure) {
EXPECT_TRUE(arc_instance_stopped_called()); EXPECT_TRUE(arc_instance_stopped_called());
} }
// Tests that UpgradeArc() handles arc-create-data startup failures properly.
TEST_F(ArcVmClientAdapterTest, UpgradeArc_StartArcCreateDataFailure) {
SetValidUserInfo();
StartMiniArc();
// Inject failure to FakeUpstartClient.
InjectUpstartStartJobFailure(kArcCreateDataJobName);
UpgradeArc(false);
EXPECT_FALSE(GetTestConciergeClient()->start_arc_vm_called());
EXPECT_FALSE(arc_instance_stopped_called());
// Try to stop the VM. No VM is running so StopVm() shouldn't be called.
adapter()->StopArcInstance(/*on_shutdown=*/false,
/*should_backup_log=*/false);
run_loop()->Run();
EXPECT_FALSE(GetTestConciergeClient()->stop_vm_called());
EXPECT_TRUE(arc_instance_stopped_called());
}
// Tests that UpgradeArc() handles arcvm-mount-myfiles startup failures
// properly.
TEST_F(ArcVmClientAdapterTest, UpgradeArc_StartArcVmMountMyFilesJobFail) {
SetValidUserInfo();
StartMiniArc();
// Inject failure to FakeUpstartClient.
InjectUpstartStartJobFailure(kArcVmMountMyFilesJobName);
UpgradeArc(false);
EXPECT_FALSE(GetTestConciergeClient()->start_arc_vm_called());
EXPECT_FALSE(arc_instance_stopped_called());
// Try to stop the VM. No VM is running so StopVm() shouldn't be called.
adapter()->StopArcInstance(/*on_shutdown=*/false,
/*should_backup_log=*/false);
run_loop()->Run();
EXPECT_FALSE(GetTestConciergeClient()->stop_vm_called());
EXPECT_TRUE(arc_instance_stopped_called());
}
// Tests that UpgradeArc() handles arcvm-mount-removable-media startup failures
// properly.
TEST_F(ArcVmClientAdapterTest,
UpgradeArc_StartArcVmMountRemovableMediaJobFail) {
SetValidUserInfo();
StartMiniArc();
// Inject failure to FakeUpstartClient.
InjectUpstartStartJobFailure(kArcVmMountRemovableMediaJobName);
UpgradeArc(false);
EXPECT_FALSE(GetTestConciergeClient()->start_arc_vm_called());
EXPECT_FALSE(arc_instance_stopped_called());
// Try to stop the VM. No VM is running so StopVm() shouldn't be called.
adapter()->StopArcInstance(/*on_shutdown=*/false,
/*should_backup_log=*/false);
run_loop()->Run();
EXPECT_FALSE(GetTestConciergeClient()->stop_vm_called());
EXPECT_TRUE(arc_instance_stopped_called());
}
// Tests that "no user ID hash" failure is handled properly. // Tests that "no user ID hash" failure is handled properly.
TEST_F(ArcVmClientAdapterTest, UpgradeArc_NoUserId) { TEST_F(ArcVmClientAdapterTest, UpgradeArc_NoUserId) {
// Don't set the user id hash. Note that we cannot call StartArcVm() without // Don't set the user id hash. Note that we cannot call StartArcVm() without
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment