[jbosscache-commits] JBoss Cache SVN: r5451 - in amazon-s3/trunk: src/main/java/com/amazon/s3/emulator and 1 other directories.

jbosscache-commits at lists.jboss.org jbosscache-commits at lists.jboss.org
Wed Mar 19 20:00:46 EDT 2008


Author: genman
Date: 2008-03-19 20:00:45 -0400 (Wed, 19 Mar 2008)
New Revision: 5451

Modified:
   amazon-s3/trunk/pom.xml
   amazon-s3/trunk/src/main/java/com/amazon/s3/emulator/Server.java
   amazon-s3/trunk/src/test/java/com/amazon/s3/CanonicalStringTest.java
   amazon-s3/trunk/src/test/java/com/amazon/s3/S3EmulatorTest.java
   amazon-s3/trunk/src/test/java/com/amazon/s3/S3Test.java
Log:
Emulator seems to work with CacheLoader now

Modified: amazon-s3/trunk/pom.xml
===================================================================
--- amazon-s3/trunk/pom.xml	2008-03-19 22:46:38 UTC (rev 5450)
+++ amazon-s3/trunk/pom.xml	2008-03-20 00:00:45 UTC (rev 5451)
@@ -65,5 +65,10 @@
       <artifactId>commons-httpclient</artifactId>
       <version>3.0.1</version>
     </dependency>
+    <dependency>
+      <groupId>commons-logging</groupId>
+      <artifactId>commons-logging</artifactId>
+      <version>1.1.1</version>
+    </dependency>
   </dependencies>
 </project>
\ No newline at end of file

Modified: amazon-s3/trunk/src/main/java/com/amazon/s3/emulator/Server.java
===================================================================
--- amazon-s3/trunk/src/main/java/com/amazon/s3/emulator/Server.java	2008-03-19 22:46:38 UTC (rev 5450)
+++ amazon-s3/trunk/src/main/java/com/amazon/s3/emulator/Server.java	2008-03-20 00:00:45 UTC (rev 5451)
@@ -20,6 +20,9 @@
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
 import net.noderunner.http.servlet.ServletServer;
 
 import com.amazon.s3.Entry;
@@ -31,41 +34,41 @@
 
 	private static final long serialVersionUID = 1L;
 
+	private Log log = LogFactory.getLog(getClass());
 	private ServletServer ss;
 	private boolean bucket = false;
 	private SortedMap<Entry, S3Object> map = new TreeMap<Entry, S3Object>();
 
 	public Server() throws IOException {
 		ss = new ServletServer(this);
+		log.info("Server created " + this);
 	}
 
 	/**
 	 * Closes socket, stops accepting requests.
 	 */
 	public void close() throws IOException {
+		log("close");
 		ss.close();
 	}
 
 	@Override
 	protected void doDelete(HttpServletRequest req, HttpServletResponse resp)
 			throws ServletException, IOException {
-		URI uri;
-		try {
-			uri = new URI(req.getRequestURI());
-		} catch (URISyntaxException e1) {
-			throw new RuntimeException(e1);
-		}
-		String key = uri.getPath().substring(1);
-		Entry e = new Entry(key);
+		Entry e = entry(req);
 		S3Object remove = map.remove(e);
 		if (remove == null) {
-			resp.sendError(404, "Not found " + key);
+			resp.sendError(404, "Not found " + e);
 		} else {
 			resp.sendError(HttpURLConnection.HTTP_NO_CONTENT, "Deleted");
 		}
 
 	}
 
+	private Entry entry(HttpServletRequest req) {
+		return new Entry(key(uri(req)));
+	}
+
 	/**
 	 * Listening port.
 	 */
@@ -83,26 +86,24 @@
 	@Override
 	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
 			throws ServletException, IOException {
-		URI uri;
-		try {
-			uri = new URI(req.getRequestURI());
-		} catch (URISyntaxException e1) {
-			throw new RuntimeException(e1);
-		}
+		URI uri = uri(req);
+		boolean debug = log.isDebugEnabled();
+		if (debug)
+    		log("doGet " + uri);
 		if ("/".equals(uri.getPath())) {
 			list(req, resp);
 		} else {
 			String key = uri.getPath().substring(1);
 			Entry e = new Entry(key);
 			S3Object obj = map.get(e);
+    		if (debug)
+    			log("map.get(" + key + ") = " + obj);
 			if (obj == null) {
 				resp.sendError(404, "Not here: " + e);
 				return;
 			}
 			Headers h = new Headers();
 			h = h.mergeMetadata(obj.getMetadata());
-			log("Headers " + obj);
-			log("Headers " + h);
 			for (Map.Entry<String, List<String>> me : h.getHeaders().entrySet()) {
 				for (String v : me.getValue()) {
 					resp.setHeader(me.getKey(), v);
@@ -118,6 +119,8 @@
 		String marker = req.getParameter("marker");
 		String delimiter = req.getParameter("delimiter");
 		String maxKeysStr = req.getParameter("max-keys");
+		if (log.isDebugEnabled())
+    		log("list prefix=" + prefix + " delimiter=" + delimiter);
 		int maxKeys = Integer.MAX_VALUE;
 		if (maxKeysStr != null)
 			maxKeys = Integer.parseInt(maxKeysStr);
@@ -127,16 +130,24 @@
 			submap = map.tailMap(new Entry(prefix));
 		int keyCount = 0;
 		boolean truncated = false;
+		String nextMarker = null;
 		for (Entry e : submap.keySet()) {
 			if (++keyCount > maxKeys) {
 				truncated = true;
 				break;
 			}
 			String key = e.getKey();
-			if (prefix != null && !key.startsWith(prefix))
-				break;
-			if (delimiter != null && key.indexOf(delimiter) != -1)
+			String remain = key;
+			nextMarker = key;
+			if (prefix != null) {
+				if (!key.startsWith(prefix)) 
+    				break;
+				remain = key.substring(prefix.length());
+			}
+			if (delimiter != null && remain.indexOf(delimiter) != -1)
 				continue;
+    		if (log.isDebugEnabled())
+    			log("include key=" + key);
 			w.start("Contents");
 			w.start("Key").write(key).end();
 			w.start("LastModified").write(e.getLastModified()).end();
@@ -154,8 +165,12 @@
 		hw.start("Name").write("localhost").end();
 		hw.start("Prefix").write(s(prefix)).end();
 		hw.start("Marker").write(s(marker)).end();
-		if (delimiter != null)
+		if (delimiter != null) {
 			hw.start("Delimiter").write(delimiter).end();
+    		if (truncated) {
+    			hw.start("NextMarker").write(nextMarker).end();
+    		}
+		}
 		hw.start("IsTruncated").write(String.valueOf(truncated)).end();
 		if (maxKeysStr != null)
 			hw.start("MaxKeys").write(maxKeysStr).end();
@@ -164,7 +179,6 @@
 
 		PrintWriter pw = resp.getWriter();
 		pw.write(hw.toString());
-		log(hw.toString());
 		pw.flush();
 		bucket = true;
 	}
@@ -178,25 +192,40 @@
 	@Override
 	protected void doHead(HttpServletRequest req, HttpServletResponse resp)
 			throws ServletException, IOException {
-		System.out.println(req);
+		URI uri = uri(req);
+		if (log.isDebugEnabled())
+    		log("doHead " + uri);
+		if (map.containsKey(entry(req))) {
+    		log("found");
+			resp.sendError(HttpURLConnection.HTTP_OK, "Found URI");
+		} else {
+    		log("not found");
+			resp.sendError(404, "Not found");
+		}
 	}
+	
+	private URI uri(HttpServletRequest req) {
+		try {
+			return new URI(req.getRequestURI());
+		} catch (URISyntaxException e1) {
+			throw new RuntimeException(e1);
+		}
+	}
+	
+	private String key(URI uri) {
+		return uri.getPath().substring(1);
+	}
 
 	@Override
 	protected void doPut(HttpServletRequest req, HttpServletResponse resp)
 			throws ServletException, IOException {
-		URI uri;
-		try {
-			uri = new URI(req.getRequestURI());
-		} catch (URISyntaxException e1) {
-			throw new RuntimeException(e1);
-		}
+		URI uri = uri(req);
+		log("doPut " + uri);
 		if ("/".equals(uri.getPath())) {
 			log("create bucket");
 			bucket = true;
 		} else {
-			log("URI " + uri.getPath());
-			String key = uri.getPath().substring(1);
-			Entry e = new Entry(key);
+			Entry e = new Entry(key(uri));
 			e.setLastModified(new Date());
 			e.setSize(req.getContentLength());
 			e.setOwner(new Owner("id", "name"));
@@ -217,13 +246,25 @@
 			for (String n : Collections.list(names))
 				h.put(n, req.getHeader(n));
 			s3.setMetadata(h.extractMetadata());
-			log("PUT '" + e + "' as: " + s3);
+			log("put '" + e + "' as: " + s3);
 		}
-		System.out.println(req);
 	}
 
-	public void log(String log) {
-		System.err.println(log);
+	public void log(String s) {
+		log.debug(s);
 	}
 
+	/**
+	 * Returns a debug <code>String</code>.
+	 */
+	@Override
+	public String toString()
+	{
+	    return super.toString() +
+	        " bucket=" + this.bucket +
+	        " ss=" + this.ss +
+	        " map=" + this.map +
+	        "";
+	}
+
 }

Modified: amazon-s3/trunk/src/test/java/com/amazon/s3/CanonicalStringTest.java
===================================================================
--- amazon-s3/trunk/src/test/java/com/amazon/s3/CanonicalStringTest.java	2008-03-19 22:46:38 UTC (rev 5450)
+++ amazon-s3/trunk/src/test/java/com/amazon/s3/CanonicalStringTest.java	2008-03-20 00:00:45 UTC (rev 5451)
@@ -25,7 +25,7 @@
 		String canon = "XXYasfajkjaslkfdjalksjflkasjflkajskfjasjflksadjflksajfdkljsadlkfjaslkfd";
 		Key key = CanonicalString.key(access);
 		String encode = CanonicalString.encode(key, canon);
-		assertEquals("p5p5Y89Qhhaitcesa/l03whnQhw=", encode);
+		assertEquals("hAu+ibd/CZIw6/5OR69i2+40bfc=", encode);
 	}
 	
 	@Test

Modified: amazon-s3/trunk/src/test/java/com/amazon/s3/S3EmulatorTest.java
===================================================================
--- amazon-s3/trunk/src/test/java/com/amazon/s3/S3EmulatorTest.java	2008-03-19 22:46:38 UTC (rev 5450)
+++ amazon-s3/trunk/src/test/java/com/amazon/s3/S3EmulatorTest.java	2008-03-20 00:00:45 UTC (rev 5451)
@@ -8,18 +8,11 @@
 //  this software code. (c) 2006-2007 Amazon Digital Services, Inc. or its
 //  affiliates.
 
-import java.io.IOException;
 import java.io.InputStream;
 import java.net.HttpURLConnection;
-import java.net.MalformedURLException;
 import java.util.Arrays;
 import java.util.List;
 
-import org.apache.commons.httpclient.HttpClient;
-import org.apache.commons.httpclient.HttpMethod;
-import org.apache.commons.httpclient.URI;
-import org.apache.commons.httpclient.methods.EntityEnclosingMethod;
-import org.apache.commons.httpclient.methods.StringRequestEntity;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -104,7 +97,7 @@
         assertEquals("Unexpected list size", 1, listBucketResponse.getEntries().size());
         assertEquals("Unexpected common prefix size", 0, listBucketResponse.getCommonPrefixEntries().size());
         // TODO
-        // verifyBucketResponseParameters(listBucketResponse, bucket, "", "", 1, "/", true, "example.txt");
+        verifyBucketResponseParameters(listBucketResponse, bucket, "", "", 1, "/", true, "example.txt");
 
         // root "directory" with a max-keys of "2"
         listBucketResponse = conn.list(bucket, null, null, 2, "/", null);
@@ -125,8 +118,7 @@
         // test "directory"
         listBucketResponse = conn.list(bucket, "test/", null, null, "/", null);
         listBucketResponse.assertOk();
-        // TODO
-        // assertEquals("Unexpected list size", 1, listBucketResponse.getEntries().size());
+        assertEquals("Unexpected list size", 1, listBucketResponse.getEntries().size());
         assertEquals("Unexpected common prefix size", 0, listBucketResponse.getCommonPrefixEntries().size());
         verifyBucketResponseParameters(listBucketResponse, bucket, "test/", "", UnspecifiedMaxKeys, "/", false, null);
 

Modified: amazon-s3/trunk/src/test/java/com/amazon/s3/S3Test.java
===================================================================
--- amazon-s3/trunk/src/test/java/com/amazon/s3/S3Test.java	2008-03-19 22:46:38 UTC (rev 5450)
+++ amazon-s3/trunk/src/test/java/com/amazon/s3/S3Test.java	2008-03-20 00:00:45 UTC (rev 5451)
@@ -34,6 +34,9 @@
 
     @Before
     public void setUp() {
+    	if (emulated)
+    	   return;
+       
     	if (awsAccessKeyId == null)
     		throw new IllegalStateException("accessKey system propery null");
     	if (awsSecretAccessKey == null)




More information about the jbosscache-commits mailing list