/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * * 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 org.apache.streams.urls; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.Date; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; public class LinkHelperFunctionsTest { private static final Logger LOGGER = LoggerFactory.getLogger(LinkHelperFunctionsTest.class); @Test public void testIsURL() { assertTrue(LinkResolverHelperFunctions.isURL("http://goo.gl/wSrHDA")); assertTrue(LinkResolverHelperFunctions.isURL("http://ow.ly/u4Kte")); assertTrue(LinkResolverHelperFunctions.isURL("http://x.co/3yapt")); assertTrue(LinkResolverHelperFunctions.isURL("http://bit.ly/1cX5Rh4")); assertTrue(LinkResolverHelperFunctions.isURL("http://t.co/oP8JYB0MYW")); assertTrue(LinkResolverHelperFunctions.isURL("http://goo.gl/wSrHDA")); assertTrue(LinkResolverHelperFunctions.isURL("http://t.co/fBoCby3l1t")); assertTrue(LinkResolverHelperFunctions.isURL("http://paper.li/GuyKawasaki")); assertTrue(LinkResolverHelperFunctions.isURL("http://www.google.com")); assertTrue(LinkResolverHelperFunctions.isURL("http://goo.gl/wSrHDA")); assertTrue(LinkResolverHelperFunctions.isURL("http://www.cnn.com")); } @Test public void testContainsURL() { assertTrue(LinkResolverHelperFunctions.containsURLs("here is the URL: http://goo.gl/wSrHDA")); assertTrue(LinkResolverHelperFunctions.containsURLs("a lovely day for URLing it up http://ow.ly/u4Kte")); assertTrue(LinkResolverHelperFunctions.containsURLs("http://x.co/3yapt is really cool")); assertTrue(LinkResolverHelperFunctions.containsURLs("http://bit.ly/1cX5Rh4 me likes")); assertTrue(LinkResolverHelperFunctions.containsURLs("http://t.co/oP8JYB0MYW wtf mate?")); assertTrue(LinkResolverHelperFunctions.containsURLs("Every morning is a good morning in URL world: http://goo.gl/wSrHDA")); assertFalse(LinkResolverHelperFunctions.containsURLs("Every day I awake, only to find, I have no URLS")); assertFalse(LinkResolverHelperFunctions.containsURLs("Http:// to be or not to be")); assertFalse(LinkResolverHelperFunctions.containsURLs("Can I get an http://X up on the board pat?")); assertFalse(LinkResolverHelperFunctions.containsURLs("You must remember Joey, no matter how much you ftp://stink you must never, EVER, take a shower in my dressing room!")); } @Test public void testSimple() { LinkResolverHelperFunctions.purgeAllDomainWaitTimes(); String domain1 = "smashew.com"; // safe to run... assertEquals("smashew.com: No need to wait", 0, LinkResolverHelperFunctions.waitTimeForDomain(domain1)); // get required sleep long smashewSleepTime1 = LinkResolverHelperFunctions.waitTimeForDomain(domain1); // sleep LOGGER.debug("Sleeping: " + new Date().getTime() + "-" + smashewSleepTime1); safeSleep(smashewSleepTime1); LOGGER.debug("Slept For: " + new Date().getTime() + "-" + smashewSleepTime1); // safe to run again assertEquals("smashew.com: No need to wait", 0, LinkResolverHelperFunctions.waitTimeForDomain(domain1)); } private static void safeSleep(long millis) { try { Thread.sleep(millis); } catch(Exception e) { // noOp } } @Test public void testSingle() { LinkResolverHelperFunctions.purgeAllDomainWaitTimes(); String domain1 = "smashew.com"; String domain2 = "google.com"; long smashewSleepTime1 = LinkResolverHelperFunctions.waitTimeForDomain(domain1); long smashewSleepTime2 = LinkResolverHelperFunctions.waitTimeForDomain(domain1); long smashewSleepTime3 = LinkResolverHelperFunctions.waitTimeForDomain(domain1); long smashewSleepTime4 = LinkResolverHelperFunctions.waitTimeForDomain(domain1); LOGGER.debug("smashew.com: " + smashewSleepTime1 + "," + smashewSleepTime2 + "," + smashewSleepTime3 + "," + smashewSleepTime4); assertEquals("smashew.com: No need to wait", 0, smashewSleepTime1); assertTrue("smashew.com: Wait for at least min x 1", smashewSleepTime2 >= (LinkResolverHelperFunctions.RECENT_DOMAINS_BACKOFF - LinkResolverHelperFunctions.DEFAULT_STAGGER)); assertTrue("smashew.com: Wait for at least min x 2", smashewSleepTime3 >= (LinkResolverHelperFunctions.RECENT_DOMAINS_BACKOFF * 2) - (LinkResolverHelperFunctions.DEFAULT_STAGGER * 2)); assertTrue("smashew.com: Wait for at least min x 3", smashewSleepTime4 >= (LinkResolverHelperFunctions.RECENT_DOMAINS_BACKOFF * 3) - (LinkResolverHelperFunctions.DEFAULT_STAGGER * 3)); long timeBeforeSleep = new Date().getTime(); LOGGER.debug("Sleeping for: " + smashewSleepTime4 + " ms"); safeSleep(smashewSleepTime4); LOGGER.debug("Actually slept for: " + (new Date().getTime() - timeBeforeSleep) + " ms"); long postSleepDomain1 = LinkResolverHelperFunctions.waitTimeForDomain(domain1); LOGGER.debug("smashew.com: Post Sleep domain1: " + postSleepDomain1); assertEquals("Smashew.com: No need to wait after sleep", 0, postSleepDomain1); } @Test public void testMulti() { LinkResolverHelperFunctions.purgeAllDomainWaitTimes(); String domain1 = "smashew.com"; String domain2 = "google.com"; long smashewSleepTime1 = LinkResolverHelperFunctions.waitTimeForDomain(domain1); long smashewSleepTime2 = LinkResolverHelperFunctions.waitTimeForDomain(domain1); long smashewSleepTime3 = LinkResolverHelperFunctions.waitTimeForDomain(domain1); long googleSleepTime1 = LinkResolverHelperFunctions.waitTimeForDomain(domain2); long googleSleepTime2 = LinkResolverHelperFunctions.waitTimeForDomain(domain2); LOGGER.debug("smashew.com: " + smashewSleepTime1 + "," + smashewSleepTime2 + "," + smashewSleepTime3); LOGGER.debug("google.com: " + googleSleepTime1 + "," + googleSleepTime2); assertEquals("smashew.com: No need to wait", 0, smashewSleepTime1); assertTrue("smashew.com: Wait for at least min x 1", smashewSleepTime2 >= (LinkResolverHelperFunctions.RECENT_DOMAINS_BACKOFF - LinkResolverHelperFunctions.DEFAULT_STAGGER)); assertTrue("smashew.com: Wait for at least min x 2", smashewSleepTime3 >= (LinkResolverHelperFunctions.RECENT_DOMAINS_BACKOFF * 2) - (LinkResolverHelperFunctions.DEFAULT_STAGGER * 2)); assertEquals("google.com: No need to wait", 0, googleSleepTime1); assertTrue("google.com: No need to wait", googleSleepTime2 >= LinkResolverHelperFunctions.RECENT_DOMAINS_BACKOFF - LinkResolverHelperFunctions.DEFAULT_STAGGER); try { LOGGER.debug("WAITING FOR: " + smashewSleepTime3); Thread.sleep(smashewSleepTime3); } catch(Exception e) { // noOp } long postSleepDomain1 = LinkResolverHelperFunctions.waitTimeForDomain(domain1); long postSleepDomain2 = LinkResolverHelperFunctions.waitTimeForDomain(domain2); LOGGER.debug("smashew.com: Post Sleep domain1: " + postSleepDomain1); LOGGER.debug("google.com: Post Sleep domain2: " + postSleepDomain2); assertEquals("Smashew.com: No need to wait after sleep", 0, postSleepDomain1); assertEquals("google.com: No need to wait after sleep", 0, postSleepDomain2); } }