/** * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * See the NOTICE file distributed with this work for additional * information regarding copyright ownership. */ /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package org.thingml.custompopulator; import java.io.File; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; /** * * @author sintef */ public class Populate { public static void main(String[] args) { final File workingDir = new File(System.getProperty("user.dir")); final File testFolder = new File(workingDir.getPath() + "/src/main/resources/customTests/Network"); //Targeted languages Lang posix = new Lang("Posix", "posix", "./#TARGET##TYPE##SP#Cfg/#TARGET##TYPE##SP#Cfg"); Lang posixmt = new Lang("PosixMT", "posixmt", "./#TARGET##TYPE##SP#Cfg/#TARGET##TYPE##SP#Cfg"); Lang nodejs = new Lang("NodeJS", "nodejs", "nodejs #TARGET##TYPE##SP#Cfg/main.js"); Lang java = new Lang("Java", "java", "mvn -q -f #TARGET##TYPE##SP#Cfg/pom.xml exec:java"); List<Lang> langs = new ArrayList<>(); langs.add(posix); langs.add(posixmt); langs.add(nodejs); langs.add(java); //Protocol to be tested Protocol serial = new Protocol("Serial", false, false, "timeout 8 socat -x -v PTY,link=modem0 PTY,link=modem1&\nsleep 1\n"); Protocol mQTT = new Protocol("MQTT", false, true); Protocol websocket = new Protocol("Websocket", true, true); Protocol mQTTbin = new Protocol("MQTT-binary", false, true); List<Protocol> prots = new ArrayList<>(); prots.add(serial); prots.add(mQTT); prots.add(mQTTbin); prots.add(websocket); //Type to be tested. Type tEmpty = new Type("Empty", "I m1 m2 End"); Type tBool = new Type("Bool", "I mBool mHBool End"); Type tChar = new Type("Char", "I mChar mHChar End"); Type tInt = new Type("Int", "I mInt8 mInt8 mInt8 mInt16 mInt16 mInt16 mInt32 mInt32 mInt32 mHInt End"); Type tFloat = new Type("Float", "I mFloat mHFloat End"); Type tUint = new Type("UInt", "I mUInt8 mUInt8 mUInt8 mUInt16 mUInt16 mUInt16 mUInt32 mUInt32 mUInt32 mHUInt End"); List<Type> types = new ArrayList<>(); types.add(tEmpty); types.add(tBool); types.add(tChar); types.add(tInt); types.add(tFloat); types.add(tUint); for(Protocol p : prots) { for(Type t : types) { for(int i = 0; i < langs.size(); i++) { generateFiles(testFolder, t, langs.get(i), langs.get(i), p); for(int j = 0; j < langs.size(); j++) { if(i != j) generateFiles(testFolder, t, langs.get(i), langs.get(j), p); } /*if(i != 0) { generateFiles(testFolder, t, langs.get(i), langs.get(i-1), p); generateFiles(testFolder, t, langs.get(i-1), langs.get(i), p); }*/ } } } } public static void generateFiles(File workingDir, Type t, Lang langCli, Lang langSrv, Protocol p) { File dir = new File(workingDir, p.dirName); if(!dir.exists() || !dir.isDirectory()) dir.mkdir(); File prop = new File(dir, "test" + t.type + langCli.lang + langSrv.lang + ".properties"); writeFile(prop, getProperties(t, langCli, langSrv, p)); File script = new File(dir, "test" + t.type + langCli.lang + langSrv.lang + ".sh"); writeFile(script, getScript(t, langCli, langSrv, p)); } public static void writeFile(File f, String str) { try { PrintWriter w = new PrintWriter(f); w.print(str); w.close(); } catch (Exception ex) { System.err.println("Problem writing into " + f.getPath()); ex.printStackTrace(); } } public static String getProperties(Type t, Lang langCli, Lang langSrv, Protocol p) { String propTemplate = "#Depandancies List\n" + "depList=Cli, Srv\n" + "\n" + "#Test Config\n" + "run=test" + t.type + langCli.lang + langSrv.lang + ".sh\n" + "log=test" + t.type + langCli.lang + langSrv.lang + ".log\n" + "oracle=" + t.oracle + "\n" + "dump=cliStdo.log\n" + (p.mono ? "runMono=true\n" : "") + "\n" + "#Cli\n" + "Cli_src=Client" + t.type + (p.sp ? "SP" : "") +"Cfg.thingml\n" + "Cli_compiler=" + langCli.comp + "\n" + "\n" + "#Srv\n" + "Srv_src=Server" + t.type + "Cfg.thingml\n" + "Srv_compiler=" + langSrv.comp + ""; return propTemplate; } public static String getScript(Type t, Lang langCli, Lang langSrv, Protocol p) { String scriptTemplate = "#!/bin/bash\n" + "\n" + "rm cliStdo.log &> /dev/null\n" + "\n" + p.preExec + "timeout -s SIGINT 6 " + langSrv.getExec("Server", t.type, "") + " > srvStdo.log 2> srvStdr.log&\n" + "sleep 3\n" + "timeout -s SIGINT 4 " + langCli.getExec("Client", t.type, (p.sp ? "SP" : "")) + " > cliStdo.log 2> cliStdr.log&\n" + "\n" + "sleep 5\n" + "\n" + "#printf \"Cli stdo:\\n\\n\"\n" + "cat cliStdo.log\n" + "#printf \"\\nCli stdr:\\n\\n\"\n" + ">&2 cat cliStdr.log\n" + "\n" + "#printf \"\\n\\nSrv stdo:\\n\\n\"\n" + ">&2 cat srvStdo.log\n" + "#printf \"\\nSrv stdr:\\n\\n\"\n" + ">&2 cat srvStdr.log"; return scriptTemplate; } }