Skip to content

Commit c381ad1

Browse files
authored
Add support to FIO for SingleProcessAggregated process model. Cleanup for mock disks across the board. (#549)
* Enable support for FIO multiple jobs (or job file). * Add support to FIO for SingleProcessAggregated process model. Cleanup for mock disks across the board.
1 parent 71f6bc6 commit c381ad1

File tree

50 files changed

+2413
-2219
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

50 files changed

+2413
-2219
lines changed

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
2.1.3
1+
2.1.4

src/VirtualClient/VirtualClient.Actions.FunctionalTests/FioDiscoveryProfileTests.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ public async Task FioDiscoveryWorkloadProfileInstallsTheExpectedDependenciesOnUn
6565
[TestCase("PERF-IO-FIO-DISCOVERY.json")]
6666
public async Task FioDiscoveryWorkloadProfileExecutesTheExpectedWorkloadsOnUnixPlatform(string profile)
6767
{
68-
IEnumerable<string> expectedCommands = FioDiscoveryProfileTests.GetFioStressProfileExpectedCommands(PlatformID.Unix);
68+
IEnumerable<string> expectedCommands = FioDiscoveryProfileTests.GetFioProfileExpectedCommands(PlatformID.Unix);
6969

7070
// Setup the expectations for the workload
7171
// - Disks are formatted and ready
@@ -95,11 +95,11 @@ public async Task FioDiscoveryWorkloadProfileExecutesTheExpectedWorkloadsOnUnixP
9595
}
9696
}
9797

98-
private static IEnumerable<string> GetFioStressProfileExpectedCommands(PlatformID platform)
98+
private static IEnumerable<string> GetFioProfileExpectedCommands(PlatformID platform)
9999
{
100100
return new List<string>
101101
{
102-
"fio --direct=1 --overwrite=1 --output-format=json --rw=write --bs=256K --numjobs=1 --iodepth=64 --fallocate=none --refill_buffers=1 --name=DiskFill --size=134G --ioengine=libaio",
102+
"fio --name=disk_fill --size=134G --rw=write --bs=256K --numjobs=1 --iodepth=64 --ioengine=libaio --fallocate=none --refill_buffers=1 --direct=1 --overwrite=1 --output-format=json",
103103
"fio --name=fio_discovery_randread_134G_4k_d1_th1 --numjobs=1 --iodepth=1 --ioengine=libaio --size=134G --rw=randread --bs=4k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]",
104104
"fio --name=fio_discovery_randread_134G_4k_d1_th4 --numjobs=4 --iodepth=1 --ioengine=libaio --size=134G --rw=randread --bs=4k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]",
105105
"fio --name=fio_discovery_randread_134G_4k_d2_th8 --numjobs=8 --iodepth=2 --ioengine=libaio --size=134G --rw=randread --bs=4k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]",

src/VirtualClient/VirtualClient.Actions.FunctionalTests/FioProfileTests.cs

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ public async Task FioWorkloadProfileInstallsTheExpectedDependenciesOnUnixPlatfor
8888
[TestCase("PERF-IO-FIO.json")]
8989
public async Task FioWorkloadProfileExecutesTheExpectedWorkloadsOnWindowsPlatform(string profile)
9090
{
91-
IEnumerable<string> expectedCommands = FioProfileTests.GetFioStressProfileExpectedCommands(PlatformID.Win32NT);
91+
IEnumerable<string> expectedCommands = FioProfileTests.GetFioProfileExpectedCommands(PlatformID.Win32NT);
9292

9393
// Setup the expectations for the workload
9494
// - Disks are formatted and ready
@@ -122,7 +122,7 @@ public async Task FioWorkloadProfileExecutesTheExpectedWorkloadsOnWindowsPlatfor
122122
[TestCase("PERF-IO-FIO.json")]
123123
public async Task FioWorkloadProfileExecutesTheExpectedWorkloadsOnUnixPlatform(string profile)
124124
{
125-
IEnumerable<string> expectedCommands = FioProfileTests.GetFioStressProfileExpectedCommands(PlatformID.Unix);
125+
IEnumerable<string> expectedCommands = FioProfileTests.GetFioProfileExpectedCommands(PlatformID.Unix);
126126

127127
// Setup the expectations for the workload
128128
// - Disks are formatted and ready
@@ -152,51 +152,51 @@ public async Task FioWorkloadProfileExecutesTheExpectedWorkloadsOnUnixPlatform(s
152152
}
153153
}
154154

155-
private static IEnumerable<string> GetFioStressProfileExpectedCommands(PlatformID platform)
155+
private static IEnumerable<string> GetFioProfileExpectedCommands(PlatformID platform)
156156
{
157157
string expectedIoEngine = platform == PlatformID.Win32NT ? "windowsaio" : "libaio";
158158
return new List<string>
159159
{
160160
// Given the test setup created 2 remote disks, we will perform a disk fill on both individually
161-
$"--name=disk_fill --size=500G --numjobs=1 --rw=write --bs=256k --iodepth=64 --direct=1 --overwrite=1 --thread --ioengine={expectedIoEngine}",
162-
$"--name=disk_fill --size=500G --numjobs=1 --rw=write --bs=256k --iodepth=64 --direct=1 --overwrite=1 --thread --ioengine={expectedIoEngine}",
161+
$"--name=disk_fill --size=500G --numjobs=1 --rw=write --bs=256k --iodepth=64 --ioengine={expectedIoEngine} --direct=1 --overwrite=1 --thread ",
162+
$"--name=disk_fill --size=500G --numjobs=1 --rw=write --bs=256k --iodepth=64 --ioengine={expectedIoEngine} --direct=1 --overwrite=1 --thread",
163163

164164
// After the disk fill, we execute the FIO commands.
165165
// Random Write tests
166-
$"--name=fio_randwrite_496G_4k_d[0-9]+_th[0-9]+ --size=496G --numjobs=[0-9]+ --rw=randwrite --bs=4k --iodepth=[0-9]+ --direct=1 --ramp_time=30 --runtime=300 --time_based .+ --ioengine={expectedIoEngine}",
167-
$"--name=fio_randwrite_496G_8k_d[0-9]+_th[0-9]+ --size=496G --numjobs=[0-9]+ --rw=randwrite --bs=8k --iodepth=[0-9]+ --direct=1 --ramp_time=30 --runtime=300 --time_based .+ --ioengine={expectedIoEngine}",
168-
$"--name=fio_randwrite_496G_12k_d[0-9]+_th[0-9]+ --size=496G --numjobs=[0-9]+ --rw=randwrite --bs=12k --iodepth=[0-9]+ --direct=1 --ramp_time=30 --runtime=300 --time_based .+ --ioengine={expectedIoEngine}",
169-
$"--name=fio_randwrite_496G_16k_d[0-9]+_th[0-9]+ --size=496G --numjobs=[0-9]+ --rw=randwrite --bs=16k --iodepth=[0-9]+ --direct=1 --ramp_time=30 --runtime=300 --time_based .+ --ioengine={expectedIoEngine}",
170-
$"--name=fio_randwrite_496G_1024k_d[0-9]+_th[0-9]+ --size=496G --numjobs=[0-9]+ --rw=randwrite --bs=1024k --iodepth=[0-9]+ --direct=1 --ramp_time=30 --runtime=300 --time_based .+ --ioengine={expectedIoEngine}",
166+
$"--name=fio_randwrite_496G_4k_d[0-9]+_th[0-9]+ --size=496G --numjobs=[0-9]+ --rw=randwrite --bs=4k --iodepth=[0-9]+ --ioengine={expectedIoEngine} --direct=1 --ramp_time=30 --runtime=300 --time_based",
167+
$"--name=fio_randwrite_496G_8k_d[0-9]+_th[0-9]+ --size=496G --numjobs=[0-9]+ --rw=randwrite --bs=8k --iodepth=[0-9]+ --ioengine={expectedIoEngine} --direct=1 --ramp_time=30 --runtime=300 --time_based",
168+
$"--name=fio_randwrite_496G_12k_d[0-9]+_th[0-9]+ --size=496G --numjobs=[0-9]+ --rw=randwrite --bs=12k --iodepth=[0-9]+ --ioengine={expectedIoEngine} --direct=1 --ramp_time=30 --runtime=300 --time_based",
169+
$"--name=fio_randwrite_496G_16k_d[0-9]+_th[0-9]+ --size=496G --numjobs=[0-9]+ --rw=randwrite --bs=16k --iodepth=[0-9]+ --ioengine={expectedIoEngine} --direct=1 --ramp_time=30 --runtime=300 --time_based",
170+
$"--name=fio_randwrite_496G_1024k_d[0-9]+_th[0-9]+ --size=496G --numjobs=[0-9]+ --rw=randwrite --bs=1024k --iodepth=[0-9]+ --ioengine={expectedIoEngine} --direct=1 --ramp_time=30 --runtime=300 --time_based",
171171

172172
// Sequential Write tests
173-
$"--name=fio_write_496G_4k_d[0-9]+_th[0-9]+ --size=496G --numjobs=[0-9]+ --rw=write --bs=4k --iodepth=[0-9]+ --direct=1 --ramp_time=30 --runtime=300 --time_based .+ --ioengine={expectedIoEngine}",
174-
$"--name=fio_write_496G_8k_d[0-9]+_th[0-9]+ --size=496G --numjobs=[0-9]+ --rw=write --bs=8k --iodepth=[0-9]+ --direct=1 --ramp_time=30 --runtime=300 --time_based .+ --ioengine={expectedIoEngine}",
175-
$"--name=fio_write_496G_12k_d[0-9]+_th[0-9]+ --size=496G --numjobs=[0-9]+ --rw=write --bs=12k --iodepth=[0-9]+ --direct=1 --ramp_time=30 --runtime=300 --time_based .+ --ioengine={expectedIoEngine}",
176-
$"--name=fio_write_496G_16k_d[0-9]+_th[0-9]+ --size=496G --numjobs=[0-9]+ --rw=write --bs=16k --iodepth=[0-9]+ --direct=1 --ramp_time=30 --runtime=300 --time_based .+ --ioengine={expectedIoEngine}",
177-
$"--name=fio_write_496G_1024k_d[0-9]+_th[0-9]+ --size=496G --numjobs=[0-9]+ --rw=write --bs=1024k --iodepth=[0-9]+ --direct=1 --ramp_time=30 --runtime=300 --time_based .+ --ioengine={expectedIoEngine}",
173+
$"--name=fio_write_496G_4k_d[0-9]+_th[0-9]+ --size=496G --numjobs=[0-9]+ --rw=write --bs=4k --iodepth=[0-9]+ --ioengine={expectedIoEngine} --direct=1 --ramp_time=30 --runtime=300 --time_based",
174+
$"--name=fio_write_496G_8k_d[0-9]+_th[0-9]+ --size=496G --numjobs=[0-9]+ --rw=write --bs=8k --iodepth=[0-9]+ --ioengine={expectedIoEngine} --direct=1 --ramp_time=30 --runtime=300 --time_based",
175+
$"--name=fio_write_496G_12k_d[0-9]+_th[0-9]+ --size=496G --numjobs=[0-9]+ --rw=write --bs=12k --iodepth=[0-9]+ --ioengine={expectedIoEngine} --direct=1 --ramp_time=30 --runtime=300 --time_based",
176+
$"--name=fio_write_496G_16k_d[0-9]+_th[0-9]+ --size=496G --numjobs=[0-9]+ --rw=write --bs=16k --iodepth=[0-9]+ --ioengine={expectedIoEngine} --direct=1 --ramp_time=30 --runtime=300 --time_based",
177+
$"--name=fio_write_496G_1024k_d[0-9]+_th[0-9]+ --size=496G --numjobs=[0-9]+ --rw=write --bs=1024k --iodepth=[0-9]+ --ioengine={expectedIoEngine} --direct=1 --ramp_time=30 --runtime=300 --time_based",
178178

179179
// Random Read tests
180-
$"--name=fio_randread_496G_4k_d[0-9]+_th[0-9]+ --size=496G --numjobs=[0-9]+ --rw=randread --bs=4k --iodepth=[0-9]+ --direct=1 --ramp_time=30 --runtime=300 --time_based .+ --ioengine={expectedIoEngine}",
181-
$"--name=fio_randread_496G_8k_d[0-9]+_th[0-9]+ --size=496G --numjobs=[0-9]+ --rw=randread --bs=8k --iodepth=[0-9]+ --direct=1 --ramp_time=30 --runtime=300 --time_based .+ --ioengine={expectedIoEngine}",
182-
$"--name=fio_randread_496G_12k_d[0-9]+_th[0-9]+ --size=496G --numjobs=[0-9]+ --rw=randread --bs=12k --iodepth=[0-9]+ --direct=1 --ramp_time=30 --runtime=300 --time_based .+ --ioengine={expectedIoEngine}",
183-
$"--name=fio_randread_496G_16k_d[0-9]+_th[0-9]+ --size=496G --numjobs=[0-9]+ --rw=randread --bs=16k --iodepth=[0-9]+ --direct=1 --ramp_time=30 --runtime=300 --time_based .+ --ioengine={expectedIoEngine}",
184-
$"--name=fio_randread_496G_1024k_d[0-9]+_th[0-9]+ --size=496G --numjobs=[0-9]+ --rw=randread --bs=1024k --iodepth=[0-9]+ --direct=1 --ramp_time=30 --runtime=300 --time_based .+ --ioengine={expectedIoEngine}",
180+
$"--name=fio_randread_496G_4k_d[0-9]+_th[0-9]+ --size=496G --numjobs=[0-9]+ --rw=randread --bs=4k --iodepth=[0-9]+ --ioengine={expectedIoEngine} --direct=1 --ramp_time=30 --runtime=300 --time_based",
181+
$"--name=fio_randread_496G_8k_d[0-9]+_th[0-9]+ --size=496G --numjobs=[0-9]+ --rw=randread --bs=8k --iodepth=[0-9]+ --ioengine={expectedIoEngine} --direct=1 --ramp_time=30 --runtime=300 --time_based",
182+
$"--name=fio_randread_496G_12k_d[0-9]+_th[0-9]+ --size=496G --numjobs=[0-9]+ --rw=randread --bs=12k --iodepth=[0-9]+ --ioengine={expectedIoEngine} --direct=1 --ramp_time=30 --runtime=300 --time_based",
183+
$"--name=fio_randread_496G_16k_d[0-9]+_th[0-9]+ --size=496G --numjobs=[0-9]+ --rw=randread --bs=16k --iodepth=[0-9]+ --ioengine={expectedIoEngine} --direct=1 --ramp_time=30 --runtime=300 --time_based",
184+
$"--name=fio_randread_496G_1024k_d[0-9]+_th[0-9]+ --size=496G --numjobs=[0-9]+ --rw=randread --bs=1024k --iodepth=[0-9]+ --ioengine={expectedIoEngine} --direct=1 --ramp_time=30 --runtime=300 --time_based",
185185

186186
// Sequential Read tests
187-
$"--name=fio_read_496G_4k_d[0-9]+_th[0-9]+ --size=496G --numjobs=[0-9]+ --rw=read --bs=4k --iodepth=[0-9]+ --direct=1 --ramp_time=30 --runtime=300 --time_based .+ --ioengine={expectedIoEngine}",
188-
$"--name=fio_read_496G_8k_d[0-9]+_th[0-9]+ --size=496G --numjobs=[0-9]+ --rw=read --bs=8k --iodepth=[0-9]+ --direct=1 --ramp_time=30 --runtime=300 --time_based .+ --ioengine={expectedIoEngine}",
189-
$"--name=fio_read_496G_12k_d[0-9]+_th[0-9]+ --size=496G --numjobs=[0-9]+ --rw=read --bs=12k --iodepth=[0-9]+ --direct=1 --ramp_time=30 --runtime=300 --time_based .+ --ioengine={expectedIoEngine}",
190-
$"--name=fio_read_496G_16k_d[0-9]+_th[0-9]+ --size=496G --numjobs=[0-9]+ --rw=read --bs=16k --iodepth=[0-9]+ --direct=1 --ramp_time=30 --runtime=300 --time_based .+ --ioengine={expectedIoEngine}",
191-
$"--name=fio_read_496G_1024k_d[0-9]+_th[0-9]+ --size=496G --numjobs=[0-9]+ --rw=read --bs=1024k --iodepth=[0-9]+ --direct=1 --ramp_time=30 --runtime=300 --time_based .+ --ioengine={expectedIoEngine}",
187+
$"--name=fio_read_496G_4k_d[0-9]+_th[0-9]+ --size=496G --numjobs=[0-9]+ --rw=read --bs=4k --iodepth=[0-9]+ --ioengine={expectedIoEngine} --direct=1 --ramp_time=30 --runtime=300 --time_based",
188+
$"--name=fio_read_496G_8k_d[0-9]+_th[0-9]+ --size=496G --numjobs=[0-9]+ --rw=read --bs=8k --iodepth=[0-9]+ --ioengine={expectedIoEngine} --direct=1 --ramp_time=30 --runtime=300 --time_based",
189+
$"--name=fio_read_496G_12k_d[0-9]+_th[0-9]+ --size=496G --numjobs=[0-9]+ --rw=read --bs=12k --iodepth=[0-9]+ --ioengine={expectedIoEngine} --direct=1 --ramp_time=30 --runtime=300 --time_based",
190+
$"--name=fio_read_496G_16k_d[0-9]+_th[0-9]+ --size=496G --numjobs=[0-9]+ --rw=read --bs=16k --iodepth=[0-9]+ --ioengine={expectedIoEngine} --direct=1 --ramp_time=30 --runtime=300 --time_based",
191+
$"--name=fio_read_496G_1024k_d[0-9]+_th[0-9]+ --size=496G --numjobs=[0-9]+ --rw=read --bs=1024k --iodepth=[0-9]+ --ioengine={expectedIoEngine} --direct=1 --ramp_time=30 --runtime=300 --time_based",
192192

193193
// Disk Integrity Verification tests (random writes + sequential writes)
194-
$"--name=fio_randwrite_4G_4k_d1_th1_verify --size=4G --numjobs=1 --rw=randwrite --bs=4k --iodepth=1 --direct=1 --overwrite=1 --verify=sha256 --do_verify=1 .+ --ioengine={expectedIoEngine}",
195-
$"--name=fio_randwrite_4G_16k_d1_th1_verify --size=4G --numjobs=1 --rw=randwrite --bs=16k --iodepth=1 --direct=1 --overwrite=1 --verify=sha256 --do_verify=1 .+ --ioengine={expectedIoEngine}",
196-
$"--name=fio_randwrite_4G_1024k_d1_th1_verify --size=4G --numjobs=1 --rw=randwrite --bs=1024k --iodepth=1 --direct=1 --overwrite=1 --verify=sha256 --do_verify=1 .+ --ioengine={expectedIoEngine}",
197-
$"--name=fio_write_4G_4k_d1_th1_verify --size=4G --numjobs=1 --rw=write --bs=4k --iodepth=1 --direct=1 --overwrite=1 --verify=sha256 --do_verify=1 .+ --ioengine={expectedIoEngine}",
198-
$"--name=fio_write_4G_16k_d1_th1_verify --size=4G --numjobs=1 --rw=write --bs=16k --iodepth=1 --direct=1 --overwrite=1 --verify=sha256 --do_verify=1 .+ --ioengine={expectedIoEngine}",
199-
$"--name=fio_write_4G_1024k_d1_th1_verify --size=4G --numjobs=1 --rw=write --bs=1024k --iodepth=1 --direct=1 --overwrite=1 --verify=sha256 --do_verify=1 .+ --ioengine={expectedIoEngine}"
194+
$"--name=fio_randwrite_4G_4k_d1_th1_verify --size=4G --numjobs=1 --rw=randwrite --bs=4k --iodepth=1 --ioengine={expectedIoEngine} --direct=1 --overwrite=1 --verify=sha256 --do_verify=1",
195+
$"--name=fio_randwrite_4G_16k_d1_th1_verify --size=4G --numjobs=1 --rw=randwrite --bs=16k --iodepth=1 --ioengine={expectedIoEngine} --direct=1 --overwrite=1 --verify=sha256 --do_verify=1",
196+
$"--name=fio_randwrite_4G_1024k_d1_th1_verify --size=4G --numjobs=1 --rw=randwrite --bs=1024k --iodepth=1 --ioengine={expectedIoEngine} --direct=1 --overwrite=1 --verify=sha256 --do_verify=1",
197+
$"--name=fio_write_4G_4k_d1_th1_verify --size=4G --numjobs=1 --rw=write --bs=4k --iodepth=1 --ioengine={expectedIoEngine} --direct=1 --overwrite=1 --verify=sha256 --do_verify=1",
198+
$"--name=fio_write_4G_16k_d1_th1_verify --size=4G --numjobs=1 --rw=write --bs=16k --iodepth=1 --ioengine={expectedIoEngine} --direct=1 --overwrite=1 --verify=sha256 --do_verify=1",
199+
$"--name=fio_write_4G_1024k_d1_th1_verify --size=4G --numjobs=1 --rw=write --bs=1024k --iodepth=1 --ioengine={expectedIoEngine} --direct=1 --overwrite=1 --verify=sha256 --do_verify=1"
200200
};
201201
}
202202
}

src/VirtualClient/VirtualClient.Actions.FunctionalTests/MLPerfProfileTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public async Task MLPerfWorkloadProfileExecutesTheExpectedDependenciesAndReboot(
5454
};
5555

5656
this.mockFixture.Setup(PlatformID.Unix);
57-
this.mockFixture.SetupDisks(withRemoteDisks: false);
57+
this.mockFixture.SetupDisks(withRemoteDisks: true);
5858
this.mockFixture.SetupPackage("mlperf");
5959

6060
this.mockFixture.ProcessManager.OnCreateProcess = (command, arguments, workingDir) =>

src/VirtualClient/VirtualClient.Actions.UnitTests/DiskSpd/DiskSpdExecutorTests.cs

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,66 @@ public void SetupTest()
5757
};
5858
}
5959

60+
[Test]
61+
public void DiskSpdExecutorSelectsTheExpectedDisksForTest_RemoteDiskScenario()
62+
{
63+
IEnumerable<Disk> expectedDisks = this.disks.Where(disk => !disk.IsOperatingSystem());
64+
65+
using (TestDiskSpdExecutor workloadExecutor = new TestDiskSpdExecutor(this.Dependencies, this.profileParameters))
66+
{
67+
IEnumerable<Disk> actualDisks = workloadExecutor.GetDisksToTest(this.disks);
68+
CollectionAssert.AreEquivalent(expectedDisks.Select(d => d.DevicePath), actualDisks.Select(d => d.DevicePath));
69+
}
70+
}
71+
72+
[Test]
73+
public void DiskSpdExecutorSelectsTheExpectedDisksForTest_OSDiskScenario()
74+
{
75+
IEnumerable<Disk> expectedDisks = this.disks.Where(disk => disk.IsOperatingSystem());
76+
this.profileParameters[nameof(DiskSpdExecutor.DiskFilter)] = "osdisk";
77+
78+
using (TestDiskSpdExecutor workloadExecutor = new TestDiskSpdExecutor(this.Dependencies, this.profileParameters))
79+
{
80+
IEnumerable<Disk> actualDisks = workloadExecutor.GetDisksToTest(this.disks);
81+
CollectionAssert.AreEquivalent(expectedDisks.Select(d => d.DevicePath), actualDisks.Select(d => d.DevicePath));
82+
}
83+
}
84+
85+
[Test]
86+
public void DiskSpdExecutorSelectsTheExpectedDisksForTest_AllDisksScenario()
87+
{
88+
IEnumerable<Disk> expectedDisks = this.disks;
89+
this.profileParameters[nameof(DiskSpdExecutor.DiskFilter)] = "none";
90+
using (TestDiskSpdExecutor workloadExecutor = new TestDiskSpdExecutor(this.Dependencies, this.profileParameters))
91+
{
92+
IEnumerable<Disk> actualDisks = workloadExecutor.GetDisksToTest(this.disks);
93+
CollectionAssert.AreEquivalent(expectedDisks.Select(d => d.DevicePath), actualDisks.Select(d => d.DevicePath));
94+
}
95+
}
96+
97+
[Test]
98+
public void DiskSpdExecutorIdentifiesTheExpectedDisksWhenTheyAreExplicitlyDefined()
99+
{
100+
// The default mock setups create 4 disks:
101+
// C:
102+
// D:
103+
// E:
104+
// F:
105+
106+
this.disks = this.CreateDisks(PlatformID.Win32NT, true);
107+
108+
this.profileParameters["DiskFilter"] = "DiskPath:D:,E:";
109+
using (TestDiskSpdExecutor workloadExecutor = new TestDiskSpdExecutor(this.Dependencies, this.profileParameters))
110+
{
111+
IEnumerable<Disk> disksToTest = workloadExecutor.GetDisksToTest(this.disks);
112+
113+
Assert.IsNotNull(disksToTest);
114+
Assert.AreEqual(2, disksToTest.Count());
115+
Assert.IsTrue(object.ReferenceEquals(this.disks.ElementAt(1), disksToTest.ElementAt(0)));
116+
Assert.IsTrue(object.ReferenceEquals(this.disks.ElementAt(2), disksToTest.ElementAt(1)));
117+
}
118+
}
119+
60120
[Test]
61121
public void DiskSpdExecutorAppliesConfigurationParametersCorrectly()
62122
{
@@ -351,6 +411,11 @@ public TestDiskSpdExecutor(IServiceCollection dependencies, IDictionary<string,
351411
return base.ExecuteWorkloadsAsync(workloads, cancellationToken);
352412
}
353413

414+
public new IEnumerable<Disk> GetDisksToTest(IEnumerable<Disk> disks)
415+
{
416+
return base.GetDisksToTest(disks);
417+
}
418+
354419
public new void Validate()
355420
{
356421
base.Validate();

0 commit comments

Comments
 (0)