package org.qrone.r7.test; import java.io.IOException; import java.io.StringReader; import java.util.List; import java.util.Map; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import net.arnx.jsonic.JSON; import org.apache.http.HttpResponse; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.params.ClientPNames; import org.apache.http.conn.ClientConnectionManager; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager; import org.apache.http.params.BasicHttpParams; import org.apache.http.params.HttpParams; import org.eclipse.jetty.util.ajax.JSONObjectConvertor; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.qrone.memcached.LocalMemcachedService; import org.qrone.r7.app.QrONEApp; import org.qrone.util.Stream; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.w3c.dom.Document; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import ch.qos.logback.classic.Level; import static org.junit.Assert.*; public class HttpTest { private static Logger log = LoggerFactory.getLogger(HttpTest.class); private static QrONEApp app; private static HttpClient c; private static DocumentBuilder db; @BeforeClass public static void beforeClass(){ log.info("StartingTest."); QrONEApp.setLogLevel(Level.DEBUG); app = new QrONEApp(9601, 9699 ); app.setHtdocsPath("./htdocs"); app.start(); DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); try { db = dbf.newDocumentBuilder(); } catch (ParserConfigurationException e) {} } @Before public void before(){ ClientConnectionManager cm = new ThreadSafeClientConnManager(); c = new DefaultHttpClient(cm); } @AfterClass public static void afterClass(){ app.stop(); } @Test public void testHelloFile(){ Map map = fetchJSON("/test/hello.json"); assertEquals("OK", map.get("status")); } @Test public void testHelloJS(){ Map map; map = fetchJSON("/test/hello.server.js"); assertEquals("OK", map.get("status")); map = fetchJSON("/test/hello"); assertEquals("OK", map.get("status")); } @Test public void testApi(){ Map map; map = fetchJSON("/test/api/api"); assertEquals("error", map.get("status")); assertEquals("NO_TICKET", map.get("code")); map = fetchJSON("/test/ticket"); assertEquals("OK", map.get("status")); String ticket = map.get("ticket").toString(); map = fetchJSON("/test/api/api?.ticket=" + ticket); assertEquals("OK", map.get("status")); } @Test public void testUserJS(){ Map map; map = fetchJSON("/test/user"); assertEquals("OK", map.get("status")); } @Test public void testLoginLogoutJS(){ Map map; map = fetchJSON("/test/user_logout"); assertEquals("OK", map.get("status")); map = fetchJSON("/test/user"); assertNotSame("d789037d-379f-4c5b-990f-eaa9091ba4c9", ((Map)map.get("user")).get("id")); map = fetchJSON("/test/user_login"); assertEquals("d789037d-379f-4c5b-990f-eaa9091ba4c9", ((Map)map.get("user")).get("id")); map = fetchJSON("/test/user"); assertEquals("d789037d-379f-4c5b-990f-eaa9091ba4c9", ((Map)map.get("user")).get("id")); } @Test public void testBStore(){ Map map; map = fetchJSON("/test/user_logout"); assertEquals("OK", map.get("status")); map = fetchJSON("/test/user_store"); assertEquals("stored", ((Map)((Map)map.get("user")).get("store")).get("userdata")); map = fetchJSON("/test/user"); assertEquals("stored", ((Map)((Map)map.get("user")).get("store")).get("userdata")); map = fetchJSON("/test/user_logout"); assertNotSame("d789037d-379f-4c5b-990f-eaa9091ba4c9", ((Map)map.get("user")).get("id")); map = fetchJSON("/test/user_store"); assertEquals("stored", ((Map)((Map)map.get("user")).get("store")).get("userdata")); map = fetchJSON("/test/user"); assertEquals("stored", ((Map)((Map)map.get("user")).get("store")).get("userdata")); } @Test public void testQStore(){ Map map; map = fetchJSON("/test/user_logout"); assertEquals("OK", map.get("status")); map = fetchJSON("/test/user_login"); assertEquals("d789037d-379f-4c5b-990f-eaa9091ba4c9", ((Map)map.get("user")).get("id")); map = fetchJSON("/test/user_store"); assertEquals("stored", ((Map)((Map)map.get("user")).get("store")).get("userdata")); map = fetchJSON("/test/user"); assertEquals("stored", ((Map)((Map)map.get("user")).get("store")).get("userdata")); map = fetchJSON("/test/user_logout"); assertNotSame("d789037d-379f-4c5b-990f-eaa9091ba4c9", ((Map)map.get("user")).get("id")); assertNotSame("d789037d-379f-4c5b-990f-eaa9091ba4c9", ((Map)map.get("user")).get("store")); map = fetchJSON("/test/user_login"); assertEquals("d789037d-379f-4c5b-990f-eaa9091ba4c9", ((Map)map.get("user")).get("id")); map = fetchJSON("/test/user"); assertEquals("stored", ((Map)((Map)map.get("user")).get("store")).get("userdata")); } @Test public void testFS(){ Map map; List l; map = fetchJSON("/test/fsdrop"); map = fetchJSON("/test/fslist"); l = (List)map.get("list"); assertEquals(0, l.size()); map = fetchJSON("/test/fslist2"); l = (List)map.get("list"); assertEquals(0, l.size()); map = fetchJSON("/test/fscreate"); l = (List)map.get("list"); assertEquals(1, l.size()); map = fetchJSON("/test/fscreate"); l = (List)map.get("list"); assertEquals(1, l.size()); map = fetchJSON("/test/fslist"); l = (List)map.get("list"); assertEquals(1, l.size()); map = fetchJSON("/test/fslist2"); l = (List)map.get("list"); assertEquals(1, l.size()); map = fetchJSON("/test/fsread"); assertEquals("{\"test234\":\"test345\"}", map.get("data")); map = fetchJSON("/test/fstest"); assertEquals("test345", map.get("test234")); map = fetchJSON("/test/fsdrop"); l = (List)map.get("list"); assertEquals(0, l.size()); } @Test public void testXML(){ Document doc; List l; doc = fetchXML("/test/helloxml"); assertEquals("OK", doc.getDocumentElement().getAttribute("status")); doc = fetchXML("/test/helloxml2"); assertEquals("OK", doc.getDocumentElement().getAttribute("status")); } @Test public void testMemcached(){ Map map; List l; map = fetchJSON("/test/memcacheremove"); assertEquals(null, map.get("mem")); map = fetchJSON("/test/memcacheget"); assertEquals(null, map.get("mem")); map = fetchJSON("/test/memcacheset"); assertEquals("test89", map.get("mem")); map = fetchJSON("/test/memcacheget"); assertEquals("test89", map.get("mem")); } @Test public void testMongo(){ Map map; List l; map = fetchJSON("/test/mongodrop"); l = (List)map.get("list"); assertEquals(0, l.size()); map = fetchJSON("/test/mongofind"); l = (List)map.get("list"); assertEquals(0, l.size()); map = fetchJSON("/test/mongosave"); l = (List)map.get("list"); assertEquals(1, l.size()); map = fetchJSON("/test/mongofind"); l = (List)map.get("list"); assertEquals(1, l.size()); map = fetchJSON("/test/mongosave"); l = (List)map.get("list"); assertEquals(2, l.size()); map = fetchJSON("/test/mongofind"); l = (List)map.get("list"); assertEquals(2, l.size()); } @Test public void testAny(){ Map map; List l; map = fetchJSON("/test/test1/hello"); l = (List)map.get("arg"); assertEquals("test1", l.get(0)); map = fetchJSON("/test/qrone/hello"); l = (List)map.get("arg"); assertEquals("qrone", l.get(0)); map = fetchJSON("/test/test1/test2/hello"); l = (List)map.get("arg"); assertEquals("test1", l.get(0)); assertEquals("test2", l.get(1)); map = fetchJSON("/test/qrone/qronon/hello"); l = (List)map.get("arg"); assertEquals("qrone", l.get(0)); assertEquals("qronon", l.get(1)); } public Document fetchXML(String path){ HttpGet r = new HttpGet("http://localhost:9601" + path); HttpParams params = new BasicHttpParams(); params.setBooleanParameter(ClientPNames.HANDLE_REDIRECTS, true); r.setParams(params); try { HttpResponse res = c.execute(r); String body = new String(Stream.read(res.getEntity().getContent()),"utf8"); log.debug(body); return db.parse(new InputSource(new StringReader(body))); } catch (IllegalStateException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; } public Map fetchJSON(String path){ HttpGet r = new HttpGet("http://localhost:9601" + path); HttpParams params = new BasicHttpParams(); params.setBooleanParameter(ClientPNames.HANDLE_REDIRECTS, true); r.setParams(params); try { HttpResponse res = c.execute(r); String body = new String(Stream.read(res.getEntity().getContent()),"utf8"); log.debug(body); return JSON.decode(body); } catch (ClientProtocolException e) { e.printStackTrace(); fail(e.getMessage()); } catch (IOException e) { e.printStackTrace(); fail(e.getMessage()); } return null; } }