Differences

This shows you the differences between two versions of the page.

Link to this comparison view

example_remoteagent [2017/04/11 02:45] (current)
admin created
Line 1: Line 1:
 +  package demo;
 +  ​
 +  import java.util.Date;​
 +  import java.util.logging.Logger;​
 +  import org.json.JSONObject;​
 +  import com.webmbt.agent.RemoteCmd;​
 +  import com.webmbt.agent.TestOptimalAgent;​
 +
 +  /**
 +   * This is a demo class for a remote TestOptimal agent which fetches the model sequence commands from
 +   * TestOptimal server running on a remote host and executes them locally.
 +   ​* ​
 +   */
 +  public class DemoEmbeddedSysAgent extends TestOptimalAgent {
 +
 + public static native double add(double x, double y);
 + public static native double substract(double x, double y);
 + public static native double multiply(double x, double y);
 + public static native double divide(double x, double y);
 +
 + /**
 +   * Loads the embedded c/c++ library that you have implemented to interact with your embedded system. ​ The functions in the DLL 
 +   * are exposed to JNI interface to be called from this java code.
 +   * 
 +   * The dll file must be placed in /lib folder within TO_Agent project/​folder.
 +   * 
 +   */
 + static { 
 +         try{
 +        // replace demo_64.dll with demo_32.dll if you are running x86 (32 bit) Windows OS
 +        String dllPath = System.getProperty("​user.dir"​) + "/​lib/​demo_64.dll";​
 +              System.load(dllPath);​
 +              System.out.println(dllPath);​
 +         } catch(Exception e) { 
 +        e.printStackTrace();​
 +         ​} ​
 +    }
 +
 + /**
 + * start up TestOptimal java agent as a normal java process, remotely execcute Demo_EmbeddedSys_RemoteAgent model on TestOptimal server.
 +
 + * @throws Exception
 + */
 + public static void main (String[] args) throws Exception {
 + 
 + args = new String[] {"​localhost",​ "​8888",​ "​Demo_EmbeddedSys"​};​
 + TestOptimalAgent toagent = new DemoEmbeddedSysAgent(null,​ "​http://"​ + args[0] + ":"​ + args[1], args[2], 5, 200);
 + toagent.execModel("​myUserID",​ "​myPwd",​ "​autoClose=false",​ "​plugin=RemoteCommand"​);​
 + Thread.sleep(500);​
 + toagent.run();​
 + toagent.saveStat("​EmbeddedSys_RemoteAgent at " + (new Date()).toString());​
 + System.out.println(toagent.getExecSummary());​
 + 
 + /* leave model open so that you may use TO IDE browser to view the execution results. Be sure to close the model when you are done.
 + * In real testing, you may uncomment out following like to close the model.
 +  toagent.closeModel();​
 +    */
 + }
 + 
 + /**
 + * Constructor.
 +
 + * @param logger_p
 + * @param TestOptimalSvrAddr_p
 + * @param modelName_p
 + * @param maxRetry_p
 + * @param retryMillis_p
 + * @throws Exception
 + */
 + public DemoEmbeddedSysAgent (Logger logger_p, String TestOptimalSvrAddr_p,​ String modelName_p,​ int maxRetry_p, int retryMillis_p) ​
 + throws Exception {
 + super(logger_p,​ TestOptimalSvrAddr_p,​ modelName_p,​ maxRetry_p, retryMillis_p);​
 + }
 + 
 + /**
 + * This is the example of how to parse the remote commands received from your model MScript and call
 + * to your embedded system.
 +
 + * This function is called for each remote command received from the model. The function is expected
 + * to parse the remote command to figure out what it is expected to do to invoke embedded system
 + * and execute that action. ​ The results from the action is then returned as a String to be sent back
 + * to your model to be checked/​validated against the expected results by your model.
 +
 + * Throw Exception if error/​failure is encountered in performing action on the embedded system.
 + */
 + @Override
 + public String execute(RemoteCmd remoteCmd_p) throws Exception {
 + String cmdSyntax = remoteCmd_p.getCmdActionSyntax();​
 + this.info("​Remote cmd: " + cmdSyntax);
 + JSONObject cmdJSON = new JSONObject(cmdSyntax);​
 + String cmdAction = cmdJSON.getString("​ACTION"​);​
 + this.info("​Action:​ " + cmdAction);
 + 
 + if (cmdAction.equalsIgnoreCase("​MBT_start"​)) {
 + this.info("​Starting VendingMachine"​);​
 + return "​OK";​
 + }
 + else if (cmdAction.equalsIgnoreCase("​launchAUT"​)) {
 + this.info("​Running the test"​);​
 + return "​OK";​
 + }
 + else if (cmdAction.equalsIgnoreCase("​resetAUT"​)) {
 + this.info("​Resetting the test"​);​
 + return "​OK";​
 + }
 + else if (cmdAction.equalsIgnoreCase("​add"​)) {
 + String p1 = cmdJSON.getString("​P1"​);​
 + String p2 = cmdJSON.getString("​P2"​);​
 + this.info("​add " + p1 + ", " + p2);
 + try {
 + double p1Value = Double.parseDouble(p1);​
 + double p2Value = Double.parseDouble(p2);​
 + double d = add(p1Value,​ p2Value);
 + return String.valueOf(d);​
 + }
 + catch (Throwable e) {
 + this.error("​Failed to call add function: " + e.toString());​
 + throw new Exception (e.toString());​
 + }
 + }
 +
 + else if (cmdAction.equalsIgnoreCase("​substract"​)) {
 + String p1 = cmdJSON.getString("​P1"​);​
 + String p2 = cmdJSON.getString("​P2"​);​
 + this.info("​substract " + p1 + ", " + p2);
 + try {
 + double p1Value = Double.parseDouble(p1);​
 + double p2Value = Double.parseDouble(p2);​
 + double d = substract(p1Value,​ p2Value);
 + return String.valueOf(d);​
 + }
 + catch (Throwable e) {
 + this.error("​Failed to call substract function: " + e.toString());​
 + throw new Exception (e.toString());​
 + }
 + }
 + else if (cmdAction.equalsIgnoreCase("​multiply"​)) {
 + String p1 = cmdJSON.getString("​P1"​);​
 + String p2 = cmdJSON.getString("​P2"​);​
 + this.info("​multiply " + p1 + ", " + p2);
 + try {
 + double p1Value = Double.parseDouble(p1);​
 + double p2Value = Double.parseDouble(p2);​
 + double d = multiply(p1Value,​ p2Value);
 + return String.valueOf(d);​
 + }
 + catch (Throwable e) {
 + this.error("​Failed to call multiply function: " + e.toString());​
 + throw new Exception (e.toString());​
 + }
 + }
 + else if (cmdAction.equalsIgnoreCase("​divide"​)) {
 + String p1 = cmdJSON.getString("​P1"​);​
 + String p2 = cmdJSON.getString("​P2"​);​
 + this.info("​divide " + p1 + ", " + p2);
 + try {
 + double p1Value = Double.parseDouble(p1);​
 + double p2Value = Double.parseDouble(p2);​
 + double d = divide(p1Value,​ p2Value);
 + return String.valueOf(d);​
 + }
 + catch (Throwable e) {
 + this.error("​Failed to call divide function: " + e.toString());​
 + throw new Exception (e.toString());​
 + }
 + }
 + else {
 + this.error("​Invalid command: " + cmdAction);
 + throw new Exception ("​Error:​ invalid command " + cmdAction);
 + }
 + }
 +
 +  }
  
Print/export
QR Code
QR Code example_remoteagent (generated for current page)