public void testParseReaderBasic() throws ParseException { List<String> logDataItems = new ArrayList<String>(); logDataItems.add( "Apr 21 21:47:10 localhost.localdomain haproxy[9898]: 127.0.0.1:26455 [21/Apr/2010:21:47:09.799] http-fe http-be/www1 0/0/99/105/239 200 390 - - ---- 37/37/32/32/0 0/0 {http://www.unittest.com/index1.html|Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; GTB0.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; MS-RTC LM 8; InfoPath.2; .NET |} \"GET / HTTP/1.1\"\n"); logDataItems.add( "Apr 21 21:47:10 localhost.localdomain haproxy[9898]: 127.0.0.2:35448 [21/Apr/2010:21:47:09.832] http-fe http-be/www1 4/0/98/104/207 200 390 - - ---- 36/36/32/32/0 0/0 {https://secure.unittest.com/index2.html|Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; GTB0.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CL|72.54.165.186} \"GET //index.html HTTP/1.1\"\n"); logDataItems.add( "Apr 21 21:47:10 localhost.localdomain haproxy[9898]: 127.0.0.3:2263 [21/Apr/2010:21:47:09.646] http-fe http-be/www1 0/0/97/115/399 200 390 - - ---- 36/36/31/31/0 0/0 {http://www.unittest.com/index3.html|Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3|} \"GET /index2.html HTTP/1.1\"\n"); logDataItems.add( "Apr 21 21:47:10 localhost.localdomain haproxy[9898]: 127.0.0.4:51551 [21/Apr/2010:21:47:09.799] http-fe http-be/www1 0/0/99/106/255 200 390 - - CD-- 37/37/32/32/0 0/0 {http://www.unittest.com/index4.html?jsessionid=W5UTVENKKWHKVQE1GHPSKHWATMY32JVN|Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.3072|} \"GET /index.html?test=x&bar=baz HTTP/1.1\"\n"); logDataItems.add( "Apr 21 21:47:10 localhost.localdomain haproxy[9898]: 127.0.0.5:63585 [21/Apr/2010:21:47:09.779] http-fe http-be/www1 20/0/99/99/283 200 390 - - ---- 36/36/32/32/0 0/0 {http://www.unittest.com/news/showArticle.jhtml?articleID=123|Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/533.2 (KHTML, like Gecko) Chrome/5.0.342.9 Safari/533.2|} \"GET /index.html?test=y&baz=foo HTTP/1.1\"\n"); logDataItems.add( "Apr 21 21:47:10 localhost.localdomain haproxy[9898]: 127.0.0.6:28738 [21/Apr/2010:21:47:09.513] http-fe http-be/www1 18/0/99/101/592 200 476 - - ---- 38/38/35/35/0 0/0 {http://www.unittest.comindex5.html/|Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB6.4; .NET CLR 1.1.4322)|} \"GET /path/to/something HTTP/1.1\"\n"); logDataItems.add( "Apr 21 21:47:10 localhost.localdomain haproxy[9898]: 127.0.0.7:4512 [21/Apr/2010:21:47:09.810] http-fe http-be/www1 0/0/97/131/319 200 390 - - ---- 38/38/34/34/0 0/0 {http://www.unittest.com/musicians/jgarcia|Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.2|} \"GET /path/to/another?with=params&other=params HTTP/1.1\"\n"); logDataItems.add( "Apr 21 21:47:10 localhost.localdomain haproxy[9898]: 127.0.0.8:55591 [21/Apr/2010:21:47:09.815] http-fe http-be/www1 3/0/97/123/317 200 390 - - ---- 37/37/33/33/0 0/0 {http://www.unittest.com/instruments/guitar|Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Chrome/4.1.249.1045 Safari/532.5|} \"GET / HTTP/1.1\"\n"); logDataItems.add( "Apr 21 21:47:10 localhost.localdomain haproxy[9898]: 127.0.0.9:49917 [21/Apr/2010:21:47:09.891] http-fe http-be/www1 1/0/97/110/241 200 476 - - ---- 36/36/32/32/0 0/0 {http://www.unittest.com/index6.html?group=grateful_dead|Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.0.19) Gecko/2010031218 Firefox/3.0.19|} \"GET /musicians/ HTTP/1.1\"\n"); logDataItems.add( "Apr 21 21:47:10 localhost.localdomain haproxy[9898]: 127.0.0.10:40160 [21/Apr/2010:21:47:09.859] http-fe http-be/www1 0/0/98/103/274 200 390 - - ---- 35/35/31/31/0 0/0 {http://www.unittest.com/index7.html|Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; MS-RTC LM 8; .NET CLR 3.0.04506.6|} \"GET /programming_languages/java HTTP/1.1\"\n"); StringBuffer logData = new StringBuffer(); for (String logEnt : logDataItems) { logData.append(logEnt); } Iterator<HttpLogEntry> entIter = parser.parse(new StringReader(logData.toString())); assertNotNull(entIter); assertTrue(entIter.hasNext()); int numEntries = 0; while (entIter.hasNext()) { HttpLogEntry curEnt = entIter.next(); assertNotNull(curEnt.getPath()); assertTrue(curEnt.getPath().length() > 0); try { new URL("http://localhost" + curEnt.getPath()); } catch (MalformedURLException e) { fail("malformed url: " + e); } boolean hasXff = false; boolean hasUA = false; boolean hasRef = false; for (HttpLogEntry.Header hdr : curEnt.getHeaders()) { if ("User-Agent".equalsIgnoreCase(hdr.name) && hdr.value != null && hdr.value.length() > 0) { hasUA = true; } if ("Referer".equalsIgnoreCase(hdr.name) && hdr.value != null && hdr.value.length() > 0) { hasRef = true; try { new URL(hdr.value); } catch (MalformedURLException e) { fail("malformed referer url: " + e); } } if ("X-Forwarded-For".equalsIgnoreCase(hdr.name) && hdr.value != null && hdr.value.length() > 0) { hasXff = true; try { String[] ips = hdr.value.split(","); for (String ip : ips) { InetAddress addr = java.net.InetAddress.getByName(ip); assertNotNull(addr); } } catch (UnknownHostException e) { fail("unknown host for xff header: " + e); } } } assertTrue("has xff", hasXff); assertTrue("has user agent", hasUA); assertTrue("has referer", hasRef); numEntries++; } assertEquals(new Integer(numEntries), new Integer(10)); }
public void testParseReaderEmptyData() throws ParseException { Iterator<HttpLogEntry> entIter = parser.parse(new StringReader("")); assertNotNull(entIter); assertFalse(entIter.hasNext()); }