/** * Licensed to The Apereo Foundation under one or more contributor license * agreements. See the NOTICE file distributed with this work for additional * information regarding copyright ownership. * * * The Apereo Foundation licenses this file to you under the Educational * Community 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://opensource.org/licenses/ecl2.txt * * 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.opencastproject.kernel.scanner; import static org.junit.Assert.assertEquals; import org.opencastproject.security.api.OrganizationDirectoryService; import org.opencastproject.security.util.SecurityContext; import org.opencastproject.serviceregistry.api.ServiceRegistry; import org.easymock.EasyMock; import org.junit.Test; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.Trigger; import java.util.Date; public class AbstractScannerTest { private static final String JOB_NAME = "scheduled-jobs"; private static final String JOB_GROUP = "scheduled-group"; private static final String TRIGGER_NAME = "scheduled-jobs"; private static final String TRIGGER_GROUP = "scheduled-group"; private Scheduler mockQuartz; private String jobName = null; private String jobGroup = null; private OrganizationDirectoryService directoryService = null; private SecurityContext securityContext = null; private String systemUserName = null; private ServiceRegistry serviceRegistry = null; private String triggerName = null; private String triggerGroupName = null; private AbstractScanner abstractScanner = new AbstractScanner() { @Override public String getTriggerName() { return triggerName; } @Override public String getTriggerGroupName() { return triggerGroupName; } @Override public String getSystemUserName() { return systemUserName; } @Override public ServiceRegistry getServiceRegistry() { return serviceRegistry; } @Override public String getScannerName() { return "Test Scanner Name"; } @Override public OrganizationDirectoryService getOrganizationDirectoryService() { return directoryService; } @Override public String getJobName() { return jobName; } @Override public String getJobGroup() { return jobGroup; } @Override public SecurityContext getAdminContextFor(String orgId) { return securityContext; } @Override public void scan() { // Empty } }; @Test public void defaultIsDisabled() { assertEquals(false, abstractScanner.isEnabled()); } @Test public void canSetDisabled() { abstractScanner.setEnabled(false); assertEquals(false, abstractScanner.isEnabled()); } @Test public void canSetEnabled() { abstractScanner.setEnabled(true); assertEquals(true, abstractScanner.isEnabled()); } @Test public void scheduleInputDefaultsExpectDisabled() { abstractScanner.schedule(); } @Test public void scheduleInputEnabledExpectNoExceptions() { abstractScanner.setEnabled(true); abstractScanner.schedule(); } @Test public void scheduleInputBadCronExpectsNoException() throws SchedulerException { Trigger[] triggers = {}; jobName = JOB_NAME; jobGroup = JOB_GROUP; triggerName = TRIGGER_NAME; triggerGroupName = TRIGGER_GROUP; mockQuartz = EasyMock.createMock(Scheduler.class); EasyMock.expect(mockQuartz.getTriggersOfJob(jobName, jobGroup)).andReturn(triggers); EasyMock.expect(mockQuartz.scheduleJob(EasyMock.anyObject(Trigger.class))).andReturn(new Date()); EasyMock.replay(mockQuartz); abstractScanner.setQuartz(mockQuartz); abstractScanner.setEnabled(true); abstractScanner.setCronExpression("This is not a valid cron expression"); abstractScanner.schedule(); } @Test public void scheduleInputQuartzExceptionExpectsNoExceptionThrown() throws SchedulerException { jobName = JOB_NAME; jobGroup = JOB_GROUP; triggerName = TRIGGER_NAME; triggerGroupName = TRIGGER_GROUP; mockQuartz = EasyMock.createMock(Scheduler.class); EasyMock.expect(mockQuartz.getTriggersOfJob(jobName, jobGroup)).andThrow(new IllegalArgumentException("Mock Quartz Exception")); EasyMock.replay(mockQuartz); abstractScanner.setQuartz(mockQuartz); abstractScanner.setEnabled(true); abstractScanner.schedule(); } @Test public void scheduleInputNoExistingJobsExpectsSchedulesTheJob() throws SchedulerException { Trigger[] triggers = {}; jobName = JOB_NAME; jobGroup = JOB_GROUP; triggerName = TRIGGER_NAME; triggerGroupName = TRIGGER_GROUP; mockQuartz = EasyMock.createMock(Scheduler.class); EasyMock.expect(mockQuartz.getTriggersOfJob(jobName, jobGroup)).andReturn(triggers); EasyMock.expect(mockQuartz.scheduleJob(EasyMock.anyObject(Trigger.class))).andReturn(new Date()); EasyMock.replay(mockQuartz); abstractScanner.setQuartz(mockQuartz); abstractScanner.setEnabled(true); abstractScanner.schedule(); } @Test public void scheduleInputExistingJobsExpectsReschedulesTheJob() throws SchedulerException { Trigger trigger = EasyMock.createNiceMock(Trigger.class); Trigger[] triggers = {trigger}; jobName = JOB_NAME; jobGroup = JOB_GROUP; triggerName = TRIGGER_NAME; triggerGroupName = TRIGGER_GROUP; mockQuartz = EasyMock.createMock(Scheduler.class); EasyMock.expect(mockQuartz.getTriggersOfJob(jobName, jobGroup)).andReturn(triggers); EasyMock.expect(mockQuartz.rescheduleJob(EasyMock.anyObject(String.class), EasyMock.anyObject(String.class), EasyMock.anyObject(Trigger.class))).andReturn(new Date()); EasyMock.replay(mockQuartz); abstractScanner.setQuartz(mockQuartz); abstractScanner.setEnabled(true); abstractScanner.schedule(); } @Test public void unscheduleExpectsUnscheduleOfJobNameAndGroup() throws SchedulerException { mockQuartz = EasyMock.createMock(Scheduler.class); EasyMock.expect(mockQuartz.unscheduleJob(jobName, jobGroup)).andReturn(true); EasyMock.replay(mockQuartz); abstractScanner.setQuartz(mockQuartz); abstractScanner.unschedule(); } @Test public void unscheduleInputSchedulerexceptionExpectsNoExceptionThrow() throws SchedulerException { mockQuartz = EasyMock.createMock(Scheduler.class); EasyMock.expect(mockQuartz.unscheduleJob(jobName, jobGroup)).andThrow(new SchedulerException("Mock scheduler exception.")); EasyMock.replay(mockQuartz); abstractScanner.setQuartz(mockQuartz); abstractScanner.unschedule(); } @Test public void shutdownExpectsShutdownOfQuartz() throws SchedulerException { mockQuartz = EasyMock.createMock(Scheduler.class); mockQuartz.shutdown(); EasyMock.expectLastCall(); EasyMock.replay(mockQuartz); abstractScanner.setQuartz(mockQuartz); abstractScanner.shutdown(); } @Test public void shutdownInputSchedulerExceptionExpectsNoExceptionThrown() throws SchedulerException { mockQuartz = EasyMock.createMock(Scheduler.class); mockQuartz.shutdown(); EasyMock.expectLastCall().andThrow(new SchedulerException("Mock scheduler exception")); EasyMock.replay(mockQuartz); abstractScanner.setQuartz(mockQuartz); abstractScanner.shutdown(); } @Test public void finalizeExpectsShutdownOfQuartz() throws Throwable { mockQuartz = EasyMock.createMock(Scheduler.class); mockQuartz.shutdown(); EasyMock.expectLastCall(); EasyMock.replay(mockQuartz); abstractScanner.setQuartz(mockQuartz); abstractScanner.finalize(); } @Test public void triggerExpectsTriggerOfQuartz() throws SchedulerException { mockQuartz = EasyMock.createMock(Scheduler.class); mockQuartz.triggerJobWithVolatileTrigger(jobName, jobGroup); EasyMock.expectLastCall(); EasyMock.replay(mockQuartz); abstractScanner.setQuartz(mockQuartz); abstractScanner.trigger(); } @Test public void triggerInputExceptionExpectsNoExceptionThrown() throws SchedulerException { mockQuartz = EasyMock.createMock(Scheduler.class); mockQuartz.triggerJobWithVolatileTrigger(jobName, jobGroup); EasyMock.expectLastCall().andThrow(new SchedulerException("Mock Scheduler Exception")); EasyMock.replay(mockQuartz); abstractScanner.setQuartz(mockQuartz); abstractScanner.trigger(); } }