[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