Benchmarks
authorbdemsky <bdemsky>
Tue, 20 Feb 2007 08:50:10 +0000 (08:50 +0000)
committerbdemsky <bdemsky>
Tue, 20 Feb 2007 08:50:10 +0000 (08:50 +0000)
Robust/src/Benchmarks/WebServerJava/Inventory.java [new file with mode: 0644]
Robust/src/Benchmarks/WebServerJava/ItemInfo.java [new file with mode: 0644]
Robust/src/Benchmarks/WebServerJava/Logger.java [new file with mode: 0644]
Robust/src/Benchmarks/WebServerJava/WebServerExampleJava.java [new file with mode: 0644]
Robust/src/Benchmarks/WebServerJava/WebServerThread.java [new file with mode: 0644]
Robust/src/Tests/ThreadTest.java [new file with mode: 0644]
Robust/src/Tests/ThreadTest2.java [new file with mode: 0644]

diff --git a/Robust/src/Benchmarks/WebServerJava/Inventory.java b/Robust/src/Benchmarks/WebServerJava/Inventory.java
new file mode 100644 (file)
index 0000000..fafc29c
--- /dev/null
@@ -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 (file)
index 0000000..18a61a5
--- /dev/null
@@ -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 (file)
index 0000000..1583870
--- /dev/null
@@ -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 (file)
index 0000000..0bb291f
--- /dev/null
@@ -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 (file)
index 0000000..cc9da10
--- /dev/null
@@ -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 (file)
index 0000000..6c1bf97
--- /dev/null
@@ -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 (file)
index 0000000..102d88f
--- /dev/null
@@ -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);
+       }
+    }
+}