/******************************************************************************* * Copyright 2011 André Rouél * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. ******************************************************************************/ package net.sf.jacclog.uasparser; import net.sf.jacclog.uasparser.internal.OnlineUserAgentStringParser; import org.junit.Assert; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class OnlineUserAgentStringParserTest { private static final OnlineUserAgentStringParser parser = new OnlineUserAgentStringParser( OnlineUserAgentStringParserTest.class.getClassLoader().getResourceAsStream("uas_test.xml")); private static Logger LOG = LoggerFactory.getLogger(OnlineUserAgentStringParserTest.class); @Test public void testChrome13Parsing() { final UserAgentInfo.Builder builder = new UserAgentInfo.Builder(); builder.setProducerUrl("http://www.google.com/"); builder.setProducer("Google Inc."); builder.setFamily("Chrome"); builder.setIcon("chrome.png"); builder.setInfoUrl("/list-of-ua/browser-detail?browser=Chrome"); builder.setName("Chrome 13.0.782.112"); builder.setOsProducer("Apple Computer, Inc."); builder.setOsProducerUrl("http://www.apple.com/"); builder.setOsFamily("Mac OS X"); builder.setOsIcon("macosx.png"); builder.setOsName("Mac OS X 10.6 Snow Leopard"); builder.setOsUrl("http://www.apple.com/macosx/"); builder.setType("Browser"); builder.setUrl("http://www.google.com/chrome"); final UserAgentInfo expected = builder.build(); final UserAgentInfo unknownAgentString = parser .parse("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.112 Safari/535.1"); Assert.assertEquals(expected, unknownAgentString); } @Test public void testEmptyUserAgentStringParsing() { final UserAgentInfo.Builder builder = new UserAgentInfo.Builder(); final UserAgentInfo expected = builder.build(); final UserAgentInfo unknownAgentString = parser.parse(""); Assert.assertEquals(expected, unknownAgentString); } @Test public void testGooglebotParsing() { final UserAgentInfo.Builder builder = new UserAgentInfo.Builder(); builder.setProducerUrl("http://www.google.com/"); builder.setProducer("Google Inc."); builder.setFamily("Googlebot"); builder.setIcon("bot_googlebot.png"); builder.setInfoUrl("/list-of-ua/bot-detail?bot=Googlebot"); builder.setName("Googlebot/2.1"); builder.setUrl(""); final UserAgentInfo expected = builder.build(); final UserAgentInfo unknownAgentString = parser .parse("Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"); Assert.assertEquals(expected, unknownAgentString); } @Test public void testSiteSuckerParsing() { final UserAgentInfo.Builder builder = new UserAgentInfo.Builder(); builder.setProducerUrl(""); builder.setProducer("Rick Cranisky"); builder.setFamily("SiteSucker"); builder.setIcon("sitesucker.png"); builder.setInfoUrl("/list-of-ua/browser-detail?browser=SiteSucker"); builder.setName("SiteSucker 1.6.9"); builder.setOsProducer("Apple Computer, Inc."); builder.setOsProducerUrl("http://www.apple.com/"); builder.setOsFamily("Mac OS"); builder.setOsIcon("macos.png"); builder.setOsName("Mac OS"); builder.setOsUrl("http://en.wikipedia.org/wiki/Mac_OS"); builder.setType("Offline Browser"); builder.setUrl("http://www.sitesucker.us/"); final UserAgentInfo expected = builder.build(); final UserAgentInfo unknownAgentString = parser.parse("SiteSucker/1.6.9"); Assert.assertEquals(expected, unknownAgentString); } @Test public void testUnknownUserAgentStringParsing() throws InterruptedException { final long firstLastUpdateCheck = parser.getLastUpdateCheck(); final UserAgentInfo.Builder builder = new UserAgentInfo.Builder(); final UserAgentInfo expected = builder.build(); final UserAgentInfo unknownAgentString = parser.parse("qwertzuiopasdfghjklyxcvbnm"); Assert.assertEquals(expected, unknownAgentString); // Check update mechanism final long currentLastUpdateCheck = parser.getLastUpdateCheck(); Assert.assertTrue(firstLastUpdateCheck == currentLastUpdateCheck); } @Test public void testUpdateMechanismWhileParsing() throws InterruptedException { final long firstLastUpdateCheck = parser.getLastUpdateCheck(); LOG.debug("LastUpdateCheck at: " + firstLastUpdateCheck); final long originalInterval = parser.getUpdateInterval(); // reduce the interval since testing LOG.debug("Reducing the update interval during the test."); parser.setUpdateInterval(10l); // we have to read to activate the update mechanism parser.parse("check for updates"); Thread.sleep(100l); final long currentLastUpdateCheck = parser.getLastUpdateCheck(); LOG.debug("LastUpdateCheck at: " + currentLastUpdateCheck); Assert.assertTrue(firstLastUpdateCheck < currentLastUpdateCheck); parser.setUpdateInterval(originalInterval); } }