Fix ftp batch submission handler, adjust selenium tests

This commit is contained in:
guerler
2023-08-12 08:17:53 +02:00
parent 15c2c3fb08
commit abc31492dd
6 changed files with 68 additions and 71 deletions
+1 -1
View File
@@ -269,7 +269,7 @@ function eventStart() {
});
emit("progress", 0, "success");
counterRunning.value = counterAnnounce.value;
queue.start(true);
queue.start();
}
}
+20 -23
View File
@@ -1032,35 +1032,32 @@ upload:
close: 'div#composite div.upload-buttons button'
selectors:
tab: '#tab-title-link-${tab}'
ftp_add: '#btn-ftp'
ftp_popup: '.upload-ftp-body'
ftp_items: '.upload-ftp-row'
ftp_close: '.popover-header .popover-close'
row: '#upload-row-${n}'
settings_button: '#upload-row-${n} .upload-settings span'
title: '#upload-row-${n} .upload-title'
paste_content: '#upload-row-${n} .upload-text-content'
settings: '.upload-settings-table'
setting_space_to_tab: '.upload-space-to-tab'
setting_deferred: '.upload-deferred'
start: '#activity-upload'
start_uploading: '#btn-start'
create: '#btn-new'
build_btn: '#rule-based #btn-build'
close: '#btn-close'
rule_source_content: 'textarea.upload-rule-source-content'
rule_select_data_type: '.rule-data-type'
create: '#btn-new'
file_dialog: '#btn-remote-files'
file_dialog_ok: '.file-dialog-modal-ok'
file_source_selector:
type: xpath
selector: '//span[contains(@title, "${path}")]'
paste_content: '#upload-row-${n} .upload-text-content'
paste_new: .upload-paste
row: '#upload-row-${n}'
rule_dataset_dialog: '[data-description="rules dataset dialog"]'
rule_dataset_selector:
selector: '.selection-dialog-modal'
rule_dataset_selector_row:
selector: '.selection-dialog-modal [aria-rowindex="${rowindex}"]'
build_btn: '#rule-based #btn-build'
file_source_selector:
type: xpath
selector: '//span[contains(@title, "${path}")]'
file_dialog_ok: '.file-dialog-modal-ok'
paste_new: .upload-paste
rule_select_data_type: '.rule-data-type'
rule_source_content: 'textarea.upload-rule-source-content'
tab: '#tab-title-link-${tab}'
title: '#upload-row-${n} .upload-title'
settings: '.upload-settings-table'
settings_button: '#upload-row-${n} .upload-settings span'
setting_deferred: '.upload-deferred'
setting_space_to_tab: '.upload-space-to-tab'
start: '#activity-upload'
start_uploading: '#btn-start'
new_user_welcome:
selectors:
+30 -31
View File
@@ -1,12 +1,8 @@
/*
galaxy upload utilities - requires FormData and XMLHttpRequest
*/
import axios from "axios";
import { getAppRoot } from "onload/loadConfig";
import { uploadPayload } from "@/utils/upload-payload.js";
import { uploadSubmit } from "@/utils/upload-submit.js";
import { sendPayload, uploadSubmit } from "@/utils/upload-submit.js";
export class UploadQueue {
constructor(options) {
@@ -70,34 +66,10 @@ export class UploadQueue {
}
// Initiate upload process
start(ftpBatch = false) {
if (ftpBatch) {
// package ftp files separately, and remove them from queue
const list = [];
Object.entries(this.queue).forEach(([key, model]) => {
if (model.status === "queued" && model.fileMode === "ftp") {
this.queue.remove(model.id);
list.push(this.opts.get(key));
}
});
if (list.length > 0) {
const data = uploadPayload(list, this.opts.historyId);
axios
.post(`${getAppRoot()}api/tools/fetch`, data)
.then((message) => {
list.forEach((model) => {
this.opts.success(model.id, message);
});
})
.catch((message) => {
list.forEach((model) => {
this.opts.error(model.id, message);
});
});
}
}
start() {
if (!this.isRunning) {
this.isRunning = true;
this._processFtp();
this._process();
}
}
@@ -127,6 +99,33 @@ export class UploadQueue {
this._processSubmit(index, data);
}
// Submit remote files as single batch request
_processFtp() {
const list = [];
for (const index of this.queue.keys()) {
const model = this.opts.get(index);
if (model.status === "queued" && model.fileMode === "ftp") {
list.push({ index, ...model });
this.remove(index);
}
}
if (list.length > 0) {
const data = uploadPayload(list, this.opts.historyId);
sendPayload(data, {
success: (message) => {
list.forEach((model) => {
this.opts.success(model.index, message);
});
},
error: (message) => {
list.forEach((model) => {
this.opts.error(model.index, message);
});
},
});
}
}
// Get next item to be processed
_processIndex() {
return this.queue.keys().next().value;
+3 -3
View File
@@ -12,7 +12,7 @@ function buildFingerprint(cnf) {
};
}
function submitPayload(payload, cnf) {
export function sendPayload(payload, cnf) {
axios
.post(`${getAppRoot()}api/tools/fetch`, payload)
.then((response) => {
@@ -31,7 +31,7 @@ function tusUpload(uploadables, index, data, tusEndpoint, cnf) {
if (!uploadable) {
// We've uploaded all files or blobs; delete files from data and submit fetch payload
delete data["files"];
return submitPayload(data, cnf);
return sendPayload(data, cnf);
}
console.debug(`Starting chunked upload for ${uploadable.name} [chunkSize=${chunkSize}].`);
const upload = new tus.Upload(uploadable, {
@@ -115,7 +115,7 @@ export function uploadSubmit(config) {
if (data.targets.length && data.targets[0].elements.length) {
const pasted = data.targets[0].elements[0];
if (pasted.src == "url") {
return submitPayload(data, cnf);
return sendPayload(data, cnf);
} else {
const blob = new Blob([pasted.paste_content]);
blob.name = data.targets[0].elements[0].name || "default";
@@ -20,7 +20,7 @@ class TestPosixFileSourceSeleniumIntegration(PosixFileSourceSetup, SeleniumInteg
def test_upload_from_posix(self):
self.admin_login()
self.components.upload.start.wait_for_and_click()
self.components.upload.ftp_add.wait_for_and_click()
self.components.upload.file_dialog.wait_for_and_click()
self.components.upload.file_source_selector(path="gxfiles://posix_test").wait_for_and_click()
self.components.upload.file_source_selector(path="gxfiles://posix_test/a").wait_for_and_click()
self.components.upload.file_dialog_ok.wait_for_and_click()
+13 -12
View File
@@ -21,15 +21,16 @@ class TestUploadFtpSeleniumIntegration(SeleniumIntegrationTestCase):
def ftp_dir(cls):
return cls.temp_config_dir("ftp")
def _upload_all(self):
def _upload_all(self, n):
self.home()
self.components.upload.start.wait_for_and_click()
self.components.upload.ftp_add.wait_for_and_click()
self.components.upload.ftp_popup.wait_for_visible()
for item in self.components.upload.ftp_items().all():
item.click()
self.components.upload.ftp_close.wait_for_and_click()
self.components.upload.row(n=0).wait_for_visible()
self.components.upload.file_dialog.wait_for_and_click()
self.components.upload.file_source_selector(path="gxftp://").wait_for_and_click()
for i in range(n):
self.components.upload.file_source_selector(path="gxftp://%i.txt" % i).wait_for_and_click()
self.components.upload.file_dialog_ok.wait_for_and_click()
for i in range(n):
self.components.upload.row(n=i).wait_for_visible()
self.upload_start()
self.sleep_for(self.wait_types.UX_RENDER)
self.wait_for_history()
@@ -43,18 +44,18 @@ class TestUploadFtpSeleniumIntegration(SeleniumIntegrationTestCase):
@selenium_test
def test_upload_simplest(self):
user_ftp_dir = self._create_ftp_dir()
file_path = os.path.join(user_ftp_dir, "1.txt")
file_path = os.path.join(user_ftp_dir, "0.txt")
with open(file_path, "w") as f:
f.write("Hello World!")
self._upload_all()
self._upload_all(1)
@selenium_test
def test_upload_multiple(self):
user_ftp_dir = self._create_ftp_dir()
file_path = os.path.join(user_ftp_dir, "1.txt")
file_path = os.path.join(user_ftp_dir, "0.txt")
with open(file_path, "w") as f:
f.write("Hello World!")
file_path = os.path.join(user_ftp_dir, "2.txt")
file_path = os.path.join(user_ftp_dir, "1.txt")
with open(file_path, "w") as f:
f.write("Hello Galaxy!")
self._upload_all()
self._upload_all(2)