@adobe/httptransfer
Version:
Efficient File Transfer Module for NodeJS
139 lines (127 loc) • 5.25 kB
JavaScript
/*
* Copyright 2022 Adobe. All rights reserved.
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. You may obtain a copy
* of the License at http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
* OF ANY KIND, either express or implied. See the License for the specific language
* governing permissions and limitations under the License.
*/
/* eslint-env mocha */
;
const assert = require("assert");
const Path = require("path");
const {
AEMUpload
} = require("../lib/index");
const {
getAemEndpointNoDirectBinary,
getAuthorizationHeaderNoDirectBinary,
getUniqueTestId
} = require("./e2eutils");
const TIMEOUT = 60000; // 1 minute
const FILE_SIZE = 282584; // in bytes
describe('Create asset servlet e2e test', function() {
this.timeout(TIMEOUT);
function writeErrors(errors) {
return errors.map((error) => error.code);
}
async function doCreateAssetServletUpload(fileUrls, partSize = 0) {
// const createServletUpload = new CreateAssetServletUpload();
const createServletUpload = new AEMUpload();
const uploadStarts = [];
const uploadProgresses = [];
const uploadErrors = [];
const uploadEnds = [];
createServletUpload.on("filestart", (data) => {
const { fileName, fileSize } = data;
console.log(`Upload: start ${fileName}, ${fileSize} bytes`);
uploadStarts.push(data);
});
createServletUpload.on("fileprogress", (data) => {
const { fileName, fileSize, transferred } = data;
uploadProgresses.push(data);
console.log(`Upload: progress ${fileName}, ${transferred}/${fileSize} bytes`);
});
createServletUpload.on("fileend", (data) => {
const { fileName, fileSize } = data;
console.log(`Upload: completed ${fileName}, ${fileSize} bytes`);
uploadEnds.push(data);
});
createServletUpload.on("fileerror", ({ fileName, errors }) => {
console.log(`Upload: error ${fileName}`, writeErrors(errors));
uploadErrors.push(errors);
});
await createServletUpload.uploadFiles({
uploadFiles: fileUrls.map((fileUrl) => {
return {
fileUrl,
fileSize: FILE_SIZE,
filePath: Path.join(__dirname, "images/freeride-siberia.jpg")
};
}),
headers: getAuthorizationHeaderNoDirectBinary(),
concurrent: true,
maxConcurrent: 16,
preferredPartSize: partSize
});
return {
uploadErrors,
uploadEnds,
uploadStarts,
uploadProgresses
};
}
function verifyEventsHas(events, fileName) {
for (let i = 0; i < events.length; i++) {
if (events[i].fileName === fileName) {
return;
}
}
console.log(JSON.stringify(events, null, 2));
assert.ok(false, `event list does not contain file ${fileName}`);
}
it('Create asset servlet upload with single request', async function () {
const testId = getUniqueTestId();
const fileName = `${testId}.jpg`;
const fileUrl = `${getAemEndpointNoDirectBinary()}/content/dam/${fileName}`;
const {
uploadErrors,
uploadEnds,
uploadStarts,
uploadProgresses
} = await doCreateAssetServletUpload([fileUrl]);
assert.strictEqual(uploadErrors.length, 0);
assert.strictEqual(uploadEnds.length, 1);
assert.strictEqual(uploadStarts.length, 1);
assert.ok(uploadProgresses.length >= 1);
verifyEventsHas(uploadStarts, fileName);
verifyEventsHas(uploadProgresses, fileName);
verifyEventsHas(uploadEnds, fileName);
});
it('Create asset servlet upload with chunked requests', async function () {
const testId = getUniqueTestId();
const fileName1 = `${testId}-1.jpg`;
const fileName2 = `${testId}-2.jpg`;
const fileUrl1 = `${getAemEndpointNoDirectBinary()}/content/dam/${fileName1}`;
const fileUrl2 = `${getAemEndpointNoDirectBinary()}/content/dam/${fileName2}`;
const {
uploadErrors,
uploadEnds,
uploadStarts,
uploadProgresses
} = await doCreateAssetServletUpload([fileUrl1, fileUrl2], 200000);
assert.strictEqual(uploadErrors.length, 0);
assert.strictEqual(uploadEnds.length, 2);
assert.strictEqual(uploadStarts.length, 2);
assert.ok(uploadProgresses.length >= 2);
verifyEventsHas(uploadStarts, fileName1);
verifyEventsHas(uploadStarts, fileName2);
verifyEventsHas(uploadProgresses, fileName1);
verifyEventsHas(uploadProgresses, fileName2);
verifyEventsHas(uploadEnds, fileName1);
verifyEventsHas(uploadEnds, fileName2);
});
});