/* * 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 * 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 org.apache.sling.distribution.queue.impl.simple; import java.io.File; import org.apache.commons.io.FileUtils; import org.apache.sling.commons.scheduler.ScheduleOptions; import org.apache.sling.commons.scheduler.Scheduler; import org.apache.sling.distribution.queue.DistributionQueue; import org.apache.sling.distribution.queue.DistributionQueueEntry; import org.apache.sling.distribution.queue.DistributionQueueItem; import org.apache.sling.distribution.queue.DistributionQueueProcessor; import org.junit.Test; import static org.junit.Assert.*; import static org.mockito.Matchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; /** * Testcase for {@link SimpleDistributionQueueProvider} */ public class SimpleDistributionQueueProviderTest { @Test public void testGetOrCreateQueue() throws Exception { SimpleDistributionQueueProvider simpledistributionQueueProvider = new SimpleDistributionQueueProvider(mock(Scheduler.class), "agentName", false); DistributionQueue queue = simpledistributionQueueProvider.getQueue("default"); assertNotNull(queue); } @Test public void testGetOrCreateQueueWithCheckpointing() throws Exception { String name = "agentName"; try { SimpleDistributionQueueProvider simpledistributionQueueProvider = new SimpleDistributionQueueProvider(mock(Scheduler.class), name, true); DistributionQueue queue = simpledistributionQueueProvider.getQueue("default"); assertNotNull(queue); } finally { new File(name + "-simple-queues-checkpoints").deleteOnExit(); } } @Test public void testEnableQueueProcessing() throws Exception { Scheduler scheduler = mock(Scheduler.class); ScheduleOptions options = mock(ScheduleOptions.class); when(scheduler.NOW(-1, 1)).thenReturn(options); when(options.canRunConcurrently(false)).thenReturn(options); when(options.name(any(String.class))).thenReturn(options); String name = "dummy-agent"; SimpleDistributionQueueProvider simpledistributionQueueProvider = new SimpleDistributionQueueProvider(scheduler, name, false); DistributionQueueProcessor processor = mock(DistributionQueueProcessor.class); simpledistributionQueueProvider.enableQueueProcessing(processor); } @Test public void testEnableQueueProcessingWithCheckpointRecovery() throws Exception { File checkpointDirectory = new File("dummy-agent-simple-queues-checkpoints"); File file = new File(getClass().getResource("/dummy-agent-checkpoint").getFile()); FileUtils.copyFileToDirectory(file, checkpointDirectory); Scheduler scheduler = mock(Scheduler.class); ScheduleOptions options = mock(ScheduleOptions.class); when(scheduler.NOW(-1, 1)).thenReturn(options); when(scheduler.NOW(-1, 15)).thenReturn(options); when(options.canRunConcurrently(false)).thenReturn(options); when(options.name(any(String.class))).thenReturn(options); String name = "dummy-agent"; try { SimpleDistributionQueueProvider simpledistributionQueueProvider = new SimpleDistributionQueueProvider(scheduler, name, true); DistributionQueueProcessor processor = mock(DistributionQueueProcessor.class); simpledistributionQueueProvider.enableQueueProcessing(processor, name); DistributionQueue queue = simpledistributionQueueProvider.getQueue(name); assertNotNull(queue); assertEquals(1, queue.getStatus().getItemsCount()); DistributionQueueEntry head = queue.getHead(); assertNotNull(head); DistributionQueueItem item = head.getItem(); assertNotNull(item); String packageId = item.getPackageId(); assertNotNull(packageId); assertEquals("DSTRQ1", item.get("internal.request.id")); assertArrayEquals(new String[]{"/foo", "bar"}, (String[]) item.get("request.paths")); assertArrayEquals(new String[]{"/foo"}, (String[]) item.get("request.deepPaths")); assertEquals("admin", item.get("internal.request.user")); assertEquals("ADD", item.get("request.type")); assertEquals("default", item.get("package.type")); assertEquals("1464090250095", item.get("internal.request.startTime")); } finally { FileUtils.deleteDirectory(new File(name + "-simple-queues-checkpoints")); } } @Test public void testEnableQueueProcessingWithCheckpointing() throws Exception { String name = "dummy-agent"; try { Scheduler scheduler = mock(Scheduler.class); ScheduleOptions options = mock(ScheduleOptions.class); when(scheduler.NOW(-1, 1)).thenReturn(options); when(options.canRunConcurrently(false)).thenReturn(options); when(options.name(any(String.class))).thenReturn(options); SimpleDistributionQueueProvider simpledistributionQueueProvider = new SimpleDistributionQueueProvider(scheduler, name, true); DistributionQueueProcessor processor = mock(DistributionQueueProcessor.class); simpledistributionQueueProvider.enableQueueProcessing(processor); } finally { new File(name + "-simple-queues-checkpoints").deleteOnExit(); } } @Test public void testDisableQueueProcessing() throws Exception { Scheduler scheduler = mock(Scheduler.class); ScheduleOptions options = mock(ScheduleOptions.class); when(scheduler.NOW(-1, 10)).thenReturn(options); when(options.canRunConcurrently(false)).thenReturn(options); when(options.name(any(String.class))).thenReturn(options); SimpleDistributionQueueProvider simpledistributionQueueProvider = new SimpleDistributionQueueProvider(scheduler, "dummy-agent", false); simpledistributionQueueProvider.disableQueueProcessing(); } @Test public void testDisableQueueProcessingWithCheckpointing() throws Exception { String name = "dummy-agent"; try { Scheduler scheduler = mock(Scheduler.class); ScheduleOptions options = mock(ScheduleOptions.class); when(scheduler.NOW(-1, 10)).thenReturn(options); when(options.canRunConcurrently(false)).thenReturn(options); when(options.name(any(String.class))).thenReturn(options); SimpleDistributionQueueProvider simpledistributionQueueProvider = new SimpleDistributionQueueProvider(scheduler, name, true); simpledistributionQueueProvider.disableQueueProcessing(); } finally { new File(name + "-simple-queues-checkpoints").deleteOnExit(); } } }