Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4585)

Unified Diff: chrome/browser/chromeos/login/kiosk_browsertest.cc

Issue 540673003: Add more browser tests for Kiosk update from usb stick. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove TestObsesrver. Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/chromeos/login/kiosk_browsertest.cc
diff --git a/chrome/browser/chromeos/login/kiosk_browsertest.cc b/chrome/browser/chromeos/login/kiosk_browsertest.cc
index a50e68ed74915517add0e654ff1a99b1d1d89a5b..079c5b62bfe256fe0780fc722b25dc142c37d7d2 100644
--- a/chrome/browser/chromeos/login/kiosk_browsertest.cc
+++ b/chrome/browser/chromeos/login/kiosk_browsertest.cc
@@ -97,7 +97,19 @@ const char kTestOfflineEnabledKioskApp[] = "ajoggoflpgplnnjkjamcmbepjdjdnpdp";
// detail/bmbpicmpniaclbbpdkfglgipkkebnbjf
const char kTestLocalFsKioskApp[] = "bmbpicmpniaclbbpdkfglgipkkebnbjf";
-const char kFakeUsbStickMountPath[] = "chromeos/app_mode/external_update/";
+// Fake usb stick mount path.
+const char kFakeUsbMountPathUpdatePass[] =
+ "chromeos/app_mode/external_update/update_pass";
+const char kFakeUsbMountPathNoManifest[] =
+ "chromeos/app_mode/external_update/no_manifest";
+const char kFakeUsbMountPathBadManifest[] =
+ "chromeos/app_mode/external_update/bad_manifest";
+const char kFakeUsbMountPathLowerAppVersion[] =
+ "chromeos/app_mode/external_update/lower_app_version";
+const char kFakeUsbMountPathLowerCrxVersion[] =
+ "chromeos/app_mode/external_update/lower_crx_version";
+const char kFakeUsbMountPathBadCrx[] =
+ "chromeos/app_mode/external_update/bad_crx";
// Timeout while waiting for network connectivity during tests.
const int kTestNetworkTimeoutSeconds = 1;
@@ -244,16 +256,21 @@ class JsConditionWaiter {
class KioskFakeDiskMountManager : public file_manager::FakeDiskMountManager {
public:
- explicit KioskFakeDiskMountManager(const std::string& usb_mount_path)
- : usb_mount_path_(usb_mount_path) {}
+ KioskFakeDiskMountManager() {}
virtual ~KioskFakeDiskMountManager() {}
+ void set_usb_mount_path(const std::string& usb_mount_path) {
+ usb_mount_path_ = usb_mount_path;
+ }
+
void MountUsbStick() {
+ DCHECK(!usb_mount_path_.empty());
MountPath(usb_mount_path_, "", "", chromeos::MOUNT_TYPE_DEVICE);
}
void UnMountUsbStick() {
+ DCHECK(!usb_mount_path_.empty());
UnmountPath(usb_mount_path_,
UNMOUNT_OPTIONS_NONE,
disks::DiskMountManager::UnmountPathCallback());
@@ -952,11 +969,7 @@ class KioskUpdateTest : public KioskTest {
protected:
virtual void SetUp() OVERRIDE {
- base::FilePath test_data_dir;
- PathService::Get(chrome::DIR_TEST_DATA, &test_data_dir);
- test_data_dir = test_data_dir.AppendASCII(kFakeUsbStickMountPath);
- fake_disk_mount_manager_ =
- new KioskFakeDiskMountManager(test_data_dir.value());
+ fake_disk_mount_manager_ = new KioskFakeDiskMountManager();
disks::DiskMountManager::InitializeForTesting(fake_disk_mount_manager_);
KioskTest::SetUp();
@@ -1008,11 +1021,23 @@ class KioskUpdateTest : public KioskTest {
EXPECT_EQ(version, cached_version);
}
- void SimulateUpdateAppFromUsbStick() {
+ void SetupFakeDiskMountManagerMountPath(const std::string mount_path) {
+ base::FilePath test_data_dir;
+ PathService::Get(chrome::DIR_TEST_DATA, &test_data_dir);
+ test_data_dir = test_data_dir.AppendASCII(mount_path);
+ fake_disk_mount_manager_->set_usb_mount_path(test_data_dir.value());
+ }
+
+ void SimulateUpdateAppFromUsbStick(const std::string& usb_mount_path,
+ bool* app_update_notified,
+ bool* update_success) {
+ SetupFakeDiskMountManagerMountPath(usb_mount_path);
KioskAppExternalUpdateWaiter waiter(KioskAppManager::Get(), test_app_id());
fake_disk_mount_manager_->MountUsbStick();
waiter.Wait();
fake_disk_mount_manager_->UnMountUsbStick();
+ *update_success = waiter.update_success();
+ *app_update_notified = waiter.app_update_notified();
}
void PreCacheAndLaunchApp(const std::string& app_id,
@@ -1029,11 +1054,16 @@ class KioskUpdateTest : public KioskTest {
}
private:
- class KioskAppExternalUpdateWaiter : KioskAppManagerObserver {
+ class KioskAppExternalUpdateWaiter : public KioskAppManagerObserver {
public:
KioskAppExternalUpdateWaiter(KioskAppManager* manager,
const std::string& app_id)
- : runner_(NULL), manager_(manager), app_id_(app_id), quit_(false) {
+ : runner_(NULL),
+ manager_(manager),
+ app_id_(app_id),
+ quit_(false),
+ update_success_(false),
+ app_update_notified_(false) {
manager_->AddObserver(this);
}
@@ -1046,20 +1076,32 @@ class KioskUpdateTest : public KioskTest {
runner_->Run();
}
+ bool update_success() const { return update_success_; }
+
+ bool app_update_notified() const { return app_update_notified_; }
+
private:
// KioskAppManagerObserver overrides:
virtual void OnKioskAppCacheUpdated(const std::string& app_id) OVERRIDE {
if (app_id_ != app_id)
return;
+ app_update_notified_ = true;
+ }
+
+ virtual void OnKioskAppExternalUpdateComplete(bool success) OVERRIDE {
quit_ = true;
+ update_success_ = success;
if (runner_)
runner_->Quit();
}
scoped_refptr<content::MessageLoopRunner> runner_;
KioskAppManager* manager_;
+ bool wait_for_update_success_;
const std::string app_id_;
bool quit_;
+ bool update_success_;
+ bool app_update_notified_;
DISALLOW_COPY_AND_ASSIGN(KioskAppExternalUpdateWaiter);
};
@@ -1246,10 +1288,20 @@ IN_PROC_BROWSER_TEST_F(KioskUpdateTest, PRE_UsbStickUpdateAppNoNetwork) {
EXPECT_EQ("1.0.0", GetInstalledAppVersion().GetString());
// Simulate mounting of usb stick with v2 app on the stick.
- SimulateUpdateAppFromUsbStick();
-
- // The v2 kiosk app is copied into external cache, but won't be loaded
+ bool update_success;
+ bool app_update_notified;
+ SimulateUpdateAppFromUsbStick(
+ kFakeUsbMountPathUpdatePass, &app_update_notified, &update_success);
+ EXPECT_TRUE(update_success);
+ EXPECT_TRUE(app_update_notified);
+
+ // The v2 kiosk app is loaded into external cache, but won't be installed
// until next time the device is started.
+ base::FilePath crx_path;
+ std::string cached_version;
+ EXPECT_TRUE(KioskAppManager::Get()->GetCachedCrx(
+ test_app_id(), &crx_path, &cached_version));
+ EXPECT_EQ("2.0.0", cached_version);
EXPECT_EQ("1.0.0", GetInstalledAppVersion().GetString());
}
@@ -1264,6 +1316,121 @@ IN_PROC_BROWSER_TEST_F(KioskUpdateTest, UsbStickUpdateAppNoNetwork) {
EXPECT_EQ("2.0.0", GetInstalledAppVersion().GetString());
}
+// Usb stick is plugged in without a manifest file on it.
+IN_PROC_BROWSER_TEST_F(KioskUpdateTest, UsbStickUpdateAppNoManifest) {
+ PreCacheAndLaunchApp(kTestOfflineEnabledKioskApp,
+ "1.0.0",
+ std::string(kTestOfflineEnabledKioskApp) + "_v1.crx");
+ EXPECT_EQ("1.0.0", GetInstalledAppVersion().GetString());
+
+ // Simulate mounting of usb stick with v2 app on the stick.
+ bool update_success;
+ bool app_update_notified;
+ SimulateUpdateAppFromUsbStick(
+ kFakeUsbMountPathNoManifest, &app_update_notified, &update_success);
+ EXPECT_FALSE(update_success);
+
+ // Kiosk app is not updated.
+ base::FilePath crx_path;
+ std::string cached_version;
+ EXPECT_TRUE(KioskAppManager::Get()->GetCachedCrx(
+ test_app_id(), &crx_path, &cached_version));
+ EXPECT_EQ("1.0.0", cached_version);
+}
+
+// Usb stick is plugged in with a bad manifest file on it.
+IN_PROC_BROWSER_TEST_F(KioskUpdateTest, UsbStickUpdateAppBadManifest) {
+ PreCacheAndLaunchApp(kTestOfflineEnabledKioskApp,
+ "1.0.0",
+ std::string(kTestOfflineEnabledKioskApp) + "_v1.crx");
+ EXPECT_EQ("1.0.0", GetInstalledAppVersion().GetString());
+
+ // Simulate mounting of usb stick with v2 app on the stick.
+ bool update_success;
+ bool app_update_notified;
+ SimulateUpdateAppFromUsbStick(
+ kFakeUsbMountPathBadManifest, &app_update_notified, &update_success);
+ EXPECT_FALSE(update_success);
+
+ // Kiosk app is not updated.
+ base::FilePath crx_path;
+ std::string cached_version;
+ EXPECT_TRUE(KioskAppManager::Get()->GetCachedCrx(
+ test_app_id(), &crx_path, &cached_version));
+ EXPECT_EQ("1.0.0", cached_version);
+}
+
+// Usb stick is plugged in with a lower version of crx file specified in
+// manifest.
+IN_PROC_BROWSER_TEST_F(KioskUpdateTest, UsbStickUpdateAppLowerAppVersion) {
+ // Precache v2 version of app.
+ PreCacheAndLaunchApp(kTestOfflineEnabledKioskApp,
+ "2.0.0",
+ std::string(kTestOfflineEnabledKioskApp) + ".crx");
+ EXPECT_EQ("2.0.0", GetInstalledAppVersion().GetString());
+
+ // Simulate mounting of usb stick with v1 app on the stick.
+ bool update_success;
+ bool app_update_notified;
+ SimulateUpdateAppFromUsbStick(
+ kFakeUsbMountPathLowerAppVersion, &app_update_notified, &update_success);
+ EXPECT_FALSE(update_success);
+
+ // Kiosk app is NOT updated to the lower version.
+ base::FilePath crx_path;
+ std::string cached_version;
+ EXPECT_TRUE(KioskAppManager::Get()->GetCachedCrx(
+ test_app_id(), &crx_path, &cached_version));
+ EXPECT_EQ("2.0.0", cached_version);
+}
+
+// Usb stick is plugged in with a v1 crx file, although the manifest says
+// this is a v3 version.
+IN_PROC_BROWSER_TEST_F(KioskUpdateTest, UsbStickUpdateAppLowerCrxVersion) {
+ PreCacheAndLaunchApp(kTestOfflineEnabledKioskApp,
+ "2.0.0",
+ std::string(kTestOfflineEnabledKioskApp) + ".crx");
+ EXPECT_EQ("2.0.0", GetInstalledAppVersion().GetString());
+
+ // Simulate mounting of usb stick with v1 crx file on the stick, although
+ // the manifest says it is v3 app.
+ bool update_success;
+ bool app_update_notified;
+ SimulateUpdateAppFromUsbStick(
+ kFakeUsbMountPathLowerCrxVersion, &app_update_notified, &update_success);
+ EXPECT_FALSE(update_success);
+
+ // Kiosk app is NOT updated to the lower version.
+ base::FilePath crx_path;
+ std::string cached_version;
+ EXPECT_TRUE(KioskAppManager::Get()->GetCachedCrx(
+ test_app_id(), &crx_path, &cached_version));
+ EXPECT_EQ("2.0.0", cached_version);
+}
+
+// Usb stick is plugged in with a bad crx file.
+IN_PROC_BROWSER_TEST_F(KioskUpdateTest, UsbStickUpdateAppBadCrx) {
+ PreCacheAndLaunchApp(kTestOfflineEnabledKioskApp,
+ "1.0.0",
+ std::string(kTestOfflineEnabledKioskApp) + "_v1.crx");
+ EXPECT_EQ("1.0.0", GetInstalledAppVersion().GetString());
+
+ // Simulate mounting of usb stick with v1 crx file on the stick, although
+ // the manifest says it is v3 app.
+ bool update_success;
+ bool app_update_notified;
+ SimulateUpdateAppFromUsbStick(
+ kFakeUsbMountPathBadCrx, &app_update_notified, &update_success);
+ EXPECT_FALSE(update_success);
+
+ // Kiosk app is NOT updated.
+ base::FilePath crx_path;
+ std::string cached_version;
+ EXPECT_TRUE(KioskAppManager::Get()->GetCachedCrx(
+ test_app_id(), &crx_path, &cached_version));
+ EXPECT_EQ("1.0.0", cached_version);
+}
+
IN_PROC_BROWSER_TEST_F(KioskUpdateTest, PRE_PermissionChange) {
PreCacheAndLaunchApp(kTestOfflineEnabledKioskApp,
"2.0.0",

Powered by Google App Engine
This is Rietveld 408576698