1616// under the License.
1717package org .apache .cloudstack .storage .image .manager ;
1818
19+ import com .cloud .server .StatsCollector ;
20+ import com .cloud .utils .Pair ;
21+ import org .apache .cloudstack .engine .subsystem .api .storage .DataStore ;
1922import org .apache .cloudstack .storage .datastore .db .ImageStoreDao ;
2023import org .apache .cloudstack .storage .datastore .db .ImageStoreVO ;
2124import org .junit .Assert ;
2629import org .mockito .Mockito ;
2730import org .mockito .junit .MockitoJUnitRunner ;
2831
32+ import java .util .ArrayList ;
33+ import java .util .Arrays ;
34+ import java .util .List ;
35+
2936@ RunWith (MockitoJUnitRunner .class )
3037public class ImageStoreProviderManagerImplTest {
3138
3239 @ Mock
3340 ImageStoreDao imageStoreDao ;
3441
42+ @ Mock
43+ StatsCollector statsCollectorMock ;
44+
3545 @ InjectMocks
3646 ImageStoreProviderManagerImpl imageStoreProviderManager = new ImageStoreProviderManagerImpl ();
47+
3748 @ Test
3849 public void testGetImageStoreZoneId () {
3950 final long storeId = 1L ;
@@ -44,4 +55,56 @@ public void testGetImageStoreZoneId() {
4455 long value = imageStoreProviderManager .getImageStoreZoneId (storeId );
4556 Assert .assertEquals (zoneId , value );
4657 }
58+
59+ private Pair <List <DataStore >, List <DataStore >> prepareUnorderedAndOrderedImageStoresForCapacityTests (boolean hasStoragesWithEnoughCapacity ) {
60+ DataStore store1 = Mockito .mock (DataStore .class );
61+ Mockito .doReturn (100L ).when (statsCollectorMock ).imageStoreCurrentFreeCapacity (store1 );
62+ Mockito .doReturn (false ).when (statsCollectorMock ).imageStoreHasEnoughCapacity (store1 );
63+ DataStore store2 = Mockito .mock (DataStore .class );
64+ Mockito .doReturn (200L ).when (statsCollectorMock ).imageStoreCurrentFreeCapacity (store2 );
65+ Mockito .doReturn (hasStoragesWithEnoughCapacity ).when (statsCollectorMock ).imageStoreHasEnoughCapacity (store2 );
66+ DataStore store3 = Mockito .mock (DataStore .class );
67+ Mockito .doReturn (300L ).when (statsCollectorMock ).imageStoreCurrentFreeCapacity (store3 );
68+ Mockito .doReturn (hasStoragesWithEnoughCapacity ).when (statsCollectorMock ).imageStoreHasEnoughCapacity (store3 );
69+ DataStore store4 = Mockito .mock (DataStore .class );
70+ Mockito .doReturn (400L ).when (statsCollectorMock ).imageStoreCurrentFreeCapacity (store4 );
71+ Mockito .doReturn (false ).when (statsCollectorMock ).imageStoreHasEnoughCapacity (store4 );
72+
73+ List <DataStore > unordered = Arrays .asList (store1 , store2 , store3 , store4 );
74+ List <DataStore > orderedAndEnoughCapacity = new ArrayList <>();
75+ if (hasStoragesWithEnoughCapacity ) {
76+ orderedAndEnoughCapacity .add (store3 );
77+ orderedAndEnoughCapacity .add (store2 );
78+ }
79+
80+ return new Pair <>(unordered , orderedAndEnoughCapacity );
81+ }
82+
83+ @ Test
84+ public void getImageStoreWithFreeCapacityTestImageStoresWithEnoughCapacityExistReturnsImageStoreWithMostFreeCapacity () {
85+ Pair <List <DataStore >, List <DataStore >> unorderedAndOrdered = prepareUnorderedAndOrderedImageStoresForCapacityTests (true );
86+
87+ DataStore result = imageStoreProviderManager .getImageStoreWithFreeCapacity (unorderedAndOrdered .first ());
88+
89+ Assert .assertEquals (unorderedAndOrdered .second ().get (0 ), result );
90+ }
91+
92+ @ Test
93+ public void getImageStoreWithFreeCapacityTestImageStoresWithEnoughCapacityDoNotExistReturnsNull () {
94+ Pair <List <DataStore >, List <DataStore >> unorderedAndOrdered = prepareUnorderedAndOrderedImageStoresForCapacityTests (false );
95+
96+ DataStore result = imageStoreProviderManager .getImageStoreWithFreeCapacity (unorderedAndOrdered .first ());
97+
98+ Assert .assertNull (result );
99+ }
100+
101+ @ Test
102+ public void orderImageStoresOnFreeCapacityTestReturnsImageStoresOrderedFromMostToLeast () {
103+ Pair <List <DataStore >, List <DataStore >> unorderedAndOrdered = prepareUnorderedAndOrderedImageStoresForCapacityTests (true );
104+
105+ List <DataStore > result = imageStoreProviderManager .orderImageStoresOnFreeCapacity (unorderedAndOrdered .first ());
106+
107+ Assert .assertEquals (unorderedAndOrdered .second (), result );
108+ }
109+
47110}
0 commit comments