aboutsummaryrefslogtreecommitdiff
path: root/spss.test/src/testclient/LasttestClient.java
diff options
context:
space:
mode:
Diffstat (limited to 'spss.test/src/testclient/LasttestClient.java')
-rw-r--r--spss.test/src/testclient/LasttestClient.java389
1 files changed, 389 insertions, 0 deletions
diff --git a/spss.test/src/testclient/LasttestClient.java b/spss.test/src/testclient/LasttestClient.java
new file mode 100644
index 000000000..339b6609d
--- /dev/null
+++ b/spss.test/src/testclient/LasttestClient.java
@@ -0,0 +1,389 @@
+package testclient;
+
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.io.PrintStream;
+import java.io.RandomAccessFile;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.util.Date;
+
+
+/**
+ * @author Sven
+ *
+ * To change this generated comment edit the template variable "typecomment":
+ * Window>Preferences>Java>Templates.
+ * To enable and disable the creation of type comments go to
+ * Window>Preferences>Java>Code Generation.
+ */
+public class LasttestClient {
+
+
+ public int max_thread_count = 300;
+ public int thread_counter = 0;
+ public int error_count = 0;
+ public int turns = 0;
+
+ public long max = 0;
+ public long min = Long.MAX_VALUE;
+
+ public PrintStream Log = null;
+
+ public boolean stop = false;
+
+ private String readFile(String filename) throws Exception
+ {
+ RandomAccessFile raf = new RandomAccessFile(filename, "r");
+ if (raf.length() > Integer.MAX_VALUE)
+ throw new IOException("file too big to fit in byte array.");
+
+ byte[] result = new byte[(int) raf.length()];
+
+ raf.read(result);
+
+ return new String(result);
+
+ }
+
+
+
+ public String buildRequest(String filename) throws Exception
+ {
+ String data = readFile(filename);
+ int index = data.indexOf(">");
+
+ String xml_head = data.substring(0,index+1);
+ data = data.substring(index+1);
+ //Log.println("Data2:\n"+data);
+
+ data =
+ xml_head +
+ "<soap:Envelope "+
+ "xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\" "+
+ "soap:encodingStyle=\"http://www.w3.org/2001/12/soap-encoding\"> "+
+ "<soap:Body> "+
+ data +
+ "</soap:Body>"+
+ "</soap:Envelope>";
+
+ if(data.indexOf("10.16.46.109")!=-1)
+ data = replaceString(data,"10.16.46.109","127.0.0.1");
+
+ System.out.println("Request:"+data);
+
+ return data;
+
+ }
+
+ public String buildEndpoint(String request,String server)
+ {
+ String ep = null;
+ if(request.indexOf("<Create")!=-1) ep = server + "moa-spss/services/SignatureCreation";
+ else ep = server + "moa-spss/services/SignatureVerification";
+ return ep;
+ }
+
+ public void startTest(String filename,String server,int req_per_second,int turns) throws Exception
+ {
+ this.turns = turns;
+ String request = buildRequest(filename);
+ String ep = buildEndpoint(request,server);
+
+ boolean result = doTestRequest(request,ep);
+
+ if(result)
+ {
+ System.out.println("TestRequest OK. Lasttest wird gestartet.");
+ Dispatcher dp = new Dispatcher(this,request,ep,req_per_second,turns);
+ dp.start();
+ while(!stop)
+ {
+ System.out.println("Checking Stop Condition ...(Running "+thread_counter+", Min "+(min)+", Max "+(max)+", "+new Date(System.currentTimeMillis())+")");
+ Thread.sleep(3000);
+ }
+ System.out.println("Fehler:"+error_count+" (Running "+thread_counter+", Min "+(min)+", Max "+(max)+", "+new Date(System.currentTimeMillis())+")");
+ }
+ else
+ {
+ System.out.println("TestRequest lieferte einen Fehler. Lasttest wird nicht gestartet.");
+ }
+ }
+
+ public boolean doTestRequest(String request,String endpoint) throws Exception
+ {
+ HttpURLConnection urlc = (HttpURLConnection)(new URL(endpoint)).openConnection();
+ urlc.setDoInput(true);
+ urlc.setDoOutput(true);
+ urlc.setRequestProperty("SOAPAction","");
+ BufferedWriter ow = new BufferedWriter(new OutputStreamWriter(urlc.getOutputStream()));
+ ow.write(request);
+ ow.flush();
+
+ int code = 0;
+ try {
+ code = urlc.getResponseCode();
+ }
+ catch(IOException ioe)
+ {
+ ow.close();
+ urlc.disconnect();
+ return false;
+ }
+ BufferedReader iw = new BufferedReader(new InputStreamReader(urlc.getInputStream()));
+ while(iw.readLine()!=null) {}
+ ow.close();
+
+ if(code==500)
+ {
+ return false;
+ }
+ else
+ {
+ BufferedReader br = new BufferedReader(new InputStreamReader(urlc.getInputStream()));
+ StringBuffer response = new StringBuffer();
+ String line = null;
+ while((line = br.readLine()) != null)
+ {
+ response.append(line);
+ }
+
+ iw.close();
+ urlc.disconnect();
+
+ String resp = response.toString();
+
+ int pos = resp.indexOf("ErrorCode>");
+ if(pos==-1)
+ {
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ }
+
+ private String replaceString(
+ String input,
+ String oldPart,
+ String newPart)
+ throws Exception {
+ String erg = null;
+
+ //First Part
+ erg = input.substring(0, input.indexOf(oldPart));
+ //Insert new Part
+ erg += newPart;
+
+ //insert REST
+ erg
+ += input.substring(
+ input.indexOf(oldPart) + oldPart.length(),
+ input.length());
+
+ return erg;
+ }
+
+ public static void main(String[] args) throws Exception
+ {
+ int sek = 0;
+ int turns = 0;
+
+ if(args.length!=4)
+ {
+ System.out.println("Parameteranzahl falsch. Bitte verwenden Sie die Syntax <Requestdatei><ServerURL><Request_pro_Sekunde(Zahl)><Anzahl_der_Durchläufe(Zahl oder INF)>");
+ return;
+ }
+
+ try {
+ sek = Integer.parseInt(args[2]);
+ if(args[3].equals("INF"))
+ {
+ turns = 0;
+ }
+ else
+ turns = Integer.parseInt(args[3]);
+ }
+ catch(NumberFormatException e)
+ {
+ System.out.println("Einer der Parameter (Requestanzahl oder Testanzahl) ist keine Zahl !");
+ return;
+ }
+
+ System.out.println("Starte Lastest mit folgenden Parametern ...");
+ System.out.println("Requestdatei: "+args[0]);
+ System.out.println("ServerURL: "+args[1]);
+ System.out.println("Requests pro Sekunde: "+sek);
+ System.out.println("Durchläufe: "+(turns==0?"INF":turns+""));
+
+
+ LasttestClient lc = new LasttestClient();
+ //lc.startTest("data/CX0/TestGeneratorCX0.001.Req.xml","http://161.106.2.255:8080/",10,1000);
+ lc.startTest(args[0],args[1],sek,turns);
+ }
+}
+
+class Dispatcher extends Thread
+{
+ private String request = null;
+ private String endpoint = null;
+ private LasttestClient parent = null;
+ private int max;
+ private int turns;
+ public Dispatcher(LasttestClient parent,String request,String endpoint,int max,int turns)
+ {
+ this.request = request;
+ this.endpoint = endpoint;
+ this.parent = parent;
+ this.max = max;
+ this.turns = turns;
+ }
+
+ public void run()
+ {
+ this.setPriority(Thread.NORM_PRIORITY+1);
+ System.out.println("Dispatcher wird gestartet...");
+ TestThread[] old_reqs = buildRequests();
+ for(int turn_counter=0;turns==0?true:(turn_counter<turns);turn_counter++)
+ {
+ System.out.println("Durchlauf "+turn_counter);
+ if(turns==0) turn_counter--;
+ TestThread[] reqs = buildRequests();
+ for(int counter=0;counter<max;counter++)
+ {
+ old_reqs[counter].start();
+ }
+ old_reqs = reqs;
+ try {
+ Thread.sleep(1000);
+ }
+ catch(Exception e) { e.printStackTrace(); }
+ }
+ parent.stop = true;
+ }
+
+ public TestThread[] buildRequests()
+ {
+ TestThread[] ret = new TestThread[max];
+ for(int counter=0;counter<max;counter++)
+ {
+ ret[counter] = new TestThread(parent,request,endpoint);
+ }
+ return ret;
+ }
+}
+
+class TestThread extends Thread
+{
+ private String request = null;
+ private String endpoint = null;
+ private LasttestClient parent = null;
+ public TestThread(LasttestClient parent,String request,String endpoint)
+ {
+ this.request = request;
+ this.endpoint = endpoint;
+ this.parent = parent;
+
+ }
+
+
+ /**
+ * @see java.lang.Runnable#run()
+ */
+ public void run() {
+ parent.thread_counter++;
+
+ try {
+ if(!doRequest())
+ {
+ parent.error_count++;
+ }
+ }
+ catch(Exception e)
+ {
+ e.printStackTrace();
+ parent.error_count++;
+ }
+ parent.thread_counter--;
+ }
+
+ public boolean doRequest() throws Exception
+ {
+ long start = System.currentTimeMillis();
+ HttpURLConnection urlc = (HttpURLConnection)(new URL(endpoint)).openConnection();
+ urlc.setDoInput(true);
+ urlc.setDoOutput(true);
+ urlc.setAllowUserInteraction(false);
+ urlc.setUseCaches(false);
+ HttpURLConnection.setFollowRedirects(false);
+ urlc.setRequestProperty("SOAPAction","");
+
+
+ BufferedWriter ow = new BufferedWriter(new OutputStreamWriter(urlc.getOutputStream()));
+ ow.write(request);
+ ow.flush();
+
+ int code = 0;
+ /*try {
+ code = urlc.getResponseCode();
+ }
+ catch(IOException ioe)
+ {
+ ow.close();
+ urlc.disconnect();
+ return false;
+ }*/
+ ow.close();
+ BufferedReader iw = new BufferedReader(new InputStreamReader(urlc.getInputStream()));
+ while(iw.readLine()!=null) {}
+
+ if(code==500)
+ {
+ return false;
+ }
+ else
+ {
+ BufferedReader br = new BufferedReader(new InputStreamReader(urlc.getInputStream()));
+ StringBuffer response = new StringBuffer();
+ String line = null;
+ while((line = br.readLine()) != null)
+ {
+ response.append(line);
+ }
+
+ iw.close();
+ urlc.disconnect();
+ long end = System.currentTimeMillis();
+
+ String resp = response.toString();
+
+ int pos = resp.indexOf("ErrorCode>");
+ if(pos==-1)
+ {
+ long diff = end-start;
+ if(parent.max<diff)
+ {
+ parent.max=diff;
+ }
+ if(parent.min>diff)
+ {
+ parent.min=diff;
+ }
+ return true;
+
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ }
+
+} \ No newline at end of file