[jboss-svn-commits] JBL Code SVN: r19753 - in labs/jbossrules/trunk/drools-jbrms/src: test/java/org/drools/brms/server/files and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Apr 29 03:51:27 EDT 2008


Author: michael.neale at jboss.com
Date: 2008-04-29 03:51:27 -0400 (Tue, 29 Apr 2008)
New Revision: 19753

Added:
   labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/files/MockHTTPRequest.java
   labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/files/MockHTTPResponse.java
Modified:
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/files/RestAPIServlet.java
   labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/files/RestAPIServletTest.java
Log:
JBRULES-1562 remote REST api

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/files/RestAPIServlet.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/files/RestAPIServlet.java	2008-04-29 07:50:49 UTC (rev 19752)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/files/RestAPIServlet.java	2008-04-29 07:51:27 UTC (rev 19753)
@@ -22,12 +22,15 @@
 
 import javax.security.auth.login.LoginException;
 import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import org.apache.log4j.Logger;
 import org.apache.util.Base64;
 import org.drools.brms.server.util.TestEnvironmentSessionHelper;
 import org.drools.repository.RulesRepository;
+import org.drools.repository.RulesRepositoryException;
 import org.drools.repository.remoteapi.Response;
 import org.drools.repository.remoteapi.RestAPI;
 import org.jboss.seam.Component;
@@ -39,30 +42,27 @@
  *
  * @author Michael Neale
  */
-public class RestAPIServlet extends RepositoryServlet {
+public class RestAPIServlet extends HttpServlet {
 
     private static final long serialVersionUID = 500L;
+    public static final Logger log              = Logger.getLogger( RestAPIServlet.class );
 
-    /**
-     * This is used for importing legacy DRL.
-     */
-    protected void doPost(HttpServletRequest request,
-                          HttpServletResponse response) throws ServletException,
+    @Override
+    protected void doPost(final HttpServletRequest req,
+                          final HttpServletResponse res) throws ServletException,
                                                        IOException {
 
 
-
     }
 
 
 
+    @Override
     protected void doGet(final HttpServletRequest req,
                          final HttpServletResponse res) throws ServletException,
                                                  IOException {
         doAuthorizedAction(req, res, new A() {
-			public void a() {
-				try {
-
+			public void a() throws Exception {
 					RestAPI api = getAPI();
 					Response apiRes = api.get(req.getRequestURI());
 			        res.setContentType( "application/x-download" );
@@ -70,35 +70,39 @@
 			                       "attachment; filename=data;");
 					apiRes.writeData(res.getOutputStream());
 					res.getOutputStream().flush();
-
-				} catch (UnsupportedEncodingException e) {
-					// TODO Auto-generated catch block
-					e.printStackTrace();
-				} catch (IOException e) {
-					// TODO Auto-generated catch block
-					e.printStackTrace();
-				}
 			}
         });
 
     }
 
+	@Override
+    protected void doPut(HttpServletRequest req, HttpServletResponse resp)
+    		throws ServletException, IOException {
+    }
 
+    @Override
+    protected void doDelete(HttpServletRequest req, HttpServletResponse resp)
+    		throws ServletException, IOException {
+    }
 
+
+
     /**
      * Here we perform the action in the appropriate security context.
-     * TODO: add in a closure for the action.
      */
 	private void doAuthorizedAction(HttpServletRequest req, HttpServletResponse res, A action) throws IOException {
-
         String auth = req.getHeader("Authorization");
-
         if (!allowUser(auth)) {
           res.setHeader("WWW-Authenticate", "BASIC realm=\"users\"");
-          res.sendError(res.SC_UNAUTHORIZED);
+          res.sendError(HttpServletResponse.SC_UNAUTHORIZED);
         }
         else {
-          action.a();
+        	try {
+        		action.a();
+        	} catch (Exception e) {
+        		log.error(e);
+        		throw new RuntimeException(e);
+        	}
         }
 	}
 
@@ -162,20 +166,12 @@
 
 
 
-	@Override
-    protected void doPut(HttpServletRequest req, HttpServletResponse resp)
-    		throws ServletException, IOException {
-    }
 
-    @Override
-    protected void doDelete(HttpServletRequest req, HttpServletResponse resp)
-    		throws ServletException, IOException {
-    }
 
 
     /**
      * For closures. Damn you java when will you catch up with the 70s.
      */
-    static interface A { public void a(); }
+    static interface A { public void a() throws Exception; }
 
 }
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/files/MockHTTPRequest.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/files/MockHTTPRequest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/files/MockHTTPRequest.java	2008-04-29 07:51:27 UTC (rev 19753)
@@ -0,0 +1,276 @@
+package org.drools.brms.server.files;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.security.Principal;
+import java.util.Enumeration;
+import java.util.Locale;
+import java.util.Map;
+
+import javax.servlet.RequestDispatcher;
+import javax.servlet.ServletInputStream;
+import javax.servlet.http.Cookie;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+
+public class MockHTTPRequest implements HttpServletRequest {
+
+	final private String uri;
+	private Map<String, String> headers;
+
+	public MockHTTPRequest(String uri, Map<String, String> headers) {
+		this.uri = uri;
+		this.headers = headers;
+	}
+
+	public String getAuthType() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public String getContextPath() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public Cookie[] getCookies() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public long getDateHeader(String arg0) {
+		// TODO Auto-generated method stub
+		return 0;
+	}
+
+	public String getHeader(String n) {
+		return headers.get(n);
+	}
+
+	public Enumeration getHeaderNames() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public Enumeration getHeaders(String arg0) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public int getIntHeader(String arg0) {
+		// TODO Auto-generated method stub
+		return 0;
+	}
+
+	public String getMethod() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public String getPathInfo() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public String getPathTranslated() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public String getQueryString() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public String getRemoteUser() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public String getRequestURI() {
+		return uri;
+	}
+
+	public StringBuffer getRequestURL() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public String getRequestedSessionId() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public String getServletPath() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public HttpSession getSession() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public HttpSession getSession(boolean arg0) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public Principal getUserPrincipal() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public boolean isRequestedSessionIdFromCookie() {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+	public boolean isRequestedSessionIdFromURL() {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+	public boolean isRequestedSessionIdFromUrl() {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+	public boolean isRequestedSessionIdValid() {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+	public boolean isUserInRole(String arg0) {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+	public Object getAttribute(String arg0) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public Enumeration getAttributeNames() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public String getCharacterEncoding() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public int getContentLength() {
+		// TODO Auto-generated method stub
+		return 0;
+	}
+
+	public String getContentType() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public ServletInputStream getInputStream() throws IOException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public Locale getLocale() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public Enumeration getLocales() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public String getParameter(String arg0) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public Map getParameterMap() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public Enumeration getParameterNames() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public String[] getParameterValues(String arg0) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public String getProtocol() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public BufferedReader getReader() throws IOException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public String getRealPath(String arg0) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public String getRemoteAddr() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public String getRemoteHost() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public RequestDispatcher getRequestDispatcher(String arg0) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public String getScheme() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public String getServerName() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public int getServerPort() {
+		// TODO Auto-generated method stub
+		return 0;
+	}
+
+	public boolean isSecure() {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+	public void removeAttribute(String arg0) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void setAttribute(String arg0, Object arg1) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void setCharacterEncoding(String arg0)
+			throws UnsupportedEncodingException {
+		// TODO Auto-generated method stub
+
+	}
+
+}


Property changes on: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/files/MockHTTPRequest.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/files/MockHTTPResponse.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/files/MockHTTPResponse.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/files/MockHTTPResponse.java	2008-04-29 07:51:27 UTC (rev 19753)
@@ -0,0 +1,190 @@
+package org.drools.brms.server.files;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.PrintWriter;
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Map;
+
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.Cookie;
+import javax.servlet.http.HttpServletResponse;
+
+public class MockHTTPResponse implements HttpServletResponse {
+
+	ServletOutputStream out;
+	String contentType;
+	Map<String, String> headers = new HashMap<String, String>();
+	int errorCode;
+
+
+	public MockHTTPResponse(OutputStream out) {
+		this.out = new MockStream(out);
+
+	}
+
+	public void addCookie(Cookie arg0) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void addDateHeader(String arg0, long arg1) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void addHeader(String arg0, String arg1) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void addIntHeader(String arg0, int arg1) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public boolean containsHeader(String a) {
+
+		return this.headers.containsKey(a);
+	}
+
+	public String encodeRedirectURL(String arg0) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public String encodeRedirectUrl(String arg0) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public String encodeURL(String arg0) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public String encodeUrl(String arg0) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public void sendError(int i) throws IOException {
+		this.errorCode = i;
+
+	}
+
+	public void sendError(int arg0, String arg1) throws IOException {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void sendRedirect(String arg0) throws IOException {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void setDateHeader(String arg0, long arg1) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void setHeader(String k, String v) {
+		this.headers.put(k, v);
+
+	}
+
+	public void setIntHeader(String arg0, int arg1) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void setStatus(int arg0) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void setStatus(int arg0, String arg1) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void flushBuffer() throws IOException {
+		// TODO Auto-generated method stub
+
+	}
+
+	public int getBufferSize() {
+		// TODO Auto-generated method stub
+		return 0;
+	}
+
+	public String getCharacterEncoding() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public Locale getLocale() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public ServletOutputStream getOutputStream() throws IOException {
+
+		return out;
+	}
+
+	public PrintWriter getWriter() throws IOException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public boolean isCommitted() {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+	public void reset() {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void resetBuffer() {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void setBufferSize(int arg0) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void setContentLength(int arg0) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void setContentType(String s) {
+		this.contentType = s;
+
+	}
+
+	public void setLocale(Locale arg0) {
+		// TODO Auto-generated method stub
+
+	}
+
+	static class MockStream extends ServletOutputStream {
+
+		private OutputStream out;
+
+		public MockStream(OutputStream out) {
+			this.out = out;
+		}
+
+		public void write(int a) throws IOException {
+			out.write(a);
+		}
+	}
+
+}


Property changes on: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/files/MockHTTPResponse.java
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/files/RestAPIServletTest.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/files/RestAPIServletTest.java	2008-04-29 07:50:49 UTC (rev 19752)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/files/RestAPIServletTest.java	2008-04-29 07:51:27 UTC (rev 19753)
@@ -1,6 +1,16 @@
 package org.drools.brms.server.files;
 
+import java.io.ByteArrayOutputStream;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletResponse;
+
 import org.apache.util.Base64;
+import org.drools.brms.server.util.TestEnvironmentSessionHelper;
+import org.drools.repository.AssetItem;
+import org.drools.repository.PackageItem;
+import org.drools.repository.RulesRepository;
 
 import junit.framework.TestCase;
 
@@ -13,6 +23,7 @@
 		String[] d = serv.unpack(b42);
 		assertEquals("user", d[0]);
 		assertEquals("pass", d[1]);
+
 	}
 
 	public void testAllowUser() {
@@ -26,9 +37,74 @@
 		assertTrue(serv.allowUser(b42));
 	}
 
-	public void testGetAPI() throws Exception {
+
+
+	public void testGet() throws Exception {
+		RulesRepository repo = new RulesRepository( TestEnvironmentSessionHelper.getSession( true ) );
+		PackageItem pkg = repo.createPackage("testGetRestServlet", "");
+		AssetItem ass = pkg.addAsset("asset1", "");
+		ass.updateFormat("drl");
+		ass.updateContent("some content");
+		ass.checkin("hey ho");
+
+
+
 		RestAPIServlet serv = new RestAPIServlet();
 		assertNotNull(serv.getAPI());
+		Map<String, String> headers = new HashMap<String, String>() {
+			{
+				put("Irrelevant", "garbage");
+			}
+		};
+		String uri = "http://loser/api/packages/testGetRestServlet/asset1.drl";
+		MockHTTPRequest req = new MockHTTPRequest(uri, headers);
+
+		MockHTTPResponse res = new MockHTTPResponse(new ByteArrayOutputStream());
+
+		//try with no password
+		serv.doGet(req, res);
+		assertEquals(HttpServletResponse.SC_UNAUTHORIZED, res.errorCode);
+		assertTrue(res.headers.containsKey("WWW-Authenticate"));
+
+
+		//try again with bad password
+		headers = new HashMap<String, String>() {
+			{
+				put("Authorization", new String(Base64.encode("foo:bar".getBytes())));
+			}
+		};
+		req = new MockHTTPRequest(uri, headers);
+		res = new MockHTTPResponse(new ByteArrayOutputStream());
+		serv.doGet(req, res);
+		assertEquals(HttpServletResponse.SC_UNAUTHORIZED, res.errorCode);
+		assertTrue(res.headers.containsKey("WWW-Authenticate"));
+
+		//finally, making it work
+		headers = new HashMap<String, String>() {
+			{
+				put("Authorization", "BASIC " + new String(Base64.encode("test:password".getBytes())));
+			}
+		};
+
+		ByteArrayOutputStream out = new ByteArrayOutputStream();
+		req = new MockHTTPRequest(uri, headers);
+		res = new MockHTTPResponse(out);
+		serv.doGet(req, res);
+
+		assertEquals(0, res.errorCode);
+		String data = out.toString();
+		assertEquals("some content", data);
+
+		assertEquals("application/x-download", res.contentType);
+		assertEquals(true, res.containsHeader("Content-Disposition"));
+
+
+
+
+
+
+
+
 	}
 
 }




More information about the jboss-svn-commits mailing list