21
21
import static org .mockito .Mockito .when ;
22
22
23
23
import java .lang .reflect .Field ;
24
+ import java .lang .reflect .InvocationTargetException ;
25
+ import java .lang .reflect .Method ;
24
26
25
27
import static org .mockito .Mockito .verify ;
26
28
import static org .mockito .Mockito .never ;
27
29
import static org .mockito .Mockito .any ;
28
30
31
+ import com .cloud .storage .Storage ;
29
32
import com .cloud .storage .StorageManager ;
30
33
import com .cloud .storage .StoragePool ;
34
+ import org .apache .cloudstack .engine .subsystem .api .storage .DataObject ;
35
+ import org .apache .cloudstack .engine .subsystem .api .storage .DataStore ;
36
+ import org .apache .cloudstack .engine .subsystem .api .storage .ClusterScope ;
37
+ import org .apache .cloudstack .engine .subsystem .api .storage .HostScope ;
38
+ import org .apache .cloudstack .engine .subsystem .api .storage .StorageCacheManager ;
39
+ import org .apache .cloudstack .engine .subsystem .api .storage .ZoneScope ;
31
40
import org .apache .cloudstack .framework .config .ConfigKey ;
41
+ import org .apache .cloudstack .framework .config .dao .ConfigurationDao ;
42
+ import org .apache .cloudstack .storage .image .store .TemplateObject ;
32
43
import org .apache .cloudstack .storage .to .PrimaryDataStoreTO ;
44
+ import org .apache .cloudstack .storage .volume .VolumeObject ;
45
+ import org .junit .Assert ;
33
46
import org .junit .Before ;
34
47
import org .junit .Test ;
35
48
import org .junit .runner .RunWith ;
36
49
import org .mockito .InjectMocks ;
37
50
import org .mockito .Mock ;
51
+ import org .mockito .Mockito ;
38
52
import org .mockito .Spy ;
39
53
import org .mockito .junit .MockitoJUnitRunner ;
40
54
@@ -57,6 +71,10 @@ public class AncientDataMotionStrategyTest {
57
71
StorageManager storageManager ;
58
72
@ Mock
59
73
StoragePool storagePool ;
74
+ @ Mock
75
+ StorageCacheManager cacheMgr ;
76
+ @ Mock
77
+ ConfigurationDao configDao ;
60
78
61
79
private static final long POOL_ID = 1l ;
62
80
private static final Boolean FULL_CLONE_FLAG = true ;
@@ -88,4 +106,186 @@ public void testAddFullCloneFlagOnNotVmwareDest(){
88
106
verify (dataStoreTO , never ()).setFullCloneFlag (any (Boolean .class ));
89
107
}
90
108
109
+ @ Test
110
+ public void testCanBypassSecondaryStorageForDirectDownload () throws NoSuchMethodException , InvocationTargetException , IllegalAccessException {
111
+ VolumeObject srcVolumeInfo = Mockito .spy (new VolumeObject ());
112
+ Mockito .doReturn (true ).when (srcVolumeInfo ).isDirectDownload ();
113
+
114
+ VolumeObject destVolumeInfo = Mockito .spy (new VolumeObject ());
115
+
116
+ Method method ;
117
+ method = AncientDataMotionStrategy .class .getDeclaredMethod ("canBypassSecondaryStorage" , DataObject .class , DataObject .class );
118
+ method .setAccessible (true );
119
+ boolean canBypassSecondaryStorage = (boolean ) method .invoke (strategy , srcVolumeInfo , destVolumeInfo );
120
+ Assert .assertTrue (canBypassSecondaryStorage );
121
+ }
122
+
123
+ @ Test
124
+ public void testCanBypassSecondaryStorageForUnsupportedDataObject () throws NoSuchMethodException , InvocationTargetException , IllegalAccessException {
125
+ VolumeObject srcVolumeInfo = Mockito .spy (new VolumeObject ());
126
+
127
+ TemplateObject destTemplateInfo = Mockito .spy (new TemplateObject ());
128
+
129
+ Method method ;
130
+ method = AncientDataMotionStrategy .class .getDeclaredMethod ("canBypassSecondaryStorage" , DataObject .class , DataObject .class );
131
+ method .setAccessible (true );
132
+ boolean canBypassSecondaryStorage = (boolean ) method .invoke (strategy , srcVolumeInfo , destTemplateInfo );
133
+ Assert .assertFalse (canBypassSecondaryStorage );
134
+ }
135
+
136
+ @ Test
137
+ public void testCanBypassSecondaryStorageForUnsupportedSrcPoolType () throws NoSuchMethodException , InvocationTargetException , IllegalAccessException {
138
+ VolumeObject srcVolumeInfo = Mockito .spy (new VolumeObject ());
139
+ DataStore srcDataStore = Mockito .mock (DataStore .class );
140
+ Mockito .doReturn (new ZoneScope (1L )).when (srcDataStore ).getScope ();
141
+ Mockito .doReturn (srcDataStore ).when (srcVolumeInfo ).getDataStore ();
142
+ Mockito .doReturn (Storage .StoragePoolType .PowerFlex ).when (srcVolumeInfo ).getStoragePoolType ();
143
+
144
+ VolumeObject destVolumeInfo = Mockito .spy (new VolumeObject ());
145
+ DataStore destDataStore = Mockito .mock (DataStore .class );
146
+ Mockito .doReturn (new ZoneScope (1L )).when (destDataStore ).getScope ();
147
+ Mockito .doReturn (destDataStore ).when (destVolumeInfo ).getDataStore ();
148
+ Mockito .doReturn (Storage .StoragePoolType .NetworkFilesystem ).when (destVolumeInfo ).getStoragePoolType ();
149
+
150
+ Method method ;
151
+ method = AncientDataMotionStrategy .class .getDeclaredMethod ("canBypassSecondaryStorage" , DataObject .class , DataObject .class );
152
+ method .setAccessible (true );
153
+ boolean canBypassSecondaryStorage = (boolean ) method .invoke (strategy , srcVolumeInfo , destVolumeInfo );
154
+ Assert .assertFalse (canBypassSecondaryStorage );
155
+ }
156
+
157
+ @ Test
158
+ public void testCanBypassSecondaryStorageForUnsupportedDestPoolType () throws NoSuchMethodException , InvocationTargetException , IllegalAccessException {
159
+ VolumeObject srcVolumeInfo = Mockito .spy (new VolumeObject ());
160
+ DataStore srcDataStore = Mockito .mock (DataStore .class );
161
+ Mockito .doReturn (new ZoneScope (1L )).when (srcDataStore ).getScope ();
162
+ Mockito .doReturn (srcDataStore ).when (srcVolumeInfo ).getDataStore ();
163
+ Mockito .doReturn (Storage .StoragePoolType .NetworkFilesystem ).when (srcVolumeInfo ).getStoragePoolType ();
164
+
165
+ VolumeObject destVolumeInfo = Mockito .spy (new VolumeObject ());
166
+ DataStore destDataStore = Mockito .mock (DataStore .class );
167
+ Mockito .doReturn (new ZoneScope (1L )).when (destDataStore ).getScope ();
168
+ Mockito .doReturn (destDataStore ).when (destVolumeInfo ).getDataStore ();
169
+ Mockito .doReturn (Storage .StoragePoolType .Iscsi ).when (destVolumeInfo ).getStoragePoolType ();
170
+
171
+ Method method ;
172
+ method = AncientDataMotionStrategy .class .getDeclaredMethod ("canBypassSecondaryStorage" , DataObject .class , DataObject .class );
173
+ method .setAccessible (true );
174
+ boolean canBypassSecondaryStorage = (boolean ) method .invoke (strategy , srcVolumeInfo , destVolumeInfo );
175
+ Assert .assertFalse (canBypassSecondaryStorage );
176
+ }
177
+
178
+ @ Test
179
+ public void testCanBypassSecondaryStorageWithZoneWideNFSPoolsInSameZone () throws NoSuchMethodException , InvocationTargetException , IllegalAccessException {
180
+ VolumeObject srcVolumeInfo = Mockito .spy (new VolumeObject ());
181
+ DataStore srcDataStore = Mockito .mock (DataStore .class );
182
+ Mockito .doReturn (new ZoneScope (1L )).when (srcDataStore ).getScope ();
183
+ Mockito .doReturn (srcDataStore ).when (srcVolumeInfo ).getDataStore ();
184
+ Mockito .doReturn (Storage .StoragePoolType .NetworkFilesystem ).when (srcVolumeInfo ).getStoragePoolType ();
185
+
186
+ VolumeObject destVolumeInfo = Mockito .spy (new VolumeObject ());
187
+ DataStore destDataStore = Mockito .mock (DataStore .class );
188
+ Mockito .doReturn (new ZoneScope (1L )).when (destDataStore ).getScope ();
189
+ Mockito .doReturn (destDataStore ).when (destVolumeInfo ).getDataStore ();
190
+ Mockito .doReturn (Storage .StoragePoolType .NetworkFilesystem ).when (destVolumeInfo ).getStoragePoolType ();
191
+
192
+ Method method ;
193
+ method = AncientDataMotionStrategy .class .getDeclaredMethod ("canBypassSecondaryStorage" , DataObject .class , DataObject .class );
194
+ method .setAccessible (true );
195
+ boolean canBypassSecondaryStorage = (boolean ) method .invoke (strategy , srcVolumeInfo , destVolumeInfo );
196
+ Assert .assertTrue (canBypassSecondaryStorage );
197
+ }
198
+
199
+ @ Test
200
+ public void testCanBypassSecondaryStorageWithClusterWideNFSPoolsInSameCluster () throws NoSuchMethodException , InvocationTargetException , IllegalAccessException {
201
+ VolumeObject srcVolumeInfo = Mockito .spy (new VolumeObject ());
202
+ DataStore srcDataStore = Mockito .mock (DataStore .class );
203
+ Mockito .doReturn (new ClusterScope (5L , 2L , 1L )).when (srcDataStore ).getScope ();
204
+ Mockito .doReturn (srcDataStore ).when (srcVolumeInfo ).getDataStore ();
205
+ Mockito .doReturn (Storage .StoragePoolType .NetworkFilesystem ).when (srcVolumeInfo ).getStoragePoolType ();
206
+
207
+ VolumeObject destVolumeInfo = Mockito .spy (new VolumeObject ());
208
+ DataStore destDataStore = Mockito .mock (DataStore .class );
209
+ Mockito .doReturn (new ClusterScope (5L , 2L , 1L )).when (destDataStore ).getScope ();
210
+ Mockito .doReturn (destDataStore ).when (destVolumeInfo ).getDataStore ();
211
+ Mockito .doReturn (Storage .StoragePoolType .NetworkFilesystem ).when (destVolumeInfo ).getStoragePoolType ();
212
+
213
+ Method method ;
214
+ method = AncientDataMotionStrategy .class .getDeclaredMethod ("canBypassSecondaryStorage" , DataObject .class , DataObject .class );
215
+ method .setAccessible (true );
216
+ boolean canBypassSecondaryStorage = (boolean ) method .invoke (strategy , srcVolumeInfo , destVolumeInfo );
217
+ Assert .assertTrue (canBypassSecondaryStorage );
218
+ }
219
+
220
+ @ Test
221
+ public void testCanBypassSecondaryStorageWithLocalAndClusterWideNFSPoolsInSameCluster () throws NoSuchMethodException , InvocationTargetException , IllegalAccessException {
222
+ VolumeObject srcVolumeInfo = Mockito .spy (new VolumeObject ());
223
+ DataStore srcDataStore = Mockito .mock (DataStore .class );
224
+ Mockito .doReturn (new HostScope (1L , 1L , 1L )).when (srcDataStore ).getScope ();
225
+ Mockito .doReturn (srcDataStore ).when (srcVolumeInfo ).getDataStore ();
226
+ Mockito .doReturn (Storage .StoragePoolType .Filesystem ).when (srcVolumeInfo ).getStoragePoolType ();
227
+
228
+ VolumeObject destVolumeInfo = Mockito .spy (new VolumeObject ());
229
+ DataStore destDataStore = Mockito .mock (DataStore .class );
230
+ Mockito .doReturn (new ClusterScope (1L , 1L , 1L )).when (destDataStore ).getScope ();
231
+ Mockito .doReturn (destDataStore ).when (destVolumeInfo ).getDataStore ();
232
+ Mockito .doReturn (Storage .StoragePoolType .NetworkFilesystem ).when (destVolumeInfo ).getStoragePoolType ();
233
+
234
+ Method method ;
235
+ method = AncientDataMotionStrategy .class .getDeclaredMethod ("canBypassSecondaryStorage" , DataObject .class , DataObject .class );
236
+ method .setAccessible (true );
237
+ boolean canBypassSecondaryStorage = (boolean ) method .invoke (strategy , srcVolumeInfo , destVolumeInfo );
238
+ Assert .assertTrue (canBypassSecondaryStorage );
239
+
240
+ canBypassSecondaryStorage = (boolean ) method .invoke (strategy , destVolumeInfo , srcVolumeInfo );
241
+ Assert .assertTrue (canBypassSecondaryStorage );
242
+ }
243
+
244
+ @ Test
245
+ public void testCanBypassSecondaryStorageWithLocalAndZoneWideNFSPoolsInSameZone () throws NoSuchMethodException , InvocationTargetException , IllegalAccessException {
246
+ VolumeObject srcVolumeInfo = Mockito .spy (new VolumeObject ());
247
+ DataStore srcDataStore = Mockito .mock (DataStore .class );
248
+ Mockito .doReturn (new HostScope (1L , 1L , 1L )).when (srcDataStore ).getScope ();
249
+ Mockito .doReturn (srcDataStore ).when (srcVolumeInfo ).getDataStore ();
250
+ Mockito .doReturn (Storage .StoragePoolType .Filesystem ).when (srcVolumeInfo ).getStoragePoolType ();
251
+
252
+ VolumeObject destVolumeInfo = Mockito .spy (new VolumeObject ());
253
+ DataStore destDataStore = Mockito .mock (DataStore .class );
254
+ Mockito .doReturn (new ZoneScope (1L )).when (destDataStore ).getScope ();
255
+ Mockito .doReturn (destDataStore ).when (destVolumeInfo ).getDataStore ();
256
+ Mockito .doReturn (Storage .StoragePoolType .NetworkFilesystem ).when (destVolumeInfo ).getStoragePoolType ();
257
+
258
+ Method method ;
259
+ method = AncientDataMotionStrategy .class .getDeclaredMethod ("canBypassSecondaryStorage" , DataObject .class , DataObject .class );
260
+ method .setAccessible (true );
261
+ boolean canBypassSecondaryStorage = (boolean ) method .invoke (strategy , srcVolumeInfo , destVolumeInfo );
262
+ Assert .assertTrue (canBypassSecondaryStorage );
263
+
264
+ canBypassSecondaryStorage = (boolean ) method .invoke (strategy , destVolumeInfo , srcVolumeInfo );
265
+ Assert .assertTrue (canBypassSecondaryStorage );
266
+ }
267
+
268
+ @ Test
269
+ public void testCanBypassSecondaryStorageWithClusterWideNFSAndZoneWideNFSPoolsInSameZone () throws NoSuchMethodException , InvocationTargetException , IllegalAccessException {
270
+ VolumeObject srcVolumeInfo = Mockito .spy (new VolumeObject ());
271
+ DataStore srcDataStore = Mockito .mock (DataStore .class );
272
+ Mockito .doReturn (new ClusterScope (5L , 2L , 1L )).when (srcDataStore ).getScope ();
273
+ Mockito .doReturn (srcDataStore ).when (srcVolumeInfo ).getDataStore ();
274
+ Mockito .doReturn (Storage .StoragePoolType .NetworkFilesystem ).when (srcVolumeInfo ).getStoragePoolType ();
275
+
276
+ VolumeObject destVolumeInfo = Mockito .spy (new VolumeObject ());
277
+ DataStore destDataStore = Mockito .mock (DataStore .class );
278
+ Mockito .doReturn (new ZoneScope (1L )).when (destDataStore ).getScope ();
279
+ Mockito .doReturn (destDataStore ).when (destVolumeInfo ).getDataStore ();
280
+ Mockito .doReturn (Storage .StoragePoolType .NetworkFilesystem ).when (destVolumeInfo ).getStoragePoolType ();
281
+
282
+ Method method ;
283
+ method = AncientDataMotionStrategy .class .getDeclaredMethod ("canBypassSecondaryStorage" , DataObject .class , DataObject .class );
284
+ method .setAccessible (true );
285
+ boolean canBypassSecondaryStorage = (boolean ) method .invoke (strategy , srcVolumeInfo , destVolumeInfo );
286
+ Assert .assertTrue (canBypassSecondaryStorage );
287
+
288
+ canBypassSecondaryStorage = (boolean ) method .invoke (strategy , destVolumeInfo , srcVolumeInfo );
289
+ Assert .assertTrue (canBypassSecondaryStorage );
290
+ }
91
291
}
0 commit comments