/** * Licensed to DigitalPebble Ltd under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * DigitalPebble licenses this file to You 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 com.digitalpebble.stormcrawler.persistence; import java.net.MalformedURLException; import java.util.Calendar; import java.util.Date; import java.util.HashMap; import java.util.Map; import org.apache.commons.lang.time.DateUtils; import org.junit.Assert; import org.junit.Test; import com.digitalpebble.stormcrawler.Metadata; import com.digitalpebble.stormcrawler.persistence.DefaultScheduler; import com.digitalpebble.stormcrawler.persistence.Status; public class DefaultSchedulerTest { @Test public void testScheduler() throws MalformedURLException { Map<String, Object> stormConf = new HashMap<>(); stormConf.put("fetchInterval.FETCHED.testKey=someValue", 360); stormConf.put("fetchInterval.testKey=someValue", 3600); DefaultScheduler scheduler = new DefaultScheduler(); scheduler.init(stormConf); Metadata metadata = new Metadata(); metadata.addValue("testKey", "someValue"); Date nextFetch = scheduler.schedule(Status.FETCHED, metadata); Calendar cal = Calendar.getInstance(); cal.add(Calendar.MINUTE, 360); Assert.assertEquals(DateUtils.round(cal.getTime(), Calendar.SECOND), DateUtils.round(nextFetch, Calendar.SECOND)); nextFetch = scheduler.schedule(Status.ERROR, metadata); cal = Calendar.getInstance(); cal.add(Calendar.MINUTE, 3600); Assert.assertEquals(DateUtils.round(cal.getTime(), Calendar.SECOND), DateUtils.round(nextFetch, Calendar.SECOND)); } @Test public void testBadConfig() throws MalformedURLException { Map<String, Object> stormConf = new HashMap<>(); stormConf.put("fetchInterval.DODGYSTATUS.testKey=someValue", 360); DefaultScheduler scheduler = new DefaultScheduler(); boolean exception = false; try { scheduler.init(stormConf); } catch (IllegalArgumentException e) { exception = true; } Assert.assertTrue(exception); } @Test public void testNever() throws MalformedURLException { Map<String, Object> stormConf = new HashMap<>(); stormConf.put("fetchInterval.error", -1); DefaultScheduler scheduler = new DefaultScheduler(); scheduler.init(stormConf); Metadata metadata = new Metadata(); Date nextFetch = scheduler.schedule(Status.ERROR, metadata); Assert.assertEquals(DefaultScheduler.NEVER, nextFetch); } }