|
|
@@ -0,0 +1,42 @@
|
|
|
+assert = require("chai").assert
|
|
|
+sinon = require('sinon')
|
|
|
+chai = require('chai')
|
|
|
+should = chai.should()
|
|
|
+expect = chai.expect
|
|
|
+modulePath = "../../../app/js/SafeExec.js"
|
|
|
+SandboxedModule = require('sandboxed-module')
|
|
|
+
|
|
|
+describe "SafeExec", ->
|
|
|
+
|
|
|
+ beforeEach ->
|
|
|
+
|
|
|
+ @safe_exec = SandboxedModule.require modulePath, requires:
|
|
|
+ "logger-sharelatex":
|
|
|
+ log:->
|
|
|
+ err:->
|
|
|
+ @options = {timeout: 10*1000, killSignal: "SIGTERM" }
|
|
|
+
|
|
|
+ describe "safe_exec", ->
|
|
|
+
|
|
|
+ it "should execute a valid command", (done) ->
|
|
|
+ @safe_exec "/bin/echo hello", @options, (err, stdout, stderr) =>
|
|
|
+ stdout.should.equal "hello\n"
|
|
|
+ should.not.exist(err)
|
|
|
+ done()
|
|
|
+
|
|
|
+ it "should execute a command with non-zero exit status", (done) ->
|
|
|
+ @safe_exec "/bin/false", @options, (err, stdout, stderr) =>
|
|
|
+ stdout.should.equal ""
|
|
|
+ stderr.should.equal ""
|
|
|
+ err.message.should.equal "exit status 1"
|
|
|
+ done()
|
|
|
+
|
|
|
+ it "should handle an invalid command", (done) ->
|
|
|
+ @safe_exec "/bin/foobar", @options, (err, stdout, stderr) =>
|
|
|
+ err.code.should.equal "ENOENT"
|
|
|
+ done()
|
|
|
+
|
|
|
+ it "should handle a command that runs too long", (done) ->
|
|
|
+ @safe_exec "/bin/sleep 10", {timeout: 500, killSignal: "SIGTERM"}, (err, stdout, stderr) =>
|
|
|
+ err.should.equal "SIGTERM"
|
|
|
+ done()
|