Commit 3f1b0a5f authored by Joel Hockey's avatar Joel Hockey Committed by Commit Bot

Split Files UI Test for crostini/PluginVm Share

Split slow test into 3 to hopefully avoid timeouts.

Bug: 1135410
Change-Id: I4612e8b13740665bdf994ef17d7dc2fb4ab623d7
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2450139
Commit-Queue: Fergus Dall <sidereal@google.com>
Reviewed-by: default avatarFergus Dall <sidereal@google.com>
Cr-Commit-Position: refs/heads/master@{#814485}
parent b636ef0a
...@@ -67,11 +67,18 @@ IN_PROC_BROWSER_TEST_F(FileManagerUITest, CrostiniMount) { ...@@ -67,11 +67,18 @@ IN_PROC_BROWSER_TEST_F(FileManagerUITest, CrostiniMount) {
RunTest("crostiniMount"); RunTest("crostiniMount");
} }
// TODO(crbug.com/1135410) Renable this once it won't timeout. IN_PROC_BROWSER_TEST_F(FileManagerUITest, CrostiniShare) {
IN_PROC_BROWSER_TEST_F(FileManagerUITest, DISABLED_CrostiniShare) {
RunTest("crostiniShare"); RunTest("crostiniShare");
} }
IN_PROC_BROWSER_TEST_F(FileManagerUITest, CrostiniShareManage) {
RunTest("crostiniShareManage");
}
IN_PROC_BROWSER_TEST_F(FileManagerUITest, CrostiniShareVolumes) {
RunTest("crostiniShareVolumes");
}
IN_PROC_BROWSER_TEST_F(FileManagerUITest, CrostiniTasks) { IN_PROC_BROWSER_TEST_F(FileManagerUITest, CrostiniTasks) {
RunTest("crostiniTasks"); RunTest("crostiniTasks");
} }
...@@ -84,9 +91,16 @@ IN_PROC_BROWSER_TEST_F(FileManagerUITest, PluginVm) { ...@@ -84,9 +91,16 @@ IN_PROC_BROWSER_TEST_F(FileManagerUITest, PluginVm) {
RunTest("pluginVm"); RunTest("pluginVm");
} }
// TODO(crbug.com/1135410) Renable this once it won't timeout. IN_PROC_BROWSER_TEST_F(FileManagerUITest, PluginVmShare) {
IN_PROC_BROWSER_TEST_F(FileManagerUITest, DISABLED_PluginVmShare) {
RunTest("pluginVmShare"); RunTest("pluginVmShare");
} }
IN_PROC_BROWSER_TEST_F(FileManagerUITest, PluginVmShareManage) {
RunTest("pluginVmShareManage");
}
IN_PROC_BROWSER_TEST_F(FileManagerUITest, PluginVmShareVolumes) {
RunTest("pluginVmShareVolumes");
}
} // namespace file_manager } // namespace file_manager
...@@ -19,9 +19,6 @@ const shareBase = { ...@@ -19,9 +19,6 @@ const shareBase = {
enumUmaManagePluginVmSharing: 17, enumUmaManagePluginVmSharing: 17,
}; };
const crostiniShare = {};
const pluginVmShare = {};
// Right click clickTarget, ensure menuVisible is shown, // Right click clickTarget, ensure menuVisible is shown,
// Click menuTarget, ensure dialog is shown with expectedText. // Click menuTarget, ensure dialog is shown with expectedText.
shareBase.verifyShareWithDialog = shareBase.verifyShareWithDialog =
...@@ -61,20 +58,11 @@ shareBase.testSharePaths = async ( ...@@ -61,20 +58,11 @@ shareBase.testSharePaths = async (
const shareWith = '#file-context-menu [command="#' + share + '"]'; const shareWith = '#file-context-menu [command="#' + share + '"]';
const menuShareWithDirTree = '#directory-tree-context-menu:not([hidden]) ' + const menuShareWithDirTree = '#directory-tree-context-menu:not([hidden]) ' +
'[command="#' + share + '"]:not([hidden]):not([disabled])'; '[command="#' + share + '"]:not([hidden]):not([disabled])';
const menuNoShareWithDirTree = '#directory-tree-context-menu:not([hidden]) ' +
'[command="#' + share + '"][hidden][disabled="disabled"]';
const shareWithDirTree = const shareWithDirTree =
'#directory-tree-context-menu [command="#' + share + '"]'; '#directory-tree-context-menu [command="#' + share + '"]';
const photos = '#file-list [file-name="photos"]'; const photos = '#file-list [file-name="photos"]';
const myFilesDirTree = '#directory-tree [root-type-icon="my_files"]'; const myFilesDirTree = '#directory-tree [root-type-icon="my_files"]';
const removableRoot = '#directory-tree [volume-type-icon="removable"]';
const menuShareWithVolumeRoot = '#roots-context-menu:not([hidden]) ' +
'[command="#' + share + '"]:not([hidden]):not([disabled])';
const shareWithVolumeRoot = '#roots-context-menu [command="#' + share + '"]';
const fakeLinuxFiles = '#directory-tree [root-type-icon="crostini"]';
const googleDrive = '#directory-tree .tree-item [volume-type-icon="drive"]';
const menuHidden = '#file-context-menu[hidden]'; const menuHidden = '#file-context-menu[hidden]';
const androidRoot = '#directory-tree [volume-type-icon="android_files"]';
const shareLabel = { const shareLabel = {
'termina': 'Linux apps', 'termina': 'Linux apps',
'PvmDefault': 'Parallels Desktop' 'PvmDefault': 'Parallels Desktop'
...@@ -188,6 +176,104 @@ shareBase.testSharePaths = async ( ...@@ -188,6 +176,104 @@ shareBase.testSharePaths = async (
'right-click hello.txt'); 'right-click hello.txt');
await test.waitForElement(menuNoShareWith); await test.waitForElement(menuNoShareWith);
// Restore fmp.*.
chrome.fileManagerPrivate.sharePathsWithCrostini = oldSharePaths;
// Restore Crostini.unregisterSharedPath.
fileManager.crostini.unregisterSharedPath = oldCrostiniUnregister;
done();
};
const createMockFilesAppToast = () => {
const toast = document.querySelector('#toast');
if (!toast.shadowRoot) {
toast.attachShadow({mode: 'open'});
}
toast.shadowRoot.innerHTML = `
<div class="container" id="container" hidden>
<div class="text" id="text" hidden></div>
<cr-button class="action" id="action" hidden></cr-button>
</div>
`;
toast.visible = false;
toast.show = (message, action) => {
const host = document.querySelector('#toast');
if (typeof message === 'string') {
const text = host.shadowRoot.querySelector('#text');
text.innerText = message;
text.hidden = false;
} else {
assertTrue(false, 'Invalid <files-toast> message');
return;
}
if (action && action.text && action.callback) {
const button = host.shadowRoot.querySelector('#action');
button.innerText = action.text;
button.hidden = false;
} else {
assertTrue(false, 'Invalid <files-toast> action');
return;
}
console.log('Toasted ' + message);
const container = host.shadowRoot.querySelector('#container');
container.hidden = false;
host.visible = true;
};
};
const crostiniShare = {};
const pluginVmShare = {};
crostiniShare.testSharePaths = done => {
createMockFilesAppToast();
shareBase.testSharePaths(
shareBase.vmNameTermina, shareBase.vmNameSelectorLinux,
shareBase.toastSharedTextLinux, shareBase.toastActionTextLinux,
shareBase.enumUmaShareWithLinux, done);
};
pluginVmShare.testSharePaths = done => {
createMockFilesAppToast();
shareBase.testSharePaths(
shareBase.vmNamePluginVm, shareBase.vmNameSelectorPluginVm,
shareBase.toastSharedTextPluginVm, shareBase.toastActionTextPluginVm,
shareBase.enumUmaShareWithPluginVm, done);
};
// Verify share for other volumes.
shareBase.testShareVolumes = async (vmName, vmNameSelector, done) => {
const share = 'share-with-' + vmNameSelector;
const manage = 'manage-' + vmNameSelector + '-sharing';
const menuNoShareWith = '#file-context-menu:not([hidden]) ' +
'[command="#' + share + '"][hidden][disabled="disabled"]';
const menuShareWith = '#file-context-menu:not([hidden]) ' +
'[command="#' + share + '"]:not([hidden]):not([disabled])';
const removableRoot = '#directory-tree [volume-type-icon="removable"]';
const menuShareWithVolumeRoot = '#roots-context-menu:not([hidden]) ' +
'[command="#' + share + '"]:not([hidden]):not([disabled])';
const menuNoShareWithDirTree = '#directory-tree-context-menu:not([hidden]) ' +
'[command="#' + share + '"][hidden][disabled="disabled"]';
const shareWithVolumeRoot = '#roots-context-menu [command="#' + share + '"]';
const fakeLinuxFiles = '#directory-tree [root-type-icon="crostini"]';
const googleDrive = '#directory-tree .tree-item [volume-type-icon="drive"]';
const photos = '#file-list [file-name="photos"]';
const androidRoot = '#directory-tree [volume-type-icon="android_files"]';
const shareLabel = {
'termina': 'Linux apps',
'PvmDefault': 'Parallels Desktop'
};
const givePermission = `Give ${shareLabel[vmName]} permission to modify `;
chrome.fileManagerPrivate.mountCrostiniDelay_ = 0;
await test.setupAndWaitUntilReady();
// Verify share for removable root. // Verify share for removable root.
test.mountRemovable(); test.mountRemovable();
await test.waitForElement(removableRoot); await test.waitForElement(removableRoot);
...@@ -249,74 +335,23 @@ shareBase.testSharePaths = async ( ...@@ -249,74 +335,23 @@ shareBase.testSharePaths = async (
await test.waitForElement(menuShareWith); await test.waitForElement(menuShareWith);
// Reset Linux files and Play files back to unmounted. // Reset Linux files and Play files back to unmounted.
chrome.fileManagerPrivate.removeMount('android_files');
chrome.fileManagerPrivate.removeMount('crostini'); chrome.fileManagerPrivate.removeMount('crostini');
await test.waitForElement(fakeLinuxFiles); await test.waitForElement(fakeLinuxFiles);
chrome.fileManagerPrivate.removeMount('android_files');
// Restore fmp.*.
chrome.fileManagerPrivate.sharePathsWithCrostini = oldSharePaths;
// Restore Crostini.unregisterSharedPath.
fileManager.crostini.unregisterSharedPath = oldCrostiniUnregister;
done(); done();
}; };
const createMockFilesAppToast = () => { const crostiniShareVolumes = {};
const toast = document.querySelector('#toast'); const pluginVmShareVolumes = {};
if (!toast.shadowRoot) {
toast.attachShadow({mode: 'open'});
}
toast.shadowRoot.innerHTML = `
<div class="container" id="container" hidden>
<div class="text" id="text" hidden></div>
<cr-button class="action" id="action" hidden></cr-button>
</div>
`;
toast.visible = false;
toast.show = (message, action) => {
const host = document.querySelector('#toast');
if (typeof message === 'string') {
const text = host.shadowRoot.querySelector('#text');
text.innerText = message;
text.hidden = false;
} else {
assertTrue(false, 'Invalid <files-toast> message');
return;
}
if (action && action.text && action.callback) {
const button = host.shadowRoot.querySelector('#action');
button.innerText = action.text;
button.hidden = false;
} else {
assertTrue(false, 'Invalid <files-toast> action');
return;
}
console.log('Toasted ' + message); crostiniShareVolumes.testShareVolumes = done => {
const container = host.shadowRoot.querySelector('#container'); shareBase.testShareVolumes(
container.hidden = false; shareBase.vmNameTermina, shareBase.vmNameSelectorLinux, done);
host.visible = true;
};
}; };
crostiniShare.testSharePaths = done => { pluginVmShareVolumes.testShareVolumes = done => {
createMockFilesAppToast(); shareBase.testShareVolumes(
shareBase.testSharePaths( shareBase.vmNamePluginVm, shareBase.vmNameSelectorPluginVm, done);
shareBase.vmNameTermina, shareBase.vmNameSelectorLinux,
shareBase.toastSharedTextLinux, shareBase.toastActionTextLinux,
shareBase.enumUmaShareWithLinux, done);
};
pluginVmShare.testSharePaths = done => {
createMockFilesAppToast();
shareBase.testSharePaths(
shareBase.vmNamePluginVm, shareBase.vmNameSelectorPluginVm,
shareBase.toastSharedTextPluginVm, shareBase.toastActionTextPluginVm,
shareBase.enumUmaShareWithPluginVm, done);
}; };
// Verify gear menu 'Manage ? sharing'. // Verify gear menu 'Manage ? sharing'.
...@@ -359,13 +394,16 @@ shareBase.testGearMenuManage = ...@@ -359,13 +394,16 @@ shareBase.testGearMenuManage =
done(); done();
}; };
crostiniShare.testGearMenuManageLinuxSharing = done => { const crostiniShareManage = {};
const pluginVmShareManage = {};
crostiniShareManage.testGearMenuManageLinuxSharing = done => {
shareBase.testGearMenuManage( shareBase.testGearMenuManage(
shareBase.vmNameTermina, shareBase.vmNameSelectorLinux, shareBase.vmNameTermina, shareBase.vmNameSelectorLinux,
shareBase.enumUmaManageLinuxSharing, done); shareBase.enumUmaManageLinuxSharing, done);
}; };
pluginVmShare.testGearMenuManagePluginVmSharing = done => { pluginVmShareManage.testGearMenuManagePluginVmSharing = done => {
shareBase.testGearMenuManage( shareBase.testGearMenuManage(
shareBase.vmNamePluginVm, shareBase.vmNameSelectorPluginVm, shareBase.vmNamePluginVm, shareBase.vmNameSelectorPluginVm,
shareBase.enumUmaManagePluginVmSharing, done); shareBase.enumUmaManagePluginVmSharing, done);
......
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