| // 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.cloudstack.engine.subsystem.api.storage; |
| |
| import static org.junit.Assert.assertEquals; |
| import static org.mockito.Matchers.any; |
| import static org.mockito.Mockito.doReturn; |
| import static org.mockito.Mockito.mock; |
| |
| import java.util.ArrayList; |
| import java.util.List; |
| import java.util.Map; |
| |
| import org.junit.Test; |
| |
| import org.apache.cloudstack.engine.subsystem.api.storage.SnapshotStrategy.SnapshotOperation; |
| import org.apache.cloudstack.storage.helper.StorageStrategyFactoryImpl; |
| |
| import com.cloud.host.Host; |
| import com.cloud.storage.Snapshot; |
| |
| public class StrategyPriorityTest { |
| |
| @Test |
| public void testSortSnapshotStrategies() { |
| SnapshotStrategy cantHandleStrategy = mock(SnapshotStrategy.class); |
| SnapshotStrategy defaultStrategy = mock(SnapshotStrategy.class); |
| SnapshotStrategy hyperStrategy = mock(SnapshotStrategy.class); |
| SnapshotStrategy pluginStrategy = mock(SnapshotStrategy.class); |
| SnapshotStrategy highestStrategy = mock(SnapshotStrategy.class); |
| |
| doReturn(StrategyPriority.CANT_HANDLE).when(cantHandleStrategy).canHandle(any(Snapshot.class), any(SnapshotOperation.class)); |
| doReturn(StrategyPriority.DEFAULT).when(defaultStrategy).canHandle(any(Snapshot.class), any(SnapshotOperation.class)); |
| doReturn(StrategyPriority.HYPERVISOR).when(hyperStrategy).canHandle(any(Snapshot.class), any(SnapshotOperation.class)); |
| doReturn(StrategyPriority.PLUGIN).when(pluginStrategy).canHandle(any(Snapshot.class), any(SnapshotOperation.class)); |
| doReturn(StrategyPriority.HIGHEST).when(highestStrategy).canHandle(any(Snapshot.class), any(SnapshotOperation.class)); |
| |
| List<SnapshotStrategy> strategies = new ArrayList<SnapshotStrategy>(5); |
| SnapshotStrategy strategy = null; |
| |
| StorageStrategyFactoryImpl factory = new StorageStrategyFactoryImpl(); |
| factory.setSnapshotStrategies(strategies); |
| |
| strategies.add(cantHandleStrategy); |
| strategy = factory.getSnapshotStrategy(mock(Snapshot.class), SnapshotOperation.TAKE); |
| assertEquals("A strategy was found when it shouldn't have been.", null, strategy); |
| |
| strategies.add(defaultStrategy); |
| strategy = factory.getSnapshotStrategy(mock(Snapshot.class), SnapshotOperation.TAKE); |
| assertEquals("Default strategy was not picked.", defaultStrategy, strategy); |
| |
| strategies.add(hyperStrategy); |
| strategy = factory.getSnapshotStrategy(mock(Snapshot.class), SnapshotOperation.TAKE); |
| assertEquals("Hypervisor strategy was not picked.", hyperStrategy, strategy); |
| |
| strategies.add(pluginStrategy); |
| strategy = factory.getSnapshotStrategy(mock(Snapshot.class), SnapshotOperation.TAKE); |
| assertEquals("Plugin strategy was not picked.", pluginStrategy, strategy); |
| |
| strategies.add(highestStrategy); |
| strategy = factory.getSnapshotStrategy(mock(Snapshot.class), SnapshotOperation.TAKE); |
| assertEquals("Highest strategy was not picked.", highestStrategy, strategy); |
| } |
| |
| @Test |
| public void testSortDataMotionStrategies() { |
| DataMotionStrategy cantHandleStrategy = mock(DataMotionStrategy.class); |
| DataMotionStrategy defaultStrategy = mock(DataMotionStrategy.class); |
| DataMotionStrategy hyperStrategy = mock(DataMotionStrategy.class); |
| DataMotionStrategy pluginStrategy = mock(DataMotionStrategy.class); |
| DataMotionStrategy highestStrategy = mock(DataMotionStrategy.class); |
| |
| doReturn(StrategyPriority.CANT_HANDLE).when(cantHandleStrategy).canHandle(any(DataObject.class), any(DataObject.class)); |
| doReturn(StrategyPriority.DEFAULT).when(defaultStrategy).canHandle(any(DataObject.class), any(DataObject.class)); |
| doReturn(StrategyPriority.HYPERVISOR).when(hyperStrategy).canHandle(any(DataObject.class), any(DataObject.class)); |
| doReturn(StrategyPriority.PLUGIN).when(pluginStrategy).canHandle(any(DataObject.class), any(DataObject.class)); |
| doReturn(StrategyPriority.HIGHEST).when(highestStrategy).canHandle(any(DataObject.class), any(DataObject.class)); |
| |
| List<DataMotionStrategy> strategies = new ArrayList<DataMotionStrategy>(5); |
| DataMotionStrategy strategy = null; |
| |
| StorageStrategyFactoryImpl factory = new StorageStrategyFactoryImpl(); |
| factory.setDataMotionStrategies(strategies); |
| |
| strategies.add(cantHandleStrategy); |
| strategy = factory.getDataMotionStrategy(mock(DataObject.class), mock(DataObject.class)); |
| assertEquals("A strategy was found when it shouldn't have been.", null, strategy); |
| |
| strategies.add(defaultStrategy); |
| strategy = factory.getDataMotionStrategy(mock(DataObject.class), mock(DataObject.class)); |
| assertEquals("Default strategy was not picked.", defaultStrategy, strategy); |
| |
| strategies.add(hyperStrategy); |
| strategy = factory.getDataMotionStrategy(mock(DataObject.class), mock(DataObject.class)); |
| assertEquals("Hypervisor strategy was not picked.", hyperStrategy, strategy); |
| |
| strategies.add(pluginStrategy); |
| strategy = factory.getDataMotionStrategy(mock(DataObject.class), mock(DataObject.class)); |
| assertEquals("Plugin strategy was not picked.", pluginStrategy, strategy); |
| |
| strategies.add(highestStrategy); |
| strategy = factory.getDataMotionStrategy(mock(DataObject.class), mock(DataObject.class)); |
| assertEquals("Highest strategy was not picked.", highestStrategy, strategy); |
| } |
| |
| @Test |
| @SuppressWarnings("unchecked") |
| public void testSortDataMotionStrategies2() { |
| DataMotionStrategy cantHandleStrategy = mock(DataMotionStrategy.class); |
| DataMotionStrategy defaultStrategy = mock(DataMotionStrategy.class); |
| DataMotionStrategy hyperStrategy = mock(DataMotionStrategy.class); |
| DataMotionStrategy pluginStrategy = mock(DataMotionStrategy.class); |
| DataMotionStrategy highestStrategy = mock(DataMotionStrategy.class); |
| |
| doReturn(StrategyPriority.CANT_HANDLE).when(cantHandleStrategy).canHandle(any(Map.class), any(Host.class), any(Host.class)); |
| doReturn(StrategyPriority.DEFAULT).when(defaultStrategy).canHandle(any(Map.class), any(Host.class), any(Host.class)); |
| doReturn(StrategyPriority.HYPERVISOR).when(hyperStrategy).canHandle(any(Map.class), any(Host.class), any(Host.class)); |
| doReturn(StrategyPriority.PLUGIN).when(pluginStrategy).canHandle(any(Map.class), any(Host.class), any(Host.class)); |
| doReturn(StrategyPriority.HIGHEST).when(highestStrategy).canHandle(any(Map.class), any(Host.class), any(Host.class)); |
| |
| List<DataMotionStrategy> strategies = new ArrayList<DataMotionStrategy>(5); |
| DataMotionStrategy strategy = null; |
| |
| StorageStrategyFactoryImpl factory = new StorageStrategyFactoryImpl(); |
| factory.setDataMotionStrategies(strategies); |
| |
| strategies.add(cantHandleStrategy); |
| strategy = factory.getDataMotionStrategy(mock(Map.class), mock(Host.class), mock(Host.class)); |
| assertEquals("A strategy was found when it shouldn't have been.", null, strategy); |
| |
| strategies.add(defaultStrategy); |
| strategy = factory.getDataMotionStrategy(mock(Map.class), mock(Host.class), mock(Host.class)); |
| assertEquals("Default strategy was not picked.", defaultStrategy, strategy); |
| |
| strategies.add(hyperStrategy); |
| strategy = factory.getDataMotionStrategy(mock(Map.class), mock(Host.class), mock(Host.class)); |
| assertEquals("Hypervisor strategy was not picked.", hyperStrategy, strategy); |
| |
| strategies.add(pluginStrategy); |
| strategy = factory.getDataMotionStrategy(mock(Map.class), mock(Host.class), mock(Host.class)); |
| assertEquals("Plugin strategy was not picked.", pluginStrategy, strategy); |
| |
| strategies.add(highestStrategy); |
| strategy = factory.getDataMotionStrategy(mock(Map.class), mock(Host.class), mock(Host.class)); |
| assertEquals("Highest strategy was not picked.", highestStrategy, strategy); |
| } |
| } |