From 8a5cb86c31dec3999fb28f5e47e520c1f0ed4100 Mon Sep 17 00:00:00 2001 From: Henry Oswald Date: Wed, 1 Jun 2016 16:46:41 +0100 Subject: [PATCH] check _checkRecoursesForErrors before compile --- .../Features/Compile/ClsiManager.coffee | 54 ++++++++++++------- .../coffee/Compile/ClsiManagerTests.coffee | 26 ++++++--- 2 files changed, 54 insertions(+), 26 deletions(-) diff --git a/services/web/app/coffee/Features/Compile/ClsiManager.coffee b/services/web/app/coffee/Features/Compile/ClsiManager.coffee index db15483c9c..18f313a368 100755 --- a/services/web/app/coffee/Features/Compile/ClsiManager.coffee +++ b/services/web/app/coffee/Features/Compile/ClsiManager.coffee @@ -17,17 +17,24 @@ module.exports = ClsiManager = ClsiManager._buildRequest project_id, options, (error, req) -> return callback(error) if error? logger.log project_id: project_id, "sending compile to CLSI" - ClsiManager._postToClsi project_id, req, options.compileGroup, (error, response) -> - if error? - logger.err err:error, project_id:project_id, "error sending request to clsi" - return callback(error) - logger.log project_id: project_id, outputFilesLength: response?.outputFiles?.length, status: response?.status, "received compile response from CLSI" - ClsiCookieManager._getServerId project_id, (err, clsiServerId)-> - if err? - logger.err err:err, project_id:project_id, "error getting server id" - return callback(err) - outputFiles = ClsiManager._parseOutputFiles(project_id, response?.compile?.outputFiles) - callback(null, response?.compile?.status, outputFiles, clsiServerId) + ClsiManager._checkRecoursesForErrors req.compile.resources, (err, problems)-> + if err? + logger.err err, project_id, "could not check resources for potential problems before sending to clsi" + return callback(err) + if problems? + logger.log project_id:project_id, problems:problems, "problems with users latex before compile was attempted" + return callback(null, problems) + ClsiManager._postToClsi project_id, req, options.compileGroup, (error, response) -> + if error? + logger.err err:error, project_id:project_id, "error sending request to clsi" + return callback(error) + logger.log project_id: project_id, outputFilesLength: response?.outputFiles?.length, status: response?.status, "received compile response from CLSI" + ClsiCookieManager._getServerId project_id, (err, clsiServerId)-> + if err? + logger.err err:err, project_id:project_id, "error getting server id" + return callback(err) + outputFiles = ClsiManager._parseOutputFiles(project_id, response?.compile?.outputFiles) + callback(null, response?.compile?.status, outputFiles, clsiServerId) deleteAuxFiles: (project_id, options, callback = (error) ->) -> compilerUrl = @_getCompilerUrl(options?.compileGroup) @@ -158,17 +165,25 @@ module.exports = ClsiManager = _checkRecoursesForErrors: (resources, callback)-> jobs = duplicatePaths: (cb)-> - ClsiManager._checkForFilesWithSameName resources, cb + ClsiManager._checkForDuplicatePaths resources, cb conflictedPaths: (cb)-> ClsiManager._checkForConflictingPaths resources, cb sizeCheck: (cb)-> ClsiManager._checkDocsAreUnderSizeLimit resources, cb - - async.series jobs, callback - _checkForFilesWithSameName: (resources, callback)-> + async.series jobs, (err, problems)-> + if err? + return callback(err) + problems = _.omit(problems, _.isEmpty) + if _.isEmpty(problems) + return callback() + else + callback(null, problems) + + + _checkForDuplicatePaths: (resources, callback)-> paths = _.pluck(resources, 'path') duplicates = _.filter paths, (path)-> @@ -211,10 +226,11 @@ module.exports = ClsiManager = return result tooLarge = totalSize > FIVEMB - - sizedResources = _.sortBy(sizedResources, "size").slice(10).reverse() - - callback(null, {resources:sizedResources, totalSize:totalSize, tooLarge:tooLarge}) + if !tooLarge + return callback() + else + sizedResources = _.sortBy(sizedResources, "size").slice(10).reverse() + return callback(null, {resources:sizedResources, totalSize:totalSize}) diff --git a/services/web/test/UnitTests/coffee/Compile/ClsiManagerTests.coffee b/services/web/test/UnitTests/coffee/Compile/ClsiManagerTests.coffee index ef9c12f408..b31fb59fb5 100644 --- a/services/web/test/UnitTests/coffee/Compile/ClsiManagerTests.coffee +++ b/services/web/test/UnitTests/coffee/Compile/ClsiManagerTests.coffee @@ -335,18 +335,31 @@ describe "ClsiManager", -> modified: ["more stuff"] }] - it "should call _checkForFilesWithSameName and _checkForConflictingPaths", (done)-> + it "should call _checkForDuplicatePaths and _checkForConflictingPaths", (done)-> - @ClsiManager._checkForFilesWithSameName = sinon.stub().callsArgWith(1) + @ClsiManager._checkForDuplicatePaths = sinon.stub().callsArgWith(1) @ClsiManager._checkForConflictingPaths = sinon.stub().callsArgWith(1) @ClsiManager._checkDocsAreUnderSizeLimit = sinon.stub().callsArgWith(1) - @ClsiManager._checkRecoursesForErrors @resources, => - @ClsiManager._checkForFilesWithSameName.called.should.equal true + @ClsiManager._checkRecoursesForErrors @resources, (err, problems)=> + @ClsiManager._checkForDuplicatePaths.called.should.equal true @ClsiManager._checkForConflictingPaths.called.should.equal true @ClsiManager._checkDocsAreUnderSizeLimit.called.should.equal true + expect(problems).to.not.exist done() - describe "_checkForFilesWithSameName", -> + + it "should remove undefined errors", (done)-> + @ClsiManager._checkForDuplicatePaths = sinon.stub().callsArgWith(1, null, [path:"something/here"]) + @ClsiManager._checkForConflictingPaths = sinon.stub().callsArgWith(1, null, []) + @ClsiManager._checkDocsAreUnderSizeLimit = sinon.stub().callsArgWith(1, null) + @ClsiManager._checkRecoursesForErrors @resources, (err, problems)=> + problems.duplicatePaths[0].path.should.equal "something/here" + expect(problems.conflictedPaths).to.not.exist + expect(problems.sizeCheck).to.not.exist + + done() + + describe "_checkForDuplicatePaths", -> it "should flag up 2 nested files with same path", (done)-> @@ -355,7 +368,7 @@ describe "ClsiManager", -> url: "http://somwhere.com" }) - @ClsiManager._checkForFilesWithSameName @resources, (err, duplicateErrors)-> + @ClsiManager._checkForDuplicatePaths @resources, (err, duplicateErrors)-> duplicateErrors.length.should.equal 1 duplicateErrors[0].path.should.equal "chapters/chapter1" done() @@ -397,7 +410,6 @@ describe "ClsiManager", -> @resources.push({path:"chapters/chapter1.tex",url: "http://somwhere.com"}) @ClsiManager._checkDocsAreUnderSizeLimit @resources, (err, sizeError)-> - sizeError.tooLarge.should.equal true sizeError.totalSize.should.equal 10000016 sizeError.resources.length.should.equal 10 sizeError.resources[0].path.should.equal "massive.tex"