From 039bec02f729f08c0dea3eabd5da9c24d0b772ca Mon Sep 17 00:00:00 2001 From: Simon Detheridge Date: Mon, 6 Jan 2020 14:14:22 +0000 Subject: [PATCH] Use directory names in acceptance tests, and add test for getting size --- .../test/acceptance/js/FilestoreTests.js | 75 +++++++++++++++++-- 1 file changed, 70 insertions(+), 5 deletions(-) diff --git a/services/filestore/test/acceptance/js/FilestoreTests.js b/services/filestore/test/acceptance/js/FilestoreTests.js index 3315569a24..9260b1bd62 100644 --- a/services/filestore/test/acceptance/js/FilestoreTests.js +++ b/services/filestore/test/acceptance/js/FilestoreTests.js @@ -56,6 +56,7 @@ if (process.env.AWS_ACCESS_KEY_ID) { describe('Filestore', function() { this.timeout(1000 * 10) const filestoreUrl = `http://localhost:${Settings.internal.filestore.port}` + const directoryName = 'directory' // redefine the test suite for every available backend Object.keys(BackendSettings).forEach(backend => { @@ -113,11 +114,11 @@ describe('Filestore', function() { beforeEach(async function() { fileId = Math.random() - fileUrl = `${filestoreUrl}/project/acceptance_tests/file/${fileId}` + fileUrl = `${filestoreUrl}/project/acceptance_tests/file/${directoryName}%2F${fileId}` const writeStream = request.post(fileUrl) const readStream = fs.createReadStream(localFileReadPath) - // consume the result to ensure the http request has been fully processed + // hack to consume the result to ensure the http request has been fully processed const resultStream = fs.createWriteStream('/dev/null') await pipeline(readStream, writeStream, resultStream) }) @@ -176,14 +177,14 @@ describe('Filestore', function() { it('should be able to copy files', async function() { const newProjectID = 'acceptance_tests_copyied_project' const newFileId = Math.random() - const newFileUrl = `${filestoreUrl}/project/${newProjectID}/file/${newFileId}` + const newFileUrl = `${filestoreUrl}/project/${newProjectID}/file/${directoryName}%2F${newFileId}` const opts = { method: 'put', uri: newFileUrl, json: { source: { project_id: 'acceptance_tests', - file_id: fileId + file_id: `${directoryName}/${fileId}` } } } @@ -223,6 +224,70 @@ describe('Filestore', function() { } }) + describe('with multiple files', function() { + let fileIds, fileUrls, project + const directoryName = 'directory' + const localFileReadPaths = [ + '/tmp/filestore_acceptance_tests_file_read_1.txt', + '/tmp/filestore_acceptance_tests_file_read_2.txt' + ] + const constantFileContents = [ + [ + 'hello world', + `line 2 goes here ${Math.random()}`, + 'there are 3 lines in all' + ].join('\n'), + [ + `for reference: ${Math.random()}`, + 'cats are the best animals', + 'wombats are a close second' + ].join('\n') + ] + + before(async function() { + return Promise.all([ + fsWriteFile(localFileReadPaths[0], constantFileContents[0]), + fsWriteFile(localFileReadPaths[1], constantFileContents[1]) + ]) + }) + + beforeEach(async function() { + project = `acceptance_tests_${Math.random()}` + fileIds = [Math.random(), Math.random()] + fileUrls = [ + `${filestoreUrl}/project/${project}/file/${directoryName}%2F${fileIds[0]}`, + `${filestoreUrl}/project/${project}/file/${directoryName}%2F${fileIds[1]}` + ] + + const writeStreams = [ + request.post(fileUrls[0]), + request.post(fileUrls[1]) + ] + const readStreams = [ + fs.createReadStream(localFileReadPaths[0]), + fs.createReadStream(localFileReadPaths[1]) + ] + // hack to consume the result to ensure the http request has been fully processed + const resultStreams = [ + fs.createWriteStream('/dev/null'), + fs.createWriteStream('/dev/null') + ] + return Promise.all([ + pipeline(readStreams[0], writeStreams[0], resultStreams[0]), + pipeline(readStreams[1], writeStreams[1], resultStreams[1]) + ]) + }) + + it('should get the directory size', async function() { + const response = await rp.get( + `${filestoreUrl}/project/${project}/size` + ) + expect(parseInt(JSON.parse(response.body)['total bytes'])).to.equal( + constantFileContents[0].length + constantFileContents[1].length + ) + }) + }) + describe('with a pdf file', function() { let fileId, fileUrl, localFileSize const localFileReadPath = Path.resolve( @@ -232,7 +297,7 @@ describe('Filestore', function() { beforeEach(async function() { fileId = Math.random() - fileUrl = `${filestoreUrl}/project/acceptance_tests/file/${fileId}` + fileUrl = `${filestoreUrl}/project/acceptance_tests/file/${directoryName}%2F${fileId}` const stat = await fsStat(localFileReadPath) localFileSize = stat.size const writeStream = request.post(fileUrl)