SafeExec.coffee 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. assert = require("chai").assert
  2. sinon = require('sinon')
  3. chai = require('chai')
  4. should = chai.should()
  5. expect = chai.expect
  6. modulePath = "../../../app/js/SafeExec.js"
  7. SandboxedModule = require('sandboxed-module')
  8. describe "SafeExec", ->
  9. beforeEach ->
  10. @safe_exec = SandboxedModule.require modulePath, requires:
  11. "logger-sharelatex":
  12. log:->
  13. err:->
  14. @options = {timeout: 10*1000, killSignal: "SIGTERM" }
  15. describe "safe_exec", ->
  16. it "should execute a valid command", (done) ->
  17. @safe_exec "/bin/echo hello", @options, (err, stdout, stderr) =>
  18. stdout.should.equal "hello\n"
  19. should.not.exist(err)
  20. done()
  21. it "should execute a command with non-zero exit status", (done) ->
  22. @safe_exec "/usr/bin/env false", @options, (err, stdout, stderr) =>
  23. stdout.should.equal ""
  24. stderr.should.equal ""
  25. err.message.should.equal "exit status 1"
  26. done()
  27. it "should handle an invalid command", (done) ->
  28. @safe_exec "/bin/foobar", @options, (err, stdout, stderr) =>
  29. err.code.should.equal "ENOENT"
  30. done()
  31. it "should handle a command that runs too long", (done) ->
  32. @safe_exec "/bin/sleep 10", {timeout: 500, killSignal: "SIGTERM"}, (err, stdout, stderr) =>
  33. err.should.equal "SIGTERM"
  34. done()