From 8b1df099de5bed90a10260b38c77b72a829415dc Mon Sep 17 00:00:00 2001 From: bdemsky Date: Tue, 20 Feb 2007 08:50:10 +0000 Subject: [PATCH] Benchmarks --- .../Benchmarks/WebServerJava/Inventory.java | 79 ++++++ .../Benchmarks/WebServerJava/ItemInfo.java | 8 + .../src/Benchmarks/WebServerJava/Logger.java | 29 +++ .../WebServerJava/WebServerExampleJava.java | 23 ++ .../WebServerJava/WebServerThread.java | 231 ++++++++++++++++++ Robust/src/Tests/ThreadTest.java | 31 +++ Robust/src/Tests/ThreadTest2.java | 29 +++ 7 files changed, 430 insertions(+) create mode 100644 Robust/src/Benchmarks/WebServerJava/Inventory.java create mode 100644 Robust/src/Benchmarks/WebServerJava/ItemInfo.java create mode 100644 Robust/src/Benchmarks/WebServerJava/Logger.java create mode 100644 Robust/src/Benchmarks/WebServerJava/WebServerExampleJava.java create mode 100644 Robust/src/Benchmarks/WebServerJava/WebServerThread.java create mode 100644 Robust/src/Tests/ThreadTest.java create mode 100644 Robust/src/Tests/ThreadTest2.java diff --git a/Robust/src/Benchmarks/WebServerJava/Inventory.java b/Robust/src/Benchmarks/WebServerJava/Inventory.java new file mode 100644 index 00000000..fafc29c0 --- /dev/null +++ b/Robust/src/Benchmarks/WebServerJava/Inventory.java @@ -0,0 +1,79 @@ +public class Inventory { + // Inventory flags + flag TransInitialize; + + // Transaction variables + int numitems; + HashMap map; + + // Constructor + public Inventory(){ + map = new HashMap(); + } + + public Inventory(int howmany) { + numitems = howmany;// howmany keeps track of the number of items + // in the inventory + map = new HashMap(); + } + + // Add item to a list of inventory + public int additem(String name, int quantity, int price){ + ItemInfo newitem = new ItemInfo(quantity, price); + // Get the item from hash + if (map.containsKey(name) == false) { + map.put(name, newitem); + } else { + ItemInfo i = (ItemInfo) map.get(name); + i.quantity += quantity; + i.price = price; + map.put(name, i); + } + return 0; + } + + // Buy item from a given list of inventory + public int buyitem(String name, int quantity){ + if (map.containsKey(name) == false) { + // System.printString("Error - Item does not exist"); + return -1; + } else { + ItemInfo i = (ItemInfo) map.get(name); + if (i.quantity == 0) { + // System.printString("Error - Item unavailable"); + return -1; + } + if ((i.quantity-quantity) < 0 ) { + // System.printString("Error - Available qty is less: Cannot Buy\n"); + return -1; + } else { + i.quantity -= quantity; + map.put(name, i); + return i.price; + } + } + return 0; + } + + //Display the inventory list + public String inventory(){ + HashMapIterator i = new HashMapIterator(map, 0);// Gets key from the hashmap= name of item + HashMapIterator j = new HashMapIterator(map, 1);//Gets the value from hashmap + StringBuffer sb = new StringBuffer(""); + while (i.hasNext() == true) { + Object o = i.next(); + String name = o.toString(); + ItemInfo oo = (ItemInfo) j.next(); + sb.append(name); + sb.append(" "); + Integer q = new Integer(oo.quantity); + sb.append(q.toString()); + sb.append(" "); + Integer p = new Integer(oo.price); + sb.append(p.toString()); + sb.append("\n"); + } + String item = new String(sb); + return item; + } +} diff --git a/Robust/src/Benchmarks/WebServerJava/ItemInfo.java b/Robust/src/Benchmarks/WebServerJava/ItemInfo.java new file mode 100644 index 00000000..18a61a59 --- /dev/null +++ b/Robust/src/Benchmarks/WebServerJava/ItemInfo.java @@ -0,0 +1,8 @@ +class ItemInfo { + int quantity; + int price; + ItemInfo(int x, int y) { + quantity = x; + price = y; + } +} diff --git a/Robust/src/Benchmarks/WebServerJava/Logger.java b/Robust/src/Benchmarks/WebServerJava/Logger.java new file mode 100644 index 00000000..1583870b --- /dev/null +++ b/Robust/src/Benchmarks/WebServerJava/Logger.java @@ -0,0 +1,29 @@ +public class Logger { + //Logger flag + flag Initialize; + FileOutputStream fos; + + + //Constructor + public Logger(){ + fos=new FileOutputStream("../../Tests/htmlfiles/request.log");//Open request.log file + } + + //Logs filename as per client requests + public void logrequest(String filename){ + String request = new String("\nNew Request received: "); + fos.write(request.getBytes()); + fos.write(filename.getBytes()); + fos.flush(); + } + + public void logrequest(){ + String request = new String("\nNew Request received: "); + fos.write(request.getBytes()); + fos.flush(); + } + + public void closerequest() { + fos.close(); + } +} diff --git a/Robust/src/Benchmarks/WebServerJava/WebServerExampleJava.java b/Robust/src/Benchmarks/WebServerJava/WebServerExampleJava.java new file mode 100644 index 00000000..0bb291fc --- /dev/null +++ b/Robust/src/Benchmarks/WebServerJava/WebServerExampleJava.java @@ -0,0 +1,23 @@ +public class WebServerExample { + + public static int main(String arg[]) { + // Create New ServerSocket + // System.printString("W> Starting\n"); + ServerSocket ss = new ServerSocket(9000); + // System.printString("W> Creating ServerSocket\n"); + Logger log = new Logger(); + Inventory inventorylist = new Inventory(); + acceptConnection(ss, log, inventorylist); + } + + //Listen for a request and accept request + public static void acceptConnection(ServerSocket ss, Logger log, Inventory inventorylist) { + // System.printString("W> Waiting for connection...\n"); + while(true) { + Socket s=ss.accept(); + WebServerThread web = new WebServerThread(s, log, inventorylist); + web.start(); + // System.printString("W> Connected... \n"); + } + } +} diff --git a/Robust/src/Benchmarks/WebServerJava/WebServerThread.java b/Robust/src/Benchmarks/WebServerJava/WebServerThread.java new file mode 100644 index 00000000..cc9da103 --- /dev/null +++ b/Robust/src/Benchmarks/WebServerJava/WebServerThread.java @@ -0,0 +1,231 @@ +public class WebServerThread extends Thread { + //Filename requested by the client + String filename; + String[] parsed; + String prefix; + Logger log; + Inventory inventorylist; + Socket sock; + + //Constructor + public WebServerThread(Socket s, Logger log, Inventory inventory){ + parsed = new String[4]; + this.log=log; + this.sock=s; + this.inventorylist=inventory; + } + + public void start() { + // Process the incoming http request + while (!clientrequest()) { + } + if(checktrans()==false) { + // Not special transaction , do normal filesending + SendFile(); + LogRequest(); + } else { + // Invoke special inventory transaction + Transaction(); + LogRequest(); + } + } + + //Do the WriteIO on server socket and send the requested file to Client + public void SendFile() { + sendfile(); + sock.close(); + } + + // Log the Client request + public void LogRequest() { + log.logrequest(filename); + } + + //Transaction on Inventory + public void Transaction() { + // Parse + int op = parseTransaction(); + // Check for the kind of operation + if (op == 0 ) { /* Add */ + // System.printString("DEBUG > Calling add transaction\n"); + Integer qty = new Integer(parsed[2]); + Integer price = new Integer(parsed[3]); + int ret = inventorylist.additem(parsed[1], qty.intValue(), price.intValue()); + if (ret == 0) { + httpresponse(); + StringBuffer s = new StringBuffer("Added Item "); + s.append(parsed[1]); + s.append(" Quantity "); + s.append(parsed[2]); + s.append(" Price "); + s.append(parsed[3]); + s.append("\n"); + String towrite = new String(s); + sock.write(towrite.getBytes()); + } else { + httpresponse(); + String s = new String("Error encountered"); + sock.write(s.getBytes()); + } + } else if (op == 1) { /* Buy */ + // System.printString("DEBUG > Calling buy transaction\n"); + Integer qty = new Integer(parsed[2]); + int ret = inventorylist.buyitem(parsed[1], qty.intValue()); + if (ret >= 0) { + httpresponse(); + StringBuffer s = new StringBuffer("Bought item "); + s.append(parsed[1]); + s.append(" Quantity "); + s.append(parsed[2]); + s.append(" Cost "); + Integer cost = new Integer(ret*qty.intValue()); + String c = cost.toString(); + s.append(c); + String towrite = new String(s); + sock.write(towrite.getBytes()); + } else { + httpresponse(); + String s = new String("Error encountered"); + sock.write(s.getBytes()); + } + } else if (op == 2) { /* Inventory */ + // System.printString("DEBUG > Calling inventory transaction\n"); + httpresponse(); + String towrite = inventorylist.inventory(); + sock.write(towrite.getBytes()); + } else { /* Error */ + // System.printString("T > Error - Unknown transaction\n"); + } + //Invoke close operations + sock.close(); + } + + + //Send the http header for web browser display + public void httpresponse(){ + StringBuffer header = new StringBuffer("HTTP/1.0 200 OK\n"); + header.append("Content-type: text/html\n"); + header.append("\n\n"); + String temp_str = new String(header); + sock.write(temp_str.getBytes()); + return; + + } + + // Send the html file , read from file one byte at a time + public void sendfile() { + StringBuffer req_file = new StringBuffer("./htmlfiles/"); + req_file.append(filename); + String filepath = new String(req_file); + FileInputStream def_file = new FileInputStream(filepath); + int status = def_file.getfd();//Checks if the file is present in + //current directory + httpresponse(); + if (status == -1){ + StringBuffer response = new StringBuffer("404: not found: ");//Send 404 error if + // file not found + response.append(filename); + String buffer = new String(response); + sock.write(buffer.getBytes()); + def_file.close(); + return; + } + byte buf[] = new byte[16]; + int ret; + + while ((ret = def_file.read(buf)) > 0) {// Read from file and write + // one byte at a time into the socket + byte tosend[] = new byte[ret]; + for (int i = 0; i < ret; i++) { + tosend[i] = buf[i]; + } + sock.write(tosend); + //String str = new String(tosend); + } + def_file.close(); + } + + //Read the client request and extract the filename from it + public boolean clientrequest(){ + byte b1[] = new byte[1024]; + int numbytes=sock.read(b1);//Read client request from web server socket + String curr=(new String(b1)).subString(0, numbytes); + if (prefix!=null) { + StringBuffer sb=new StringBuffer(prefix); + sb.append(curr); + curr=sb.toString(); + } + prefix=curr; + if(prefix.indexOf("\r\n\r\n")>=0) { + + int index = prefix.indexOf('/');//Parse the GET client request to find filename + int end = prefix.indexOf('H'); + filename = prefix.subString((index+1), (end-1)); + System.printString("\n"); + return true; + } + return false; + } + + // Parse for the prefix in the client request + // This is helpful to find if the prefix is a special transaction + public boolean checktrans(){ + if (filename.startsWith("trans") == true) { + return true; + } else { + return false; + } + } + + //Parse for the substrings in the filename and use it to obtain the + //kind of operation, name of item, quantity of item, price of item + //e.g. trans_add_car_2_10000 is the filename + //store in the parsed[] string , add,car,2,1000 + public int parseTransaction(){ + int start = filename.indexOf('_'); + String s = filename.subString(start+1); + + if (s.startsWith("add")==true){ + // System.printString("DEBUG > ADD\n"); + int i1 = s.indexOf('_'); + parsed[0] = new String(s.subString(0,i1)); + + String s1 = s.subString(i1+1); + int i2 = s1.indexOf('_'); + parsed[1] = new String(s1.subString(0,i2)); + + String s2 = s1.subString(i2+1); + int i3 = s2.indexOf('_'); + parsed[2] = new String(s2.subString(0,i3)); + + String s3 = s2.subString(i3+1); + parsed[3] = s3; + + return 0; + + } + if (s.startsWith("buy")==true){ + // System.printString("DEBUG > BUY\n"); + int i1 = s.indexOf('_'); + parsed[0] = s.subString(0,i1); + + String s1 = s.subString(i1+1); + int i2 = s1.indexOf('_'); + parsed[1] = s1.subString(0,i2); + + String s2 = s1.subString(i2+1); + parsed[2] = s2; + + parsed[3] = ""; + + return 1; + } + if (s.startsWith("inventory")==true){ + // System.printString("DEBUG > INVENTORY\n"); + return 2; + + } + // Error transaction + return -1; + } +} diff --git a/Robust/src/Tests/ThreadTest.java b/Robust/src/Tests/ThreadTest.java new file mode 100644 index 00000000..6c1bf974 --- /dev/null +++ b/Robust/src/Tests/ThreadTest.java @@ -0,0 +1,31 @@ +public class Foo { + Foo x; + Foo() {} + +} + +public class ThreadTest extends Thread { + public ThreadTest() { + } + + public static void main(String[] st) { + System.printString("hello"); + ThreadTest tt=new ThreadTest(); + tt.start(); + tt=new ThreadTest(); + tt.start(); + System.printString("main\n"); + System.printString("main\n"); + System.printString("main\n"); + System.printString("main\n"); + } + public void run() { + System.printString("thread\n"); + Foo x=null; + for(int i=0;i<1000;i++) { + Foo y=new Foo(); + y.x=x; + x=y; + } + } +} diff --git a/Robust/src/Tests/ThreadTest2.java b/Robust/src/Tests/ThreadTest2.java new file mode 100644 index 00000000..102d88fc --- /dev/null +++ b/Robust/src/Tests/ThreadTest2.java @@ -0,0 +1,29 @@ +public class PrintObject { + PrintObject() {} + synchronized void print(String n) { + System.printString(n); + } +} + +public class ThreadTest2 extends Thread { + String name; + PrintObject a; + public ThreadTest2(String name, PrintObject a) { + this.name=name; + this.a=a; + } + + public static void main(String[] st) { + PrintObject po=new PrintObject(); + System.printString("hello"); + ThreadTest2 tt=new ThreadTest2("AAAAAA\n",po); + tt.start(); + tt=new ThreadTest2("BBBBBB\n",po); + tt.start(); + } + public void run() { + while(true) { + a.print(name); + } + } +} -- 2.34.1