Package net.ex337.scriptus.tests

Source Code of net.ex337.scriptus.tests.Testcase_ScriptusBasics

package net.ex337.scriptus.tests;
import java.io.IOException;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

import net.ex337.scriptus.ScriptusFacade;
import net.ex337.scriptus.config.ScriptusConfig;
import net.ex337.scriptus.config.ScriptusConfig.TransportType;
import net.ex337.scriptus.datastore.ScriptusDatastore;
import net.ex337.scriptus.exceptions.ProcessNotFoundException;
import net.ex337.scriptus.model.ScriptAction;
import net.ex337.scriptus.model.ScriptProcess;
import net.ex337.scriptus.model.api.Termination;
import net.ex337.scriptus.model.api.functions.Ask;
import net.ex337.scriptus.model.api.functions.Exec;
import net.ex337.scriptus.model.api.functions.Fork;
import net.ex337.scriptus.model.api.functions.Get;
import net.ex337.scriptus.model.api.functions.Kill;
import net.ex337.scriptus.model.api.functions.Listen;
import net.ex337.scriptus.model.api.functions.Say;
import net.ex337.scriptus.model.api.functions.Sleep;
import net.ex337.scriptus.model.api.functions.Wait;
import net.ex337.scriptus.model.api.output.ErrorTermination;
import net.ex337.scriptus.model.api.output.NormalTermination;
import net.ex337.scriptus.scheduler.ProcessScheduler;
import net.ex337.scriptus.transport.Transport;

/**
* Tests the Scriptus API calls.
*
* @author ian
*
*/
public class Testcase_ScriptusBasics extends BaseTestCase {

  private static final String TEST_USER = "test";
  private ProcessScheduler c;
  private ScriptusDatastore datastore;
  private Transport m;
  private ScriptusConfig conf;
 
  private static final Map<String,String> testSources = new HashMap<String,String>() {{
        put("return.js", "return \"result\";");
        put("returnArgs.js", "return args;");
    put("log.js", "log(\"this is a log statement\"); return \"result\";");
    put("prototypes.js", "Number.prototype.faargh = function(){return 'foo'}; say('foo');return new Number().faargh();");
    put("syntaxError.js", "return nonexitent()");
    put("throw.js", "try {throw \"this is an error\"} catch(e) {throw (typeof e);}");
    put("fiddle.js", "scriptus.fork = function() {return \"not forking\";};return scriptus.fork()");
    put("fiddle2.js", "scriptus = {}; return scriptus.fork()");
    put("fork.js", "var pid = scriptus.fork(); return pid;");
    put("forkNoPrefix.js", "var pid = fork(); return pid;");
    put("exec.js", "exec('returnArg.js', 'arg1 arg2'); throw 'bad result';");
    put("returnArg.js", "return \"result\"+args;");
    put("exit.js", "function foo() {scriptus.exit(\"result\");} foo(); return \"bad result\"");
    put("getHttp.js", "var s = get(\"http://www.google.com/robots.txt\");");
    put("evalget.js", "var ss = get(\"https://raw.github.com/ianso/scriptus/master/scripts/lib/date-en-US.js\"); eval(ss); say(Date.today)");
    put("evalgetBUG.js", "eval(get(\"https://raw.github.com/ianso/scriptus/master/scripts/lib/date-en-US.js\")); say(Date.today)");
    put("getHttps.js", "var s = get(\"http://encrypted.google.com/robots.txt\");");
    put("sleepHour.js", "scriptus.sleep(3);");
    put("sleepDateObject.js", "scriptus.sleep(new Date());");
    put("sleepDate.js", "scriptus.sleep(\"2012-9-11 10:00\");");
    put("sleepDuration.js", "sleep(\"1y 2M 3d 4h\");");
    put("sleepBadDuration.js", "sleep(\"1x\");");
    put("sleepBadDate.js", "scriptus.sleep(\"2012 10:00\");");
    put("wait.js",
        "var pid = scriptus.fork(); " +
        "if(pid == 0) {" +
        "  return \"waited\";" +
        "} " +
        "var result; var waited = scriptus.wait(function(arg){result = arg+\"foo\";});" +
        "return result+waited;"
      );
    put("wait2.js",
        "var pid = scriptus.fork(); " +
        "if(pid == 0) {" +
        "  sleep('1d');" +
        "  return \"waited\";" +
        "} " +
        "var result; var waited = scriptus.wait(function(arg){result = arg+\"fooslept\";});" +
        "return result+waited;"
      );
    put("kill.js",
        "var pid = scriptus.fork(); " +
        "if(pid == 0) {" +
        "  sleep('1d');" +
        "} " +
        "kill(pid);");
    put("ask.js", "var f = scriptus.ask(\"give me your number\", {to:\"foo\"}); if(f != \"response\") throw 1;");
    put("askTimeout.js", "var f = scriptus.ask(\"give me your number\", {to:\"foo\", timeout:3}); if(f != \"response\") throw 1;");
    put("defaultAsk.js", "var f = scriptus.ask(\"give me your number\"); if(f != \"response\") throw 1;");
    put("say.js", "var foo = scriptus.say(\"message\", {to:\"foo\"}); if(foo == null) throw 1;");
    put("defaultSay.js", "scriptus.say(\"message\"); if(foo == null) throw 1;");
    put("listen.js", "var foo = scriptus.listen({to:\"foo\"}); if(foo == null) throw 1;");
    put("defaultListen.js", "var foo = scriptus.listen(); if(foo == null) throw 1;");
    put("evalBroken.js", "var foo = eval(\"scriptus.listen();\");");
    put("eval.js", "var foo = eval(\"function() {scriptus.listen({to:\\\"foo\\\"});}\")(); if(foo == null) throw 1;");
    put("breakSec.js", "java.lang.System.out.println(\"foo\");");
    put("breakSec2.js", "var s = \"foo\"; s.getClass().forName(\"java.lang.System\")");
    put("breakSec3.js", "java.lang.System.out.println(\"foo\");");
    put("breakSec4.js", "var s = new Date(); var e = typeof s; var t = new RegExp(\"\\\\w+\"); var e = typeof t");
    put("breakSec5.js", "try {throw \"exStr\";} catch(e) {var s = typeof e}");
  }};

  @Override
  protected void setUp() throws Exception {

    System.setProperty("scriptus.config", "test-scriptus.properties");
   
    super.setUp();
   
    m = (Transport) appContext.getBean("transport");
   
    c = (ProcessScheduler) appContext.getBean("scheduler");
   
    datastore = (ScriptusDatastore) appContext.getBean("datastore");
   
    for(Map.Entry<String,String> e : testSources.entrySet()) {
      datastore.saveScriptSource(TEST_USER, e.getKey(), e.getValue());
    }
   
    conf = (ScriptusConfig) appContext.getBean("config");
   
    //((DummyTransport)m).response = "response";
   
  }
 

  @Override
  protected void tearDown() throws Exception {
  }

 
 
    public void test_return() throws IOException {
       
        ScriptProcess p = datastore.newProcess(TEST_USER, "return.js", false, "", "owner", TransportType.Dummy);
       
        p.save();
       
        ScriptAction r = p.call();
       
        assertTrue("Correct result", r instanceof NormalTermination);
       
        NormalTermination n = (NormalTermination) r;

        r.visit(new ScriptusFacade(datastore, c, m, conf), p); //sould say

        assertEquals("Correct result", "result", n.getResult());
       
    }

    public void test_returnArgs() throws IOException {
       
        ScriptProcess p = datastore.newProcess(TEST_USER, "returnArgs.js", false, "aaarghs", "owner", TransportType.Dummy);
       
        p.save();
       
        p = datastore.getProcess(p.getPid());
       
        ScriptAction r = p.call();
       
        assertTrue("Correct result", r instanceof NormalTermination);
       
        NormalTermination n = (NormalTermination) r;

        r.visit(new ScriptusFacade(datastore, c, m, conf), p); //sould say

        assertEquals("Correct result", "aaarghs", n.getResult());
       
    }

  public void test_log() throws IOException {
   
    ScriptProcess p = datastore.newProcess(TEST_USER, "log.js", false, "", "owner", TransportType.Dummy);
   
    p.save();
   
    ScriptAction r = p.call();
   
    assertTrue("Correct result", r instanceof NormalTermination);
   
    NormalTermination n = (NormalTermination) r;

    r.visit(new ScriptusFacade(datastore, c, m, conf), p); //sould say

    assertEquals("Correct result", "result", n.getResult());
   
  }

  /**
   * Illustrates the problems of scripts breaking
   * because of prototypes.
   *
   *
   * @throws IOException
   */
  public void test_prototypes() throws IOException {
   
    ScriptProcess p = datastore.newProcess(TEST_USER, "prototypes.js", false, "", "owner", TransportType.Dummy);
   
    ScriptAction r = p.call();
   
    assertTrue("Correct result", r instanceof Say);
   
    p.save();

    r.visit(new ScriptusFacade(datastore, c, m, conf) {

        @Override
      public void execute(UUID pid) {
        ScriptProcess pp = datastore.getProcess(pid);
        ScriptAction rr = pp.call();
                assertEquals("final result", NormalTermination.class, rr.getClass());
                assertEquals("final result value OK", "foo", ((NormalTermination)rr).getResult());
      }
     
    }, p);
   

  }

  public void test_syntaxError() throws IOException {
   
    ScriptProcess p = datastore.newProcess(TEST_USER, "syntaxError.js", false, "", "owner", TransportType.Dummy);
   
    ScriptAction r = p.call();

    assertTrue("Error termination", r instanceof ErrorTermination);
   
  }

  public void test_throwException() throws IOException {
   
    ScriptProcess p = datastore.newProcess(TEST_USER, "throw.js", false, "", "owner", TransportType.Dummy);
   
    ScriptAction r = p.call();

    assertTrue("Error termination", r instanceof ErrorTermination);
   
  }
 
 
  public void test_fiddleWithAPI() throws IOException {
   
    ScriptProcess p = datastore.newProcess(TEST_USER, "fiddle.js", false, "", "owner", TransportType.Dummy);
   
    ScriptAction r = p.call();
   
    assertTrue("Didn't fork correctly", ! (r instanceof Fork));
  }

  public void test_fiddleWithAPI2() throws IOException {
   
    ScriptProcess p = datastore.newProcess(TEST_USER, "fiddle2.js", false, "", "owner", TransportType.Dummy);
   
    ScriptAction r = p.call();
   
    assertTrue("error condition", r instanceof ErrorTermination);
   
  }

 
  public void test_fork() throws IOException {
   
    ScriptProcess p = datastore.newProcess(TEST_USER, "fork.js", false, "", "owner", TransportType.Dummy);
   
    ScriptAction r = p.call();
   
    assertTrue("Forked correctly", r instanceof Fork);
   
    r.visit(new ScriptusFacade(datastore, c, m, conf), p);

  }
 
  public void test_forkNoPrefix() throws IOException {
   
    ScriptProcess p = datastore.newProcess(TEST_USER, "forkNoPrefix.js", false, "", "owner", TransportType.Dummy);
   
    ScriptAction r = p.call();
   
    assertTrue("Forked correctly", r instanceof Fork);
   
    r.visit(new ScriptusFacade(datastore, c, m, conf), p);

  }
 
  public void test_exit() throws IOException {
   
    ScriptProcess p = datastore.newProcess(TEST_USER, "exit.js", false, "", "owner", TransportType.Dummy);
   
    ScriptAction r = p.call();
   
    assertTrue("Exited correctly", r instanceof NormalTermination);
    assertTrue("correct exit", ((NormalTermination)r).getResult().equals("result"));

  }

  public void test_exec() throws IOException {
   
    final ScriptProcess p = datastore.newProcess(TEST_USER, "exec.js", false, "ags", "owner", TransportType.Dummy);
   
    ScriptAction r = p.call();
   
    p.save();
   
    assertTrue("Exec correctly", r instanceof Exec);
    assertEquals("Exec good program", "returnArg.js", ((Exec)r).getScript());
    assertEquals("Exec good args", "arg1 arg2", ((Exec)r).getArgs());
   
    r.visit(new ScriptusFacade(datastore, c, m, conf) {

      @Override
      public void execute(UUID pid) {

        ScriptProcess pp = datastore.getProcess(pid);
       
        assertEquals("good pid", p.getPid(), pid);
        assertEquals("good source", "returnArg.js", pp.getSourceName());
        assertEquals("good args", "arg1 arg2", pp.getArgs());
       
        ScriptAction aa = pp.call();
       
        assertEquals("good class result", NormalTermination.class, aa.getClass());
        assertEquals("goood result", "resultarg1 arg2", ((NormalTermination)aa).getResult());
      }
     
    }, p);
  }

  public void test_sleepHour() throws IOException {
   
    ScriptProcess p = datastore.newProcess(TEST_USER, "sleepHour.js", false, "", "owner", TransportType.Dummy);
   
    ScriptAction r = p.call();
   
    assertTrue("slept correctly", r instanceof Sleep);

  }

  public void test_getHttp() throws IOException {
   
    ScriptProcess p = datastore.newProcess(TEST_USER, "getHttp.js", false, "", "owner", TransportType.Dummy);
   
    ScriptAction r = p.call();
   
    assertTrue("slept correctly", r instanceof Get);

    p.save();

    Get g = (Get) r;
   
    g.visit(new ScriptusFacade(datastore, c, m, conf), p);
   
    p = datastore.getProcess(p.getPid());
   
    assertTrue("got content", p.getState() instanceof String);
   
    String content = (String) p.getState();
   
    assertTrue("content ok", content.contains("User-agent: *"));
   
  }


  public void test_evalGet() throws IOException {
   
    ScriptProcess p = datastore.newProcess(TEST_USER, "evalget.js", false, "", "owner", TransportType.Dummy);
   
    ScriptAction r = p.call();
   
    assertTrue("slept correctly", r instanceof Get);

    p.save();

    Get g = (Get) r;
   
    g.visit(new ScriptusFacade(datastore, c, m, conf), p);
   
    p = datastore.getProcess(p.getPid());
   
    assertTrue("got content", p.getState() instanceof String);
   
    r = p.call();
   
    assertTrue("said correctly", r instanceof Say);
   
    assertTrue("contains fn def", ((Say)r).getMsg().contains("return new Date().clearTime();"));
  }


  public void test_evalGetBug() throws IOException {
   
    ScriptProcess p = datastore.newProcess(TEST_USER, "evalgetBUG.js", false, "", "owner", TransportType.Dummy);
   
    ScriptAction r = p.call();
   
    assertTrue("slept correctly", r instanceof Get);

    p.save();

    Get g = (Get) r;
   
    g.visit(new ScriptusFacade(datastore, c, m, conf), p);
   
    p = datastore.getProcess(p.getPid());
   
    assertTrue("got content", p.getState() instanceof String);
   
    r = p.call();
   
    assertTrue("said correctly", r instanceof Say);
   
    assertTrue("contains fn def", ((Say)r).getMsg().contains("return new Date().clearTime();"));
  }

 
  public void test_getHttps() throws IOException {
   
    ScriptProcess p = datastore.newProcess(TEST_USER, "getHttps.js", false, "", "owner", TransportType.Dummy);
   
    ScriptAction r = p.call();
   
    assertTrue("slept correctly", r instanceof Get);

    p.save();

    Get g = (Get) r;
   
    g.visit(new ScriptusFacade(datastore, c, m, conf), p);
   
    p = datastore.getProcess(p.getPid());
   
    assertTrue("got content", p.getState() instanceof String);
   
    String content = (String) p.getState();
   
    assertTrue("content ok", content.contains("User-agent: *"));

  }

  public void test_sleepDate() throws IOException {
   
    ScriptProcess p = datastore.newProcess(TEST_USER, "sleepDate.js", false, "", "owner", TransportType.Dummy);
   
    ScriptAction r = p.call();
   
    assertTrue("slept correctly", r instanceof Sleep);

  }

  public void test_sleepDateObject() throws IOException {
   
    ScriptProcess p = datastore.newProcess(TEST_USER, "sleepDateObject.js", false, "", "owner", TransportType.Dummy);
   
    ScriptAction r = p.call();
   
    assertTrue("slept correctly", r instanceof Sleep);

  }

  public void test_sleepDuration() throws IOException {
   
    ScriptProcess p = datastore.newProcess(TEST_USER, "sleepDuration.js", false, "", "owner", TransportType.Dummy);
   
    ScriptAction r = p.call();
   
    assertTrue("slept correctly", r instanceof Sleep);

    Sleep s = (Sleep)r;
   
    Calendar target = Calendar.getInstance();
    target.add(Calendar.YEAR, 1);
    target.add(Calendar.MONTH, 2);
    target.add(Calendar.DATE, 3);
    target.add(Calendar.HOUR, 4);
   
    Calendar c = s.getUntil();
   
    assertEquals("good year", target.get(Calendar.YEAR), c.get(Calendar.YEAR));
    assertEquals("good month", target.get(Calendar.MONTH), c.get(Calendar.MONTH));
    assertEquals("good day", target.get(Calendar.DATE), c.get(Calendar.DATE));
    assertEquals("good hour", target.get(Calendar.HOUR), c.get(Calendar.HOUR));
   
  }

  public void test_sleepBadDuration() throws IOException {
   
    ScriptProcess p = datastore.newProcess(TEST_USER, "sleepBadDuration.js", false, "", "owner", TransportType.Dummy);
   
    ScriptAction r = p.call();
   
    assertTrue("error", r instanceof ErrorTermination);

   
  }

  public void test_sleepBadDate() throws IOException {
   
    ScriptProcess p = datastore.newProcess(TEST_USER, "sleepBadDate.js", false, "", "owner", TransportType.Dummy);
   
    ScriptAction r = p.call();
   
    assertTrue("Forked correctly", r instanceof ErrorTermination);

  }

  /**
   * tests for when child process finished before wait() is called
   */
  public void test_wait() throws IOException {

    final ScriptProcess p = datastore.newProcess(TEST_USER, "wait.js", false, "", "owner", TransportType.Dummy);
   
    p.save();
   
    ScriptAction r = p.call();

    assertTrue("Forked correctly", r instanceof Fork);
   
    final ThreadLocal<Boolean> executedParentPostFork = new ThreadLocal<Boolean>();
    final ThreadLocal<Boolean> executedParentPostWait = new ThreadLocal<Boolean>();
    final ThreadLocal<Boolean> executedChild = new ThreadLocal<Boolean>();
   
    ScriptusFacade testFacade = new ScriptusFacade(datastore, c, m, conf) {
     
      private UUID childPid;

      @Override
      public void execute(UUID pid) {
       
        if( ! pid.equals(p.getPid())) {
         
          executedChild.set(Boolean.TRUE);
         
          childPid = pid;
         
          super.execute(pid);

          return;
        }
       
        if(pid.equals(p.getPid())) {

          if(Boolean.TRUE.equals(executedParentPostFork.get())) {
           
            executedParentPostWait.set(Boolean.TRUE);
           
            ScriptAction enfin = datastore.getProcess(pid).call();
           
            assertTrue("script finished", enfin instanceof Termination);
            assertEquals("script result OK", "waitedfoo"+childPid, ((Termination)enfin).getResult());
           
          } else {

            executedParentPostFork.set(Boolean.TRUE);
           
            ScriptProcess p2 = datastore.getProcess(pid);
           
            ScriptAction r2 = p2.call();
           
            p2.save();

            assertTrue("Waited correctly", r2 instanceof Wait);

            //pause thread until child has termination
           
            r2.visit(this, p2);

          }

        }
       
      }
     
    };
   
    r.visit(testFacade, p);
   
    assertEquals("Executed child", Boolean.TRUE, executedChild.get());
    assertEquals("Executed parent (post-fork)", Boolean.TRUE, executedParentPostFork.get());
    assertEquals("Executed parent (post-wait)", Boolean.TRUE, executedParentPostWait.get());
   
  }

  /**
   * tests for when child process finished after wait() is called
   */
  public void test_wait2() throws IOException {

    final ScriptProcess p = datastore.newProcess(TEST_USER, "wait2.js", false, "", "owner", TransportType.Dummy);
   
    p.save();
   
    ScriptAction r = p.call();

    assertTrue("Forked correctly", r instanceof Fork);
   
    final ThreadLocal<Boolean> executedParentPostFork = new ThreadLocal<Boolean>();
    final ThreadLocal<Boolean> executedParentPostWait = new ThreadLocal<Boolean>();
    final ThreadLocal<Boolean> executedChild = new ThreadLocal<Boolean>();
    final ThreadLocal<Boolean> executedChildPostSleep = new ThreadLocal<Boolean>();

    ScriptusFacade testFacade = new ScriptusFacade(datastore, c, m, conf) {
     
      private UUID childPid;

      @Override
      public void execute(UUID pid) {
       
        if( ! pid.equals(p.getPid())) {
          //executing child

          if(Boolean.TRUE.equals(executedChild.get())) {
           
            executedChildPostSleep.set(Boolean.TRUE);
           
            ScriptProcess p2 = datastore.getProcess(pid);
           
            ScriptAction r2 = p2.call();

            assertTrue("in child termination", r2 instanceof Termination);
           
            p2.save();
           
            r2.visit(this, p2);

          } else {
           
            executedChild.set(Boolean.TRUE);
           
            childPid = pid;
           
            ScriptProcess p2 = datastore.getProcess(pid);
           
            ScriptAction r2 = p2.call();

            p2.save();
           
            assertTrue("in child sleep", r2 instanceof Sleep);
           

          }
         
          return;
        }
       
        if(pid.equals(p.getPid())) {

          if(Boolean.TRUE.equals(executedParentPostFork.get())) {
           
            executedParentPostWait.set(Boolean.TRUE);
           
            ScriptAction enfin = datastore.getProcess(pid).call();
           
            assertTrue("script finished", enfin instanceof Termination);
            assertEquals("script result OK", "waitedfooslept"+childPid, ((Termination)enfin).getResult());
           
          } else {
           
            executedParentPostFork.set(Boolean.TRUE);
           
            ScriptProcess p2 = datastore.getProcess(pid);
           
            ScriptAction r2 = p2.call();
           
            p2.save();

            assertTrue("Waited correctly", r2 instanceof Wait);

            //pause thread until child has termination
           
            r2.visit(this, p2);
           
            //assert parent is still waiting
            //wake child and execute
            execute(childPid);

          }

        }
       
      }
     
    };
   
    r.visit(testFacade, p);
   
    assertEquals("Executed child", Boolean.TRUE, executedChild.get());
    assertEquals("Executed child post-sleep", Boolean.TRUE, executedChildPostSleep.get());
   
    assertEquals("Executed parent (post-fork)", Boolean.TRUE, executedParentPostFork.get());
    assertEquals("Executed parent (post-wait)", Boolean.TRUE, executedParentPostWait.get());
   
  }

  public void test_kill() throws IOException {

    final ScriptProcess p = datastore.newProcess(TEST_USER, "kill.js", false, "", "owner", TransportType.Dummy);
   
    p.save();
   
    ScriptAction r = p.call();

    assertTrue("Forked correctly", r instanceof Fork);
   
    final ThreadLocal<Boolean> executedParentPostFork = new ThreadLocal<Boolean>();
    final ThreadLocal<Boolean> executedParentPostKill = new ThreadLocal<Boolean>();
    final ThreadLocal<Boolean> executedChild = new ThreadLocal<Boolean>();
   
    ScriptusFacade testFacade = new ScriptusFacade(datastore, c, m, conf) {
     
      private UUID childPid;
     
      @Override
      public void execute(UUID pid) {
       
        if( ! pid.equals(p.getPid())) {
          //executing child
         
          executedChild.set(Boolean.TRUE);
         
          childPid = pid;
         
          super.execute(pid);

          return;
        }
       
        if(pid.equals(p.getPid())) {

          //executing parent
         
          if(Boolean.TRUE.equals(executedParentPostFork.get())) {
           
            //post-kill
           
            executedParentPostKill.set(Boolean.TRUE);

          } else {
           
            //post-fork, pre-kill, pid

            executedParentPostFork.set(Boolean.TRUE);
           
            ScriptProcess p2 = datastore.getProcess(pid);
           
            ScriptAction r2 = p2.call();
           
            p2.save();

            assertTrue("Killed correctly", r2 instanceof Kill);
           
            r2.visit(this, p2);

            boolean caughtNotFoundExcepton = false;
           
            try {
              datastore.getProcess(childPid);
            } catch(ProcessNotFoundException sre) {
              caughtNotFoundExcepton = true;
            }
           
            assertTrue("process doesn't exist", caughtNotFoundExcepton);
           
           
           
          }

        }
       
      }
     
    };
   
    assertTrue("forking correctly", r instanceof Fork);
   
    r.visit(testFacade, p);
   
    assertEquals("Executed child", Boolean.TRUE, executedChild.get());
    assertEquals("Executed parent (post-fork)", Boolean.TRUE, executedParentPostFork.get());
    assertEquals("Executed parent (post-kill)", Boolean.TRUE, executedParentPostKill.get());
   
  }


  public void test_ask() throws IOException {

    ScriptProcess p = datastore.newProcess(TEST_USER, "ask.js", false, "", "owner", TransportType.Dummy);
   
    ScriptAction r = p.call();
   
    assertTrue("Asked correctly", r instanceof Ask);
    assertTrue("Asked correctly foo", ((Ask)r).getWho().equals("foo"));
   
    p.save();

    r.visit(new ScriptusFacade(datastore, c, m, conf), p);
   
  }

  public void test_defaultAsk() throws IOException {

    ScriptProcess p = datastore.newProcess(TEST_USER, "defaultAsk.js", false, "", "owner", TransportType.Dummy);
   
    ScriptAction r = p.call();
   
    assertTrue("Asked correctly", r instanceof Ask);
    assertNull("Asked correctly owner", ((Ask)r).getWho());
   
    p.save();

    r.visit(new ScriptusFacade(datastore, c, m, conf), p);
   
  }


  public void test_askTimeout() throws IOException {

    ScriptProcess p = datastore.newProcess(TEST_USER, "askTimeout.js", false, "", "owner", TransportType.Dummy);
   
    ScriptAction r = p.call();
   
    assertTrue("Asked correctly", r instanceof Ask);
    assertTrue("Asked correctly owner", ((Ask)r).getWho().equals("foo"));
   
    p.save();

    r.visit(new ScriptusFacade(datastore, c, m, conf), p);
   
  }

  public void test_say() throws IOException {

    ScriptProcess p = datastore.newProcess(TEST_USER, "say.js", false, "", "owner", TransportType.Dummy);
   
    ScriptAction r = p.call();
   
    assertTrue("Said correctly", r instanceof Say);
    assertTrue("Said correctly to user", ((Say)r).getWho().equals("foo"));
    assertTrue("Said correctly message", ((Say)r).getMsg().equals("message"));
   
    p.save();
   
    r.visit(new ScriptusFacade(datastore, c, m, conf), p);
  }

  public void test_defaultSay() throws IOException {

    ScriptProcess p = datastore.newProcess(TEST_USER, "defaultSay.js", false, "", "owner", TransportType.Dummy);
   
    ScriptAction r = p.call();
   
    assertTrue("Said correctly", r instanceof Say);
    assertNull("Said to owner correctly", ((Say)r).getWho());

  }

  public void test_listen() throws IOException {

    ScriptProcess p = datastore.newProcess(TEST_USER, "listen.js", false, "", "owner", TransportType.Dummy);
   
    ScriptAction r = p.call();
   
    assertTrue("Listened correctly", r instanceof Listen);
    assertTrue("Listened correctly to", ((Listen)r).getWho().equals("foo"));
   
    p.save();
   
    r.visit(new ScriptusFacade(datastore, c, m, conf), p);
  }

  public void test_defaultListen() throws IOException {

    ScriptProcess p = datastore.newProcess(TEST_USER, "defaultListen.js", false, "", "owner", TransportType.Dummy);
   
    ScriptAction r = p.call();
   
    assertTrue("Listened correctly", r instanceof Listen);
    assertNull("Listened correctly to", ((Listen)r).getWho());
   
    p.save();
   
    r.visit(new ScriptusFacade(datastore, c, m, conf), p);
  }

  public void test_evalBroken() throws IOException {
   
    ScriptProcess p = datastore.newProcess(TEST_USER, "evalBroken.js", false, "", "owner", TransportType.Dummy);
   
    ScriptAction r = p.call();
   
    assertTrue("Broken", r instanceof ErrorTermination);
  }

  public void test_eval() throws IOException {
   
    ScriptProcess p = datastore.newProcess(TEST_USER, "eval.js", false, "", "owner", TransportType.Dummy);
   
    ScriptAction r = p.call();
   
    assertTrue("Listened correctly", r instanceof Listen);

    p.save();

    r.visit(new ScriptusFacade(datastore, c, m, conf), p);
  }

//  public void test_addTwoNumbers() throws IOException {
//
//    ((DummyTransport)m).defaultResponse = "4";
//
//    ScriptProcess p = datastore.newProcess(TEST_USER, "addTwoNumbers.js", "", "owner", TransportType.Dummy);
//   
//    ScriptAction r = p.call();
//
//    p.save();
//
//    assertTrue("First correctly", r instanceof Fork);
//   
//    //everything else should happen immediately with mocks
//    r.visit(new ScriptusFacade(datastore, c, m, conf), p);
//   
//    ((DummyTransport)m).defaultResponse = "response";
//  }

  public void test_breakSecurity() throws IOException {
   
    ScriptProcess p = datastore.newProcess(TEST_USER, "breakSec.js", false, "", "owner", TransportType.Dummy);
   
    p.save();
   
    ScriptAction r = p.call();
   
    assertTrue("Failed correctly", r instanceof ErrorTermination);
   
    System.out.println(((ErrorTermination)r).getError());
   
    r.visit(new ScriptusFacade(datastore, c, m, conf), p);
  }

  public void test_breakSecurity2() throws IOException {
   
    ScriptProcess p = datastore.newProcess(TEST_USER, "breakSec2.js", false, "", "owner", TransportType.Dummy);

    p.save();

    ScriptAction r = p.call();
   
    assertTrue("Failed correctly", r instanceof ErrorTermination);
   
    System.out.println(((ErrorTermination)r).getError());
   
    r.visit(new ScriptusFacade(datastore, c, m, conf), p);
  }

  public void test_breakSecurity3() throws IOException {
   
    ScriptProcess p = datastore.newProcess(TEST_USER, "breakSec3.js", false, "", "owner", TransportType.Dummy);
   
        p.save();
       
    ScriptAction r = p.call();
   
    assertTrue("Failed correctly", r instanceof ErrorTermination);
   
    System.out.println(((ErrorTermination)r).getError());
   
    r.visit(new ScriptusFacade(datastore, c, m, conf), p);
  }

  public void test_breakSecurity4() throws IOException {
   
    ScriptProcess p = datastore.newProcess(TEST_USER, "breakSec4.js", false, "", "owner", TransportType.Dummy);
   
        p.save();
       
    ScriptAction r = p.call();
   
    assertEquals("Failed correctly", ErrorTermination.class, r.getClass());
   
    System.out.println(((ErrorTermination)r).getError());
   
    r.visit(new ScriptusFacade(datastore, c, m, conf), p);
  }

  public void test_breakSecurity5() throws IOException {
   
    ScriptProcess p = datastore.newProcess(TEST_USER, "breakSec5.js", false, "", "owner", TransportType.Dummy);
   
        p.save();
       
       
    ScriptAction r = p.call();
   
    assertEquals("Failed correctly", ErrorTermination.class, r.getClass());
           
    System.out.println(((ErrorTermination)r).getError());
   
    r.visit(new ScriptusFacade(datastore, c, m, conf), p);
  }
 
 
}
TOP

Related Classes of net.ex337.scriptus.tests.Testcase_ScriptusBasics

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.