@@ -8,12 +8,7 @@ namespace VirtualClient.Contracts
88 using System . IO ;
99 using System . Linq ;
1010 using System . Text ;
11- using System . Threading . Tasks ;
12- using AutoFixture ;
13- using VirtualClient . Common ;
14- using Microsoft . Extensions . Azure ;
1511 using NUnit . Framework ;
16- using VirtualClient . Contracts . Parser ;
1712
1813 [ TestFixture ]
1914 [ Category ( "Unit" ) ]
@@ -111,6 +106,22 @@ public void DiskFiltersCanFilterOnBiggestDisksOnLinux()
111106 Assert . IsTrue ( object . ReferenceEquals ( this . disks . ElementAt ( 2 ) , result . ElementAt ( 1 ) ) ) ;
112107 }
113108
109+ [ Test ]
110+ public void DiskFiltersCanFilterOnBiggestDisksOnLinuxForDisksWithoutVolumePartititions ( )
111+ {
112+ this . disks = this . mockFixture . CreateDisks ( PlatformID . Unix , false ) ;
113+ this . disks . ElementAt ( 0 ) . Properties [ "size" ] = 3 * 1024 * 1024 ;
114+ this . disks . ElementAt ( 1 ) . Properties [ "size" ] = 1 * 1024 * 1024 ;
115+ this . disks . ElementAt ( 2 ) . Properties [ "size" ] = 3 * 1024 * 1024 ;
116+ this . disks . ElementAt ( 3 ) . Properties [ "size" ] = 2 * 1024 * 1024 ;
117+
118+ string filterString = "biggestsize" ;
119+ IEnumerable < Disk > result = DiskFilters . FilterDisks ( this . disks , filterString , PlatformID . Unix ) ;
120+ Assert . AreEqual ( 2 , result . Count ( ) ) ;
121+ Assert . IsTrue ( object . ReferenceEquals ( this . disks . ElementAt ( 0 ) , result . ElementAt ( 0 ) ) ) ;
122+ Assert . IsTrue ( object . ReferenceEquals ( this . disks . ElementAt ( 2 ) , result . ElementAt ( 1 ) ) ) ;
123+ }
124+
114125 [ Test ]
115126 public void DiskFiltersCanFilterOnBiggestDisksOnWindows ( )
116127 {
@@ -126,6 +137,23 @@ public void DiskFiltersCanFilterOnBiggestDisksOnWindows()
126137 Assert . IsTrue ( object . ReferenceEquals ( this . disks . ElementAt ( 2 ) , result . ElementAt ( 0 ) ) ) ;
127138 }
128139
140+ [ Test ]
141+ [ Ignore ( "We can support this in the future if we add a 'Size' property to the Disk object for Windows (e.g. DiskPart -> list disks)." ) ]
142+ public void DiskFiltersCanFilterOnBiggestDisksOnWindowsForDisksWithoutVolumePartititions ( )
143+ {
144+ this . disks = this . mockFixture . CreateDisks ( PlatformID . Win32NT , false ) ;
145+ this . disks . ElementAt ( 0 ) . Properties [ "Size" ] = 3 * 1024 * 1024 ;
146+ this . disks . ElementAt ( 1 ) . Properties [ "Size" ] = 1 * 1024 * 1024 ;
147+ this . disks . ElementAt ( 2 ) . Properties [ "Size" ] = 3 * 1024 * 1024 ;
148+ this . disks . ElementAt ( 3 ) . Properties [ "Size" ] = 2 * 1024 * 1024 ;
149+
150+ string filterString = "biggestsize" ;
151+ IEnumerable < Disk > result = DiskFilters . FilterDisks ( this . disks , filterString , PlatformID . Unix ) ;
152+ Assert . AreEqual ( 2 , result . Count ( ) ) ;
153+ Assert . IsTrue ( object . ReferenceEquals ( this . disks . ElementAt ( 0 ) , result . ElementAt ( 0 ) ) ) ;
154+ Assert . IsTrue ( object . ReferenceEquals ( this . disks . ElementAt ( 2 ) , result . ElementAt ( 1 ) ) ) ;
155+ }
156+
129157 [ Test ]
130158 public void DiskFiltersCanFilterOnSmallestDisksOnLinux ( )
131159 {
@@ -142,6 +170,22 @@ public void DiskFiltersCanFilterOnSmallestDisksOnLinux()
142170 Assert . IsTrue ( object . ReferenceEquals ( this . disks . ElementAt ( 3 ) , result . ElementAt ( 1 ) ) ) ;
143171 }
144172
173+ [ Test ]
174+ public void DiskFiltersCanFilterOnSmallestDisksOnLinuxForDisksWithoutVolumePartitions ( )
175+ {
176+ this . disks = this . mockFixture . CreateDisks ( PlatformID . Unix , false ) ;
177+ this . disks . ElementAt ( 0 ) . Properties [ "size" ] = 3 * 1024 * 1024 ;
178+ this . disks . ElementAt ( 1 ) . Properties [ "size" ] = 1 * 1024 * 1024 ;
179+ this . disks . ElementAt ( 2 ) . Properties [ "size" ] = 3 * 1024 * 1024 ;
180+ this . disks . ElementAt ( 3 ) . Properties [ "size" ] = 1 * 1024 * 1024 ;
181+
182+ string filterString = "smallestSize" ;
183+ IEnumerable < Disk > result = DiskFilters . FilterDisks ( this . disks , filterString , PlatformID . Unix ) ;
184+ Assert . AreEqual ( 2 , result . Count ( ) ) ;
185+ Assert . IsTrue ( object . ReferenceEquals ( this . disks . ElementAt ( 1 ) , result . ElementAt ( 0 ) ) ) ;
186+ Assert . IsTrue ( object . ReferenceEquals ( this . disks . ElementAt ( 3 ) , result . ElementAt ( 1 ) ) ) ;
187+ }
188+
145189 [ Test ]
146190 public void DiskFiltersCanFilterOnSmallestDisksOnWindows ( )
147191 {
@@ -158,7 +202,23 @@ public void DiskFiltersCanFilterOnSmallestDisksOnWindows()
158202 }
159203
160204 [ Test ]
161- public void DiskFiltersCanFilterOnOsDisk ( )
205+ [ Ignore ( "We can support this in the future if we add a 'Size' property to the Disk object for Windows (e.g. DiskPart -> list disks)." ) ]
206+ public void DiskFiltersCanFilterOnSmallestDisksOnWindowsForDisksWithoutVolumePartitions ( )
207+ {
208+ this . disks = this . mockFixture . CreateDisks ( PlatformID . Win32NT , false ) ;
209+ this . disks . ElementAt ( 0 ) . Properties [ "Size" ] = "6 GB" ;
210+ this . disks . ElementAt ( 1 ) . Properties [ "Size" ] = "4 TB" ;
211+ this . disks . ElementAt ( 2 ) . Properties [ "Size" ] = "5TB" ;
212+ this . disks . ElementAt ( 3 ) . Properties [ "Size" ] = "7 mb" ;
213+
214+ string filterString = "smallestSize" ;
215+ IEnumerable < Disk > result = DiskFilters . FilterDisks ( this . disks , filterString , PlatformID . Win32NT ) ;
216+ Assert . AreEqual ( 1 , result . Count ( ) ) ;
217+ Assert . IsTrue ( object . ReferenceEquals ( this . disks . ElementAt ( 3 ) , result . ElementAt ( 0 ) ) ) ;
218+ }
219+
220+ [ Test ]
221+ public void DiskFiltersCanFilterOnOsDiskOnLinux ( )
162222 {
163223 this . disks = this . mockFixture . CreateDisks ( PlatformID . Unix , true ) ;
164224
@@ -180,6 +240,75 @@ public void DiskFiltersCanFilterOnOsDisk()
180240 Assert . IsTrue ( object . ReferenceEquals ( this . disks . ElementAt ( 3 ) , result3 . ElementAt ( 2 ) ) ) ;
181241 }
182242
243+ [ Test ]
244+ public void DiskFiltersCanFilterOnOsDiskOnLinuxForDisksWithoutVolumePartitions ( )
245+ {
246+ this . disks = this . mockFixture . CreateDisks ( PlatformID . Unix , false ) ;
247+
248+ string filterString = "osdisk" ;
249+ IEnumerable < Disk > result = DiskFilters . FilterDisks ( this . disks , filterString , PlatformID . Unix ) ;
250+ Assert . AreEqual ( 1 , result . Count ( ) ) ;
251+ Assert . IsTrue ( object . ReferenceEquals ( this . disks . ElementAt ( 0 ) , result . ElementAt ( 0 ) ) ) ;
252+
253+ string filterString2 = "osdisk:true" ;
254+ IEnumerable < Disk > result2 = DiskFilters . FilterDisks ( this . disks , filterString2 , PlatformID . Unix ) ;
255+ Assert . AreEqual ( 1 , result2 . Count ( ) ) ;
256+ Assert . IsTrue ( object . ReferenceEquals ( this . disks . ElementAt ( 0 ) , result2 . ElementAt ( 0 ) ) ) ;
257+
258+ string filterString3 = "osdisk:false" ;
259+ IEnumerable < Disk > result3 = DiskFilters . FilterDisks ( this . disks , filterString3 , PlatformID . Unix ) ;
260+ Assert . AreEqual ( 3 , result3 . Count ( ) ) ;
261+ Assert . IsTrue ( object . ReferenceEquals ( this . disks . ElementAt ( 1 ) , result3 . ElementAt ( 0 ) ) ) ;
262+ Assert . IsTrue ( object . ReferenceEquals ( this . disks . ElementAt ( 2 ) , result3 . ElementAt ( 1 ) ) ) ;
263+ Assert . IsTrue ( object . ReferenceEquals ( this . disks . ElementAt ( 3 ) , result3 . ElementAt ( 2 ) ) ) ;
264+ }
265+
266+ [ Test ]
267+ public void DiskFiltersCanFilterOnOsDiskOnWindows ( )
268+ {
269+ this . disks = this . mockFixture . CreateDisks ( PlatformID . Win32NT , true ) ;
270+
271+ string filterString = "osdisk" ;
272+ IEnumerable < Disk > result = DiskFilters . FilterDisks ( this . disks , filterString , PlatformID . Win32NT ) ;
273+ Assert . AreEqual ( 1 , result . Count ( ) ) ;
274+ Assert . IsTrue ( object . ReferenceEquals ( this . disks . ElementAt ( 0 ) , result . ElementAt ( 0 ) ) ) ;
275+
276+ string filterString2 = "osdisk:true" ;
277+ IEnumerable < Disk > result2 = DiskFilters . FilterDisks ( this . disks , filterString2 , PlatformID . Win32NT ) ;
278+ Assert . AreEqual ( 1 , result2 . Count ( ) ) ;
279+ Assert . IsTrue ( object . ReferenceEquals ( this . disks . ElementAt ( 0 ) , result2 . ElementAt ( 0 ) ) ) ;
280+
281+ string filterString3 = "osdisk:false" ;
282+ IEnumerable < Disk > result3 = DiskFilters . FilterDisks ( this . disks , filterString3 , PlatformID . Win32NT ) ;
283+ Assert . AreEqual ( 3 , result3 . Count ( ) ) ;
284+ Assert . IsTrue ( object . ReferenceEquals ( this . disks . ElementAt ( 1 ) , result3 . ElementAt ( 0 ) ) ) ;
285+ Assert . IsTrue ( object . ReferenceEquals ( this . disks . ElementAt ( 2 ) , result3 . ElementAt ( 1 ) ) ) ;
286+ Assert . IsTrue ( object . ReferenceEquals ( this . disks . ElementAt ( 3 ) , result3 . ElementAt ( 2 ) ) ) ;
287+ }
288+
289+ [ Test ]
290+ public void DiskFiltersCanFilterOnOsDiskOnWindowsForDisksWithoutVolumePartitions ( )
291+ {
292+ this . disks = this . mockFixture . CreateDisks ( PlatformID . Win32NT , false ) ;
293+
294+ string filterString = "osdisk" ;
295+ IEnumerable < Disk > result = DiskFilters . FilterDisks ( this . disks , filterString , PlatformID . Win32NT ) ;
296+ Assert . AreEqual ( 1 , result . Count ( ) ) ;
297+ Assert . IsTrue ( object . ReferenceEquals ( this . disks . ElementAt ( 0 ) , result . ElementAt ( 0 ) ) ) ;
298+
299+ string filterString2 = "osdisk:true" ;
300+ IEnumerable < Disk > result2 = DiskFilters . FilterDisks ( this . disks , filterString2 , PlatformID . Win32NT ) ;
301+ Assert . AreEqual ( 1 , result2 . Count ( ) ) ;
302+ Assert . IsTrue ( object . ReferenceEquals ( this . disks . ElementAt ( 0 ) , result2 . ElementAt ( 0 ) ) ) ;
303+
304+ string filterString3 = "osdisk:false" ;
305+ IEnumerable < Disk > result3 = DiskFilters . FilterDisks ( this . disks , filterString3 , PlatformID . Win32NT ) ;
306+ Assert . AreEqual ( 3 , result3 . Count ( ) ) ;
307+ Assert . IsTrue ( object . ReferenceEquals ( this . disks . ElementAt ( 1 ) , result3 . ElementAt ( 0 ) ) ) ;
308+ Assert . IsTrue ( object . ReferenceEquals ( this . disks . ElementAt ( 2 ) , result3 . ElementAt ( 1 ) ) ) ;
309+ Assert . IsTrue ( object . ReferenceEquals ( this . disks . ElementAt ( 3 ) , result3 . ElementAt ( 2 ) ) ) ;
310+ }
311+
183312 [ Test ]
184313 public void DiskFiltersCanFilterOnBiggestNonOsDisk ( )
185314 {
@@ -197,7 +326,7 @@ public void DiskFiltersCanFilterOnBiggestNonOsDisk()
197326 }
198327
199328 [ Test ]
200- public void DiskFiltersCanFilterOnSizeBiggerThan ( )
329+ public void DiskFiltersCanFilterOnSizeBiggerThanOnLinux ( )
201330 {
202331 this . disks = this . mockFixture . CreateDisks ( PlatformID . Unix , true ) ;
203332 this . disks . ElementAt ( 0 ) . Properties [ "size" ] = ( long ) 5 * 1024 * 1024 * 1024 ;
@@ -213,7 +342,24 @@ public void DiskFiltersCanFilterOnSizeBiggerThan()
213342 }
214343
215344 [ Test ]
216- public void DiskFiltersCanFilterOnSizeLessThan ( )
345+ [ Ignore ( "We can support this in the future if we add a 'Size' property to the Disk object for Windows (e.g. DiskPart -> list disks) and consider that in the filtering." ) ]
346+ public void DiskFiltersCanFilterOnSizeBiggerThanOnWindows ( )
347+ {
348+ this . disks = this . mockFixture . CreateDisks ( PlatformID . Win32NT , true ) ;
349+ this . disks . ElementAt ( 0 ) . Properties [ "Size" ] = ( long ) 5 * 1024 * 1024 * 1024 ;
350+ this . disks . ElementAt ( 1 ) . Properties [ "Size" ] = ( long ) 2 * 1024 * 1024 * 1024 ;
351+ this . disks . ElementAt ( 2 ) . Properties [ "Size" ] = ( long ) 3 * 1024 * 1024 * 1024 ;
352+ this . disks . ElementAt ( 3 ) . Properties [ "Size" ] = ( long ) 7 * 1024 * 1024 * 1024 ;
353+
354+ string filterString = "SizeGreaterThan:4gb" ;
355+ IEnumerable < Disk > result = DiskFilters . FilterDisks ( this . disks , filterString , PlatformID . Win32NT ) ;
356+ Assert . AreEqual ( 2 , result . Count ( ) ) ;
357+ Assert . IsTrue ( object . ReferenceEquals ( this . disks . ElementAt ( 0 ) , result . ElementAt ( 0 ) ) ) ;
358+ Assert . IsTrue ( object . ReferenceEquals ( this . disks . ElementAt ( 3 ) , result . ElementAt ( 1 ) ) ) ;
359+ }
360+
361+ [ Test ]
362+ public void DiskFiltersCanFilterOnSizeLessThanOnLinux ( )
217363 {
218364 this . disks = this . mockFixture . CreateDisks ( PlatformID . Unix , true ) ;
219365 this . disks . ElementAt ( 0 ) . Properties [ "size" ] = ( long ) 5 * 1024 * 1024 * 1024 ;
@@ -228,6 +374,23 @@ public void DiskFiltersCanFilterOnSizeLessThan()
228374 Assert . IsTrue ( object . ReferenceEquals ( this . disks . ElementAt ( 2 ) , result . ElementAt ( 1 ) ) ) ;
229375 }
230376
377+ [ Test ]
378+ [ Ignore ( "We can support this in the future if we add a 'Size' property to the Disk object for Windows (e.g. DiskPart -> list disks) and consider that in the filtering." ) ]
379+ public void DiskFiltersCanFilterOnSizeLessThanOnWindows ( )
380+ {
381+ this . disks = this . mockFixture . CreateDisks ( PlatformID . Unix , true ) ;
382+ this . disks . ElementAt ( 0 ) . Properties [ "Size" ] = ( long ) 5 * 1024 * 1024 * 1024 ;
383+ this . disks . ElementAt ( 1 ) . Properties [ "Size" ] = ( long ) 3 * 1024 * 1024 * 1024 ;
384+ this . disks . ElementAt ( 2 ) . Properties [ "Size" ] = ( long ) 2 * 1024 * 1024 * 1024 ;
385+ this . disks . ElementAt ( 3 ) . Properties [ "Size" ] = ( long ) 7 * 1024 * 1024 * 1024 ;
386+
387+ string filterString = "SizeLessThan:4000 Mb" ;
388+ IEnumerable < Disk > result = DiskFilters . FilterDisks ( this . disks , filterString , PlatformID . Unix ) ;
389+ Assert . AreEqual ( 2 , result . Count ( ) ) ;
390+ Assert . IsTrue ( object . ReferenceEquals ( this . disks . ElementAt ( 1 ) , result . ElementAt ( 0 ) ) ) ;
391+ Assert . IsTrue ( object . ReferenceEquals ( this . disks . ElementAt ( 2 ) , result . ElementAt ( 1 ) ) ) ;
392+ }
393+
231394 [ Test ]
232395 public void DiskFiltersCanFilterOnSizeLessThanAndNonOs ( )
233396 {
@@ -271,6 +434,19 @@ public void DiskFiltersCanFilterOnDiskPathInLinux()
271434 Assert . IsTrue ( object . ReferenceEquals ( this . disks . ElementAt ( 3 ) , result . ElementAt ( 1 ) ) ) ;
272435 }
273436
437+ [ Test ]
438+ public void DiskFiltersCanFilterOnDiskPathInLinuxWhenDisksHaveNoVolumePartitions ( )
439+ {
440+ this . disks = this . mockFixture . CreateDisks ( PlatformID . Unix , false ) ;
441+
442+ // The disks are sdc, sdd, sde, sdf
443+ string filterString = "DiskPath:/dev/sdc,/dev/sde" ;
444+ IEnumerable < Disk > result = DiskFilters . FilterDisks ( this . disks , filterString , PlatformID . Unix ) ;
445+ Assert . AreEqual ( 2 , result . Count ( ) ) ;
446+ Assert . IsTrue ( object . ReferenceEquals ( this . disks . ElementAt ( 1 ) , result . ElementAt ( 0 ) ) ) ;
447+ Assert . IsTrue ( object . ReferenceEquals ( this . disks . ElementAt ( 3 ) , result . ElementAt ( 1 ) ) ) ;
448+ }
449+
274450 [ Test ]
275451 public void DiskFiltersCanFilterOnDiskPathInWindows ( )
276452 {
@@ -285,6 +461,20 @@ public void DiskFiltersCanFilterOnDiskPathInWindows()
285461 Assert . IsTrue ( object . ReferenceEquals ( this . disks . ElementAt ( 2 ) , result . ElementAt ( 1 ) ) ) ;
286462 }
287463
464+ [ Test ]
465+ public void DiskFiltersCanFilterOnDiskPathInWindowsWhenDisksHaveNoVolumePartitions ( )
466+ {
467+ this . mockFixture . Setup ( PlatformID . Win32NT ) ;
468+ this . disks = this . mockFixture . CreateDisks ( PlatformID . Win32NT , false ) ;
469+
470+ // The disks \\.\PHYSICALDISK0,\\.\PHYSICALDISK2
471+ string filterString = @"DiskPath:\\.\PHYSICALDISK0,\\.\PHYSICALDISK2" ;
472+ IEnumerable < Disk > result = DiskFilters . FilterDisks ( this . disks , filterString , PlatformID . Win32NT ) ;
473+ Assert . AreEqual ( 2 , result . Count ( ) ) ;
474+ Assert . IsTrue ( object . ReferenceEquals ( this . disks . ElementAt ( 0 ) , result . ElementAt ( 0 ) ) ) ;
475+ Assert . IsTrue ( object . ReferenceEquals ( this . disks . ElementAt ( 2 ) , result . ElementAt ( 1 ) ) ) ;
476+ }
477+
288478 [ Test ]
289479 public void DiskFiltersHandlesAnomaliesEncounters_1 ( )
290480 {
0 commit comments