4771 lines
234 KiB
C++
4771 lines
234 KiB
C++
/*
|
|
|
|
DISKSPD
|
|
|
|
Copyright(c) Microsoft Corporation
|
|
All rights reserved.
|
|
|
|
MIT License
|
|
|
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
of this software and associated documentation files (the "Software"), to deal
|
|
in the Software without restriction, including without limitation the rights
|
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
copies of the Software, and to permit persons to whom the Software is
|
|
furnished to do so, subject to the following conditions:
|
|
|
|
The above copyright notice and this permission notice shall be included in all
|
|
copies or substantial portions of the Software.
|
|
|
|
THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
|
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
SOFTWARE.
|
|
|
|
*/
|
|
|
|
#include "StdAfx.h"
|
|
#include "CmdLineParser.h"
|
|
#include "CmdLineParser.UnitTests.h"
|
|
#include <stdlib.h>
|
|
|
|
using namespace WEX::TestExecution;
|
|
using namespace WEX::Logging;
|
|
|
|
namespace UnitTests
|
|
{
|
|
bool ModuleSetup()
|
|
{
|
|
return true;
|
|
}
|
|
|
|
bool ModuleCleanup()
|
|
{
|
|
return true;
|
|
}
|
|
|
|
bool CmdLineParserUnitTests::ClassSetup()
|
|
{
|
|
return true;
|
|
}
|
|
|
|
bool CmdLineParserUnitTests::ClassCleanup()
|
|
{
|
|
return true;
|
|
}
|
|
|
|
bool CmdLineParserUnitTests::MethodSetup()
|
|
{
|
|
return true;
|
|
}
|
|
|
|
bool CmdLineParserUnitTests::MethodCleanup()
|
|
{
|
|
return true;
|
|
}
|
|
|
|
void CmdLineParserUnitTests::Test_GetSizeInBytes()
|
|
{
|
|
CmdLineParser p;
|
|
UINT64 ullResult = 0;
|
|
VERIFY_IS_TRUE(p._GetSizeInBytes("0", ullResult, nullptr));
|
|
VERIFY_IS_TRUE(ullResult == 0);
|
|
|
|
VERIFY_IS_TRUE(p._GetSizeInBytes("1", ullResult, nullptr));
|
|
VERIFY_IS_TRUE(ullResult == 1);
|
|
|
|
VERIFY_IS_TRUE(p._GetSizeInBytes("2", ullResult, nullptr));
|
|
VERIFY_IS_TRUE(ullResult == 2);
|
|
|
|
VERIFY_IS_TRUE(p._GetSizeInBytes("10", ullResult, nullptr));
|
|
VERIFY_IS_TRUE(ullResult == 10);
|
|
|
|
VERIFY_IS_TRUE(p._GetSizeInBytes("4096", ullResult, nullptr));
|
|
VERIFY_IS_TRUE(ullResult == 4096);
|
|
|
|
VERIFY_IS_TRUE(p._GetSizeInBytes("123908798324", ullResult, nullptr));
|
|
VERIFY_IS_TRUE(ullResult == 123908798324);
|
|
|
|
// _GetSizeInBytes shouldn't modify ullResult on if the input string is incorrect
|
|
ullResult = 9;
|
|
VERIFY_IS_TRUE(p._GetSizeInBytes("10a", ullResult, nullptr) == false);
|
|
VERIFY_IS_TRUE(ullResult == 9);
|
|
|
|
// block
|
|
VERIFY_IS_TRUE(p._GetSizeInBytes("1b", ullResult, nullptr));
|
|
VERIFY_IS_TRUE(ullResult == p._dwBlockSize);
|
|
|
|
VERIFY_IS_TRUE(p._GetSizeInBytes("3B", ullResult, nullptr));
|
|
VERIFY_IS_TRUE(ullResult == 3 * p._dwBlockSize);
|
|
|
|
VERIFY_IS_TRUE(p._GetSizeInBytes("30b", ullResult, nullptr));
|
|
VERIFY_IS_TRUE(ullResult == 30 * p._dwBlockSize);
|
|
|
|
VERIFY_IS_TRUE(p._GetSizeInBytes("30 b", ullResult, nullptr) == false);
|
|
VERIFY_IS_TRUE(p._GetSizeInBytes("30 B", ullResult, nullptr) == false);
|
|
|
|
// KB
|
|
VERIFY_IS_TRUE(p._GetSizeInBytes("1K", ullResult, nullptr));
|
|
VERIFY_IS_TRUE(ullResult == 1024);
|
|
|
|
VERIFY_IS_TRUE(p._GetSizeInBytes("3K", ullResult, nullptr));
|
|
VERIFY_IS_TRUE(ullResult == 3 * 1024);
|
|
|
|
VERIFY_IS_TRUE(p._GetSizeInBytes("30K", ullResult, nullptr));
|
|
VERIFY_IS_TRUE(ullResult == 30 * 1024);
|
|
|
|
VERIFY_IS_TRUE(p._GetSizeInBytes("30 K", ullResult, nullptr) == false);
|
|
VERIFY_IS_TRUE(p._GetSizeInBytes("30KB", ullResult, nullptr) == false);
|
|
|
|
// MB
|
|
VERIFY_IS_TRUE(p._GetSizeInBytes("1M", ullResult, nullptr));
|
|
VERIFY_IS_TRUE(ullResult == 1024 * 1024);
|
|
|
|
VERIFY_IS_TRUE(p._GetSizeInBytes("4M", ullResult, nullptr));
|
|
VERIFY_IS_TRUE(ullResult == 4 * 1024 * 1024);
|
|
|
|
VERIFY_IS_TRUE(p._GetSizeInBytes("50M", ullResult, nullptr));
|
|
VERIFY_IS_TRUE(ullResult == 50 * 1024 * 1024);
|
|
|
|
VERIFY_IS_TRUE(p._GetSizeInBytes("40 M", ullResult, nullptr) == false);
|
|
VERIFY_IS_TRUE(p._GetSizeInBytes("40MB", ullResult, nullptr) == false);
|
|
|
|
// GB
|
|
VERIFY_IS_TRUE(p._GetSizeInBytes("1G", ullResult, nullptr));
|
|
VERIFY_IS_TRUE(ullResult == 1024 * 1024 * 1024);
|
|
|
|
VERIFY_IS_TRUE(p._GetSizeInBytes("6G", ullResult, nullptr));
|
|
VERIFY_IS_TRUE(ullResult == (UINT64)6 * 1024 * 1024 * 1024);
|
|
|
|
VERIFY_IS_TRUE(p._GetSizeInBytes("70G", ullResult, nullptr));
|
|
VERIFY_IS_TRUE(ullResult == (UINT64)70 * 1024 * 1024 * 1024);
|
|
|
|
VERIFY_IS_TRUE(p._GetSizeInBytes("70 G", ullResult, nullptr) == false);
|
|
VERIFY_IS_TRUE(p._GetSizeInBytes("70GB", ullResult, nullptr) == false);
|
|
|
|
// TB
|
|
VERIFY_IS_TRUE(p._GetSizeInBytes("1T", ullResult, nullptr));
|
|
VERIFY_IS_TRUE(ullResult == (UINT64)1024 * 1024 * 1024 * 1024);
|
|
|
|
VERIFY_IS_TRUE(p._GetSizeInBytes("6T", ullResult, nullptr));
|
|
VERIFY_IS_TRUE(ullResult == (UINT64)6 * 1024 * 1024 * 1024 * 1024);
|
|
|
|
VERIFY_IS_TRUE(p._GetSizeInBytes("70T", ullResult, nullptr));
|
|
VERIFY_IS_TRUE(ullResult == (UINT64)70 * 1024 * 1024 * 1024 * 1024);
|
|
|
|
VERIFY_IS_TRUE(p._GetSizeInBytes("70 T", ullResult, nullptr) == false);
|
|
VERIFY_IS_TRUE(p._GetSizeInBytes("70TB", ullResult, nullptr) == false);
|
|
// check overflows
|
|
// MAXUINT64 == 18446744073709551615
|
|
ullResult = 0;
|
|
VERIFY_IS_TRUE(p._GetSizeInBytes("18446744073709551615", ullResult, nullptr));
|
|
VERIFY_IS_TRUE(ullResult == MAXUINT64);
|
|
|
|
// MAXUINT64 + 1
|
|
VERIFY_IS_TRUE(p._GetSizeInBytes("18446744073709551616", ullResult, nullptr) == false);
|
|
|
|
// MAXUINT64 / 1024 = 18014398509481983
|
|
ullResult = 0;
|
|
VERIFY_IS_TRUE(p._GetSizeInBytes("18014398509481983K", ullResult, nullptr));
|
|
VERIFY_IS_TRUE(ullResult == (MAXUINT64 >> 10) << 10);
|
|
VERIFY_IS_TRUE(p._GetSizeInBytes("18014398509481984K", ullResult, nullptr) == false);
|
|
|
|
// MAXUINT64 / 1024^2 = 17592186044415
|
|
ullResult = 0;
|
|
VERIFY_IS_TRUE(p._GetSizeInBytes("17592186044415M", ullResult, nullptr));
|
|
VERIFY_IS_TRUE(ullResult == (MAXUINT64 >> 20) << 20);
|
|
VERIFY_IS_TRUE(p._GetSizeInBytes("17592186044416M", ullResult, nullptr) == false);
|
|
|
|
// MAXUINT64 / 1024^3 = 17179869183
|
|
ullResult = 0;
|
|
VERIFY_IS_TRUE(p._GetSizeInBytes("17179869183G", ullResult, nullptr));
|
|
VERIFY_IS_TRUE(ullResult == (MAXUINT64 >> 30) << 30);
|
|
VERIFY_IS_TRUE(p._GetSizeInBytes("17179869184G", ullResult, nullptr) == false);
|
|
|
|
// block
|
|
p._dwBlockSize = 1024;
|
|
ullResult = 0;
|
|
VERIFY_IS_TRUE(p._GetSizeInBytes("18014398509481983b", ullResult, nullptr));
|
|
VERIFY_IS_TRUE(ullResult == (MAXUINT64 >> 10) << 10);
|
|
VERIFY_IS_TRUE(p._GetSizeInBytes("18014398509481984b", ullResult, nullptr) == false);
|
|
}
|
|
|
|
void CmdLineParserUnitTests::TestParseCmdLineAssignAffinity()
|
|
{
|
|
CmdLineParser p;
|
|
struct Synchronization s = {};
|
|
|
|
// base case
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-a", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
|
|
vector<TimeSpan> vSpans(profile.GetTimeSpans());
|
|
VERIFY_ARE_EQUAL(vSpans.size(), (size_t)1);
|
|
VERIFY_IS_TRUE(vSpans[0].GetDisableAffinity() == false);
|
|
|
|
const auto& vAffinity(vSpans[0].GetAffinityAssignments());
|
|
VERIFY_IS_TRUE(vAffinity.empty());
|
|
}
|
|
|
|
// base case
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-ag", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
|
|
vector<TimeSpan> vSpans(profile.GetTimeSpans());
|
|
VERIFY_ARE_EQUAL(vSpans.size(), (size_t)1);
|
|
VERIFY_IS_TRUE(vSpans[0].GetDisableAffinity() == false);
|
|
|
|
const auto& vAffinity(vSpans[0].GetAffinityAssignments());
|
|
VERIFY_IS_TRUE(vAffinity.empty());
|
|
}
|
|
|
|
// no group spec case
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-a1,4,6", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
|
|
vector<TimeSpan> vSpans(profile.GetTimeSpans());
|
|
VERIFY_ARE_EQUAL(vSpans.size(), (size_t)1);
|
|
VERIFY_IS_TRUE(vSpans[0].GetDisableAffinity() == false);
|
|
|
|
const auto& vAffinity(vSpans[0].GetAffinityAssignments());
|
|
VERIFY_ARE_EQUAL(vAffinity.size(), (size_t)3);
|
|
VERIFY_ARE_EQUAL(vAffinity[0].wGroup, 0);
|
|
VERIFY_ARE_EQUAL(vAffinity[0].bProc, (BYTE)1);
|
|
VERIFY_ARE_EQUAL(vAffinity[1].wGroup, 0);
|
|
VERIFY_ARE_EQUAL(vAffinity[1].bProc, (BYTE)4);
|
|
VERIFY_ARE_EQUAL(vAffinity[2].wGroup, 0);
|
|
VERIFY_ARE_EQUAL(vAffinity[2].bProc, (BYTE)6);
|
|
}
|
|
|
|
// single group spec
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-ag0,1,4,6", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
|
|
vector<TimeSpan> vSpans(profile.GetTimeSpans());
|
|
VERIFY_ARE_EQUAL(vSpans.size(), (size_t)1);
|
|
VERIFY_IS_TRUE(vSpans[0].GetDisableAffinity() == false);
|
|
|
|
const auto& vAffinity(vSpans[0].GetAffinityAssignments());
|
|
VERIFY_ARE_EQUAL(vAffinity.size(), (size_t)3);
|
|
VERIFY_ARE_EQUAL(vAffinity[0].wGroup, 0);
|
|
VERIFY_ARE_EQUAL(vAffinity[0].bProc, (BYTE)1);
|
|
VERIFY_ARE_EQUAL(vAffinity[1].wGroup, 0);
|
|
VERIFY_ARE_EQUAL(vAffinity[1].bProc, (BYTE)4);
|
|
VERIFY_ARE_EQUAL(vAffinity[2].wGroup, 0);
|
|
VERIFY_ARE_EQUAL(vAffinity[2].bProc, (BYTE)6);
|
|
}
|
|
|
|
// multiple group spec
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-ag0,1,4,6,g1,2,5,7", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
|
|
vector<TimeSpan> vSpans(profile.GetTimeSpans());
|
|
VERIFY_ARE_EQUAL(vSpans.size(), (size_t)1);
|
|
VERIFY_IS_TRUE(vSpans[0].GetDisableAffinity() == false);
|
|
|
|
const auto& vAffinity(vSpans[0].GetAffinityAssignments());
|
|
VERIFY_ARE_EQUAL(vAffinity.size(), (size_t)6);
|
|
VERIFY_ARE_EQUAL(vAffinity[0].wGroup, 0);
|
|
VERIFY_ARE_EQUAL(vAffinity[0].bProc, (BYTE)1);
|
|
VERIFY_ARE_EQUAL(vAffinity[1].wGroup, 0);
|
|
VERIFY_ARE_EQUAL(vAffinity[1].bProc, (BYTE)4);
|
|
VERIFY_ARE_EQUAL(vAffinity[2].wGroup, 0);
|
|
VERIFY_ARE_EQUAL(vAffinity[2].bProc, (BYTE)6);
|
|
VERIFY_ARE_EQUAL(vAffinity[3].wGroup, 1);
|
|
VERIFY_ARE_EQUAL(vAffinity[3].bProc, (BYTE)2);
|
|
VERIFY_ARE_EQUAL(vAffinity[4].wGroup, 1);
|
|
VERIFY_ARE_EQUAL(vAffinity[4].bProc, (BYTE)5);
|
|
VERIFY_ARE_EQUAL(vAffinity[5].wGroup, 1);
|
|
VERIFY_ARE_EQUAL(vAffinity[5].bProc, (BYTE)7);
|
|
}
|
|
|
|
// multiple group spec across two instances of -ag
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-ag0,1,4,6", "-ag1,2,5,7", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
|
|
vector<TimeSpan> vSpans(profile.GetTimeSpans());
|
|
VERIFY_ARE_EQUAL(vSpans.size(), (size_t)1);
|
|
VERIFY_IS_TRUE(vSpans[0].GetDisableAffinity() == false);
|
|
|
|
const auto& vAffinity(vSpans[0].GetAffinityAssignments());
|
|
VERIFY_ARE_EQUAL(vAffinity.size(), (size_t)6);
|
|
VERIFY_ARE_EQUAL(vAffinity[0].wGroup, 0);
|
|
VERIFY_ARE_EQUAL(vAffinity[0].bProc, (BYTE)1);
|
|
VERIFY_ARE_EQUAL(vAffinity[1].wGroup, 0);
|
|
VERIFY_ARE_EQUAL(vAffinity[1].bProc, (BYTE)4);
|
|
VERIFY_ARE_EQUAL(vAffinity[2].wGroup, 0);
|
|
VERIFY_ARE_EQUAL(vAffinity[2].bProc, (BYTE)6);
|
|
VERIFY_ARE_EQUAL(vAffinity[3].wGroup, 1);
|
|
VERIFY_ARE_EQUAL(vAffinity[3].bProc, (BYTE)2);
|
|
VERIFY_ARE_EQUAL(vAffinity[4].wGroup, 1);
|
|
VERIFY_ARE_EQUAL(vAffinity[4].bProc, (BYTE)5);
|
|
VERIFY_ARE_EQUAL(vAffinity[5].wGroup, 1);
|
|
VERIFY_ARE_EQUAL(vAffinity[5].bProc, (BYTE)7);
|
|
}
|
|
|
|
// now various syntax error cases
|
|
// just group spec
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-ag0", "testfile.dat" };
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s));
|
|
}
|
|
|
|
// multiple g
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-agg", "testfile.dat" };
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s));
|
|
}
|
|
|
|
// group with no number
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-ag,0,1,2", "testfile.dat" };
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s));
|
|
}
|
|
|
|
// trailing ,
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-a1,", "testfile.dat" };
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s));
|
|
}
|
|
|
|
// trailing , in group spec form
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-ag1,0,", "testfile.dat" };
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s));
|
|
}
|
|
|
|
// trailing g in group spec form
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-ag1,0,g", "testfile.dat" };
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s));
|
|
}
|
|
|
|
// trailing group spec form
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-ag1,0,g2", "testfile.dat" };
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s));
|
|
}
|
|
|
|
// junk chars
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-ax", "testfile.dat" };
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s));
|
|
}
|
|
|
|
// out-of-range processor index (BYTE)
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-ag0,300", "testfile.dat" };
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s));
|
|
}
|
|
|
|
// out-of-range group index (WORD)
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-ag70000,1", "testfile.dat" };
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s));
|
|
}
|
|
}
|
|
|
|
void CmdLineParserUnitTests::TestParseCmdLine()
|
|
{
|
|
CmdLineParser p;
|
|
Profile profile;
|
|
struct Synchronization s = {};
|
|
const char *argv[] = { "foo", "-b4K", "-w84", "-a1,4,6", "testfile.dat", "testfile2.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
VERIFY_IS_TRUE(profile.GetVerbose() == false);
|
|
VERIFY_IS_TRUE(profile.GetProgress() == 0);
|
|
VERIFY_IS_TRUE(profile.GetCmdLine().compare("foo -b4K -w84 -a1,4,6 testfile.dat testfile2.dat") == 0);
|
|
VERIFY_IS_TRUE(profile.GetEtwEnabled() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwProcess() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwThread() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwImageLoad() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwDiskIO() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryPageFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryHardFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwNetwork() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwRegistry() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePagedMemory() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePerfTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseSystemTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseCyclesCounter() == false);
|
|
|
|
vector<TimeSpan> vSpans(profile.GetTimeSpans());
|
|
VERIFY_ARE_EQUAL(vSpans.size(), (size_t)1);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetDuration(), (UINT32)10);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetWarmup(), (UINT32)5);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetCooldown(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRandSeed(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetThreadCount(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRequestCount(), (DWORD)0);
|
|
VERIFY_IS_TRUE(vSpans[0].GetDisableAffinity() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetCompletionRoutines() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetMeasureLatency() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetRandomWriteData() == false);
|
|
|
|
const auto& vAffinity(vSpans[0].GetAffinityAssignments());
|
|
VERIFY_ARE_EQUAL(vAffinity.size(), (size_t)3);
|
|
VERIFY_ARE_EQUAL(vAffinity[0].wGroup, 0);
|
|
VERIFY_ARE_EQUAL(vAffinity[0].bProc, (BYTE)1);
|
|
VERIFY_ARE_EQUAL(vAffinity[1].wGroup, 0);
|
|
VERIFY_ARE_EQUAL(vAffinity[1].bProc, (BYTE)4);
|
|
VERIFY_ARE_EQUAL(vAffinity[2].wGroup, 0);
|
|
VERIFY_ARE_EQUAL(vAffinity[2].bProc, (BYTE)6);
|
|
|
|
vector<Target> vTargets(vSpans[0].GetTargets());
|
|
VERIFY_ARE_EQUAL(vTargets.size(), (size_t)2);
|
|
Target t(vTargets[0]);
|
|
|
|
VERIFY_IS_TRUE(t.GetPath().compare("testfile.dat") == 0);
|
|
VERIFY_ARE_EQUAL(t.GetBlockSizeInBytes(), (DWORD)(4 * 1024));
|
|
VERIFY_ARE_EQUAL(t.GetRequestCount(), (DWORD)2);
|
|
VERIFY_IS_TRUE(t.GetRandomRatio() == 0);
|
|
VERIFY_IS_TRUE(t.GetUseInterlockedSequential() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBlockAlignmentInBytes(), t.GetBlockSizeInBytes());
|
|
VERIFY_ARE_EQUAL(t.GetBaseFileOffsetInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetUseParallelAsyncIO() == false);
|
|
VERIFY_IS_TRUE(t.GetCacheMode() == TargetCacheMode::Cached);
|
|
VERIFY_IS_TRUE(t.GetWriteThroughMode() == WriteThroughMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoMode() == MemoryMappedIoMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoFlushMode() == MemoryMappedIoFlushMode::Undefined);
|
|
VERIFY_ARE_EQUAL(t.GetThreadsPerFile(), (DWORD)1);
|
|
VERIFY_ARE_EQUAL(t.GetThreadStrideInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetCreateFile() == false);
|
|
VERIFY_ARE_EQUAL(t.GetFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetMaxFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetWriteRatio(), (DWORD)84);
|
|
VERIFY_IS_TRUE(t.GetUseBurstSize() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBurstSize(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(t.GetThinkTime(), (DWORD)0);
|
|
VERIFY_IS_TRUE(t.GetEnableThinkTime() == false);
|
|
VERIFY_IS_TRUE(t.GetSequentialScanHint() == false);
|
|
VERIFY_IS_TRUE(t.GetRandomAccessHint() == false);
|
|
VERIFY_IS_TRUE(t.GetTemporaryFileHint() == false);
|
|
VERIFY_IS_TRUE(t.GetUseLargePages() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThroughputInBytesPerMillisecond(), (DWORD)0);
|
|
|
|
t = vTargets[1];
|
|
VERIFY_IS_TRUE(t.GetPath().compare("testfile2.dat") == 0);
|
|
VERIFY_ARE_EQUAL(t.GetBlockSizeInBytes(), (DWORD)(4 * 1024));
|
|
VERIFY_ARE_EQUAL(t.GetRequestCount(), (DWORD)2);
|
|
VERIFY_IS_TRUE(t.GetRandomRatio() == 0);
|
|
VERIFY_IS_TRUE(t.GetUseInterlockedSequential() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBlockAlignmentInBytes(), t.GetBlockSizeInBytes());
|
|
VERIFY_ARE_EQUAL(t.GetBaseFileOffsetInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetUseParallelAsyncIO() == false);
|
|
VERIFY_IS_TRUE(t.GetCacheMode() == TargetCacheMode::Cached);
|
|
VERIFY_IS_TRUE(t.GetWriteThroughMode() == WriteThroughMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoMode() == MemoryMappedIoMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoFlushMode() == MemoryMappedIoFlushMode::Undefined);
|
|
VERIFY_IS_TRUE(t.GetZeroWriteBuffers() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThreadsPerFile(), (DWORD)1);
|
|
VERIFY_ARE_EQUAL(t.GetThreadStrideInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetCreateFile() == false);
|
|
VERIFY_ARE_EQUAL(t.GetFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetMaxFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetWriteRatio(), (DWORD)84);
|
|
VERIFY_IS_TRUE(t.GetUseBurstSize() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBurstSize(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(t.GetThinkTime(), (DWORD)0);
|
|
VERIFY_IS_TRUE(t.GetEnableThinkTime() == false);
|
|
VERIFY_IS_TRUE(t.GetSequentialScanHint() == false);
|
|
VERIFY_IS_TRUE(t.GetRandomAccessHint() == false);
|
|
VERIFY_IS_TRUE(t.GetTemporaryFileHint() == false);
|
|
VERIFY_IS_TRUE(t.GetUseLargePages() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThroughputInBytesPerMillisecond(), (DWORD)0);
|
|
}
|
|
|
|
void CmdLineParserUnitTests::TestParseCmdLineBlockSize()
|
|
{
|
|
CmdLineParser p;
|
|
Profile profile;
|
|
struct Synchronization s = {};
|
|
const char *argv[] = { "foo", "-b128K", "-w84", "-a1,4,6", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
VERIFY_IS_TRUE(profile.GetVerbose() == false);
|
|
VERIFY_IS_TRUE(profile.GetProgress() == 0);
|
|
VERIFY_IS_TRUE(profile.GetCmdLine().compare("foo -b128K -w84 -a1,4,6 testfile.dat") == 0);
|
|
VERIFY_IS_TRUE(profile.GetEtwEnabled() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwProcess() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwThread() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwImageLoad() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwDiskIO() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryPageFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryHardFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwNetwork() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwRegistry() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePagedMemory() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePerfTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseSystemTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseCyclesCounter() == false);
|
|
|
|
vector<TimeSpan> vSpans(profile.GetTimeSpans());
|
|
VERIFY_ARE_EQUAL(vSpans.size(), (size_t)1);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetDuration(), (UINT32)10);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetWarmup(), (UINT32)5);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetCooldown(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRandSeed(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetThreadCount(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRequestCount(), (DWORD)0);
|
|
VERIFY_IS_TRUE(vSpans[0].GetDisableAffinity() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetCompletionRoutines() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetMeasureLatency() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetRandomWriteData() == false);
|
|
|
|
const auto& vAffinity(vSpans[0].GetAffinityAssignments());
|
|
VERIFY_ARE_EQUAL(vAffinity.size(), (size_t)3);
|
|
VERIFY_ARE_EQUAL(vAffinity[0].wGroup, 0);
|
|
VERIFY_ARE_EQUAL(vAffinity[0].bProc, (BYTE)1);
|
|
VERIFY_ARE_EQUAL(vAffinity[1].wGroup, 0);
|
|
VERIFY_ARE_EQUAL(vAffinity[1].bProc, (BYTE)4);
|
|
VERIFY_ARE_EQUAL(vAffinity[2].wGroup, 0);
|
|
VERIFY_ARE_EQUAL(vAffinity[2].bProc, (BYTE)6);
|
|
|
|
vector<Target> vTargets(vSpans[0].GetTargets());
|
|
VERIFY_ARE_EQUAL(vTargets.size(), (size_t)1);
|
|
Target t(vTargets[0]);
|
|
|
|
VERIFY_IS_TRUE(t.GetPath().compare("testfile.dat") == 0);
|
|
VERIFY_ARE_EQUAL(t.GetBlockSizeInBytes(), (DWORD)(128 * 1024));
|
|
VERIFY_ARE_EQUAL(t.GetRequestCount(), (DWORD)2);
|
|
VERIFY_IS_TRUE(t.GetRandomRatio() == 0);
|
|
VERIFY_IS_TRUE(t.GetUseInterlockedSequential() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBlockAlignmentInBytes(), t.GetBlockSizeInBytes());
|
|
VERIFY_ARE_EQUAL(t.GetBaseFileOffsetInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetUseParallelAsyncIO() == false);
|
|
VERIFY_IS_TRUE(t.GetCacheMode() == TargetCacheMode::Cached);
|
|
VERIFY_IS_TRUE(t.GetWriteThroughMode() == WriteThroughMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoMode() == MemoryMappedIoMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoFlushMode() == MemoryMappedIoFlushMode::Undefined);
|
|
VERIFY_IS_TRUE(t.GetZeroWriteBuffers() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThreadsPerFile(), (DWORD)1);
|
|
VERIFY_ARE_EQUAL(t.GetThreadStrideInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetCreateFile() == false);
|
|
VERIFY_ARE_EQUAL(t.GetFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetMaxFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetWriteRatio(), (DWORD)84);
|
|
VERIFY_IS_TRUE(t.GetUseBurstSize() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBurstSize(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(t.GetThinkTime(), (DWORD)0);
|
|
VERIFY_IS_TRUE(t.GetEnableThinkTime() == false);
|
|
VERIFY_IS_TRUE(t.GetSequentialScanHint() == false);
|
|
VERIFY_IS_TRUE(t.GetRandomAccessHint() == false);
|
|
VERIFY_IS_TRUE(t.GetTemporaryFileHint() == false);
|
|
VERIFY_IS_TRUE(t.GetUseLargePages() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThroughputInBytesPerMillisecond(), (DWORD)0);
|
|
}
|
|
|
|
void CmdLineParserUnitTests::TestParseCmdLineGroupAffinity()
|
|
{
|
|
CmdLineParser p;
|
|
Profile profile;
|
|
struct Synchronization s = {};
|
|
const char *argv[] = { "foo", "-b128K", "-w84", "-ag", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
VERIFY_IS_TRUE(profile.GetVerbose() == false);
|
|
VERIFY_IS_TRUE(profile.GetProgress() == 0);
|
|
VERIFY_IS_TRUE(profile.GetCmdLine().compare("foo -b128K -w84 -ag testfile.dat") == 0);
|
|
VERIFY_IS_TRUE(profile.GetEtwEnabled() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwProcess() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwThread() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwImageLoad() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwDiskIO() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryPageFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryHardFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwNetwork() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwRegistry() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePagedMemory() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePerfTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseSystemTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseCyclesCounter() == false);
|
|
|
|
vector<TimeSpan> vSpans(profile.GetTimeSpans());
|
|
VERIFY_ARE_EQUAL(vSpans.size(), (size_t)1);
|
|
//TimeSpan span = vSpans[0];
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetDuration(), (UINT32)10);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetWarmup(), (UINT32)5);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetCooldown(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRandSeed(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetThreadCount(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRequestCount(), (DWORD)0);
|
|
VERIFY_IS_TRUE(vSpans[0].GetDisableAffinity() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetCompletionRoutines() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetMeasureLatency() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetRandomWriteData() == false);
|
|
|
|
const auto& vAffinity(vSpans[0].GetAffinityAssignments());
|
|
VERIFY_ARE_EQUAL(vAffinity.size(), (size_t)0);
|
|
|
|
vector<Target> vTargets(vSpans[0].GetTargets());
|
|
VERIFY_ARE_EQUAL(vTargets.size(), (size_t)1);
|
|
Target t(vTargets[0]);
|
|
|
|
VERIFY_IS_TRUE(t.GetPath().compare("testfile.dat") == 0);
|
|
VERIFY_ARE_EQUAL(t.GetBlockSizeInBytes(), (DWORD)(128 * 1024));
|
|
VERIFY_ARE_EQUAL(t.GetRequestCount(), (DWORD)2);
|
|
VERIFY_IS_TRUE(t.GetRandomRatio() == 0);
|
|
VERIFY_IS_TRUE(t.GetUseInterlockedSequential() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBlockAlignmentInBytes(), t.GetBlockSizeInBytes());
|
|
VERIFY_ARE_EQUAL(t.GetBaseFileOffsetInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetUseParallelAsyncIO() == false);
|
|
VERIFY_IS_TRUE(t.GetCacheMode() == TargetCacheMode::Cached);
|
|
VERIFY_IS_TRUE(t.GetWriteThroughMode() == WriteThroughMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoMode() == MemoryMappedIoMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoFlushMode() == MemoryMappedIoFlushMode::Undefined);
|
|
VERIFY_IS_TRUE(t.GetZeroWriteBuffers() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThreadsPerFile(), (DWORD)1);
|
|
VERIFY_ARE_EQUAL(t.GetThreadStrideInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetCreateFile() == false);
|
|
VERIFY_ARE_EQUAL(t.GetFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetMaxFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetWriteRatio(), (DWORD)84);
|
|
VERIFY_IS_TRUE(t.GetUseBurstSize() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBurstSize(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(t.GetThinkTime(), (DWORD)0);
|
|
VERIFY_IS_TRUE(t.GetEnableThinkTime() == false);
|
|
VERIFY_IS_TRUE(t.GetSequentialScanHint() == false);
|
|
VERIFY_IS_TRUE(t.GetRandomAccessHint() == false);
|
|
VERIFY_IS_TRUE(t.GetTemporaryFileHint() == false);
|
|
VERIFY_IS_TRUE(t.GetUseLargePages() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThroughputInBytesPerMillisecond(), (DWORD)0);
|
|
}
|
|
|
|
void CmdLineParserUnitTests::TestParseCmdLineBaseMaxTarget()
|
|
{
|
|
CmdLineParser p;
|
|
struct Synchronization s = {};
|
|
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
VERIFY_IS_TRUE(profile.GetCmdLine().compare("foo testfile.dat") == 0);
|
|
|
|
vector<TimeSpan> vSpans(profile.GetTimeSpans());
|
|
VERIFY_ARE_EQUAL(vSpans.size(), (size_t)1);
|
|
|
|
vector<Target> vTargets(vSpans[0].GetTargets());
|
|
VERIFY_ARE_EQUAL(vTargets.size(), (size_t)1);
|
|
|
|
// defaults = 0
|
|
const auto& t(vTargets[0]);
|
|
VERIFY_ARE_EQUAL(t.GetBaseFileOffsetInBytes(), (UINT64) 0);
|
|
VERIFY_ARE_EQUAL(t.GetMaxFileSize(), (UINT64) 0);
|
|
}
|
|
|
|
{
|
|
// base 5MiB
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-B5m", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
VERIFY_IS_TRUE(profile.GetCmdLine().compare("foo -B5m testfile.dat") == 0);
|
|
|
|
vector<TimeSpan> vSpans(profile.GetTimeSpans());
|
|
VERIFY_ARE_EQUAL(vSpans.size(), (size_t)1);
|
|
|
|
vector<Target> vTargets(vSpans[0].GetTargets());
|
|
VERIFY_ARE_EQUAL(vTargets.size(), (size_t)1);
|
|
|
|
const auto& t(vTargets[0]);
|
|
VERIFY_ARE_EQUAL(t.GetBaseFileOffsetInBytes(), (UINT64)(5 * 1024 * 1024));
|
|
VERIFY_ARE_EQUAL(t.GetMaxFileSize(), (UINT64) 0);
|
|
}
|
|
|
|
{
|
|
// base 5MiB, length 1MiB -> 6MiB
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-B5m:1m", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
VERIFY_IS_TRUE(profile.GetCmdLine().compare("foo -B5m:1m testfile.dat") == 0);
|
|
|
|
vector<TimeSpan> vSpans(profile.GetTimeSpans());
|
|
VERIFY_ARE_EQUAL(vSpans.size(), (size_t)1);
|
|
|
|
vector<Target> vTargets(vSpans[0].GetTargets());
|
|
VERIFY_ARE_EQUAL(vTargets.size(), (size_t)1);
|
|
|
|
const auto& t(vTargets[0]);
|
|
VERIFY_ARE_EQUAL(t.GetBaseFileOffsetInBytes(), (UINT64)(5 * 1024 * 1024));
|
|
VERIFY_ARE_EQUAL(t.GetMaxFileSize(), (UINT64)(6 * 1024 * 1024));
|
|
}
|
|
|
|
{
|
|
// base 5MiB, max 6MiB
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-B5m", "-f6m", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
VERIFY_IS_TRUE(profile.GetCmdLine().compare("foo -B5m -f6m testfile.dat") == 0);
|
|
|
|
vector<TimeSpan> vSpans(profile.GetTimeSpans());
|
|
VERIFY_ARE_EQUAL(vSpans.size(), (size_t)1);
|
|
|
|
vector<Target> vTargets(vSpans[0].GetTargets());
|
|
VERIFY_ARE_EQUAL(vTargets.size(), (size_t)1);
|
|
|
|
const auto& t(vTargets[0]);
|
|
VERIFY_ARE_EQUAL(t.GetBaseFileOffsetInBytes(), (UINT64)(5 * 1024 * 1024));
|
|
VERIFY_ARE_EQUAL(t.GetMaxFileSize(), (UINT64)(6 * 1024 * 1024));
|
|
}
|
|
|
|
{
|
|
// cannot specify -f/-Bb:l together
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-B5m:1m", "-f6m", "testfile.dat" };
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
}
|
|
|
|
{
|
|
// cannot specify -B twice (2x b:l)
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-B5m:1m", "-B5m:1m", "testfile.dat" };
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
}
|
|
|
|
{
|
|
// cannot specify -B twice (b:l and b)
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-B5m:1m", "-B5m", "testfile.dat" };
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
}
|
|
|
|
{
|
|
// cannot specify -B twice (b and b)
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-B5m", "-B5m", "testfile.dat" };
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
}
|
|
|
|
{
|
|
// cannot specify -f twice (f and f)
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-f5m", "-f6m", "testfile.dat" };
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
}
|
|
|
|
{
|
|
// cannot specify max twice (b:l and f)
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-B5m:1m", "-f6m", "testfile.dat" };
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
}
|
|
|
|
{
|
|
// junk after -Bbase
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-B5mx", "testfile.dat" };
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
}
|
|
|
|
{
|
|
// sep but no length
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-B5m:", "testfile.dat" };
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
}
|
|
|
|
{
|
|
// sep but junk length
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-B5m:j", "testfile.dat" };
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
}
|
|
|
|
{
|
|
// sep but bad length spec
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-B5m:1x", "testfile.dat" };
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
}
|
|
|
|
{
|
|
// sep but extra after length spec
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-B5m:1mx", "testfile.dat" };
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
}
|
|
}
|
|
|
|
void CmdLineParserUnitTests::TestParseCmdLineHintFlag()
|
|
{
|
|
CmdLineParser p;
|
|
struct Synchronization s = {};
|
|
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-b128K", "-w84", "-fs", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
VERIFY_IS_TRUE(profile.GetCmdLine().compare("foo -b128K -w84 -fs testfile.dat") == 0);
|
|
VerifyParseCmdLineAccessHints(profile, false, true, false);
|
|
}
|
|
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-b128K", "-w84", "-fr", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
VERIFY_IS_TRUE(profile.GetCmdLine().compare("foo -b128K -w84 -fr testfile.dat") == 0);
|
|
VerifyParseCmdLineAccessHints(profile, true, false, false);
|
|
}
|
|
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-b128K", "-w84", "-ft", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
VERIFY_IS_TRUE(profile.GetCmdLine().compare("foo -b128K -w84 -ft testfile.dat") == 0);
|
|
VerifyParseCmdLineAccessHints(profile, false, false, true);
|
|
}
|
|
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-b128K", "-w84", "-frst", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
VERIFY_IS_TRUE(profile.GetCmdLine().compare("foo -b128K -w84 -frst testfile.dat") == 0);
|
|
VerifyParseCmdLineAccessHints(profile, true, true, true);
|
|
}
|
|
}
|
|
|
|
void CmdLineParserUnitTests::VerifyParseCmdLineAccessHints(Profile &profile, bool RandomAccess, bool SequentialScan, bool TemporaryFile)
|
|
{
|
|
VERIFY_IS_TRUE(profile.GetVerbose() == false);
|
|
VERIFY_IS_TRUE(profile.GetProgress() == 0);
|
|
VERIFY_IS_TRUE(profile.GetEtwEnabled() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwProcess() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwThread() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwImageLoad() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwDiskIO() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryPageFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryHardFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwNetwork() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwRegistry() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePagedMemory() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePerfTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseSystemTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseCyclesCounter() == false);
|
|
|
|
vector<TimeSpan> vSpans(profile.GetTimeSpans());
|
|
VERIFY_ARE_EQUAL(vSpans.size(), (size_t)1);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetDuration(), (UINT32)10);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetWarmup(), (UINT32)5);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetCooldown(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRandSeed(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetThreadCount(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRequestCount(), (DWORD)0);
|
|
VERIFY_IS_TRUE(vSpans[0].GetDisableAffinity() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetCompletionRoutines() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetMeasureLatency() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetRandomWriteData() == false);
|
|
|
|
const auto& vAffinity(vSpans[0].GetAffinityAssignments());
|
|
VERIFY_ARE_EQUAL(vAffinity.size(), (size_t)0);
|
|
|
|
vector<Target> vTargets(vSpans[0].GetTargets());
|
|
VERIFY_ARE_EQUAL(vTargets.size(), (size_t)1);
|
|
Target t(vTargets[0]);
|
|
|
|
VERIFY_IS_TRUE(t.GetPath().compare("testfile.dat") == 0);
|
|
VERIFY_ARE_EQUAL(t.GetBlockSizeInBytes(), (DWORD)(128 * 1024));
|
|
VERIFY_ARE_EQUAL(t.GetRequestCount(), (DWORD)2);
|
|
VERIFY_IS_TRUE(t.GetRandomRatio() == 0);
|
|
VERIFY_IS_TRUE(t.GetUseInterlockedSequential() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBlockAlignmentInBytes(), t.GetBlockSizeInBytes());
|
|
VERIFY_ARE_EQUAL(t.GetBaseFileOffsetInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetUseParallelAsyncIO() == false);
|
|
VERIFY_IS_TRUE(t.GetCacheMode() == TargetCacheMode::Cached);
|
|
VERIFY_IS_TRUE(t.GetWriteThroughMode() == WriteThroughMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoMode() == MemoryMappedIoMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoFlushMode() == MemoryMappedIoFlushMode::Undefined);
|
|
VERIFY_IS_TRUE(t.GetZeroWriteBuffers() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThreadsPerFile(), (DWORD)1);
|
|
VERIFY_ARE_EQUAL(t.GetThreadStrideInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetCreateFile() == false);
|
|
VERIFY_ARE_EQUAL(t.GetFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetMaxFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetWriteRatio(), (DWORD)84);
|
|
VERIFY_IS_TRUE(t.GetUseBurstSize() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBurstSize(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(t.GetThinkTime(), (DWORD)0);
|
|
VERIFY_IS_TRUE(t.GetEnableThinkTime() == false);
|
|
VERIFY_IS_TRUE(t.GetSequentialScanHint() == SequentialScan);
|
|
VERIFY_IS_TRUE(t.GetRandomAccessHint() == RandomAccess);
|
|
VERIFY_IS_TRUE(t.GetTemporaryFileHint() == TemporaryFile);
|
|
VERIFY_IS_TRUE(t.GetUseLargePages() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThroughputInBytesPerMillisecond(), (DWORD)0);
|
|
}
|
|
|
|
void CmdLineParserUnitTests::TestParseCmdLineDisableAllCacheMode1()
|
|
{
|
|
CmdLineParser p;
|
|
Profile profile;
|
|
struct Synchronization s = {};
|
|
const char *argv[] = { "foo", "-b128K", "-w84", "-h", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
VERIFY_IS_TRUE(profile.GetCmdLine().compare("foo -b128K -w84 -h testfile.dat") == 0);
|
|
|
|
VerifyParseCmdLineDisableAllCache(profile);
|
|
}
|
|
|
|
void CmdLineParserUnitTests::TestParseCmdLineDisableAllCacheMode2()
|
|
{
|
|
CmdLineParser p;
|
|
Profile profile;
|
|
struct Synchronization s = {};
|
|
const char *argv[] = { "foo", "-b128K", "-w84", "-Sh", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
VERIFY_IS_TRUE(profile.GetCmdLine().compare("foo -b128K -w84 -Sh testfile.dat") == 0);
|
|
|
|
VerifyParseCmdLineDisableAllCache(profile);
|
|
}
|
|
|
|
void CmdLineParserUnitTests::VerifyParseCmdLineDisableAllCache(Profile &profile)
|
|
{
|
|
VERIFY_IS_TRUE(profile.GetVerbose() == false);
|
|
VERIFY_IS_TRUE(profile.GetProgress() == 0);
|
|
|
|
VERIFY_IS_TRUE(profile.GetEtwEnabled() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwProcess() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwThread() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwImageLoad() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwDiskIO() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryPageFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryHardFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwNetwork() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwRegistry() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePagedMemory() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePerfTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseSystemTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseCyclesCounter() == false);
|
|
|
|
vector<TimeSpan> vSpans(profile.GetTimeSpans());
|
|
VERIFY_ARE_EQUAL(vSpans.size(), (size_t)1);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetDuration(), (UINT32)10);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetWarmup(), (UINT32)5);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetCooldown(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRandSeed(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetThreadCount(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRequestCount(), (DWORD)0);
|
|
VERIFY_IS_TRUE(vSpans[0].GetDisableAffinity() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetCompletionRoutines() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetMeasureLatency() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetRandomWriteData() == false);
|
|
|
|
const auto& vAffinity(vSpans[0].GetAffinityAssignments());
|
|
VERIFY_ARE_EQUAL(vAffinity.size(), (size_t)0);
|
|
|
|
vector<Target> vTargets(vSpans[0].GetTargets());
|
|
VERIFY_ARE_EQUAL(vTargets.size(), (size_t)1);
|
|
Target t(vTargets[0]);
|
|
|
|
VERIFY_IS_TRUE(t.GetPath().compare("testfile.dat") == 0);
|
|
VERIFY_ARE_EQUAL(t.GetBlockSizeInBytes(), (DWORD)(128 * 1024));
|
|
VERIFY_ARE_EQUAL(t.GetRequestCount(), (DWORD)2);
|
|
VERIFY_IS_TRUE(t.GetRandomRatio() == 0);
|
|
VERIFY_IS_TRUE(t.GetUseInterlockedSequential() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBlockAlignmentInBytes(), t.GetBlockSizeInBytes());
|
|
VERIFY_ARE_EQUAL(t.GetBaseFileOffsetInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetUseParallelAsyncIO() == false);
|
|
VERIFY_IS_TRUE(t.GetCacheMode() == TargetCacheMode::DisableOSCache);
|
|
VERIFY_IS_TRUE(t.GetWriteThroughMode() == WriteThroughMode::On);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoMode() == MemoryMappedIoMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoFlushMode() == MemoryMappedIoFlushMode::Undefined);
|
|
VERIFY_IS_TRUE(t.GetZeroWriteBuffers() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThreadsPerFile(), (DWORD)1);
|
|
VERIFY_ARE_EQUAL(t.GetThreadStrideInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetCreateFile() == false);
|
|
VERIFY_ARE_EQUAL(t.GetFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetMaxFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetWriteRatio(), (DWORD)84);
|
|
VERIFY_IS_TRUE(t.GetUseBurstSize() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBurstSize(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(t.GetThinkTime(), (DWORD)0);
|
|
VERIFY_IS_TRUE(t.GetEnableThinkTime() == false);
|
|
VERIFY_IS_TRUE(t.GetSequentialScanHint() == false);
|
|
VERIFY_IS_TRUE(t.GetRandomAccessHint() == false);
|
|
VERIFY_IS_TRUE(t.GetTemporaryFileHint() == false);
|
|
VERIFY_IS_TRUE(t.GetUseLargePages() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThroughputInBytesPerMillisecond(), (DWORD)0);
|
|
}
|
|
|
|
void CmdLineParserUnitTests::TestParseCmdLineConflictingCacheModes()
|
|
{
|
|
CmdLineParser p;
|
|
struct Synchronization s = {};
|
|
|
|
// conflict bu in either order
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-Sub", "testfile.dat" };
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s));
|
|
}
|
|
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-Sbu", "testfile.dat" };
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s));
|
|
}
|
|
|
|
// conflict ru
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-Sru", "testfile.dat" };
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s));
|
|
}
|
|
|
|
// conflict mu
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-Smu", "testfile.dat" };
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s));
|
|
}
|
|
|
|
// conflict with -h/-Sb, either order
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-Sb", "-h", "testfile.dat" };
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s));
|
|
}
|
|
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-h", "-Sb", "testfile.dat" };
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s));
|
|
}
|
|
|
|
// conflict with -h/-Sm
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-Sm", "-h", "testfile.dat" };
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s));
|
|
}
|
|
|
|
// multiple with -h/-Suw, either order
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-Suw", "-h", "testfile.dat" };
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s));
|
|
}
|
|
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-h", "-Suw", "testfile.dat" };
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s));
|
|
}
|
|
|
|
// multiple with -S/-Su
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-S", "-Su", "testfile.dat" };
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s));
|
|
}
|
|
|
|
// multiple with -Sb/-Sb (same)
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-Sb", "-Sb", "testfile.dat" };
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s));
|
|
}
|
|
|
|
// multiple with -Sm/-Sm
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-Sm", "-Sm", "testfile.dat" };
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s));
|
|
}
|
|
|
|
// invalid option
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-Sx", "testfile.dat" };
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s));
|
|
}
|
|
}
|
|
|
|
void CmdLineParserUnitTests::TestParseCmdLineDisableAffinity()
|
|
{
|
|
CmdLineParser p;
|
|
Profile profile;
|
|
struct Synchronization s = {};
|
|
const char *argv[] = { "foo", "-b128K", "-w84", "-n", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
VERIFY_IS_TRUE(profile.GetVerbose() == false);
|
|
VERIFY_IS_TRUE(profile.GetProgress() == 0);
|
|
VERIFY_IS_TRUE(profile.GetCmdLine().compare("foo -b128K -w84 -n testfile.dat") == 0);
|
|
VERIFY_IS_TRUE(profile.GetEtwEnabled() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwProcess() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwThread() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwImageLoad() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwDiskIO() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryPageFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryHardFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwNetwork() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwRegistry() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePagedMemory() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePerfTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseSystemTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseCyclesCounter() == false);
|
|
|
|
vector<TimeSpan> vSpans(profile.GetTimeSpans());
|
|
VERIFY_ARE_EQUAL(vSpans.size(), (size_t)1);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetDuration(), (UINT32)10);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetWarmup(), (UINT32)5);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetCooldown(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRandSeed(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetThreadCount(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRequestCount(), (DWORD)0);
|
|
VERIFY_IS_TRUE(vSpans[0].GetDisableAffinity() == true);
|
|
VERIFY_IS_TRUE(vSpans[0].GetCompletionRoutines() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetMeasureLatency() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetRandomWriteData() == false);
|
|
|
|
const auto& vAffinity(vSpans[0].GetAffinityAssignments());
|
|
VERIFY_ARE_EQUAL(vAffinity.size(), (size_t)0);
|
|
|
|
vector<Target> vTargets(vSpans[0].GetTargets());
|
|
VERIFY_ARE_EQUAL(vTargets.size(), (size_t)1);
|
|
Target t(vTargets[0]);
|
|
|
|
VERIFY_IS_TRUE(t.GetPath().compare("testfile.dat") == 0);
|
|
VERIFY_ARE_EQUAL(t.GetBlockSizeInBytes(), (DWORD)(128 * 1024));
|
|
VERIFY_ARE_EQUAL(t.GetRequestCount(), (DWORD)2);
|
|
VERIFY_IS_TRUE(t.GetRandomRatio() == 0);
|
|
VERIFY_IS_TRUE(t.GetUseInterlockedSequential() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBlockAlignmentInBytes(), t.GetBlockSizeInBytes());
|
|
VERIFY_ARE_EQUAL(t.GetBaseFileOffsetInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetUseParallelAsyncIO() == false);
|
|
VERIFY_IS_TRUE(t.GetCacheMode() == TargetCacheMode::Cached);
|
|
VERIFY_IS_TRUE(t.GetWriteThroughMode() == WriteThroughMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoMode() == MemoryMappedIoMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoFlushMode() == MemoryMappedIoFlushMode::Undefined);
|
|
VERIFY_IS_TRUE(t.GetZeroWriteBuffers() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThreadsPerFile(), (DWORD)1);
|
|
VERIFY_ARE_EQUAL(t.GetThreadStrideInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetCreateFile() == false);
|
|
VERIFY_ARE_EQUAL(t.GetFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetMaxFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetWriteRatio(), (DWORD)84);
|
|
VERIFY_IS_TRUE(t.GetUseBurstSize() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBurstSize(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(t.GetThinkTime(), (DWORD)0);
|
|
VERIFY_IS_TRUE(t.GetEnableThinkTime() == false);
|
|
VERIFY_IS_TRUE(t.GetSequentialScanHint() == false);
|
|
VERIFY_IS_TRUE(t.GetRandomAccessHint() == false);
|
|
VERIFY_IS_TRUE(t.GetTemporaryFileHint() == false);
|
|
VERIFY_IS_TRUE(t.GetUseLargePages() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThroughputInBytesPerMillisecond(), (DWORD)0);
|
|
}
|
|
|
|
void CmdLineParserUnitTests::TestParseCmdLineDisableAffinityConflict()
|
|
{
|
|
CmdLineParser p;
|
|
Profile profile;
|
|
struct Synchronization s = {};
|
|
const char *argv[] = { "foo", "-b128K", "-w84", "-n", "-a1,2", "testfile.dat" };
|
|
|
|
// -n cannot be used with -a
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == false);
|
|
}
|
|
|
|
void CmdLineParserUnitTests::TestParseCmdLineVerbose()
|
|
{
|
|
CmdLineParser p;
|
|
Profile profile;
|
|
struct Synchronization s = {};
|
|
const char *argv[] = { "foo", "-b128K", "-w84", "-v", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
VERIFY_IS_TRUE(profile.GetVerbose() == true);
|
|
VERIFY_IS_TRUE(profile.GetProgress() == 0);
|
|
VERIFY_IS_TRUE(profile.GetCmdLine().compare("foo -b128K -w84 -v testfile.dat") == 0);
|
|
VERIFY_IS_TRUE(profile.GetEtwEnabled() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwProcess() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwThread() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwImageLoad() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwDiskIO() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryPageFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryHardFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwNetwork() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwRegistry() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePagedMemory() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePerfTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseSystemTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseCyclesCounter() == false);
|
|
|
|
vector<TimeSpan> vSpans(profile.GetTimeSpans());
|
|
VERIFY_ARE_EQUAL(vSpans.size(), (size_t)1);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetDuration(), (UINT32)10);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetWarmup(), (UINT32)5);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetCooldown(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRandSeed(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetThreadCount(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRequestCount(), (DWORD)0);
|
|
VERIFY_IS_TRUE(vSpans[0].GetDisableAffinity() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetCompletionRoutines() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetMeasureLatency() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetRandomWriteData() == false);
|
|
|
|
const auto& vAffinity(vSpans[0].GetAffinityAssignments());
|
|
VERIFY_ARE_EQUAL(vAffinity.size(), (size_t)0);
|
|
|
|
vector<Target> vTargets(vSpans[0].GetTargets());
|
|
VERIFY_ARE_EQUAL(vTargets.size(), (size_t)1);
|
|
Target t(vTargets[0]);
|
|
|
|
VERIFY_IS_TRUE(t.GetPath().compare("testfile.dat") == 0);
|
|
VERIFY_ARE_EQUAL(t.GetBlockSizeInBytes(), (DWORD)(128 * 1024));
|
|
VERIFY_ARE_EQUAL(t.GetRequestCount(), (DWORD)2);
|
|
VERIFY_IS_TRUE(t.GetRandomRatio() == 0);
|
|
VERIFY_IS_TRUE(t.GetUseInterlockedSequential() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBlockAlignmentInBytes(), t.GetBlockSizeInBytes());
|
|
VERIFY_ARE_EQUAL(t.GetBaseFileOffsetInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetUseParallelAsyncIO() == false);
|
|
VERIFY_IS_TRUE(t.GetCacheMode() == TargetCacheMode::Cached);
|
|
VERIFY_IS_TRUE(t.GetWriteThroughMode() == WriteThroughMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoMode() == MemoryMappedIoMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoFlushMode() == MemoryMappedIoFlushMode::Undefined);
|
|
VERIFY_IS_TRUE(t.GetZeroWriteBuffers() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThreadsPerFile(), (DWORD)1);
|
|
VERIFY_ARE_EQUAL(t.GetThreadStrideInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetCreateFile() == false);
|
|
VERIFY_ARE_EQUAL(t.GetFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetMaxFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetWriteRatio(), (DWORD)84);
|
|
VERIFY_IS_TRUE(t.GetUseBurstSize() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBurstSize(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(t.GetThinkTime(), (DWORD)0);
|
|
VERIFY_IS_TRUE(t.GetEnableThinkTime() == false);
|
|
VERIFY_IS_TRUE(t.GetSequentialScanHint() == false);
|
|
VERIFY_IS_TRUE(t.GetRandomAccessHint() == false);
|
|
VERIFY_IS_TRUE(t.GetTemporaryFileHint() == false);
|
|
VERIFY_IS_TRUE(t.GetUseLargePages() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThroughputInBytesPerMillisecond(), (DWORD)0);
|
|
}
|
|
|
|
void CmdLineParserUnitTests::TestParseCmdLineDisableOSCache()
|
|
{
|
|
CmdLineParser p;
|
|
Profile profile;
|
|
struct Synchronization s = {};
|
|
const char *argv[] = { "foo", "-b128K", "-w84", "-S", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
VERIFY_IS_TRUE(profile.GetVerbose() == false);
|
|
VERIFY_IS_TRUE(profile.GetProgress() == 0);
|
|
VERIFY_IS_TRUE(profile.GetCmdLine().compare("foo -b128K -w84 -S testfile.dat") == 0);
|
|
VERIFY_IS_TRUE(profile.GetEtwEnabled() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwProcess() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwThread() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwImageLoad() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwDiskIO() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryPageFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryHardFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwNetwork() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwRegistry() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePagedMemory() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePerfTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseSystemTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseCyclesCounter() == false);
|
|
|
|
vector<TimeSpan> vSpans(profile.GetTimeSpans());
|
|
VERIFY_ARE_EQUAL(vSpans.size(), (size_t)1);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetDuration(), (UINT32)10);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetWarmup(), (UINT32)5);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetCooldown(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRandSeed(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetThreadCount(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRequestCount(), (DWORD)0);
|
|
VERIFY_IS_TRUE(vSpans[0].GetDisableAffinity() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetCompletionRoutines() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetMeasureLatency() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetRandomWriteData() == false);
|
|
|
|
const auto& vAffinity(vSpans[0].GetAffinityAssignments());
|
|
VERIFY_ARE_EQUAL(vAffinity.size(), (size_t)0);
|
|
|
|
vector<Target> vTargets(vSpans[0].GetTargets());
|
|
VERIFY_ARE_EQUAL(vTargets.size(), (size_t)1);
|
|
Target t(vTargets[0]);
|
|
|
|
VERIFY_IS_TRUE(t.GetPath().compare("testfile.dat") == 0);
|
|
VERIFY_ARE_EQUAL(t.GetBlockSizeInBytes(), (DWORD)(128 * 1024));
|
|
VERIFY_ARE_EQUAL(t.GetRequestCount(), (DWORD)2);
|
|
VERIFY_IS_TRUE(t.GetRandomRatio() == 0);
|
|
VERIFY_IS_TRUE(t.GetUseInterlockedSequential() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBlockAlignmentInBytes(), t.GetBlockSizeInBytes());
|
|
VERIFY_ARE_EQUAL(t.GetBaseFileOffsetInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetUseParallelAsyncIO() == false);
|
|
VERIFY_IS_TRUE(t.GetCacheMode() == TargetCacheMode::DisableOSCache);
|
|
VERIFY_IS_TRUE(t.GetWriteThroughMode() == WriteThroughMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoMode() == MemoryMappedIoMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoFlushMode() == MemoryMappedIoFlushMode::Undefined);
|
|
VERIFY_IS_TRUE(t.GetZeroWriteBuffers() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThreadsPerFile(), (DWORD)1);
|
|
VERIFY_ARE_EQUAL(t.GetThreadStrideInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetCreateFile() == false);
|
|
VERIFY_ARE_EQUAL(t.GetFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetMaxFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetWriteRatio(), (DWORD)84);
|
|
VERIFY_IS_TRUE(t.GetUseBurstSize() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBurstSize(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(t.GetThinkTime(), (DWORD)0);
|
|
VERIFY_IS_TRUE(t.GetEnableThinkTime() == false);
|
|
VERIFY_IS_TRUE(t.GetSequentialScanHint() == false);
|
|
VERIFY_IS_TRUE(t.GetRandomAccessHint() == false);
|
|
VERIFY_IS_TRUE(t.GetTemporaryFileHint() == false);
|
|
VERIFY_IS_TRUE(t.GetUseLargePages() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThroughputInBytesPerMillisecond(), (DWORD)0);
|
|
}
|
|
|
|
void CmdLineParserUnitTests::TestParseCmdLineDisableLocalCache()
|
|
{
|
|
CmdLineParser p;
|
|
Profile profile;
|
|
struct Synchronization s = {};
|
|
const char *argv[] = { "foo", "-b128K", "-w84", "-Sr", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
VERIFY_IS_TRUE(profile.GetVerbose() == false);
|
|
VERIFY_IS_TRUE(profile.GetProgress() == 0);
|
|
VERIFY_IS_TRUE(profile.GetCmdLine().compare("foo -b128K -w84 -Sr testfile.dat") == 0);
|
|
VERIFY_IS_TRUE(profile.GetEtwEnabled() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwProcess() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwThread() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwImageLoad() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwDiskIO() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryPageFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryHardFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwNetwork() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwRegistry() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePagedMemory() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePerfTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseSystemTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseCyclesCounter() == false);
|
|
|
|
vector<TimeSpan> vSpans(profile.GetTimeSpans());
|
|
VERIFY_ARE_EQUAL(vSpans.size(), (size_t)1);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetDuration(), (UINT32)10);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetWarmup(), (UINT32)5);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetCooldown(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRandSeed(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetThreadCount(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRequestCount(), (DWORD)0);
|
|
VERIFY_IS_TRUE(vSpans[0].GetDisableAffinity() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetCompletionRoutines() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetMeasureLatency() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetRandomWriteData() == false);
|
|
|
|
const auto& vAffinity(vSpans[0].GetAffinityAssignments());
|
|
VERIFY_ARE_EQUAL(vAffinity.size(), (size_t)0);
|
|
|
|
vector<Target> vTargets(vSpans[0].GetTargets());
|
|
VERIFY_ARE_EQUAL(vTargets.size(), (size_t)1);
|
|
Target t(vTargets[0]);
|
|
|
|
VERIFY_IS_TRUE(t.GetPath().compare("testfile.dat") == 0);
|
|
VERIFY_ARE_EQUAL(t.GetBlockSizeInBytes(), (DWORD)(128 * 1024));
|
|
VERIFY_ARE_EQUAL(t.GetRequestCount(), (DWORD)2);
|
|
VERIFY_IS_TRUE(t.GetRandomRatio() == 0);
|
|
VERIFY_IS_TRUE(t.GetUseInterlockedSequential() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBlockAlignmentInBytes(), t.GetBlockSizeInBytes());
|
|
VERIFY_ARE_EQUAL(t.GetBaseFileOffsetInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetUseParallelAsyncIO() == false);
|
|
VERIFY_IS_TRUE(t.GetCacheMode() == TargetCacheMode::DisableLocalCache);
|
|
VERIFY_IS_TRUE(t.GetWriteThroughMode() == WriteThroughMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoMode() == MemoryMappedIoMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoFlushMode() == MemoryMappedIoFlushMode::Undefined);
|
|
VERIFY_IS_TRUE(t.GetZeroWriteBuffers() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThreadsPerFile(), (DWORD)1);
|
|
VERIFY_ARE_EQUAL(t.GetThreadStrideInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetCreateFile() == false);
|
|
VERIFY_ARE_EQUAL(t.GetFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetMaxFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetWriteRatio(), (DWORD)84);
|
|
VERIFY_IS_TRUE(t.GetUseBurstSize() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBurstSize(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(t.GetThinkTime(), (DWORD)0);
|
|
VERIFY_IS_TRUE(t.GetEnableThinkTime() == false);
|
|
VERIFY_IS_TRUE(t.GetSequentialScanHint() == false);
|
|
VERIFY_IS_TRUE(t.GetRandomAccessHint() == false);
|
|
VERIFY_IS_TRUE(t.GetTemporaryFileHint() == false);
|
|
VERIFY_IS_TRUE(t.GetUseLargePages() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThroughputInBytesPerMillisecond(), (DWORD)0);
|
|
}
|
|
|
|
void CmdLineParserUnitTests::TestParseCmdLineBufferedWriteThrough()
|
|
{
|
|
CmdLineParser p;
|
|
Profile profile;
|
|
struct Synchronization s = {};
|
|
const char *argv[] = { "foo", "-b128K", "-w84", "-Sbw", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
VERIFY_IS_TRUE(profile.GetVerbose() == false);
|
|
VERIFY_IS_TRUE(profile.GetProgress() == 0);
|
|
VERIFY_IS_TRUE(profile.GetCmdLine().compare("foo -b128K -w84 -Sbw testfile.dat") == 0);
|
|
VERIFY_IS_TRUE(profile.GetEtwEnabled() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwProcess() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwThread() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwImageLoad() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwDiskIO() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryPageFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryHardFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwNetwork() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwRegistry() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePagedMemory() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePerfTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseSystemTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseCyclesCounter() == false);
|
|
|
|
vector<TimeSpan> vSpans(profile.GetTimeSpans());
|
|
VERIFY_ARE_EQUAL(vSpans.size(), (size_t)1);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetDuration(), (UINT32)10);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetWarmup(), (UINT32)5);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetCooldown(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRandSeed(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetThreadCount(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRequestCount(), (DWORD)0);
|
|
VERIFY_IS_TRUE(vSpans[0].GetDisableAffinity() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetCompletionRoutines() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetMeasureLatency() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetRandomWriteData() == false);
|
|
|
|
const auto& vAffinity(vSpans[0].GetAffinityAssignments());
|
|
VERIFY_ARE_EQUAL(vAffinity.size(), (size_t)0);
|
|
|
|
vector<Target> vTargets(vSpans[0].GetTargets());
|
|
VERIFY_ARE_EQUAL(vTargets.size(), (size_t)1);
|
|
Target t(vTargets[0]);
|
|
|
|
VERIFY_IS_TRUE(t.GetPath().compare("testfile.dat") == 0);
|
|
VERIFY_ARE_EQUAL(t.GetBlockSizeInBytes(), (DWORD)(128 * 1024));
|
|
VERIFY_ARE_EQUAL(t.GetRequestCount(), (DWORD)2);
|
|
VERIFY_IS_TRUE(t.GetRandomRatio() == 0);
|
|
VERIFY_IS_TRUE(t.GetUseInterlockedSequential() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBlockAlignmentInBytes(), t.GetBlockSizeInBytes());
|
|
VERIFY_ARE_EQUAL(t.GetBaseFileOffsetInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetUseParallelAsyncIO() == false);
|
|
VERIFY_IS_TRUE(t.GetCacheMode() == TargetCacheMode::Cached);
|
|
VERIFY_IS_TRUE(t.GetWriteThroughMode() == WriteThroughMode::On);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoMode() == MemoryMappedIoMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoFlushMode() == MemoryMappedIoFlushMode::Undefined);
|
|
VERIFY_IS_TRUE(t.GetZeroWriteBuffers() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThreadsPerFile(), (DWORD)1);
|
|
VERIFY_ARE_EQUAL(t.GetThreadStrideInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetCreateFile() == false);
|
|
VERIFY_ARE_EQUAL(t.GetFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetMaxFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetWriteRatio(), (DWORD)84);
|
|
VERIFY_IS_TRUE(t.GetUseBurstSize() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBurstSize(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(t.GetThinkTime(), (DWORD)0);
|
|
VERIFY_IS_TRUE(t.GetEnableThinkTime() == false);
|
|
VERIFY_IS_TRUE(t.GetSequentialScanHint() == false);
|
|
VERIFY_IS_TRUE(t.GetRandomAccessHint() == false);
|
|
VERIFY_IS_TRUE(t.GetTemporaryFileHint() == false);
|
|
VERIFY_IS_TRUE(t.GetUseLargePages() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThroughputInBytesPerMillisecond(), (DWORD)0);
|
|
}
|
|
|
|
void CmdLineParserUnitTests::VerifyParseCmdLineMappedIO(Profile &profile, MemoryMappedIoFlushMode FlushMode)
|
|
{
|
|
VERIFY_IS_TRUE(profile.GetVerbose() == false);
|
|
VERIFY_IS_TRUE(profile.GetProgress() == 0);
|
|
|
|
VERIFY_IS_TRUE(profile.GetEtwEnabled() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwProcess() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwThread() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwImageLoad() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwDiskIO() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryPageFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryHardFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwNetwork() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwRegistry() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePagedMemory() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePerfTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseSystemTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseCyclesCounter() == false);
|
|
|
|
vector<TimeSpan> vSpans(profile.GetTimeSpans());
|
|
VERIFY_ARE_EQUAL(vSpans.size(), (size_t)1);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetDuration(), (UINT32)10);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetWarmup(), (UINT32)5);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetCooldown(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRandSeed(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetThreadCount(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRequestCount(), (DWORD)0);
|
|
VERIFY_IS_TRUE(vSpans[0].GetDisableAffinity() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetCompletionRoutines() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetMeasureLatency() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetRandomWriteData() == false);
|
|
|
|
const auto& vAffinity(vSpans[0].GetAffinityAssignments());
|
|
VERIFY_ARE_EQUAL(vAffinity.size(), (size_t)0);
|
|
|
|
vector<Target> vTargets(vSpans[0].GetTargets());
|
|
VERIFY_ARE_EQUAL(vTargets.size(), (size_t)1);
|
|
Target t(vTargets[0]);
|
|
|
|
VERIFY_IS_TRUE(t.GetPath().compare("testfile.dat") == 0);
|
|
VERIFY_ARE_EQUAL(t.GetBlockSizeInBytes(), (DWORD)(128 * 1024));
|
|
VERIFY_ARE_EQUAL(t.GetRequestCount(), (DWORD)2);
|
|
VERIFY_IS_TRUE(t.GetRandomRatio() == 0);
|
|
VERIFY_IS_TRUE(t.GetUseInterlockedSequential() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBlockAlignmentInBytes(), t.GetBlockSizeInBytes());
|
|
VERIFY_ARE_EQUAL(t.GetBaseFileOffsetInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetUseParallelAsyncIO() == false);
|
|
VERIFY_IS_TRUE(t.GetCacheMode() == TargetCacheMode::Cached);
|
|
VERIFY_IS_TRUE(t.GetWriteThroughMode() == WriteThroughMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoMode() == MemoryMappedIoMode::On);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoFlushMode() == FlushMode);
|
|
VERIFY_IS_TRUE(t.GetZeroWriteBuffers() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThreadsPerFile(), (DWORD)1);
|
|
VERIFY_ARE_EQUAL(t.GetThreadStrideInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetCreateFile() == false);
|
|
VERIFY_ARE_EQUAL(t.GetFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetMaxFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetWriteRatio(), (DWORD)84);
|
|
VERIFY_IS_TRUE(t.GetUseBurstSize() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBurstSize(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(t.GetThinkTime(), (DWORD)0);
|
|
VERIFY_IS_TRUE(t.GetEnableThinkTime() == false);
|
|
VERIFY_IS_TRUE(t.GetSequentialScanHint() == false);
|
|
VERIFY_IS_TRUE(t.GetRandomAccessHint() == false);
|
|
VERIFY_IS_TRUE(t.GetTemporaryFileHint() == false);
|
|
VERIFY_IS_TRUE(t.GetUseLargePages() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThroughputInBytesPerMillisecond(), (DWORD)0);
|
|
}
|
|
|
|
void CmdLineParserUnitTests::TestParseCmdLineMappedIO()
|
|
{
|
|
{
|
|
CmdLineParser p;
|
|
Profile profile;
|
|
struct Synchronization s = {};
|
|
const char *argv[] = { "foo", "-b128K", "-w84", "-Sm", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
VERIFY_IS_TRUE(profile.GetCmdLine().compare("foo -b128K -w84 -Sm testfile.dat") == 0);
|
|
VerifyParseCmdLineMappedIO(profile, MemoryMappedIoFlushMode::Undefined);
|
|
}
|
|
|
|
{
|
|
CmdLineParser p;
|
|
Profile profile;
|
|
struct Synchronization s = {};
|
|
const char *argv[] = { "foo", "-b128K", "-w84", "-Sm", "-Nv", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
VERIFY_IS_TRUE(profile.GetCmdLine().compare("foo -b128K -w84 -Sm -Nv testfile.dat") == 0);
|
|
VerifyParseCmdLineMappedIO(profile, MemoryMappedIoFlushMode::ViewOfFile);
|
|
}
|
|
|
|
{
|
|
CmdLineParser p;
|
|
Profile profile;
|
|
struct Synchronization s = {};
|
|
const char *argv[] = { "foo", "-b128K", "-w84", "-Sm", "-Nn", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
VERIFY_IS_TRUE(profile.GetCmdLine().compare("foo -b128K -w84 -Sm -Nn testfile.dat") == 0);
|
|
VerifyParseCmdLineMappedIO(profile, MemoryMappedIoFlushMode::NonVolatileMemory);
|
|
}
|
|
|
|
{
|
|
CmdLineParser p;
|
|
Profile profile;
|
|
struct Synchronization s = {};
|
|
const char *argv[] = { "foo", "-b128K", "-w84", "-Sm", "-Ni", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
VERIFY_IS_TRUE(profile.GetCmdLine().compare("foo -b128K -w84 -Sm -Ni testfile.dat") == 0);
|
|
VerifyParseCmdLineMappedIO(profile, MemoryMappedIoFlushMode::NonVolatileMemoryNoDrain);
|
|
}
|
|
}
|
|
|
|
void CmdLineParserUnitTests::TestParseCmdLineUseCompletionRoutines()
|
|
{
|
|
CmdLineParser p;
|
|
Profile profile;
|
|
struct Synchronization s = {};
|
|
const char *argv[] = { "foo", "-b128K", "-w84", "-x", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
VERIFY_IS_TRUE(profile.GetVerbose() == false);
|
|
VERIFY_IS_TRUE(profile.GetProgress() == 0);
|
|
VERIFY_IS_TRUE(profile.GetCmdLine().compare("foo -b128K -w84 -x testfile.dat") == 0);
|
|
VERIFY_IS_TRUE(profile.GetEtwEnabled() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwProcess() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwThread() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwImageLoad() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwDiskIO() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryPageFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryHardFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwNetwork() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwRegistry() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePagedMemory() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePerfTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseSystemTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseCyclesCounter() == false);
|
|
|
|
vector<TimeSpan> vSpans(profile.GetTimeSpans());
|
|
VERIFY_ARE_EQUAL(vSpans.size(), (size_t)1);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetDuration(), (UINT32)10);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetWarmup(), (UINT32)5);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetCooldown(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRandSeed(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetThreadCount(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRequestCount(), (DWORD)0);
|
|
VERIFY_IS_TRUE(vSpans[0].GetDisableAffinity() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetCompletionRoutines() == true);
|
|
VERIFY_IS_TRUE(vSpans[0].GetMeasureLatency() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetRandomWriteData() == false);
|
|
|
|
const auto& vAffinity(vSpans[0].GetAffinityAssignments());
|
|
VERIFY_ARE_EQUAL(vAffinity.size(), (size_t)0);
|
|
|
|
vector<Target> vTargets(vSpans[0].GetTargets());
|
|
VERIFY_ARE_EQUAL(vTargets.size(), (size_t)1);
|
|
Target t(vTargets[0]);
|
|
|
|
VERIFY_IS_TRUE(t.GetPath().compare("testfile.dat") == 0);
|
|
VERIFY_ARE_EQUAL(t.GetBlockSizeInBytes(), (DWORD)(128 * 1024));
|
|
VERIFY_ARE_EQUAL(t.GetRequestCount(), (DWORD)2);
|
|
VERIFY_IS_TRUE(t.GetRandomRatio() == 0);
|
|
VERIFY_IS_TRUE(t.GetUseInterlockedSequential() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBlockAlignmentInBytes(), t.GetBlockSizeInBytes());
|
|
VERIFY_ARE_EQUAL(t.GetBaseFileOffsetInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetUseParallelAsyncIO() == false);
|
|
VERIFY_IS_TRUE(t.GetCacheMode() == TargetCacheMode::Cached);
|
|
VERIFY_IS_TRUE(t.GetWriteThroughMode() == WriteThroughMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoMode() == MemoryMappedIoMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoFlushMode() == MemoryMappedIoFlushMode::Undefined);
|
|
VERIFY_IS_TRUE(t.GetZeroWriteBuffers() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThreadsPerFile(), (DWORD)1);
|
|
VERIFY_ARE_EQUAL(t.GetThreadStrideInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetCreateFile() == false);
|
|
VERIFY_ARE_EQUAL(t.GetFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetMaxFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetWriteRatio(), (DWORD)84);
|
|
VERIFY_IS_TRUE(t.GetUseBurstSize() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBurstSize(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(t.GetThinkTime(), (DWORD)0);
|
|
VERIFY_IS_TRUE(t.GetEnableThinkTime() == false);
|
|
VERIFY_IS_TRUE(t.GetSequentialScanHint() == false);
|
|
VERIFY_IS_TRUE(t.GetRandomAccessHint() == false);
|
|
VERIFY_IS_TRUE(t.GetTemporaryFileHint() == false);
|
|
VERIFY_IS_TRUE(t.GetUseLargePages() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThroughputInBytesPerMillisecond(), (DWORD)0);
|
|
}
|
|
|
|
void CmdLineParserUnitTests::TestParseCmdLineRandSeed()
|
|
{
|
|
CmdLineParser p;
|
|
Profile profile;
|
|
struct Synchronization s = {};
|
|
const char *argv[] = { "foo", "-b128K", "-w84", "-z1234", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
VERIFY_IS_TRUE(profile.GetVerbose() == false);
|
|
VERIFY_IS_TRUE(profile.GetProgress() == 0);
|
|
VERIFY_IS_TRUE(profile.GetCmdLine().compare("foo -b128K -w84 -z1234 testfile.dat") == 0);
|
|
VERIFY_IS_TRUE(profile.GetEtwEnabled() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwProcess() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwThread() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwImageLoad() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwDiskIO() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryPageFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryHardFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwNetwork() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwRegistry() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePagedMemory() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePerfTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseSystemTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseCyclesCounter() == false);
|
|
|
|
vector<TimeSpan> vSpans(profile.GetTimeSpans());
|
|
VERIFY_ARE_EQUAL(vSpans.size(), (size_t)1);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetDuration(), (UINT32)10);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetWarmup(), (UINT32)5);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetCooldown(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRandSeed(), (UINT32)1234);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetThreadCount(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRequestCount(), (DWORD)0);
|
|
VERIFY_IS_TRUE(vSpans[0].GetDisableAffinity() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetCompletionRoutines() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetMeasureLatency() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetRandomWriteData() == false);
|
|
|
|
const auto& vAffinity(vSpans[0].GetAffinityAssignments());
|
|
VERIFY_ARE_EQUAL(vAffinity.size(), (size_t)0);
|
|
|
|
vector<Target> vTargets(vSpans[0].GetTargets());
|
|
VERIFY_ARE_EQUAL(vTargets.size(), (size_t)1);
|
|
Target t(vTargets[0]);
|
|
|
|
VERIFY_IS_TRUE(t.GetPath().compare("testfile.dat") == 0);
|
|
VERIFY_ARE_EQUAL(t.GetBlockSizeInBytes(), (DWORD)(128 * 1024));
|
|
VERIFY_ARE_EQUAL(t.GetRequestCount(), (DWORD)2);
|
|
VERIFY_IS_TRUE(t.GetRandomRatio() == 0);
|
|
VERIFY_IS_TRUE(t.GetUseInterlockedSequential() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBlockAlignmentInBytes(), t.GetBlockSizeInBytes());
|
|
VERIFY_ARE_EQUAL(t.GetBaseFileOffsetInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetUseParallelAsyncIO() == false);
|
|
VERIFY_IS_TRUE(t.GetCacheMode() == TargetCacheMode::Cached);
|
|
VERIFY_IS_TRUE(t.GetWriteThroughMode() == WriteThroughMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoMode() == MemoryMappedIoMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoFlushMode() == MemoryMappedIoFlushMode::Undefined);
|
|
VERIFY_IS_TRUE(t.GetZeroWriteBuffers() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThreadsPerFile(), (DWORD)1);
|
|
VERIFY_ARE_EQUAL(t.GetThreadStrideInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetCreateFile() == false);
|
|
VERIFY_ARE_EQUAL(t.GetFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetMaxFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetWriteRatio(), (DWORD)84);
|
|
VERIFY_IS_TRUE(t.GetUseBurstSize() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBurstSize(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(t.GetThinkTime(), (DWORD)0);
|
|
VERIFY_IS_TRUE(t.GetEnableThinkTime() == false);
|
|
VERIFY_IS_TRUE(t.GetSequentialScanHint() == false);
|
|
VERIFY_IS_TRUE(t.GetRandomAccessHint() == false);
|
|
VERIFY_IS_TRUE(t.GetTemporaryFileHint() == false);
|
|
VERIFY_IS_TRUE(t.GetUseLargePages() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThroughputInBytesPerMillisecond(), (DWORD)0);
|
|
}
|
|
|
|
void CmdLineParserUnitTests::TestParseCmdLineRandSeedGetTickCount()
|
|
{
|
|
CmdLineParser p;
|
|
Profile profile;
|
|
struct Synchronization s = {};
|
|
const char *argv[] = { "foo", "-b128K", "-w84", "-z", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
VERIFY_IS_TRUE(profile.GetVerbose() == false);
|
|
VERIFY_IS_TRUE(profile.GetProgress() == 0);
|
|
VERIFY_IS_TRUE(profile.GetCmdLine().compare("foo -b128K -w84 -z testfile.dat") == 0);
|
|
VERIFY_IS_TRUE(profile.GetEtwEnabled() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwProcess() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwThread() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwImageLoad() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwDiskIO() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryPageFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryHardFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwNetwork() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwRegistry() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePagedMemory() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePerfTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseSystemTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseCyclesCounter() == false);
|
|
|
|
vector<TimeSpan> vSpans(profile.GetTimeSpans());
|
|
VERIFY_ARE_EQUAL(vSpans.size(), (size_t)1);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetDuration(), (UINT32)10);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetWarmup(), (UINT32)5);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetCooldown(), (UINT32)0);
|
|
VERIFY_IS_TRUE(vSpans[0].GetRandSeed() != 0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetThreadCount(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRequestCount(), (DWORD)0);
|
|
VERIFY_IS_TRUE(vSpans[0].GetDisableAffinity() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetCompletionRoutines() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetMeasureLatency() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetRandomWriteData() == false);
|
|
|
|
const auto& vAffinity(vSpans[0].GetAffinityAssignments());
|
|
VERIFY_ARE_EQUAL(vAffinity.size(), (size_t)0);
|
|
|
|
vector<Target> vTargets(vSpans[0].GetTargets());
|
|
VERIFY_ARE_EQUAL(vTargets.size(), (size_t)1);
|
|
Target t(vTargets[0]);
|
|
|
|
VERIFY_IS_TRUE(t.GetPath().compare("testfile.dat") == 0);
|
|
VERIFY_ARE_EQUAL(t.GetBlockSizeInBytes(), (DWORD)(128 * 1024));
|
|
VERIFY_ARE_EQUAL(t.GetRequestCount(), (DWORD)2);
|
|
VERIFY_IS_TRUE(t.GetRandomRatio() == 0);
|
|
VERIFY_IS_TRUE(t.GetUseInterlockedSequential() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBlockAlignmentInBytes(), t.GetBlockSizeInBytes());
|
|
VERIFY_ARE_EQUAL(t.GetBaseFileOffsetInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetUseParallelAsyncIO() == false);
|
|
VERIFY_IS_TRUE(t.GetCacheMode() == TargetCacheMode::Cached);
|
|
VERIFY_IS_TRUE(t.GetWriteThroughMode() == WriteThroughMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoMode() == MemoryMappedIoMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoFlushMode() == MemoryMappedIoFlushMode::Undefined);
|
|
VERIFY_IS_TRUE(t.GetZeroWriteBuffers() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThreadsPerFile(), (DWORD)1);
|
|
VERIFY_ARE_EQUAL(t.GetThreadStrideInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetCreateFile() == false);
|
|
VERIFY_ARE_EQUAL(t.GetFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetMaxFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetWriteRatio(), (DWORD)84);
|
|
VERIFY_IS_TRUE(t.GetUseBurstSize() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBurstSize(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(t.GetThinkTime(), (DWORD)0);
|
|
VERIFY_IS_TRUE(t.GetEnableThinkTime() == false);
|
|
VERIFY_IS_TRUE(t.GetSequentialScanHint() == false);
|
|
VERIFY_IS_TRUE(t.GetRandomAccessHint() == false);
|
|
VERIFY_IS_TRUE(t.GetTemporaryFileHint() == false);
|
|
VERIFY_IS_TRUE(t.GetUseLargePages() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThroughputInBytesPerMillisecond(), (DWORD)0);
|
|
}
|
|
|
|
void CmdLineParserUnitTests::TestParseCmdLineWarmupAndCooldown()
|
|
{
|
|
CmdLineParser p;
|
|
Profile profile;
|
|
struct Synchronization s = {};
|
|
const char *argv[] = { "foo", "-b128K", "-w84", "-C12", "-W345", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
VERIFY_IS_TRUE(profile.GetVerbose() == false);
|
|
VERIFY_IS_TRUE(profile.GetProgress() == 0);
|
|
VERIFY_IS_TRUE(profile.GetCmdLine().compare("foo -b128K -w84 -C12 -W345 testfile.dat") == 0);
|
|
VERIFY_IS_TRUE(profile.GetEtwEnabled() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwProcess() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwThread() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwImageLoad() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwDiskIO() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryPageFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryHardFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwNetwork() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwRegistry() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePagedMemory() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePerfTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseSystemTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseCyclesCounter() == false);
|
|
|
|
vector<TimeSpan> vSpans(profile.GetTimeSpans());
|
|
VERIFY_ARE_EQUAL(vSpans.size(), (size_t)1);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetDuration(), (UINT32)10);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetWarmup(), (UINT32)345);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetCooldown(), (UINT32)12);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRandSeed(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetThreadCount(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRequestCount(), (DWORD)0);
|
|
VERIFY_IS_TRUE(vSpans[0].GetDisableAffinity() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetCompletionRoutines() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetMeasureLatency() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetRandomWriteData() == false);
|
|
|
|
const auto& vAffinity(vSpans[0].GetAffinityAssignments());
|
|
VERIFY_ARE_EQUAL(vAffinity.size(), (size_t)0);
|
|
|
|
vector<Target> vTargets(vSpans[0].GetTargets());
|
|
VERIFY_ARE_EQUAL(vTargets.size(), (size_t)1);
|
|
Target t(vTargets[0]);
|
|
|
|
VERIFY_IS_TRUE(t.GetPath().compare("testfile.dat") == 0);
|
|
VERIFY_ARE_EQUAL(t.GetBlockSizeInBytes(), (DWORD)(128 * 1024));
|
|
VERIFY_ARE_EQUAL(t.GetRequestCount(), (DWORD)2);
|
|
VERIFY_IS_TRUE(t.GetRandomRatio() == 0);
|
|
VERIFY_IS_TRUE(t.GetUseInterlockedSequential() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBlockAlignmentInBytes(), t.GetBlockSizeInBytes());
|
|
VERIFY_ARE_EQUAL(t.GetBaseFileOffsetInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetUseParallelAsyncIO() == false);
|
|
VERIFY_IS_TRUE(t.GetCacheMode() == TargetCacheMode::Cached);
|
|
VERIFY_IS_TRUE(t.GetWriteThroughMode() == WriteThroughMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoMode() == MemoryMappedIoMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoFlushMode() == MemoryMappedIoFlushMode::Undefined);
|
|
VERIFY_IS_TRUE(t.GetZeroWriteBuffers() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThreadsPerFile(), (DWORD)1);
|
|
VERIFY_ARE_EQUAL(t.GetThreadStrideInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetCreateFile() == false);
|
|
VERIFY_ARE_EQUAL(t.GetFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetMaxFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetWriteRatio(), (DWORD)84);
|
|
VERIFY_IS_TRUE(t.GetUseBurstSize() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBurstSize(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(t.GetThinkTime(), (DWORD)0);
|
|
VERIFY_IS_TRUE(t.GetEnableThinkTime() == false);
|
|
VERIFY_IS_TRUE(t.GetSequentialScanHint() == false);
|
|
VERIFY_IS_TRUE(t.GetRandomAccessHint() == false);
|
|
VERIFY_IS_TRUE(t.GetTemporaryFileHint() == false);
|
|
VERIFY_IS_TRUE(t.GetUseLargePages() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThroughputInBytesPerMillisecond(), (DWORD)0);
|
|
}
|
|
|
|
void CmdLineParserUnitTests::TestParseCmdLineDurationAndProgress()
|
|
{
|
|
CmdLineParser p;
|
|
Profile profile;
|
|
struct Synchronization s = {};
|
|
const char *argv[] = { "foo", "-b128K", "-w84", "-d12", "-P345", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
VERIFY_IS_TRUE(profile.GetVerbose() == false);
|
|
VERIFY_IS_TRUE(profile.GetProgress() == 345);
|
|
VERIFY_IS_TRUE(profile.GetCmdLine().compare("foo -b128K -w84 -d12 -P345 testfile.dat") == 0);
|
|
VERIFY_IS_TRUE(profile.GetEtwEnabled() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwProcess() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwThread() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwImageLoad() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwDiskIO() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryPageFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryHardFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwNetwork() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwRegistry() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePagedMemory() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePerfTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseSystemTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseCyclesCounter() == false);
|
|
|
|
vector<TimeSpan> vSpans(profile.GetTimeSpans());
|
|
VERIFY_ARE_EQUAL(vSpans.size(), (size_t)1);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetDuration(), (UINT32)12);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetWarmup(), (UINT32)5);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetCooldown(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRandSeed(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetThreadCount(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRequestCount(), (DWORD)0);
|
|
VERIFY_IS_TRUE(vSpans[0].GetDisableAffinity() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetCompletionRoutines() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetMeasureLatency() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetRandomWriteData() == false);
|
|
|
|
const auto& vAffinity(vSpans[0].GetAffinityAssignments());
|
|
VERIFY_ARE_EQUAL(vAffinity.size(), (size_t)0);
|
|
|
|
vector<Target> vTargets(vSpans[0].GetTargets());
|
|
VERIFY_ARE_EQUAL(vTargets.size(), (size_t)1);
|
|
Target t(vTargets[0]);
|
|
|
|
VERIFY_IS_TRUE(t.GetPath().compare("testfile.dat") == 0);
|
|
VERIFY_ARE_EQUAL(t.GetBlockSizeInBytes(), (DWORD)(128 * 1024));
|
|
VERIFY_ARE_EQUAL(t.GetRequestCount(), (DWORD)2);
|
|
VERIFY_IS_TRUE(t.GetRandomRatio() == 0);
|
|
VERIFY_IS_TRUE(t.GetUseInterlockedSequential() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBlockAlignmentInBytes(), t.GetBlockSizeInBytes());
|
|
VERIFY_ARE_EQUAL(t.GetBaseFileOffsetInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetUseParallelAsyncIO() == false);
|
|
VERIFY_IS_TRUE(t.GetCacheMode() == TargetCacheMode::Cached);
|
|
VERIFY_IS_TRUE(t.GetWriteThroughMode() == WriteThroughMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoMode() == MemoryMappedIoMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoFlushMode() == MemoryMappedIoFlushMode::Undefined);
|
|
VERIFY_IS_TRUE(t.GetZeroWriteBuffers() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThreadsPerFile(), (DWORD)1);
|
|
VERIFY_ARE_EQUAL(t.GetThreadStrideInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetCreateFile() == false);
|
|
VERIFY_ARE_EQUAL(t.GetFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetMaxFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetWriteRatio(), (DWORD)84);
|
|
VERIFY_IS_TRUE(t.GetUseBurstSize() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBurstSize(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(t.GetThinkTime(), (DWORD)0);
|
|
VERIFY_IS_TRUE(t.GetEnableThinkTime() == false);
|
|
VERIFY_IS_TRUE(t.GetSequentialScanHint() == false);
|
|
VERIFY_IS_TRUE(t.GetRandomAccessHint() == false);
|
|
VERIFY_IS_TRUE(t.GetTemporaryFileHint() == false);
|
|
VERIFY_IS_TRUE(t.GetUseLargePages() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThroughputInBytesPerMillisecond(), (DWORD)0);
|
|
}
|
|
|
|
void CmdLineParserUnitTests::TestParseCmdLineUseParallelAsyncIO()
|
|
{
|
|
CmdLineParser p;
|
|
Profile profile;
|
|
struct Synchronization s = {};
|
|
const char *argv[] = { "foo", "-b128K", "-w84", "-p", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
VERIFY_IS_TRUE(profile.GetVerbose() == false);
|
|
VERIFY_IS_TRUE(profile.GetProgress() == 0);
|
|
VERIFY_IS_TRUE(profile.GetCmdLine().compare("foo -b128K -w84 -p testfile.dat") == 0);
|
|
VERIFY_IS_TRUE(profile.GetEtwEnabled() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwProcess() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwThread() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwImageLoad() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwDiskIO() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryPageFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryHardFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwNetwork() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwRegistry() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePagedMemory() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePerfTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseSystemTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseCyclesCounter() == false);
|
|
|
|
vector<TimeSpan> vSpans(profile.GetTimeSpans());
|
|
VERIFY_ARE_EQUAL(vSpans.size(), (size_t)1);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetDuration(), (UINT32)10);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetWarmup(), (UINT32)5);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetCooldown(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRandSeed(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetThreadCount(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRequestCount(), (DWORD)0);
|
|
VERIFY_IS_TRUE(vSpans[0].GetDisableAffinity() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetCompletionRoutines() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetMeasureLatency() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetRandomWriteData() == false);
|
|
|
|
const auto& vAffinity(vSpans[0].GetAffinityAssignments());
|
|
VERIFY_ARE_EQUAL(vAffinity.size(), (size_t)0);
|
|
|
|
vector<Target> vTargets(vSpans[0].GetTargets());
|
|
VERIFY_ARE_EQUAL(vTargets.size(), (size_t)1);
|
|
Target t(vTargets[0]);
|
|
|
|
VERIFY_IS_TRUE(t.GetPath().compare("testfile.dat") == 0);
|
|
VERIFY_ARE_EQUAL(t.GetBlockSizeInBytes(), (DWORD)(128 * 1024));
|
|
VERIFY_ARE_EQUAL(t.GetRequestCount(), (DWORD)2);
|
|
VERIFY_IS_TRUE(t.GetRandomRatio() == 0);
|
|
VERIFY_IS_TRUE(t.GetUseInterlockedSequential() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBlockAlignmentInBytes(), t.GetBlockSizeInBytes());
|
|
VERIFY_ARE_EQUAL(t.GetBaseFileOffsetInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetUseParallelAsyncIO() == true);
|
|
VERIFY_IS_TRUE(t.GetCacheMode() == TargetCacheMode::Cached);
|
|
VERIFY_IS_TRUE(t.GetWriteThroughMode() == WriteThroughMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoMode() == MemoryMappedIoMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoFlushMode() == MemoryMappedIoFlushMode::Undefined);
|
|
VERIFY_IS_TRUE(t.GetZeroWriteBuffers() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThreadsPerFile(), (DWORD)1);
|
|
VERIFY_ARE_EQUAL(t.GetThreadStrideInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetCreateFile() == false);
|
|
VERIFY_ARE_EQUAL(t.GetFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetMaxFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetWriteRatio(), (DWORD)84);
|
|
VERIFY_IS_TRUE(t.GetUseBurstSize() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBurstSize(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(t.GetThinkTime(), (DWORD)0);
|
|
VERIFY_IS_TRUE(t.GetEnableThinkTime() == false);
|
|
VERIFY_IS_TRUE(t.GetSequentialScanHint() == false);
|
|
VERIFY_IS_TRUE(t.GetRandomAccessHint() == false);
|
|
VERIFY_IS_TRUE(t.GetTemporaryFileHint() == false);
|
|
VERIFY_IS_TRUE(t.GetUseLargePages() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThroughputInBytesPerMillisecond(), (DWORD)0);
|
|
}
|
|
|
|
void CmdLineParserUnitTests::TestParseCmdLineUseLargePages()
|
|
{
|
|
CmdLineParser p;
|
|
Profile profile;
|
|
struct Synchronization s = {};
|
|
const char *argv[] = { "foo", "-b128K", "-w84", "-l", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
VERIFY_IS_TRUE(profile.GetVerbose() == false);
|
|
VERIFY_IS_TRUE(profile.GetProgress() == 0);
|
|
VERIFY_IS_TRUE(profile.GetCmdLine().compare("foo -b128K -w84 -l testfile.dat") == 0);
|
|
VERIFY_IS_TRUE(profile.GetEtwEnabled() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwProcess() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwThread() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwImageLoad() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwDiskIO() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryPageFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryHardFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwNetwork() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwRegistry() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePagedMemory() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePerfTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseSystemTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseCyclesCounter() == false);
|
|
|
|
vector<TimeSpan> vSpans(profile.GetTimeSpans());
|
|
VERIFY_ARE_EQUAL(vSpans.size(), (size_t)1);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetDuration(), (UINT32)10);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetWarmup(), (UINT32)5);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetCooldown(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRandSeed(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetThreadCount(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRequestCount(), (DWORD)0);
|
|
VERIFY_IS_TRUE(vSpans[0].GetDisableAffinity() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetCompletionRoutines() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetMeasureLatency() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetRandomWriteData() == false);
|
|
|
|
const auto& vAffinity(vSpans[0].GetAffinityAssignments());
|
|
VERIFY_ARE_EQUAL(vAffinity.size(), (size_t)0);
|
|
|
|
vector<Target> vTargets(vSpans[0].GetTargets());
|
|
VERIFY_ARE_EQUAL(vTargets.size(), (size_t)1);
|
|
Target t(vTargets[0]);
|
|
|
|
VERIFY_IS_TRUE(t.GetPath().compare("testfile.dat") == 0);
|
|
VERIFY_ARE_EQUAL(t.GetBlockSizeInBytes(), (DWORD)(128 * 1024));
|
|
VERIFY_ARE_EQUAL(t.GetRequestCount(), (DWORD)2);
|
|
VERIFY_IS_TRUE(t.GetRandomRatio() == 0);
|
|
VERIFY_IS_TRUE(t.GetUseInterlockedSequential() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBlockAlignmentInBytes(), t.GetBlockSizeInBytes());
|
|
VERIFY_ARE_EQUAL(t.GetBaseFileOffsetInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetUseParallelAsyncIO() == false);
|
|
VERIFY_IS_TRUE(t.GetCacheMode() == TargetCacheMode::Cached);
|
|
VERIFY_IS_TRUE(t.GetWriteThroughMode() == WriteThroughMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoMode() == MemoryMappedIoMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoFlushMode() == MemoryMappedIoFlushMode::Undefined);
|
|
VERIFY_IS_TRUE(t.GetZeroWriteBuffers() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThreadsPerFile(), (DWORD)1);
|
|
VERIFY_ARE_EQUAL(t.GetThreadStrideInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetCreateFile() == false);
|
|
VERIFY_ARE_EQUAL(t.GetFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetMaxFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetWriteRatio(), (DWORD)84);
|
|
VERIFY_IS_TRUE(t.GetUseBurstSize() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBurstSize(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(t.GetThinkTime(), (DWORD)0);
|
|
VERIFY_IS_TRUE(t.GetEnableThinkTime() == false);
|
|
VERIFY_IS_TRUE(t.GetSequentialScanHint() == false);
|
|
VERIFY_IS_TRUE(t.GetRandomAccessHint() == false);
|
|
VERIFY_IS_TRUE(t.GetTemporaryFileHint() == false);
|
|
VERIFY_IS_TRUE(t.GetUseLargePages() == true);
|
|
VERIFY_ARE_EQUAL(t.GetThroughputInBytesPerMillisecond(), (DWORD)0);
|
|
}
|
|
|
|
void CmdLineParserUnitTests::TestParseCmdLineOverlappedCountAndBaseOffset()
|
|
{
|
|
CmdLineParser p;
|
|
Profile profile;
|
|
struct Synchronization s = {};
|
|
const char *argv[] = { "foo", "-b128K", "-w84", "-o123", "-B512k", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
VERIFY_IS_TRUE(profile.GetVerbose() == false);
|
|
VERIFY_IS_TRUE(profile.GetProgress() == 0);
|
|
VERIFY_IS_TRUE(profile.GetCmdLine().compare("foo -b128K -w84 -o123 -B512k testfile.dat") == 0);
|
|
VERIFY_IS_TRUE(profile.GetEtwEnabled() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwProcess() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwThread() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwImageLoad() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwDiskIO() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryPageFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryHardFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwNetwork() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwRegistry() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePagedMemory() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePerfTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseSystemTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseCyclesCounter() == false);
|
|
|
|
vector<TimeSpan> vSpans(profile.GetTimeSpans());
|
|
VERIFY_ARE_EQUAL(vSpans.size(), (size_t)1);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetDuration(), (UINT32)10);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetWarmup(), (UINT32)5);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetCooldown(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRandSeed(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetThreadCount(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRequestCount(), (DWORD)0);
|
|
VERIFY_IS_TRUE(vSpans[0].GetDisableAffinity() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetCompletionRoutines() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetMeasureLatency() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetRandomWriteData() == false);
|
|
|
|
const auto& vAffinity(vSpans[0].GetAffinityAssignments());
|
|
VERIFY_ARE_EQUAL(vAffinity.size(), (size_t)0);
|
|
|
|
vector<Target> vTargets(vSpans[0].GetTargets());
|
|
VERIFY_ARE_EQUAL(vTargets.size(), (size_t)1);
|
|
Target t(vTargets[0]);
|
|
|
|
VERIFY_IS_TRUE(t.GetPath().compare("testfile.dat") == 0);
|
|
VERIFY_ARE_EQUAL(t.GetBlockSizeInBytes(), (DWORD)(128 * 1024));
|
|
VERIFY_ARE_EQUAL(t.GetRequestCount(), (DWORD)123);
|
|
VERIFY_IS_TRUE(t.GetRandomRatio() == 0);
|
|
VERIFY_IS_TRUE(t.GetUseInterlockedSequential() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBlockAlignmentInBytes(), t.GetBlockSizeInBytes());
|
|
VERIFY_ARE_EQUAL(t.GetBaseFileOffsetInBytes(), 512 * 1024);
|
|
VERIFY_IS_TRUE(t.GetUseParallelAsyncIO() == false);
|
|
VERIFY_IS_TRUE(t.GetCacheMode() == TargetCacheMode::Cached);
|
|
VERIFY_IS_TRUE(t.GetWriteThroughMode() == WriteThroughMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoMode() == MemoryMappedIoMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoFlushMode() == MemoryMappedIoFlushMode::Undefined);
|
|
VERIFY_IS_TRUE(t.GetZeroWriteBuffers() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThreadsPerFile(), (DWORD)1);
|
|
VERIFY_ARE_EQUAL(t.GetThreadStrideInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetCreateFile() == false);
|
|
VERIFY_ARE_EQUAL(t.GetFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetMaxFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetWriteRatio(), (DWORD)84);
|
|
VERIFY_IS_TRUE(t.GetUseBurstSize() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBurstSize(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(t.GetThinkTime(), (DWORD)0);
|
|
VERIFY_IS_TRUE(t.GetEnableThinkTime() == false);
|
|
VERIFY_IS_TRUE(t.GetSequentialScanHint() == false);
|
|
VERIFY_IS_TRUE(t.GetRandomAccessHint() == false);
|
|
VERIFY_IS_TRUE(t.GetTemporaryFileHint() == false);
|
|
VERIFY_IS_TRUE(t.GetUseLargePages() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThroughputInBytesPerMillisecond(), (DWORD)0);
|
|
}
|
|
|
|
void CmdLineParserUnitTests::TestParseCmdLineCreateFileAndMaxFileSize()
|
|
{
|
|
CmdLineParser p;
|
|
Profile profile;
|
|
struct Synchronization s = {};
|
|
const char *argv[] = { "foo", "-b128K", "-w84", "-c23", "-f4M", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
VERIFY_IS_TRUE(profile.GetVerbose() == false);
|
|
VERIFY_IS_TRUE(profile.GetProgress() == 0);
|
|
VERIFY_IS_TRUE(profile.GetCmdLine().compare("foo -b128K -w84 -c23 -f4M testfile.dat") == 0);
|
|
VERIFY_IS_TRUE(profile.GetEtwEnabled() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwProcess() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwThread() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwImageLoad() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwDiskIO() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryPageFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryHardFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwNetwork() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwRegistry() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePagedMemory() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePerfTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseSystemTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseCyclesCounter() == false);
|
|
|
|
vector<TimeSpan> vSpans(profile.GetTimeSpans());
|
|
VERIFY_ARE_EQUAL(vSpans.size(), (size_t)1);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetDuration(), (UINT32)10);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetWarmup(), (UINT32)5);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetCooldown(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRandSeed(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetThreadCount(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRequestCount(), (DWORD)0);
|
|
VERIFY_IS_TRUE(vSpans[0].GetDisableAffinity() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetCompletionRoutines() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetMeasureLatency() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetRandomWriteData() == false);
|
|
|
|
const auto& vAffinity(vSpans[0].GetAffinityAssignments());
|
|
VERIFY_ARE_EQUAL(vAffinity.size(), (size_t)0);
|
|
|
|
vector<Target> vTargets(vSpans[0].GetTargets());
|
|
VERIFY_ARE_EQUAL(vTargets.size(), (size_t)1);
|
|
Target t(vTargets[0]);
|
|
|
|
VERIFY_IS_TRUE(t.GetPath().compare("testfile.dat") == 0);
|
|
VERIFY_ARE_EQUAL(t.GetBlockSizeInBytes(), (DWORD)(128 * 1024));
|
|
VERIFY_ARE_EQUAL(t.GetRequestCount(), (DWORD)2);
|
|
VERIFY_IS_TRUE(t.GetRandomRatio() == 0);
|
|
VERIFY_IS_TRUE(t.GetUseInterlockedSequential() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBlockAlignmentInBytes(), t.GetBlockSizeInBytes());
|
|
VERIFY_ARE_EQUAL(t.GetBaseFileOffsetInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetUseParallelAsyncIO() == false);
|
|
VERIFY_IS_TRUE(t.GetCacheMode() == TargetCacheMode::Cached);
|
|
VERIFY_IS_TRUE(t.GetWriteThroughMode() == WriteThroughMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoMode() == MemoryMappedIoMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoFlushMode() == MemoryMappedIoFlushMode::Undefined);
|
|
VERIFY_IS_TRUE(t.GetZeroWriteBuffers() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThreadsPerFile(), (DWORD)1);
|
|
VERIFY_ARE_EQUAL(t.GetThreadStrideInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetCreateFile() == true);
|
|
VERIFY_ARE_EQUAL(t.GetFileSize(), 23);
|
|
VERIFY_ARE_EQUAL(t.GetMaxFileSize(), (4 * 1024 * 1024));
|
|
VERIFY_ARE_EQUAL(t.GetWriteRatio(), (DWORD)84);
|
|
VERIFY_IS_TRUE(t.GetUseBurstSize() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBurstSize(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(t.GetThinkTime(), (DWORD)0);
|
|
VERIFY_IS_TRUE(t.GetEnableThinkTime() == false);
|
|
VERIFY_IS_TRUE(t.GetSequentialScanHint() == false);
|
|
VERIFY_IS_TRUE(t.GetRandomAccessHint() == false);
|
|
VERIFY_IS_TRUE(t.GetTemporaryFileHint() == false);
|
|
VERIFY_IS_TRUE(t.GetUseLargePages() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThroughputInBytesPerMillisecond(), (DWORD)0);
|
|
}
|
|
|
|
void CmdLineParserUnitTests::TestParseCmdLineBurstSizeAndThinkTime()
|
|
{
|
|
CmdLineParser p;
|
|
Profile profile;
|
|
struct Synchronization s = {};
|
|
const char *argv[] = { "foo", "-b128K", "-w84", "-i23", "-j567", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
VERIFY_IS_TRUE(profile.GetVerbose() == false);
|
|
VERIFY_IS_TRUE(profile.GetProgress() == 0);
|
|
VERIFY_IS_TRUE(profile.GetCmdLine().compare("foo -b128K -w84 -i23 -j567 testfile.dat") == 0);
|
|
VERIFY_IS_TRUE(profile.GetEtwEnabled() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwProcess() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwThread() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwImageLoad() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwDiskIO() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryPageFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryHardFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwNetwork() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwRegistry() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePagedMemory() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePerfTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseSystemTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseCyclesCounter() == false);
|
|
|
|
vector<TimeSpan> vSpans(profile.GetTimeSpans());
|
|
VERIFY_ARE_EQUAL(vSpans.size(), (size_t)1);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetDuration(), (UINT32)10);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetWarmup(), (UINT32)5);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetCooldown(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRandSeed(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetThreadCount(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRequestCount(), (DWORD)0);
|
|
VERIFY_IS_TRUE(vSpans[0].GetDisableAffinity() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetCompletionRoutines() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetMeasureLatency() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetRandomWriteData() == false);
|
|
|
|
const auto& vAffinity(vSpans[0].GetAffinityAssignments());
|
|
VERIFY_ARE_EQUAL(vAffinity.size(), (size_t)0);
|
|
|
|
vector<Target> vTargets(vSpans[0].GetTargets());
|
|
VERIFY_ARE_EQUAL(vTargets.size(), (size_t)1);
|
|
Target t(vTargets[0]);
|
|
|
|
VERIFY_IS_TRUE(t.GetPath().compare("testfile.dat") == 0);
|
|
VERIFY_ARE_EQUAL(t.GetBlockSizeInBytes(), (DWORD)(128 * 1024));
|
|
VERIFY_ARE_EQUAL(t.GetRequestCount(), (DWORD)2);
|
|
VERIFY_IS_TRUE(t.GetRandomRatio() == 0);
|
|
VERIFY_IS_TRUE(t.GetUseInterlockedSequential() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBlockAlignmentInBytes(), t.GetBlockSizeInBytes());
|
|
VERIFY_ARE_EQUAL(t.GetBaseFileOffsetInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetUseParallelAsyncIO() == false);
|
|
VERIFY_IS_TRUE(t.GetCacheMode() == TargetCacheMode::Cached);
|
|
VERIFY_IS_TRUE(t.GetWriteThroughMode() == WriteThroughMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoMode() == MemoryMappedIoMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoFlushMode() == MemoryMappedIoFlushMode::Undefined);
|
|
VERIFY_IS_TRUE(t.GetZeroWriteBuffers() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThreadsPerFile(), (DWORD)1);
|
|
VERIFY_ARE_EQUAL(t.GetThreadStrideInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetCreateFile() == false);
|
|
VERIFY_ARE_EQUAL(t.GetFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetMaxFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetWriteRatio(), (DWORD)84);
|
|
VERIFY_IS_TRUE(t.GetUseBurstSize() == true);
|
|
VERIFY_ARE_EQUAL(t.GetBurstSize(), (DWORD)23);
|
|
VERIFY_ARE_EQUAL(t.GetThinkTime(), (DWORD)567);
|
|
VERIFY_IS_TRUE(t.GetEnableThinkTime() == true);
|
|
VERIFY_IS_TRUE(t.GetSequentialScanHint() == false);
|
|
VERIFY_IS_TRUE(t.GetRandomAccessHint() == false);
|
|
VERIFY_IS_TRUE(t.GetTemporaryFileHint() == false);
|
|
VERIFY_IS_TRUE(t.GetUseLargePages() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThroughputInBytesPerMillisecond(), (DWORD)0);
|
|
}
|
|
|
|
void CmdLineParserUnitTests::TestParseCmdLineTotalThreadCountAndThroughput()
|
|
{
|
|
CmdLineParser p;
|
|
Profile profile;
|
|
struct Synchronization s = {};
|
|
const char *argv[] = { "foo", "-b128K", "-w84", "-F23", "-g567", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
VERIFY_IS_TRUE(profile.GetVerbose() == false);
|
|
VERIFY_IS_TRUE(profile.GetProgress() == 0);
|
|
VERIFY_IS_TRUE(profile.GetCmdLine().compare("foo -b128K -w84 -F23 -g567 testfile.dat") == 0);
|
|
VERIFY_IS_TRUE(profile.GetEtwEnabled() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwProcess() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwThread() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwImageLoad() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwDiskIO() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryPageFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryHardFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwNetwork() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwRegistry() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePagedMemory() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePerfTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseSystemTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseCyclesCounter() == false);
|
|
|
|
vector<TimeSpan> vSpans(profile.GetTimeSpans());
|
|
VERIFY_ARE_EQUAL(vSpans.size(), (size_t)1);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetDuration(), (UINT32)10);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetWarmup(), (UINT32)5);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetCooldown(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRandSeed(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetThreadCount(), (DWORD)23);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRequestCount(), (DWORD)0);
|
|
VERIFY_IS_TRUE(vSpans[0].GetDisableAffinity() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetCompletionRoutines() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetMeasureLatency() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetRandomWriteData() == false);
|
|
|
|
const auto& vAffinity(vSpans[0].GetAffinityAssignments());
|
|
VERIFY_ARE_EQUAL(vAffinity.size(), (size_t)0);
|
|
|
|
vector<Target> vTargets(vSpans[0].GetTargets());
|
|
VERIFY_ARE_EQUAL(vTargets.size(), (size_t)1);
|
|
Target t(vTargets[0]);
|
|
|
|
VERIFY_IS_TRUE(t.GetPath().compare("testfile.dat") == 0);
|
|
VERIFY_ARE_EQUAL(t.GetBlockSizeInBytes(), (DWORD)(128 * 1024));
|
|
VERIFY_ARE_EQUAL(t.GetRequestCount(), (DWORD)2);
|
|
VERIFY_IS_TRUE(t.GetRandomRatio() == 0);
|
|
VERIFY_IS_TRUE(t.GetUseInterlockedSequential() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBlockAlignmentInBytes(), t.GetBlockSizeInBytes());
|
|
VERIFY_ARE_EQUAL(t.GetBaseFileOffsetInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetUseParallelAsyncIO() == false);
|
|
VERIFY_IS_TRUE(t.GetCacheMode() == TargetCacheMode::Cached);
|
|
VERIFY_IS_TRUE(t.GetWriteThroughMode() == WriteThroughMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoMode() == MemoryMappedIoMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoFlushMode() == MemoryMappedIoFlushMode::Undefined);
|
|
VERIFY_IS_TRUE(t.GetZeroWriteBuffers() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThreadsPerFile(), (DWORD)1);
|
|
VERIFY_ARE_EQUAL(t.GetThreadStrideInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetCreateFile() == false);
|
|
VERIFY_ARE_EQUAL(t.GetFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetMaxFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetWriteRatio(), (DWORD)84);
|
|
VERIFY_IS_TRUE(t.GetUseBurstSize() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBurstSize(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(t.GetThinkTime(), (DWORD)0);
|
|
VERIFY_IS_TRUE(t.GetEnableThinkTime() == false);
|
|
VERIFY_IS_TRUE(t.GetSequentialScanHint() == false);
|
|
VERIFY_IS_TRUE(t.GetRandomAccessHint() == false);
|
|
VERIFY_IS_TRUE(t.GetTemporaryFileHint() == false);
|
|
VERIFY_IS_TRUE(t.GetUseLargePages() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThroughputInBytesPerMillisecond(), (DWORD)567);
|
|
}
|
|
|
|
void CmdLineParserUnitTests::TestParseCmdLineRandomIOAlignment()
|
|
{
|
|
CmdLineParser p;
|
|
Profile profile;
|
|
struct Synchronization s = {};
|
|
const char *argv[] = { "foo", "-b128K", "-w84", "-r23M", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
VERIFY_IS_TRUE(profile.GetVerbose() == false);
|
|
VERIFY_IS_TRUE(profile.GetProgress() == 0);
|
|
VERIFY_IS_TRUE(profile.GetCmdLine().compare("foo -b128K -w84 -r23M testfile.dat") == 0);
|
|
VERIFY_IS_TRUE(profile.GetEtwEnabled() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwProcess() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwThread() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwImageLoad() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwDiskIO() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryPageFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryHardFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwNetwork() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwRegistry() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePagedMemory() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePerfTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseSystemTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseCyclesCounter() == false);
|
|
|
|
vector<TimeSpan> vSpans(profile.GetTimeSpans());
|
|
VERIFY_ARE_EQUAL(vSpans.size(), (size_t)1);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetDuration(), (UINT32)10);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetWarmup(), (UINT32)5);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetCooldown(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRandSeed(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetThreadCount(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRequestCount(), (DWORD)0);
|
|
VERIFY_IS_TRUE(vSpans[0].GetDisableAffinity() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetCompletionRoutines() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetMeasureLatency() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetRandomWriteData() == false);
|
|
|
|
const auto& vAffinity(vSpans[0].GetAffinityAssignments());
|
|
VERIFY_ARE_EQUAL(vAffinity.size(), (size_t)0);
|
|
|
|
vector<Target> vTargets(vSpans[0].GetTargets());
|
|
VERIFY_ARE_EQUAL(vTargets.size(), (size_t)1);
|
|
Target t(vTargets[0]);
|
|
|
|
VERIFY_IS_TRUE(t.GetPath().compare("testfile.dat") == 0);
|
|
VERIFY_ARE_EQUAL(t.GetBlockSizeInBytes(), (DWORD)(128 * 1024));
|
|
VERIFY_ARE_EQUAL(t.GetRequestCount(), (DWORD)2);
|
|
VERIFY_IS_TRUE(t.GetRandomRatio() == 100);
|
|
VERIFY_IS_TRUE(t.GetUseInterlockedSequential() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBlockAlignmentInBytes(), (23 * 1024 * 1024));
|
|
VERIFY_ARE_EQUAL(t.GetBaseFileOffsetInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetUseParallelAsyncIO() == false);
|
|
VERIFY_IS_TRUE(t.GetCacheMode() == TargetCacheMode::Cached);
|
|
VERIFY_IS_TRUE(t.GetWriteThroughMode() == WriteThroughMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoMode() == MemoryMappedIoMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoFlushMode() == MemoryMappedIoFlushMode::Undefined);
|
|
VERIFY_IS_TRUE(t.GetZeroWriteBuffers() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThreadsPerFile(), (DWORD)1);
|
|
VERIFY_ARE_EQUAL(t.GetThreadStrideInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetCreateFile() == false);
|
|
VERIFY_ARE_EQUAL(t.GetFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetMaxFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetWriteRatio(), (DWORD)84);
|
|
VERIFY_IS_TRUE(t.GetUseBurstSize() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBurstSize(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(t.GetThinkTime(), (DWORD)0);
|
|
VERIFY_IS_TRUE(t.GetEnableThinkTime() == false);
|
|
VERIFY_IS_TRUE(t.GetSequentialScanHint() == false);
|
|
VERIFY_IS_TRUE(t.GetRandomAccessHint() == false);
|
|
VERIFY_IS_TRUE(t.GetTemporaryFileHint() == false);
|
|
VERIFY_IS_TRUE(t.GetUseLargePages() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThroughputInBytesPerMillisecond(), (DWORD)0);
|
|
}
|
|
|
|
void CmdLineParserUnitTests::TestParseCmdLineStrideSize()
|
|
{
|
|
CmdLineParser p;
|
|
Profile profile;
|
|
struct Synchronization s = {};
|
|
const char *argv[] = { "foo", "-b128K", "-w84", "-s567K", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
VERIFY_IS_TRUE(profile.GetVerbose() == false);
|
|
VERIFY_IS_TRUE(profile.GetProgress() == 0);
|
|
VERIFY_IS_TRUE(profile.GetCmdLine().compare("foo -b128K -w84 -s567K testfile.dat") == 0);
|
|
VERIFY_IS_TRUE(profile.GetEtwEnabled() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwProcess() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwThread() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwImageLoad() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwDiskIO() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryPageFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryHardFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwNetwork() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwRegistry() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePagedMemory() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePerfTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseSystemTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseCyclesCounter() == false);
|
|
|
|
vector<TimeSpan> vSpans(profile.GetTimeSpans());
|
|
VERIFY_ARE_EQUAL(vSpans.size(), (size_t)1);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetDuration(), (UINT32)10);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetWarmup(), (UINT32)5);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetCooldown(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRandSeed(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetThreadCount(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRequestCount(), (DWORD)0);
|
|
VERIFY_IS_TRUE(vSpans[0].GetDisableAffinity() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetCompletionRoutines() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetMeasureLatency() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetRandomWriteData() == false);
|
|
|
|
const auto& vAffinity(vSpans[0].GetAffinityAssignments());
|
|
VERIFY_ARE_EQUAL(vAffinity.size(), (size_t)0);
|
|
|
|
vector<Target> vTargets(vSpans[0].GetTargets());
|
|
VERIFY_ARE_EQUAL(vTargets.size(), (size_t)1);
|
|
Target t(vTargets[0]);
|
|
|
|
VERIFY_IS_TRUE(t.GetPath().compare("testfile.dat") == 0);
|
|
VERIFY_ARE_EQUAL(t.GetBlockSizeInBytes(), (DWORD)(128 * 1024));
|
|
VERIFY_ARE_EQUAL(t.GetRequestCount(), (DWORD)2);
|
|
VERIFY_IS_TRUE(t.GetRandomRatio() == 0);
|
|
VERIFY_IS_TRUE(t.GetUseInterlockedSequential() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBlockAlignmentInBytes(), (567 * 1024));
|
|
VERIFY_ARE_EQUAL(t.GetBaseFileOffsetInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetUseParallelAsyncIO() == false);
|
|
VERIFY_IS_TRUE(t.GetCacheMode() == TargetCacheMode::Cached);
|
|
VERIFY_IS_TRUE(t.GetWriteThroughMode() == WriteThroughMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoMode() == MemoryMappedIoMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoFlushMode() == MemoryMappedIoFlushMode::Undefined);
|
|
VERIFY_IS_TRUE(t.GetZeroWriteBuffers() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThreadsPerFile(), (DWORD)1);
|
|
VERIFY_ARE_EQUAL(t.GetThreadStrideInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetCreateFile() == false);
|
|
VERIFY_ARE_EQUAL(t.GetFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetMaxFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetWriteRatio(), (DWORD)84);
|
|
VERIFY_IS_TRUE(t.GetUseBurstSize() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBurstSize(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(t.GetThinkTime(), (DWORD)0);
|
|
VERIFY_IS_TRUE(t.GetEnableThinkTime() == false);
|
|
VERIFY_IS_TRUE(t.GetSequentialScanHint() == false);
|
|
VERIFY_IS_TRUE(t.GetRandomAccessHint() == false);
|
|
VERIFY_IS_TRUE(t.GetTemporaryFileHint() == false);
|
|
VERIFY_IS_TRUE(t.GetUseLargePages() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThroughputInBytesPerMillisecond(), (DWORD)0);
|
|
}
|
|
|
|
void CmdLineParserUnitTests::TestParseCmdLineThreadsPerFileAndThreadStride()
|
|
{
|
|
CmdLineParser p;
|
|
Profile profile;
|
|
struct Synchronization s = {};
|
|
const char *argv[] = { "foo", "-b128K", "-w84", "-t23", "-T512K", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
VERIFY_IS_TRUE(profile.GetVerbose() == false);
|
|
VERIFY_IS_TRUE(profile.GetProgress() == 0);
|
|
VERIFY_IS_TRUE(profile.GetCmdLine().compare("foo -b128K -w84 -t23 -T512K testfile.dat") == 0);
|
|
VERIFY_IS_TRUE(profile.GetEtwEnabled() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwProcess() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwThread() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwImageLoad() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwDiskIO() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryPageFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryHardFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwNetwork() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwRegistry() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePagedMemory() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePerfTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseSystemTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseCyclesCounter() == false);
|
|
|
|
vector<TimeSpan> vSpans(profile.GetTimeSpans());
|
|
VERIFY_ARE_EQUAL(vSpans.size(), (size_t)1);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetDuration(), (UINT32)10);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetWarmup(), (UINT32)5);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetCooldown(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRandSeed(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetThreadCount(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRequestCount(), (DWORD)0);
|
|
VERIFY_IS_TRUE(vSpans[0].GetDisableAffinity() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetCompletionRoutines() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetMeasureLatency() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetRandomWriteData() == false);
|
|
|
|
const auto& vAffinity(vSpans[0].GetAffinityAssignments());
|
|
VERIFY_ARE_EQUAL(vAffinity.size(), (size_t)0);
|
|
|
|
vector<Target> vTargets(vSpans[0].GetTargets());
|
|
VERIFY_ARE_EQUAL(vTargets.size(), (size_t)1);
|
|
Target t(vTargets[0]);
|
|
|
|
VERIFY_IS_TRUE(t.GetPath().compare("testfile.dat") == 0);
|
|
VERIFY_ARE_EQUAL(t.GetBlockSizeInBytes(), (DWORD)(128 * 1024));
|
|
VERIFY_ARE_EQUAL(t.GetRequestCount(), (DWORD)2);
|
|
VERIFY_IS_TRUE(t.GetRandomRatio() == 0);
|
|
VERIFY_IS_TRUE(t.GetUseInterlockedSequential() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBlockAlignmentInBytes(), t.GetBlockSizeInBytes());
|
|
VERIFY_ARE_EQUAL(t.GetBaseFileOffsetInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetUseParallelAsyncIO() == false);
|
|
VERIFY_IS_TRUE(t.GetCacheMode() == TargetCacheMode::Cached);
|
|
VERIFY_IS_TRUE(t.GetWriteThroughMode() == WriteThroughMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoMode() == MemoryMappedIoMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoFlushMode() == MemoryMappedIoFlushMode::Undefined);
|
|
VERIFY_IS_TRUE(t.GetZeroWriteBuffers() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThreadsPerFile(), (DWORD)23);
|
|
VERIFY_ARE_EQUAL(t.GetThreadStrideInBytes(), (512 * 1024));
|
|
VERIFY_IS_TRUE(t.GetCreateFile() == false);
|
|
VERIFY_ARE_EQUAL(t.GetFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetMaxFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetWriteRatio(), (DWORD)84);
|
|
VERIFY_IS_TRUE(t.GetUseBurstSize() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBurstSize(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(t.GetThinkTime(), (DWORD)0);
|
|
VERIFY_IS_TRUE(t.GetEnableThinkTime() == false);
|
|
VERIFY_IS_TRUE(t.GetSequentialScanHint() == false);
|
|
VERIFY_IS_TRUE(t.GetRandomAccessHint() == false);
|
|
VERIFY_IS_TRUE(t.GetTemporaryFileHint() == false);
|
|
VERIFY_IS_TRUE(t.GetUseLargePages() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThroughputInBytesPerMillisecond(), (DWORD)0);
|
|
}
|
|
|
|
void CmdLineParserUnitTests::TestParseCmdLineEtwUsePagedMemory()
|
|
{
|
|
CmdLineParser p;
|
|
Profile profile;
|
|
struct Synchronization s = {};
|
|
const char *argv[] = { "foo", "-b128K", "-w84", "-ep", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
VERIFY_IS_TRUE(profile.GetVerbose() == false);
|
|
VERIFY_IS_TRUE(profile.GetProgress() == 0);
|
|
VERIFY_IS_TRUE(profile.GetCmdLine().compare("foo -b128K -w84 -ep testfile.dat") == 0);
|
|
VERIFY_IS_TRUE(profile.GetEtwEnabled() == true);
|
|
VERIFY_IS_TRUE(profile.GetEtwProcess() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwThread() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwImageLoad() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwDiskIO() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryPageFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryHardFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwNetwork() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwRegistry() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePagedMemory() == true);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePerfTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseSystemTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseCyclesCounter() == false);
|
|
|
|
vector<TimeSpan> vSpans(profile.GetTimeSpans());
|
|
VERIFY_ARE_EQUAL(vSpans.size(), (size_t)1);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetDuration(), (UINT32)10);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetWarmup(), (UINT32)5);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetCooldown(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRandSeed(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetThreadCount(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRequestCount(), (DWORD)0);
|
|
VERIFY_IS_TRUE(vSpans[0].GetDisableAffinity() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetCompletionRoutines() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetMeasureLatency() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetRandomWriteData() == false);
|
|
|
|
const auto& vAffinity(vSpans[0].GetAffinityAssignments());
|
|
VERIFY_ARE_EQUAL(vAffinity.size(), (size_t)0);
|
|
|
|
vector<Target> vTargets(vSpans[0].GetTargets());
|
|
VERIFY_ARE_EQUAL(vTargets.size(), (size_t)1);
|
|
Target t(vTargets[0]);
|
|
|
|
VERIFY_IS_TRUE(t.GetPath().compare("testfile.dat") == 0);
|
|
VERIFY_ARE_EQUAL(t.GetBlockSizeInBytes(), (DWORD)(128 * 1024));
|
|
VERIFY_ARE_EQUAL(t.GetRequestCount(), (DWORD)2);
|
|
VERIFY_IS_TRUE(t.GetRandomRatio() == 0);
|
|
VERIFY_IS_TRUE(t.GetUseInterlockedSequential() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBlockAlignmentInBytes(), t.GetBlockSizeInBytes());
|
|
VERIFY_ARE_EQUAL(t.GetBaseFileOffsetInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetUseParallelAsyncIO() == false);
|
|
VERIFY_IS_TRUE(t.GetCacheMode() == TargetCacheMode::Cached);
|
|
VERIFY_IS_TRUE(t.GetWriteThroughMode() == WriteThroughMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoMode() == MemoryMappedIoMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoFlushMode() == MemoryMappedIoFlushMode::Undefined);
|
|
VERIFY_IS_TRUE(t.GetZeroWriteBuffers() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThreadsPerFile(), (DWORD)1);
|
|
VERIFY_ARE_EQUAL(t.GetThreadStrideInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetCreateFile() == false);
|
|
VERIFY_ARE_EQUAL(t.GetFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetMaxFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetWriteRatio(), (DWORD)84);
|
|
VERIFY_IS_TRUE(t.GetUseBurstSize() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBurstSize(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(t.GetThinkTime(), (DWORD)0);
|
|
VERIFY_IS_TRUE(t.GetEnableThinkTime() == false);
|
|
VERIFY_IS_TRUE(t.GetSequentialScanHint() == false);
|
|
VERIFY_IS_TRUE(t.GetRandomAccessHint() == false);
|
|
VERIFY_IS_TRUE(t.GetTemporaryFileHint() == false);
|
|
VERIFY_IS_TRUE(t.GetUseLargePages() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThroughputInBytesPerMillisecond(), (DWORD)0);
|
|
}
|
|
|
|
void CmdLineParserUnitTests::TestParseCmdLineEtwPROCESS()
|
|
{
|
|
CmdLineParser p;
|
|
Profile profile;
|
|
struct Synchronization s = {};
|
|
const char *argv[] = { "foo", "-b128K", "-w84", "-ePROCESS", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
VERIFY_IS_TRUE(profile.GetVerbose() == false);
|
|
VERIFY_IS_TRUE(profile.GetProgress() == 0);
|
|
VERIFY_IS_TRUE(profile.GetCmdLine().compare("foo -b128K -w84 -ePROCESS testfile.dat") == 0);
|
|
VERIFY_IS_TRUE(profile.GetEtwEnabled() == true);
|
|
VERIFY_IS_TRUE(profile.GetEtwProcess() == true);
|
|
VERIFY_IS_TRUE(profile.GetEtwThread() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwImageLoad() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwDiskIO() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryPageFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryHardFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwNetwork() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwRegistry() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePagedMemory() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePerfTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseSystemTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseCyclesCounter() == false);
|
|
|
|
vector<TimeSpan> vSpans(profile.GetTimeSpans());
|
|
VERIFY_ARE_EQUAL(vSpans.size(), (size_t)1);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetDuration(), (UINT32)10);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetWarmup(), (UINT32)5);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetCooldown(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRandSeed(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetThreadCount(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRequestCount(), (DWORD)0);
|
|
VERIFY_IS_TRUE(vSpans[0].GetDisableAffinity() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetCompletionRoutines() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetMeasureLatency() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetRandomWriteData() == false);
|
|
|
|
const auto& vAffinity(vSpans[0].GetAffinityAssignments());
|
|
VERIFY_ARE_EQUAL(vAffinity.size(), (size_t)0);
|
|
|
|
vector<Target> vTargets(vSpans[0].GetTargets());
|
|
VERIFY_ARE_EQUAL(vTargets.size(), (size_t)1);
|
|
Target t(vTargets[0]);
|
|
|
|
VERIFY_IS_TRUE(t.GetPath().compare("testfile.dat") == 0);
|
|
VERIFY_ARE_EQUAL(t.GetBlockSizeInBytes(), (DWORD)(128 * 1024));
|
|
VERIFY_ARE_EQUAL(t.GetRequestCount(), (DWORD)2);
|
|
VERIFY_IS_TRUE(t.GetRandomRatio() == 0);
|
|
VERIFY_IS_TRUE(t.GetUseInterlockedSequential() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBlockAlignmentInBytes(), t.GetBlockSizeInBytes());
|
|
VERIFY_ARE_EQUAL(t.GetBaseFileOffsetInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetUseParallelAsyncIO() == false);
|
|
VERIFY_IS_TRUE(t.GetCacheMode() == TargetCacheMode::Cached);
|
|
VERIFY_IS_TRUE(t.GetWriteThroughMode() == WriteThroughMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoMode() == MemoryMappedIoMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoFlushMode() == MemoryMappedIoFlushMode::Undefined);
|
|
VERIFY_IS_TRUE(t.GetZeroWriteBuffers() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThreadsPerFile(), (DWORD)1);
|
|
VERIFY_ARE_EQUAL(t.GetThreadStrideInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetCreateFile() == false);
|
|
VERIFY_ARE_EQUAL(t.GetFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetMaxFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetWriteRatio(), (DWORD)84);
|
|
VERIFY_IS_TRUE(t.GetUseBurstSize() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBurstSize(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(t.GetThinkTime(), (DWORD)0);
|
|
VERIFY_IS_TRUE(t.GetEnableThinkTime() == false);
|
|
VERIFY_IS_TRUE(t.GetSequentialScanHint() == false);
|
|
VERIFY_IS_TRUE(t.GetRandomAccessHint() == false);
|
|
VERIFY_IS_TRUE(t.GetTemporaryFileHint() == false);
|
|
VERIFY_IS_TRUE(t.GetUseLargePages() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThroughputInBytesPerMillisecond(), (DWORD)0);
|
|
}
|
|
|
|
void CmdLineParserUnitTests::TestParseCmdLineEtwTHREAD()
|
|
{
|
|
CmdLineParser p;
|
|
Profile profile;
|
|
struct Synchronization s = {};
|
|
const char *argv[] = { "foo", "-b128K", "-w84", "-eTHREAD", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
VERIFY_IS_TRUE(profile.GetVerbose() == false);
|
|
VERIFY_IS_TRUE(profile.GetProgress() == 0);
|
|
VERIFY_IS_TRUE(profile.GetCmdLine().compare("foo -b128K -w84 -eTHREAD testfile.dat") == 0);
|
|
VERIFY_IS_TRUE(profile.GetEtwEnabled() == true);
|
|
VERIFY_IS_TRUE(profile.GetEtwProcess() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwThread() == true);
|
|
VERIFY_IS_TRUE(profile.GetEtwImageLoad() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwDiskIO() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryPageFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryHardFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwNetwork() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwRegistry() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePagedMemory() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePerfTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseSystemTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseCyclesCounter() == false);
|
|
|
|
vector<TimeSpan> vSpans(profile.GetTimeSpans());
|
|
VERIFY_ARE_EQUAL(vSpans.size(), (size_t)1);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetDuration(), (UINT32)10);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetWarmup(), (UINT32)5);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetCooldown(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRandSeed(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetThreadCount(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRequestCount(), (DWORD)0);
|
|
VERIFY_IS_TRUE(vSpans[0].GetDisableAffinity() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetCompletionRoutines() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetMeasureLatency() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetRandomWriteData() == false);
|
|
|
|
const auto& vAffinity(vSpans[0].GetAffinityAssignments());
|
|
VERIFY_ARE_EQUAL(vAffinity.size(), (size_t)0);
|
|
|
|
vector<Target> vTargets(vSpans[0].GetTargets());
|
|
VERIFY_ARE_EQUAL(vTargets.size(), (size_t)1);
|
|
Target t(vTargets[0]);
|
|
|
|
VERIFY_IS_TRUE(t.GetPath().compare("testfile.dat") == 0);
|
|
VERIFY_ARE_EQUAL(t.GetBlockSizeInBytes(), (DWORD)(128 * 1024));
|
|
VERIFY_ARE_EQUAL(t.GetRequestCount(), (DWORD)2);
|
|
VERIFY_IS_TRUE(t.GetRandomRatio() == 0);
|
|
VERIFY_IS_TRUE(t.GetUseInterlockedSequential() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBlockAlignmentInBytes(), t.GetBlockSizeInBytes());
|
|
VERIFY_ARE_EQUAL(t.GetBaseFileOffsetInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetUseParallelAsyncIO() == false);
|
|
VERIFY_IS_TRUE(t.GetCacheMode() == TargetCacheMode::Cached);
|
|
VERIFY_IS_TRUE(t.GetWriteThroughMode() == WriteThroughMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoMode() == MemoryMappedIoMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoFlushMode() == MemoryMappedIoFlushMode::Undefined);
|
|
VERIFY_IS_TRUE(t.GetZeroWriteBuffers() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThreadsPerFile(), (DWORD)1);
|
|
VERIFY_ARE_EQUAL(t.GetThreadStrideInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetCreateFile() == false);
|
|
VERIFY_ARE_EQUAL(t.GetFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetMaxFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetWriteRatio(), (DWORD)84);
|
|
VERIFY_IS_TRUE(t.GetUseBurstSize() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBurstSize(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(t.GetThinkTime(), (DWORD)0);
|
|
VERIFY_IS_TRUE(t.GetEnableThinkTime() == false);
|
|
VERIFY_IS_TRUE(t.GetSequentialScanHint() == false);
|
|
VERIFY_IS_TRUE(t.GetRandomAccessHint() == false);
|
|
VERIFY_IS_TRUE(t.GetTemporaryFileHint() == false);
|
|
VERIFY_IS_TRUE(t.GetUseLargePages() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThroughputInBytesPerMillisecond(), (DWORD)0);
|
|
}
|
|
|
|
void CmdLineParserUnitTests::TestParseCmdLineEtwIMAGE_LOAD()
|
|
{
|
|
CmdLineParser p;
|
|
Profile profile;
|
|
struct Synchronization s = {};
|
|
const char *argv[] = { "foo", "-b128K", "-w84", "-eIMAGE_LOAD", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
VERIFY_IS_TRUE(profile.GetVerbose() == false);
|
|
VERIFY_IS_TRUE(profile.GetProgress() == 0);
|
|
VERIFY_IS_TRUE(profile.GetCmdLine().compare("foo -b128K -w84 -eIMAGE_LOAD testfile.dat") == 0);
|
|
VERIFY_IS_TRUE(profile.GetEtwEnabled() == true);
|
|
VERIFY_IS_TRUE(profile.GetEtwProcess() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwThread() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwImageLoad() == true);
|
|
VERIFY_IS_TRUE(profile.GetEtwDiskIO() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryPageFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryHardFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwNetwork() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwRegistry() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePagedMemory() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePerfTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseSystemTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseCyclesCounter() == false);
|
|
|
|
vector<TimeSpan> vSpans(profile.GetTimeSpans());
|
|
VERIFY_ARE_EQUAL(vSpans.size(), (size_t)1);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetDuration(), (UINT32)10);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetWarmup(), (UINT32)5);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetCooldown(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRandSeed(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetThreadCount(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRequestCount(), (DWORD)0);
|
|
VERIFY_IS_TRUE(vSpans[0].GetDisableAffinity() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetCompletionRoutines() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetMeasureLatency() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetRandomWriteData() == false);
|
|
|
|
const auto& vAffinity(vSpans[0].GetAffinityAssignments());
|
|
VERIFY_ARE_EQUAL(vAffinity.size(), (size_t)0);
|
|
|
|
vector<Target> vTargets(vSpans[0].GetTargets());
|
|
VERIFY_ARE_EQUAL(vTargets.size(), (size_t)1);
|
|
Target t(vTargets[0]);
|
|
|
|
VERIFY_IS_TRUE(t.GetPath().compare("testfile.dat") == 0);
|
|
VERIFY_ARE_EQUAL(t.GetBlockSizeInBytes(), (DWORD)(128 * 1024));
|
|
VERIFY_ARE_EQUAL(t.GetRequestCount(), (DWORD)2);
|
|
VERIFY_IS_TRUE(t.GetRandomRatio() == 0);
|
|
VERIFY_IS_TRUE(t.GetUseInterlockedSequential() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBlockAlignmentInBytes(), t.GetBlockSizeInBytes());
|
|
VERIFY_ARE_EQUAL(t.GetBaseFileOffsetInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetUseParallelAsyncIO() == false);
|
|
VERIFY_IS_TRUE(t.GetCacheMode() == TargetCacheMode::Cached);
|
|
VERIFY_IS_TRUE(t.GetWriteThroughMode() == WriteThroughMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoMode() == MemoryMappedIoMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoFlushMode() == MemoryMappedIoFlushMode::Undefined);
|
|
VERIFY_IS_TRUE(t.GetZeroWriteBuffers() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThreadsPerFile(), (DWORD)1);
|
|
VERIFY_ARE_EQUAL(t.GetThreadStrideInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetCreateFile() == false);
|
|
VERIFY_ARE_EQUAL(t.GetFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetMaxFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetWriteRatio(), (DWORD)84);
|
|
VERIFY_IS_TRUE(t.GetUseBurstSize() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBurstSize(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(t.GetThinkTime(), (DWORD)0);
|
|
VERIFY_IS_TRUE(t.GetEnableThinkTime() == false);
|
|
VERIFY_IS_TRUE(t.GetSequentialScanHint() == false);
|
|
VERIFY_IS_TRUE(t.GetRandomAccessHint() == false);
|
|
VERIFY_IS_TRUE(t.GetTemporaryFileHint() == false);
|
|
VERIFY_IS_TRUE(t.GetUseLargePages() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThroughputInBytesPerMillisecond(), (DWORD)0);
|
|
}
|
|
|
|
void CmdLineParserUnitTests::TestParseCmdLineEtwDISK_IO()
|
|
{
|
|
CmdLineParser p;
|
|
Profile profile;
|
|
struct Synchronization s = {};
|
|
const char *argv[] = { "foo", "-b128K", "-w84", "-eDISK_IO", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
VERIFY_IS_TRUE(profile.GetVerbose() == false);
|
|
VERIFY_IS_TRUE(profile.GetProgress() == 0);
|
|
VERIFY_IS_TRUE(profile.GetCmdLine().compare("foo -b128K -w84 -eDISK_IO testfile.dat") == 0);
|
|
VERIFY_IS_TRUE(profile.GetEtwEnabled() == true);
|
|
VERIFY_IS_TRUE(profile.GetEtwProcess() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwThread() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwImageLoad() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwDiskIO() == true);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryPageFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryHardFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwNetwork() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwRegistry() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePagedMemory() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePerfTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseSystemTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseCyclesCounter() == false);
|
|
|
|
vector<TimeSpan> vSpans(profile.GetTimeSpans());
|
|
VERIFY_ARE_EQUAL(vSpans.size(), (size_t)1);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetDuration(), (UINT32)10);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetWarmup(), (UINT32)5);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetCooldown(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRandSeed(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetThreadCount(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRequestCount(), (DWORD)0);
|
|
VERIFY_IS_TRUE(vSpans[0].GetDisableAffinity() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetCompletionRoutines() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetMeasureLatency() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetRandomWriteData() == false);
|
|
|
|
const auto& vAffinity(vSpans[0].GetAffinityAssignments());
|
|
VERIFY_ARE_EQUAL(vAffinity.size(), (size_t)0);
|
|
|
|
vector<Target> vTargets(vSpans[0].GetTargets());
|
|
VERIFY_ARE_EQUAL(vTargets.size(), (size_t)1);
|
|
Target t(vTargets[0]);
|
|
|
|
VERIFY_IS_TRUE(t.GetPath().compare("testfile.dat") == 0);
|
|
VERIFY_ARE_EQUAL(t.GetBlockSizeInBytes(), (DWORD)(128 * 1024));
|
|
VERIFY_ARE_EQUAL(t.GetRequestCount(), (DWORD)2);
|
|
VERIFY_IS_TRUE(t.GetRandomRatio() == 0);
|
|
VERIFY_IS_TRUE(t.GetUseInterlockedSequential() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBlockAlignmentInBytes(), t.GetBlockSizeInBytes());
|
|
VERIFY_ARE_EQUAL(t.GetBaseFileOffsetInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetUseParallelAsyncIO() == false);
|
|
VERIFY_IS_TRUE(t.GetCacheMode() == TargetCacheMode::Cached);
|
|
VERIFY_IS_TRUE(t.GetWriteThroughMode() == WriteThroughMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoMode() == MemoryMappedIoMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoFlushMode() == MemoryMappedIoFlushMode::Undefined);
|
|
VERIFY_IS_TRUE(t.GetZeroWriteBuffers() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThreadsPerFile(), (DWORD)1);
|
|
VERIFY_ARE_EQUAL(t.GetThreadStrideInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetCreateFile() == false);
|
|
VERIFY_ARE_EQUAL(t.GetFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetMaxFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetWriteRatio(), (DWORD)84);
|
|
VERIFY_IS_TRUE(t.GetUseBurstSize() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBurstSize(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(t.GetThinkTime(), (DWORD)0);
|
|
VERIFY_IS_TRUE(t.GetEnableThinkTime() == false);
|
|
VERIFY_IS_TRUE(t.GetSequentialScanHint() == false);
|
|
VERIFY_IS_TRUE(t.GetRandomAccessHint() == false);
|
|
VERIFY_IS_TRUE(t.GetTemporaryFileHint() == false);
|
|
VERIFY_IS_TRUE(t.GetUseLargePages() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThroughputInBytesPerMillisecond(), (DWORD)0);
|
|
}
|
|
|
|
void CmdLineParserUnitTests::TestParseCmdLineEtwNETWORK()
|
|
{
|
|
CmdLineParser p;
|
|
Profile profile;
|
|
struct Synchronization s = {};
|
|
const char *argv[] = { "foo", "-b128K", "-w84", "-eNETWORK", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
VERIFY_IS_TRUE(profile.GetVerbose() == false);
|
|
VERIFY_IS_TRUE(profile.GetProgress() == 0);
|
|
VERIFY_IS_TRUE(profile.GetCmdLine().compare("foo -b128K -w84 -eNETWORK testfile.dat") == 0);
|
|
VERIFY_IS_TRUE(profile.GetEtwEnabled() == true);
|
|
VERIFY_IS_TRUE(profile.GetEtwProcess() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwThread() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwImageLoad() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwDiskIO() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryPageFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryHardFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwNetwork() == true);
|
|
VERIFY_IS_TRUE(profile.GetEtwRegistry() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePagedMemory() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePerfTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseSystemTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseCyclesCounter() == false);
|
|
|
|
vector<TimeSpan> vSpans(profile.GetTimeSpans());
|
|
VERIFY_ARE_EQUAL(vSpans.size(), (size_t)1);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetDuration(), (UINT32)10);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetWarmup(), (UINT32)5);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetCooldown(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRandSeed(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetThreadCount(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRequestCount(), (DWORD)0);
|
|
VERIFY_IS_TRUE(vSpans[0].GetDisableAffinity() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetCompletionRoutines() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetMeasureLatency() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetRandomWriteData() == false);
|
|
|
|
const auto& vAffinity(vSpans[0].GetAffinityAssignments());
|
|
VERIFY_ARE_EQUAL(vAffinity.size(), (size_t)0);
|
|
|
|
vector<Target> vTargets(vSpans[0].GetTargets());
|
|
VERIFY_ARE_EQUAL(vTargets.size(), (size_t)1);
|
|
Target t(vTargets[0]);
|
|
|
|
VERIFY_IS_TRUE(t.GetPath().compare("testfile.dat") == 0);
|
|
VERIFY_ARE_EQUAL(t.GetBlockSizeInBytes(), (DWORD)(128 * 1024));
|
|
VERIFY_ARE_EQUAL(t.GetRequestCount(), (DWORD)2);
|
|
VERIFY_IS_TRUE(t.GetRandomRatio() == 0);
|
|
VERIFY_IS_TRUE(t.GetUseInterlockedSequential() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBlockAlignmentInBytes(), t.GetBlockSizeInBytes());
|
|
VERIFY_ARE_EQUAL(t.GetBaseFileOffsetInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetUseParallelAsyncIO() == false);
|
|
VERIFY_IS_TRUE(t.GetCacheMode() == TargetCacheMode::Cached);
|
|
VERIFY_IS_TRUE(t.GetWriteThroughMode() == WriteThroughMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoMode() == MemoryMappedIoMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoFlushMode() == MemoryMappedIoFlushMode::Undefined);
|
|
VERIFY_IS_TRUE(t.GetZeroWriteBuffers() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThreadsPerFile(), (DWORD)1);
|
|
VERIFY_ARE_EQUAL(t.GetThreadStrideInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetCreateFile() == false);
|
|
VERIFY_ARE_EQUAL(t.GetFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetMaxFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetWriteRatio(), (DWORD)84);
|
|
VERIFY_IS_TRUE(t.GetUseBurstSize() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBurstSize(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(t.GetThinkTime(), (DWORD)0);
|
|
VERIFY_IS_TRUE(t.GetEnableThinkTime() == false);
|
|
VERIFY_IS_TRUE(t.GetSequentialScanHint() == false);
|
|
VERIFY_IS_TRUE(t.GetRandomAccessHint() == false);
|
|
VERIFY_IS_TRUE(t.GetTemporaryFileHint() == false);
|
|
VERIFY_IS_TRUE(t.GetUseLargePages() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThroughputInBytesPerMillisecond(), (DWORD)0);
|
|
}
|
|
|
|
void CmdLineParserUnitTests::TestParseCmdLineEtwREGISTRY()
|
|
{
|
|
CmdLineParser p;
|
|
Profile profile;
|
|
struct Synchronization s = {};
|
|
const char *argv[] = { "foo", "-b128K", "-w84", "-eREGISTRY", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
VERIFY_IS_TRUE(profile.GetVerbose() == false);
|
|
VERIFY_IS_TRUE(profile.GetProgress() == 0);
|
|
VERIFY_IS_TRUE(profile.GetCmdLine().compare("foo -b128K -w84 -eREGISTRY testfile.dat") == 0);
|
|
VERIFY_IS_TRUE(profile.GetEtwEnabled() == true);
|
|
VERIFY_IS_TRUE(profile.GetEtwProcess() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwThread() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwImageLoad() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwDiskIO() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryPageFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryHardFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwNetwork() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwRegistry() == true);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePagedMemory() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePerfTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseSystemTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseCyclesCounter() == false);
|
|
|
|
vector<TimeSpan> vSpans(profile.GetTimeSpans());
|
|
VERIFY_ARE_EQUAL(vSpans.size(), (size_t)1);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetDuration(), (UINT32)10);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetWarmup(), (UINT32)5);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetCooldown(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRandSeed(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetThreadCount(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRequestCount(), (DWORD)0);
|
|
VERIFY_IS_TRUE(vSpans[0].GetDisableAffinity() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetCompletionRoutines() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetMeasureLatency() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetRandomWriteData() == false);
|
|
|
|
const auto& vAffinity(vSpans[0].GetAffinityAssignments());
|
|
VERIFY_ARE_EQUAL(vAffinity.size(), (size_t)0);
|
|
|
|
vector<Target> vTargets(vSpans[0].GetTargets());
|
|
VERIFY_ARE_EQUAL(vTargets.size(), (size_t)1);
|
|
Target t(vTargets[0]);
|
|
|
|
VERIFY_IS_TRUE(t.GetPath().compare("testfile.dat") == 0);
|
|
VERIFY_ARE_EQUAL(t.GetBlockSizeInBytes(), (DWORD)(128 * 1024));
|
|
VERIFY_ARE_EQUAL(t.GetRequestCount(), (DWORD)2);
|
|
VERIFY_IS_TRUE(t.GetRandomRatio() == 0);
|
|
VERIFY_IS_TRUE(t.GetUseInterlockedSequential() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBlockAlignmentInBytes(), t.GetBlockSizeInBytes());
|
|
VERIFY_ARE_EQUAL(t.GetBaseFileOffsetInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetUseParallelAsyncIO() == false);
|
|
VERIFY_IS_TRUE(t.GetCacheMode() == TargetCacheMode::Cached);
|
|
VERIFY_IS_TRUE(t.GetWriteThroughMode() == WriteThroughMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoMode() == MemoryMappedIoMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoFlushMode() == MemoryMappedIoFlushMode::Undefined);
|
|
VERIFY_IS_TRUE(t.GetZeroWriteBuffers() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThreadsPerFile(), (DWORD)1);
|
|
VERIFY_ARE_EQUAL(t.GetThreadStrideInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetCreateFile() == false);
|
|
VERIFY_ARE_EQUAL(t.GetFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetMaxFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetWriteRatio(), (DWORD)84);
|
|
VERIFY_IS_TRUE(t.GetUseBurstSize() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBurstSize(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(t.GetThinkTime(), (DWORD)0);
|
|
VERIFY_IS_TRUE(t.GetEnableThinkTime() == false);
|
|
VERIFY_IS_TRUE(t.GetSequentialScanHint() == false);
|
|
VERIFY_IS_TRUE(t.GetRandomAccessHint() == false);
|
|
VERIFY_IS_TRUE(t.GetTemporaryFileHint() == false);
|
|
VERIFY_IS_TRUE(t.GetUseLargePages() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThroughputInBytesPerMillisecond(), (DWORD)0);
|
|
}
|
|
|
|
void CmdLineParserUnitTests::TestParseCmdLineEtwMEMORY_PAGE_FAULTS()
|
|
{
|
|
CmdLineParser p;
|
|
Profile profile;
|
|
struct Synchronization s = {};
|
|
const char *argv[] = { "foo", "-b128K", "-w84", "-eMEMORY_PAGE_FAULTS", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
VERIFY_IS_TRUE(profile.GetVerbose() == false);
|
|
VERIFY_IS_TRUE(profile.GetProgress() == 0);
|
|
VERIFY_IS_TRUE(profile.GetCmdLine().compare("foo -b128K -w84 -eMEMORY_PAGE_FAULTS testfile.dat") == 0);
|
|
VERIFY_IS_TRUE(profile.GetEtwEnabled() == true);
|
|
VERIFY_IS_TRUE(profile.GetEtwProcess() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwThread() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwImageLoad() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwDiskIO() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryPageFaults() == true);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryHardFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwNetwork() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwRegistry() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePagedMemory() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePerfTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseSystemTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseCyclesCounter() == false);
|
|
|
|
vector<TimeSpan> vSpans(profile.GetTimeSpans());
|
|
VERIFY_ARE_EQUAL(vSpans.size(), (size_t)1);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetDuration(), (UINT32)10);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetWarmup(), (UINT32)5);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetCooldown(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRandSeed(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetThreadCount(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRequestCount(), (DWORD)0);
|
|
VERIFY_IS_TRUE(vSpans[0].GetDisableAffinity() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetCompletionRoutines() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetMeasureLatency() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetRandomWriteData() == false);
|
|
|
|
const auto& vAffinity(vSpans[0].GetAffinityAssignments());
|
|
VERIFY_ARE_EQUAL(vAffinity.size(), (size_t)0);
|
|
|
|
vector<Target> vTargets(vSpans[0].GetTargets());
|
|
VERIFY_ARE_EQUAL(vTargets.size(), (size_t)1);
|
|
Target t(vTargets[0]);
|
|
|
|
VERIFY_IS_TRUE(t.GetPath().compare("testfile.dat") == 0);
|
|
VERIFY_ARE_EQUAL(t.GetBlockSizeInBytes(), (DWORD)(128 * 1024));
|
|
VERIFY_ARE_EQUAL(t.GetRequestCount(), (DWORD)2);
|
|
VERIFY_IS_TRUE(t.GetRandomRatio() == 0);
|
|
VERIFY_IS_TRUE(t.GetUseInterlockedSequential() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBlockAlignmentInBytes(), t.GetBlockSizeInBytes());
|
|
VERIFY_ARE_EQUAL(t.GetBaseFileOffsetInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetUseParallelAsyncIO() == false);
|
|
VERIFY_IS_TRUE(t.GetCacheMode() == TargetCacheMode::Cached);
|
|
VERIFY_IS_TRUE(t.GetWriteThroughMode() == WriteThroughMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoMode() == MemoryMappedIoMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoFlushMode() == MemoryMappedIoFlushMode::Undefined);
|
|
VERIFY_IS_TRUE(t.GetZeroWriteBuffers() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThreadsPerFile(), (DWORD)1);
|
|
VERIFY_ARE_EQUAL(t.GetThreadStrideInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetCreateFile() == false);
|
|
VERIFY_ARE_EQUAL(t.GetFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetMaxFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetWriteRatio(), (DWORD)84);
|
|
VERIFY_IS_TRUE(t.GetUseBurstSize() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBurstSize(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(t.GetThinkTime(), (DWORD)0);
|
|
VERIFY_IS_TRUE(t.GetEnableThinkTime() == false);
|
|
VERIFY_IS_TRUE(t.GetSequentialScanHint() == false);
|
|
VERIFY_IS_TRUE(t.GetRandomAccessHint() == false);
|
|
VERIFY_IS_TRUE(t.GetTemporaryFileHint() == false);
|
|
VERIFY_IS_TRUE(t.GetUseLargePages() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThroughputInBytesPerMillisecond(), (DWORD)0);
|
|
}
|
|
|
|
void CmdLineParserUnitTests::TestParseCmdLineEtwMEMORY_HARD_FAULTS()
|
|
{
|
|
CmdLineParser p;
|
|
Profile profile;
|
|
struct Synchronization s = {};
|
|
const char *argv[] = { "foo", "-b128K", "-w84", "-eMEMORY_HARD_FAULTS", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
VERIFY_IS_TRUE(profile.GetVerbose() == false);
|
|
VERIFY_IS_TRUE(profile.GetProgress() == 0);
|
|
VERIFY_IS_TRUE(profile.GetCmdLine().compare("foo -b128K -w84 -eMEMORY_HARD_FAULTS testfile.dat") == 0);
|
|
VERIFY_IS_TRUE(profile.GetEtwEnabled() == true);
|
|
VERIFY_IS_TRUE(profile.GetEtwProcess() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwThread() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwImageLoad() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwDiskIO() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryPageFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryHardFaults() == true);
|
|
VERIFY_IS_TRUE(profile.GetEtwNetwork() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwRegistry() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePagedMemory() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePerfTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseSystemTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseCyclesCounter() == false);
|
|
|
|
vector<TimeSpan> vSpans(profile.GetTimeSpans());
|
|
VERIFY_ARE_EQUAL(vSpans.size(), (size_t)1);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetDuration(), (UINT32)10);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetWarmup(), (UINT32)5);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetCooldown(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRandSeed(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetThreadCount(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRequestCount(), (DWORD)0);
|
|
VERIFY_IS_TRUE(vSpans[0].GetDisableAffinity() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetCompletionRoutines() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetMeasureLatency() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetRandomWriteData() == false);
|
|
|
|
const auto& vAffinity(vSpans[0].GetAffinityAssignments());
|
|
VERIFY_ARE_EQUAL(vAffinity.size(), (size_t)0);
|
|
|
|
vector<Target> vTargets(vSpans[0].GetTargets());
|
|
VERIFY_ARE_EQUAL(vTargets.size(), (size_t)1);
|
|
Target t(vTargets[0]);
|
|
|
|
VERIFY_IS_TRUE(t.GetPath().compare("testfile.dat") == 0);
|
|
VERIFY_ARE_EQUAL(t.GetBlockSizeInBytes(), (DWORD)(128 * 1024));
|
|
VERIFY_ARE_EQUAL(t.GetRequestCount(), (DWORD)2);
|
|
VERIFY_IS_TRUE(t.GetRandomRatio() == 0);
|
|
VERIFY_IS_TRUE(t.GetUseInterlockedSequential() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBlockAlignmentInBytes(), t.GetBlockSizeInBytes());
|
|
VERIFY_ARE_EQUAL(t.GetBaseFileOffsetInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetUseParallelAsyncIO() == false);
|
|
VERIFY_IS_TRUE(t.GetCacheMode() == TargetCacheMode::Cached);
|
|
VERIFY_IS_TRUE(t.GetWriteThroughMode() == WriteThroughMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoMode() == MemoryMappedIoMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoFlushMode() == MemoryMappedIoFlushMode::Undefined);
|
|
VERIFY_IS_TRUE(t.GetZeroWriteBuffers() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThreadsPerFile(), (DWORD)1);
|
|
VERIFY_ARE_EQUAL(t.GetThreadStrideInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetCreateFile() == false);
|
|
VERIFY_ARE_EQUAL(t.GetFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetMaxFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetWriteRatio(), (DWORD)84);
|
|
VERIFY_IS_TRUE(t.GetUseBurstSize() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBurstSize(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(t.GetThinkTime(), (DWORD)0);
|
|
VERIFY_IS_TRUE(t.GetEnableThinkTime() == false);
|
|
VERIFY_IS_TRUE(t.GetSequentialScanHint() == false);
|
|
VERIFY_IS_TRUE(t.GetRandomAccessHint() == false);
|
|
VERIFY_IS_TRUE(t.GetTemporaryFileHint() == false);
|
|
VERIFY_IS_TRUE(t.GetUseLargePages() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThroughputInBytesPerMillisecond(), (DWORD)0);
|
|
}
|
|
|
|
void CmdLineParserUnitTests::TestParseCmdLineEtwUsePerfTimer()
|
|
{
|
|
CmdLineParser p;
|
|
Profile profile;
|
|
struct Synchronization s = {};
|
|
const char *argv[] = { "foo", "-b128K", "-w84", "-eq", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
VERIFY_IS_TRUE(profile.GetVerbose() == false);
|
|
VERIFY_IS_TRUE(profile.GetProgress() == 0);
|
|
VERIFY_IS_TRUE(profile.GetCmdLine().compare("foo -b128K -w84 -eq testfile.dat") == 0);
|
|
VERIFY_IS_TRUE(profile.GetEtwEnabled() == true);
|
|
VERIFY_IS_TRUE(profile.GetEtwProcess() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwThread() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwImageLoad() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwDiskIO() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryPageFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryHardFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwNetwork() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwRegistry() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePagedMemory() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePerfTimer() == true);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseSystemTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseCyclesCounter() == false);
|
|
|
|
vector<TimeSpan> vSpans(profile.GetTimeSpans());
|
|
VERIFY_ARE_EQUAL(vSpans.size(), (size_t)1);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetDuration(), (UINT32)10);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetWarmup(), (UINT32)5);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetCooldown(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRandSeed(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetThreadCount(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRequestCount(), (DWORD)0);
|
|
VERIFY_IS_TRUE(vSpans[0].GetDisableAffinity() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetCompletionRoutines() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetMeasureLatency() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetRandomWriteData() == false);
|
|
|
|
const auto& vAffinity(vSpans[0].GetAffinityAssignments());
|
|
VERIFY_ARE_EQUAL(vAffinity.size(), (size_t)0);
|
|
|
|
vector<Target> vTargets(vSpans[0].GetTargets());
|
|
VERIFY_ARE_EQUAL(vTargets.size(), (size_t)1);
|
|
Target t(vTargets[0]);
|
|
|
|
VERIFY_IS_TRUE(t.GetPath().compare("testfile.dat") == 0);
|
|
VERIFY_ARE_EQUAL(t.GetBlockSizeInBytes(), (DWORD)(128 * 1024));
|
|
VERIFY_ARE_EQUAL(t.GetRequestCount(), (DWORD)2);
|
|
VERIFY_IS_TRUE(t.GetRandomRatio() == 0);
|
|
VERIFY_IS_TRUE(t.GetUseInterlockedSequential() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBlockAlignmentInBytes(), t.GetBlockSizeInBytes());
|
|
VERIFY_ARE_EQUAL(t.GetBaseFileOffsetInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetUseParallelAsyncIO() == false);
|
|
VERIFY_IS_TRUE(t.GetCacheMode() == TargetCacheMode::Cached);
|
|
VERIFY_IS_TRUE(t.GetWriteThroughMode() == WriteThroughMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoMode() == MemoryMappedIoMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoFlushMode() == MemoryMappedIoFlushMode::Undefined);
|
|
VERIFY_IS_TRUE(t.GetZeroWriteBuffers() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThreadsPerFile(), (DWORD)1);
|
|
VERIFY_ARE_EQUAL(t.GetThreadStrideInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetCreateFile() == false);
|
|
VERIFY_ARE_EQUAL(t.GetFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetMaxFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetWriteRatio(), (DWORD)84);
|
|
VERIFY_IS_TRUE(t.GetUseBurstSize() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBurstSize(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(t.GetThinkTime(), (DWORD)0);
|
|
VERIFY_IS_TRUE(t.GetEnableThinkTime() == false);
|
|
VERIFY_IS_TRUE(t.GetSequentialScanHint() == false);
|
|
VERIFY_IS_TRUE(t.GetRandomAccessHint() == false);
|
|
VERIFY_IS_TRUE(t.GetTemporaryFileHint() == false);
|
|
VERIFY_IS_TRUE(t.GetUseLargePages() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThroughputInBytesPerMillisecond(), (DWORD)0);
|
|
}
|
|
|
|
void CmdLineParserUnitTests::TestParseCmdLineEtwUseSystemTimer()
|
|
{
|
|
CmdLineParser p;
|
|
Profile profile;
|
|
struct Synchronization s = {};
|
|
const char *argv[] = { "foo", "-b128K", "-w84", "-es", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
VERIFY_IS_TRUE(profile.GetVerbose() == false);
|
|
VERIFY_IS_TRUE(profile.GetProgress() == 0);
|
|
VERIFY_IS_TRUE(profile.GetCmdLine().compare("foo -b128K -w84 -es testfile.dat") == 0);
|
|
VERIFY_IS_TRUE(profile.GetEtwEnabled() == true);
|
|
VERIFY_IS_TRUE(profile.GetEtwProcess() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwThread() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwImageLoad() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwDiskIO() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryPageFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryHardFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwNetwork() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwRegistry() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePagedMemory() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePerfTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseSystemTimer() == true);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseCyclesCounter() == false);
|
|
|
|
vector<TimeSpan> vSpans(profile.GetTimeSpans());
|
|
VERIFY_ARE_EQUAL(vSpans.size(), (size_t)1);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetDuration(), (UINT32)10);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetWarmup(), (UINT32)5);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetCooldown(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRandSeed(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetThreadCount(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRequestCount(), (DWORD)0);
|
|
VERIFY_IS_TRUE(vSpans[0].GetDisableAffinity() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetCompletionRoutines() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetMeasureLatency() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetRandomWriteData() == false);
|
|
|
|
const auto& vAffinity(vSpans[0].GetAffinityAssignments());
|
|
VERIFY_ARE_EQUAL(vAffinity.size(), (size_t)0);
|
|
|
|
vector<Target> vTargets(vSpans[0].GetTargets());
|
|
VERIFY_ARE_EQUAL(vTargets.size(), (size_t)1);
|
|
Target t(vTargets[0]);
|
|
|
|
VERIFY_IS_TRUE(t.GetPath().compare("testfile.dat") == 0);
|
|
VERIFY_ARE_EQUAL(t.GetBlockSizeInBytes(), (DWORD)(128 * 1024));
|
|
VERIFY_ARE_EQUAL(t.GetRequestCount(), (DWORD)2);
|
|
VERIFY_IS_TRUE(t.GetRandomRatio() == 0);
|
|
VERIFY_IS_TRUE(t.GetUseInterlockedSequential() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBlockAlignmentInBytes(), t.GetBlockSizeInBytes());
|
|
VERIFY_ARE_EQUAL(t.GetBaseFileOffsetInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetUseParallelAsyncIO() == false);
|
|
VERIFY_IS_TRUE(t.GetCacheMode() == TargetCacheMode::Cached);
|
|
VERIFY_IS_TRUE(t.GetWriteThroughMode() == WriteThroughMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoMode() == MemoryMappedIoMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoFlushMode() == MemoryMappedIoFlushMode::Undefined);
|
|
VERIFY_IS_TRUE(t.GetZeroWriteBuffers() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThreadsPerFile(), (DWORD)1);
|
|
VERIFY_ARE_EQUAL(t.GetThreadStrideInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetCreateFile() == false);
|
|
VERIFY_ARE_EQUAL(t.GetFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetMaxFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetWriteRatio(), (DWORD)84);
|
|
VERIFY_IS_TRUE(t.GetUseBurstSize() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBurstSize(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(t.GetThinkTime(), (DWORD)0);
|
|
VERIFY_IS_TRUE(t.GetEnableThinkTime() == false);
|
|
VERIFY_IS_TRUE(t.GetSequentialScanHint() == false);
|
|
VERIFY_IS_TRUE(t.GetRandomAccessHint() == false);
|
|
VERIFY_IS_TRUE(t.GetTemporaryFileHint() == false);
|
|
VERIFY_IS_TRUE(t.GetUseLargePages() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThroughputInBytesPerMillisecond(), (DWORD)0);
|
|
}
|
|
|
|
void CmdLineParserUnitTests::TestParseCmdLineEtwUseCycleCount()
|
|
{
|
|
CmdLineParser p;
|
|
Profile profile;
|
|
struct Synchronization s = {};
|
|
const char *argv[] = { "foo", "-b128K", "-w84", "-ec", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
VERIFY_IS_TRUE(profile.GetVerbose() == false);
|
|
VERIFY_IS_TRUE(profile.GetProgress() == 0);
|
|
VERIFY_IS_TRUE(profile.GetCmdLine().compare("foo -b128K -w84 -ec testfile.dat") == 0);
|
|
VERIFY_IS_TRUE(profile.GetEtwEnabled() == true);
|
|
VERIFY_IS_TRUE(profile.GetEtwProcess() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwThread() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwImageLoad() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwDiskIO() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryPageFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryHardFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwNetwork() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwRegistry() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePagedMemory() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePerfTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseSystemTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseCyclesCounter() == true);
|
|
|
|
vector<TimeSpan> vSpans(profile.GetTimeSpans());
|
|
VERIFY_ARE_EQUAL(vSpans.size(), (size_t)1);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetDuration(), (UINT32)10);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetWarmup(), (UINT32)5);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetCooldown(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRandSeed(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetThreadCount(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRequestCount(), (DWORD)0);
|
|
VERIFY_IS_TRUE(vSpans[0].GetDisableAffinity() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetCompletionRoutines() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetMeasureLatency() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetRandomWriteData() == false);
|
|
|
|
const auto& vAffinity(vSpans[0].GetAffinityAssignments());
|
|
VERIFY_ARE_EQUAL(vAffinity.size(), (size_t)0);
|
|
|
|
vector<Target> vTargets(vSpans[0].GetTargets());
|
|
VERIFY_ARE_EQUAL(vTargets.size(), (size_t)1);
|
|
Target t(vTargets[0]);
|
|
|
|
VERIFY_IS_TRUE(t.GetPath().compare("testfile.dat") == 0);
|
|
VERIFY_ARE_EQUAL(t.GetBlockSizeInBytes(), (DWORD)(128 * 1024));
|
|
VERIFY_ARE_EQUAL(t.GetRequestCount(), (DWORD)2);
|
|
VERIFY_IS_TRUE(t.GetRandomRatio() == 0);
|
|
VERIFY_IS_TRUE(t.GetUseInterlockedSequential() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBlockAlignmentInBytes(), t.GetBlockSizeInBytes());
|
|
VERIFY_ARE_EQUAL(t.GetBaseFileOffsetInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetUseParallelAsyncIO() == false);
|
|
VERIFY_IS_TRUE(t.GetCacheMode() == TargetCacheMode::Cached);
|
|
VERIFY_IS_TRUE(t.GetWriteThroughMode() == WriteThroughMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoMode() == MemoryMappedIoMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoFlushMode() == MemoryMappedIoFlushMode::Undefined);
|
|
VERIFY_IS_TRUE(t.GetZeroWriteBuffers() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThreadsPerFile(), (DWORD)1);
|
|
VERIFY_ARE_EQUAL(t.GetThreadStrideInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetCreateFile() == false);
|
|
VERIFY_ARE_EQUAL(t.GetFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetMaxFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetWriteRatio(), (DWORD)84);
|
|
VERIFY_IS_TRUE(t.GetUseBurstSize() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBurstSize(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(t.GetThinkTime(), (DWORD)0);
|
|
VERIFY_IS_TRUE(t.GetEnableThinkTime() == false);
|
|
VERIFY_IS_TRUE(t.GetSequentialScanHint() == false);
|
|
VERIFY_IS_TRUE(t.GetRandomAccessHint() == false);
|
|
VERIFY_IS_TRUE(t.GetTemporaryFileHint() == false);
|
|
VERIFY_IS_TRUE(t.GetUseLargePages() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThroughputInBytesPerMillisecond(), (DWORD)0);
|
|
}
|
|
|
|
void CmdLineParserUnitTests::TestParseCmdLineIOPriority()
|
|
{
|
|
CmdLineParser p;
|
|
Profile profile;
|
|
struct Synchronization s = {};
|
|
const char *argv[] = { "foo", "-b128K", "-w84", "-I2", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
VERIFY_IS_TRUE(profile.GetVerbose() == false);
|
|
VERIFY_IS_TRUE(profile.GetProgress() == 0);
|
|
VERIFY_IS_TRUE(profile.GetCmdLine().compare("foo -b128K -w84 -I2 testfile.dat") == 0);
|
|
VERIFY_IS_TRUE(profile.GetEtwEnabled() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwProcess() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwThread() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwImageLoad() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwDiskIO() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryPageFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryHardFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwNetwork() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwRegistry() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePagedMemory() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePerfTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseSystemTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseCyclesCounter() == false);
|
|
|
|
vector<TimeSpan> vSpans(profile.GetTimeSpans());
|
|
VERIFY_ARE_EQUAL(vSpans.size(), (size_t)1);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetDuration(), (UINT32)10);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetWarmup(), (UINT32)5);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetCooldown(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRandSeed(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetThreadCount(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRequestCount(), (DWORD)0);
|
|
VERIFY_IS_TRUE(vSpans[0].GetDisableAffinity() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetCompletionRoutines() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetMeasureLatency() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetRandomWriteData() == false);
|
|
|
|
const auto& vAffinity(vSpans[0].GetAffinityAssignments());
|
|
VERIFY_ARE_EQUAL(vAffinity.size(), (size_t)0);
|
|
|
|
vector<Target> vTargets(vSpans[0].GetTargets());
|
|
VERIFY_ARE_EQUAL(vTargets.size(), (size_t)1);
|
|
Target t(vTargets[0]);
|
|
|
|
VERIFY_IS_TRUE(t.GetPath().compare("testfile.dat") == 0);
|
|
VERIFY_ARE_EQUAL(t.GetBlockSizeInBytes(), (DWORD)(128 * 1024));
|
|
VERIFY_ARE_EQUAL(t.GetRequestCount(), (DWORD)2);
|
|
VERIFY_IS_TRUE(t.GetRandomRatio() == 0);
|
|
VERIFY_IS_TRUE(t.GetUseInterlockedSequential() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBlockAlignmentInBytes(), t.GetBlockSizeInBytes());
|
|
VERIFY_ARE_EQUAL(t.GetBaseFileOffsetInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetUseParallelAsyncIO() == false);
|
|
VERIFY_IS_TRUE(t.GetCacheMode() == TargetCacheMode::Cached);
|
|
VERIFY_IS_TRUE(t.GetWriteThroughMode() == WriteThroughMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoMode() == MemoryMappedIoMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoFlushMode() == MemoryMappedIoFlushMode::Undefined);
|
|
VERIFY_IS_TRUE(t.GetZeroWriteBuffers() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThreadsPerFile(), (DWORD)1);
|
|
VERIFY_ARE_EQUAL(t.GetThreadStrideInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetCreateFile() == false);
|
|
VERIFY_ARE_EQUAL(t.GetFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetMaxFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetWriteRatio(), (DWORD)84);
|
|
VERIFY_IS_TRUE(t.GetUseBurstSize() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBurstSize(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(t.GetThinkTime(), (DWORD)0);
|
|
VERIFY_IS_TRUE(t.GetEnableThinkTime() == false);
|
|
VERIFY_IS_TRUE(t.GetSequentialScanHint() == false);
|
|
VERIFY_IS_TRUE(t.GetRandomAccessHint() == false);
|
|
VERIFY_IS_TRUE(t.GetTemporaryFileHint() == false);
|
|
VERIFY_IS_TRUE(t.GetUseLargePages() == false);
|
|
VERIFY_IS_TRUE(t.GetIOPriorityHint() == IoPriorityHintLow);
|
|
VERIFY_ARE_EQUAL(t.GetThroughputInBytesPerMillisecond(), (DWORD)0);
|
|
}
|
|
|
|
void CmdLineParserUnitTests::TestParseCmdLineMeasureLatency()
|
|
{
|
|
CmdLineParser p;
|
|
Profile profile;
|
|
struct Synchronization s = {};
|
|
const char *argv[] = { "foo", "-b128K", "-w84", "-L", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
VERIFY_IS_TRUE(profile.GetVerbose() == false);
|
|
VERIFY_IS_TRUE(profile.GetProgress() == 0);
|
|
VERIFY_IS_TRUE(profile.GetCmdLine().compare("foo -b128K -w84 -L testfile.dat") == 0);
|
|
VERIFY_IS_TRUE(profile.GetEtwEnabled() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwProcess() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwThread() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwImageLoad() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwDiskIO() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryPageFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryHardFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwNetwork() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwRegistry() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePagedMemory() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePerfTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseSystemTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseCyclesCounter() == false);
|
|
|
|
vector<TimeSpan> vSpans(profile.GetTimeSpans());
|
|
VERIFY_ARE_EQUAL(vSpans.size(), (size_t)1);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetDuration(), (UINT32)10);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetWarmup(), (UINT32)5);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetCooldown(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRandSeed(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetThreadCount(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRequestCount(), (DWORD)0);
|
|
VERIFY_IS_TRUE(vSpans[0].GetDisableAffinity() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetCompletionRoutines() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetMeasureLatency() == true);
|
|
VERIFY_IS_TRUE(vSpans[0].GetRandomWriteData() == false);
|
|
|
|
const auto& vAffinity(vSpans[0].GetAffinityAssignments());
|
|
VERIFY_ARE_EQUAL(vAffinity.size(), (size_t)0);
|
|
|
|
vector<Target> vTargets(vSpans[0].GetTargets());
|
|
VERIFY_ARE_EQUAL(vTargets.size(), (size_t)1);
|
|
Target t(vTargets[0]);
|
|
|
|
VERIFY_IS_TRUE(t.GetPath().compare("testfile.dat") == 0);
|
|
VERIFY_ARE_EQUAL(t.GetBlockSizeInBytes(), (DWORD)(128 * 1024));
|
|
VERIFY_ARE_EQUAL(t.GetRequestCount(), (DWORD)2);
|
|
VERIFY_IS_TRUE(t.GetRandomRatio() == 0);
|
|
VERIFY_IS_TRUE(t.GetUseInterlockedSequential() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBlockAlignmentInBytes(), t.GetBlockSizeInBytes());
|
|
VERIFY_ARE_EQUAL(t.GetBaseFileOffsetInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetUseParallelAsyncIO() == false);
|
|
VERIFY_IS_TRUE(t.GetCacheMode() == TargetCacheMode::Cached);
|
|
VERIFY_IS_TRUE(t.GetWriteThroughMode() == WriteThroughMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoMode() == MemoryMappedIoMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoFlushMode() == MemoryMappedIoFlushMode::Undefined);
|
|
VERIFY_IS_TRUE(t.GetZeroWriteBuffers() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThreadsPerFile(), (DWORD)1);
|
|
VERIFY_ARE_EQUAL(t.GetThreadStrideInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetCreateFile() == false);
|
|
VERIFY_ARE_EQUAL(t.GetFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetMaxFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetWriteRatio(), (DWORD)84);
|
|
VERIFY_IS_TRUE(t.GetUseBurstSize() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBurstSize(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(t.GetThinkTime(), (DWORD)0);
|
|
VERIFY_IS_TRUE(t.GetEnableThinkTime() == false);
|
|
VERIFY_IS_TRUE(t.GetSequentialScanHint() == false);
|
|
VERIFY_IS_TRUE(t.GetRandomAccessHint() == false);
|
|
VERIFY_IS_TRUE(t.GetTemporaryFileHint() == false);
|
|
VERIFY_IS_TRUE(t.GetUseLargePages() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThroughputInBytesPerMillisecond(), (DWORD)0);
|
|
}
|
|
|
|
void CmdLineParserUnitTests::TestParseCmdLineZeroWriteBuffers()
|
|
{
|
|
CmdLineParser p;
|
|
Profile profile;
|
|
struct Synchronization s = {};
|
|
const char *argv[] = { "foo", "-b128K", "-w84", "-Z", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
VERIFY_IS_TRUE(profile.GetVerbose() == false);
|
|
VERIFY_IS_TRUE(profile.GetProgress() == 0);
|
|
VERIFY_IS_TRUE(profile.GetCmdLine().compare("foo -b128K -w84 -Z testfile.dat") == 0);
|
|
VERIFY_IS_TRUE(profile.GetEtwEnabled() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwProcess() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwThread() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwImageLoad() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwDiskIO() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryPageFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryHardFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwNetwork() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwRegistry() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePagedMemory() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePerfTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseSystemTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseCyclesCounter() == false);
|
|
|
|
vector<TimeSpan> vSpans(profile.GetTimeSpans());
|
|
VERIFY_ARE_EQUAL(vSpans.size(), (size_t)1);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetDuration(), (UINT32)10);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetWarmup(), (UINT32)5);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetCooldown(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRandSeed(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetThreadCount(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRequestCount(), (DWORD)0);
|
|
VERIFY_IS_TRUE(vSpans[0].GetDisableAffinity() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetCompletionRoutines() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetMeasureLatency() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetRandomWriteData() == false);
|
|
|
|
const auto& vAffinity(vSpans[0].GetAffinityAssignments());
|
|
VERIFY_ARE_EQUAL(vAffinity.size(), (size_t)0);
|
|
|
|
vector<Target> vTargets(vSpans[0].GetTargets());
|
|
VERIFY_ARE_EQUAL(vTargets.size(), (size_t)1);
|
|
Target t(vTargets[0]);
|
|
|
|
VERIFY_IS_TRUE(t.GetPath().compare("testfile.dat") == 0);
|
|
VERIFY_ARE_EQUAL(t.GetBlockSizeInBytes(), (DWORD)(128 * 1024));
|
|
VERIFY_ARE_EQUAL(t.GetRequestCount(), (DWORD)2);
|
|
VERIFY_IS_TRUE(t.GetRandomRatio() == 0);
|
|
VERIFY_IS_TRUE(t.GetUseInterlockedSequential() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBlockAlignmentInBytes(), t.GetBlockSizeInBytes());
|
|
VERIFY_ARE_EQUAL(t.GetBaseFileOffsetInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetUseParallelAsyncIO() == false);
|
|
VERIFY_IS_TRUE(t.GetCacheMode() == TargetCacheMode::Cached);
|
|
VERIFY_IS_TRUE(t.GetWriteThroughMode() == WriteThroughMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoMode() == MemoryMappedIoMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoFlushMode() == MemoryMappedIoFlushMode::Undefined);
|
|
VERIFY_IS_TRUE(t.GetZeroWriteBuffers() == true);
|
|
VERIFY_ARE_EQUAL(t.GetThreadsPerFile(), (DWORD)1);
|
|
VERIFY_ARE_EQUAL(t.GetThreadStrideInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetCreateFile() == false);
|
|
VERIFY_ARE_EQUAL(t.GetFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetMaxFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetWriteRatio(), (DWORD)84);
|
|
VERIFY_IS_TRUE(t.GetUseBurstSize() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBurstSize(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(t.GetThinkTime(), (DWORD)0);
|
|
VERIFY_IS_TRUE(t.GetEnableThinkTime() == false);
|
|
VERIFY_IS_TRUE(t.GetSequentialScanHint() == false);
|
|
VERIFY_IS_TRUE(t.GetRandomAccessHint() == false);
|
|
VERIFY_IS_TRUE(t.GetTemporaryFileHint() == false);
|
|
VERIFY_IS_TRUE(t.GetUseLargePages() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThroughputInBytesPerMillisecond(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(t.GetRandomDataWriteBufferSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetRandomDataWriteBufferSourcePath(), "");
|
|
}
|
|
|
|
void CmdLineParserUnitTests::TestParseCmdLineRandomWriteBuffers()
|
|
{
|
|
CmdLineParser p;
|
|
Profile profile;
|
|
struct Synchronization s = {};
|
|
const char *argv[] = { "foo", "-b128K", "-w84", "-Zr", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
VERIFY_IS_TRUE(profile.GetVerbose() == false);
|
|
VERIFY_IS_TRUE(profile.GetProgress() == 0);
|
|
VERIFY_IS_TRUE(profile.GetCmdLine().compare("foo -b128K -w84 -Zr testfile.dat") == 0);
|
|
VERIFY_IS_TRUE(profile.GetEtwEnabled() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwProcess() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwThread() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwImageLoad() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwDiskIO() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryPageFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryHardFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwNetwork() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwRegistry() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePagedMemory() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePerfTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseSystemTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseCyclesCounter() == false);
|
|
|
|
vector<TimeSpan> vSpans(profile.GetTimeSpans());
|
|
VERIFY_ARE_EQUAL(vSpans.size(), (size_t)1);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetDuration(), (UINT32)10);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetWarmup(), (UINT32)5);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetCooldown(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRandSeed(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetThreadCount(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRequestCount(), (DWORD)0);
|
|
VERIFY_IS_TRUE(vSpans[0].GetDisableAffinity() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetCompletionRoutines() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetMeasureLatency() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetRandomWriteData() == true);
|
|
|
|
const auto& vAffinity(vSpans[0].GetAffinityAssignments());
|
|
VERIFY_ARE_EQUAL(vAffinity.size(), (size_t)0);
|
|
|
|
vector<Target> vTargets(vSpans[0].GetTargets());
|
|
VERIFY_ARE_EQUAL(vTargets.size(), (size_t)1);
|
|
Target t(vTargets[0]);
|
|
|
|
VERIFY_IS_TRUE(t.GetPath().compare("testfile.dat") == 0);
|
|
VERIFY_ARE_EQUAL(t.GetBlockSizeInBytes(), (DWORD)(128 * 1024));
|
|
VERIFY_ARE_EQUAL(t.GetRequestCount(), (DWORD)2);
|
|
VERIFY_IS_TRUE(t.GetRandomRatio() == 0);
|
|
VERIFY_IS_TRUE(t.GetUseInterlockedSequential() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBlockAlignmentInBytes(), t.GetBlockSizeInBytes());
|
|
VERIFY_ARE_EQUAL(t.GetBaseFileOffsetInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetUseParallelAsyncIO() == false);
|
|
VERIFY_IS_TRUE(t.GetCacheMode() == TargetCacheMode::Cached);
|
|
VERIFY_IS_TRUE(t.GetWriteThroughMode() == WriteThroughMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoMode() == MemoryMappedIoMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoFlushMode() == MemoryMappedIoFlushMode::Undefined);
|
|
VERIFY_IS_TRUE(t.GetZeroWriteBuffers() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThreadsPerFile(), (DWORD)1);
|
|
VERIFY_ARE_EQUAL(t.GetThreadStrideInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetCreateFile() == false);
|
|
VERIFY_ARE_EQUAL(t.GetFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetMaxFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetWriteRatio(), (DWORD)84);
|
|
VERIFY_IS_TRUE(t.GetUseBurstSize() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBurstSize(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(t.GetThinkTime(), (DWORD)0);
|
|
VERIFY_IS_TRUE(t.GetEnableThinkTime() == false);
|
|
VERIFY_IS_TRUE(t.GetSequentialScanHint() == false);
|
|
VERIFY_IS_TRUE(t.GetRandomAccessHint() == false);
|
|
VERIFY_IS_TRUE(t.GetTemporaryFileHint() == false);
|
|
VERIFY_IS_TRUE(t.GetUseLargePages() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThroughputInBytesPerMillisecond(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(t.GetRandomDataWriteBufferSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetRandomDataWriteBufferSourcePath(), "");
|
|
}
|
|
|
|
void CmdLineParserUnitTests::TestGetRandomDataWriteBufferData()
|
|
{
|
|
CmdLineParser p;
|
|
UINT64 cb;
|
|
string sPath;
|
|
|
|
p._GetRandomDataWriteBufferData("11332", cb, sPath);
|
|
VERIFY_ARE_EQUAL(cb, 11332);
|
|
VERIFY_IS_TRUE(sPath == "");
|
|
|
|
cb = 0;
|
|
sPath = "";
|
|
p._GetRandomDataWriteBufferData("11332,", cb, sPath);
|
|
VERIFY_ARE_EQUAL(cb, 11332);
|
|
VERIFY_IS_TRUE(sPath == "");
|
|
|
|
cb = 0;
|
|
sPath = "";
|
|
p._GetRandomDataWriteBufferData("11332,x:\\foo\\bar", cb, sPath);
|
|
VERIFY_ARE_EQUAL(cb, 11332);
|
|
VERIFY_IS_TRUE(sPath == "x:\\foo\\bar");
|
|
|
|
cb = 0;
|
|
sPath = "";
|
|
p._GetRandomDataWriteBufferData("2M", cb, sPath);
|
|
VERIFY_ARE_EQUAL(cb, 2 * 1024 * 1024);
|
|
VERIFY_IS_TRUE(sPath == "");
|
|
|
|
cb = 0;
|
|
sPath = "";
|
|
p._GetRandomDataWriteBufferData("2M,x:\\foo\\bar", cb, sPath);
|
|
VERIFY_ARE_EQUAL(cb, 2 * 1024 * 1024);
|
|
VERIFY_IS_TRUE(sPath == "x:\\foo\\bar");
|
|
}
|
|
|
|
void CmdLineParserUnitTests::TestParseCmdLineWriteBufferContentRandomNoFilePath()
|
|
{
|
|
CmdLineParser p;
|
|
Profile profile;
|
|
struct Synchronization s = {};
|
|
const char *argv[] = { "foo", "-b128K", "-w84", "-Z2M", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
|
|
vector<TimeSpan> vSpans(profile.GetTimeSpans());
|
|
vector<Target> vTargets(vSpans[0].GetTargets());
|
|
VERIFY_ARE_EQUAL(vTargets.size(), (size_t)1);
|
|
Target t(vTargets[0]);
|
|
|
|
VERIFY_IS_FALSE(t.GetZeroWriteBuffers());
|
|
VERIFY_ARE_EQUAL(t.GetRandomDataWriteBufferSize(), (size_t)(2 * 1024 * 1024));
|
|
VERIFY_IS_TRUE(t.GetRandomDataWriteBufferSourcePath() == "");
|
|
}
|
|
|
|
void CmdLineParserUnitTests::TestParseCmdLineWriteBufferContentRandomWithFilePath()
|
|
{
|
|
CmdLineParser p;
|
|
Profile profile;
|
|
struct Synchronization s = {};
|
|
const char *argv[] = { "foo", "-b128K", "-w84", "-Z3M,x:\\foo\\bar.baz", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
|
|
vector<TimeSpan> vSpans(profile.GetTimeSpans());
|
|
vector<Target> vTargets(vSpans[0].GetTargets());
|
|
VERIFY_ARE_EQUAL(vTargets.size(), (size_t)1);
|
|
Target t(vTargets[0]);
|
|
|
|
VERIFY_IS_FALSE(t.GetZeroWriteBuffers());
|
|
VERIFY_ARE_EQUAL(t.GetRandomDataWriteBufferSize(), (size_t)(3 * 1024 * 1024));
|
|
VERIFY_IS_TRUE(t.GetRandomDataWriteBufferSourcePath() == "x:\\foo\\bar.baz");
|
|
}
|
|
|
|
void CmdLineParserUnitTests::TestParseCmdLineInterlockedSequential()
|
|
{
|
|
CmdLineParser p;
|
|
Profile profile;
|
|
struct Synchronization s = {};
|
|
const char *argv[] = { "foo", "-b128K", "-w84", "-si", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
VERIFY_IS_TRUE(profile.GetVerbose() == false);
|
|
VERIFY_IS_TRUE(profile.GetProgress() == 0);
|
|
VERIFY_IS_TRUE(profile.GetCmdLine().compare("foo -b128K -w84 -si testfile.dat") == 0);
|
|
VERIFY_IS_TRUE(profile.GetEtwEnabled() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwProcess() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwThread() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwImageLoad() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwDiskIO() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryPageFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryHardFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwNetwork() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwRegistry() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePagedMemory() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePerfTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseSystemTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseCyclesCounter() == false);
|
|
|
|
vector<TimeSpan> vSpans(profile.GetTimeSpans());
|
|
VERIFY_ARE_EQUAL(vSpans.size(), (size_t)1);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetDuration(), (UINT32)10);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetWarmup(), (UINT32)5);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetCooldown(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRandSeed(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetThreadCount(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRequestCount(), (DWORD)0);
|
|
VERIFY_IS_TRUE(vSpans[0].GetDisableAffinity() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetCompletionRoutines() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetMeasureLatency() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetRandomWriteData() == false);
|
|
|
|
const auto& vAffinity(vSpans[0].GetAffinityAssignments());
|
|
VERIFY_ARE_EQUAL(vAffinity.size(), (size_t)0);
|
|
|
|
vector<Target> vTargets(vSpans[0].GetTargets());
|
|
VERIFY_ARE_EQUAL(vTargets.size(), (size_t)1);
|
|
Target t(vTargets[0]);
|
|
|
|
VERIFY_IS_TRUE(t.GetPath().compare("testfile.dat") == 0);
|
|
VERIFY_ARE_EQUAL(t.GetBlockSizeInBytes(), (DWORD)(128 * 1024));
|
|
VERIFY_ARE_EQUAL(t.GetRequestCount(), (DWORD)2);
|
|
VERIFY_IS_TRUE(t.GetRandomRatio() == 0);
|
|
VERIFY_IS_TRUE(t.GetUseInterlockedSequential() == true);
|
|
VERIFY_ARE_EQUAL(t.GetBlockAlignmentInBytes(), t.GetBlockSizeInBytes());
|
|
VERIFY_ARE_EQUAL(t.GetBaseFileOffsetInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetUseParallelAsyncIO() == false);
|
|
VERIFY_IS_TRUE(t.GetCacheMode() == TargetCacheMode::Cached);
|
|
VERIFY_IS_TRUE(t.GetWriteThroughMode() == WriteThroughMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoMode() == MemoryMappedIoMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoFlushMode() == MemoryMappedIoFlushMode::Undefined);
|
|
VERIFY_IS_TRUE(t.GetZeroWriteBuffers() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThreadsPerFile(), (DWORD)1);
|
|
VERIFY_ARE_EQUAL(t.GetThreadStrideInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetCreateFile() == false);
|
|
VERIFY_ARE_EQUAL(t.GetFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetMaxFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetWriteRatio(), (DWORD)84);
|
|
VERIFY_IS_TRUE(t.GetUseBurstSize() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBurstSize(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(t.GetThinkTime(), (DWORD)0);
|
|
VERIFY_IS_TRUE(t.GetEnableThinkTime() == false);
|
|
VERIFY_IS_TRUE(t.GetSequentialScanHint() == false);
|
|
VERIFY_IS_TRUE(t.GetRandomAccessHint() == false);
|
|
VERIFY_IS_TRUE(t.GetTemporaryFileHint() == false);
|
|
VERIFY_IS_TRUE(t.GetUseLargePages() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThroughputInBytesPerMillisecond(), (DWORD)0);
|
|
}
|
|
|
|
void CmdLineParserUnitTests::TestParseCmdLineInterlockedSequentialWithStride()
|
|
{
|
|
CmdLineParser p;
|
|
Profile profile;
|
|
struct Synchronization s = {};
|
|
const char *argv[] = { "foo", "-b128K", "-w84", "-si567K", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
VERIFY_IS_TRUE(profile.GetVerbose() == false);
|
|
VERIFY_IS_TRUE(profile.GetProgress() == 0);
|
|
VERIFY_IS_TRUE(profile.GetCmdLine().compare("foo -b128K -w84 -si567K testfile.dat") == 0);
|
|
VERIFY_IS_TRUE(profile.GetEtwEnabled() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwProcess() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwThread() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwImageLoad() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwDiskIO() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryPageFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryHardFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwNetwork() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwRegistry() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePagedMemory() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePerfTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseSystemTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseCyclesCounter() == false);
|
|
|
|
vector<TimeSpan> vSpans(profile.GetTimeSpans());
|
|
VERIFY_ARE_EQUAL(vSpans.size(), (size_t)1);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetDuration(), (UINT32)10);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetWarmup(), (UINT32)5);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetCooldown(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRandSeed(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetThreadCount(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRequestCount(), (DWORD)0);
|
|
VERIFY_IS_TRUE(vSpans[0].GetDisableAffinity() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetCompletionRoutines() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetMeasureLatency() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetRandomWriteData() == false);
|
|
|
|
const auto& vAffinity(vSpans[0].GetAffinityAssignments());
|
|
VERIFY_ARE_EQUAL(vAffinity.size(), (size_t)0);
|
|
|
|
vector<Target> vTargets(vSpans[0].GetTargets());
|
|
VERIFY_ARE_EQUAL(vTargets.size(), (size_t)1);
|
|
Target t(vTargets[0]);
|
|
|
|
VERIFY_IS_TRUE(t.GetPath().compare("testfile.dat") == 0);
|
|
VERIFY_ARE_EQUAL(t.GetBlockSizeInBytes(), (DWORD)(128 * 1024));
|
|
VERIFY_ARE_EQUAL(t.GetRequestCount(), (DWORD)2);
|
|
VERIFY_IS_TRUE(t.GetRandomRatio() == 0);
|
|
VERIFY_IS_TRUE(t.GetUseInterlockedSequential() == true);
|
|
VERIFY_ARE_EQUAL(t.GetBlockAlignmentInBytes(), (567 * 1024));
|
|
VERIFY_ARE_EQUAL(t.GetBaseFileOffsetInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetUseParallelAsyncIO() == false);
|
|
VERIFY_IS_TRUE(t.GetCacheMode() == TargetCacheMode::Cached);
|
|
VERIFY_IS_TRUE(t.GetWriteThroughMode() == WriteThroughMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoMode() == MemoryMappedIoMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoFlushMode() == MemoryMappedIoFlushMode::Undefined);
|
|
VERIFY_IS_TRUE(t.GetZeroWriteBuffers() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThreadsPerFile(), (DWORD)1);
|
|
VERIFY_ARE_EQUAL(t.GetThreadStrideInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetCreateFile() == false);
|
|
VERIFY_ARE_EQUAL(t.GetFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetMaxFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetWriteRatio(), (DWORD)84);
|
|
VERIFY_IS_TRUE(t.GetUseBurstSize() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBurstSize(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(t.GetThinkTime(), (DWORD)0);
|
|
VERIFY_IS_TRUE(t.GetEnableThinkTime() == false);
|
|
VERIFY_IS_TRUE(t.GetSequentialScanHint() == false);
|
|
VERIFY_IS_TRUE(t.GetRandomAccessHint() == false);
|
|
VERIFY_IS_TRUE(t.GetTemporaryFileHint() == false);
|
|
VERIFY_IS_TRUE(t.GetUseLargePages() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThroughputInBytesPerMillisecond(), (DWORD)0);
|
|
}
|
|
|
|
void CmdLineParserUnitTests::TestParseCmdLineTotalThreadCountAndTotalRequestCount()
|
|
{
|
|
CmdLineParser p;
|
|
Profile profile;
|
|
struct Synchronization s = {};
|
|
const char *argv[] = { "foo", "-b128K", "-w84", "-F23", "-O8", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
VERIFY_IS_TRUE(profile.GetVerbose() == false);
|
|
VERIFY_IS_TRUE(profile.GetProgress() == 0);
|
|
VERIFY_IS_TRUE(profile.GetCmdLine().compare("foo -b128K -w84 -F23 -O8 testfile.dat") == 0);
|
|
VERIFY_IS_TRUE(profile.GetEtwEnabled() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwProcess() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwThread() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwImageLoad() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwDiskIO() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryPageFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwMemoryHardFaults() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwNetwork() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwRegistry() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePagedMemory() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUsePerfTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseSystemTimer() == false);
|
|
VERIFY_IS_TRUE(profile.GetEtwUseCyclesCounter() == false);
|
|
|
|
vector<TimeSpan> vSpans(profile.GetTimeSpans());
|
|
VERIFY_ARE_EQUAL(vSpans.size(), (size_t)1);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetDuration(), (UINT32)10);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetWarmup(), (UINT32)5);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetCooldown(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRandSeed(), (UINT32)0);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetThreadCount(), (DWORD)23);
|
|
VERIFY_ARE_EQUAL(vSpans[0].GetRequestCount(), (DWORD)8);
|
|
VERIFY_IS_TRUE(vSpans[0].GetDisableAffinity() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetCompletionRoutines() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetMeasureLatency() == false);
|
|
VERIFY_IS_TRUE(vSpans[0].GetRandomWriteData() == false);
|
|
|
|
const auto& vAffinity(vSpans[0].GetAffinityAssignments());
|
|
VERIFY_ARE_EQUAL(vAffinity.size(), (size_t)0);
|
|
|
|
vector<Target> vTargets(vSpans[0].GetTargets());
|
|
VERIFY_ARE_EQUAL(vTargets.size(), (size_t)1);
|
|
Target t(vTargets[0]);
|
|
|
|
VERIFY_IS_TRUE(t.GetPath().compare("testfile.dat") == 0);
|
|
VERIFY_ARE_EQUAL(t.GetBlockSizeInBytes(), (DWORD)(128 * 1024));
|
|
VERIFY_ARE_EQUAL(t.GetRequestCount(), (DWORD)2);
|
|
VERIFY_IS_TRUE(t.GetRandomRatio() == 0);
|
|
VERIFY_IS_TRUE(t.GetUseInterlockedSequential() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBlockAlignmentInBytes(), t.GetBlockSizeInBytes());
|
|
VERIFY_ARE_EQUAL(t.GetBaseFileOffsetInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetUseParallelAsyncIO() == false);
|
|
VERIFY_IS_TRUE(t.GetCacheMode() == TargetCacheMode::Cached);
|
|
VERIFY_IS_TRUE(t.GetWriteThroughMode() == WriteThroughMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoMode() == MemoryMappedIoMode::Off);
|
|
VERIFY_IS_TRUE(t.GetMemoryMappedIoFlushMode() == MemoryMappedIoFlushMode::Undefined);
|
|
VERIFY_IS_TRUE(t.GetZeroWriteBuffers() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThreadsPerFile(), (DWORD)1);
|
|
VERIFY_ARE_EQUAL(t.GetThreadStrideInBytes(), 0);
|
|
VERIFY_IS_TRUE(t.GetCreateFile() == false);
|
|
VERIFY_ARE_EQUAL(t.GetFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetMaxFileSize(), 0);
|
|
VERIFY_ARE_EQUAL(t.GetWriteRatio(), (DWORD)84);
|
|
VERIFY_IS_TRUE(t.GetUseBurstSize() == false);
|
|
VERIFY_ARE_EQUAL(t.GetBurstSize(), (DWORD)0);
|
|
VERIFY_ARE_EQUAL(t.GetThinkTime(), (DWORD)0);
|
|
VERIFY_IS_TRUE(t.GetEnableThinkTime() == false);
|
|
VERIFY_IS_TRUE(t.GetSequentialScanHint() == false);
|
|
VERIFY_IS_TRUE(t.GetRandomAccessHint() == false);
|
|
VERIFY_IS_TRUE(t.GetTemporaryFileHint() == false);
|
|
VERIFY_IS_TRUE(t.GetUseLargePages() == false);
|
|
VERIFY_ARE_EQUAL(t.GetThroughputInBytesPerMillisecond(), (DWORD)0);
|
|
}
|
|
|
|
void CmdLineParserUnitTests::TestParseCmdLineThroughput()
|
|
{
|
|
CmdLineParser p;
|
|
struct Synchronization s = {};
|
|
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-b128K", "-g10i", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
VERIFY_ARE_EQUAL(profile.GetTimeSpans()[0].GetTargets()[0].GetThroughputInBytesPerMillisecond(), (DWORD)((128*1024*10)/1000));
|
|
VERIFY_IS_TRUE(profile.GetTimeSpans()[0].GetTargets()[0].GetThroughputIOPS() == 10);
|
|
}
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-b128K", "-g1024", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
VERIFY_IS_TRUE(profile.GetTimeSpans()[0].GetTargets()[0].GetThroughputInBytesPerMillisecond() == 1024);
|
|
VERIFY_IS_TRUE(profile.GetTimeSpans()[0].GetTargets()[0].GetThroughputIOPS() == 0);
|
|
}
|
|
|
|
// Invalid cases: valid unit on wrong side, no digits, zeroes, bad unit
|
|
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-b128K", "-gi100", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == false);
|
|
}
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-b128K", "-g0", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == false);
|
|
}
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-b128K", "-g0i", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == false);
|
|
}
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-b128K", "-g", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == false);
|
|
}
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-b128K", "-gi", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == false);
|
|
}
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-b128K", "-g100x", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == false);
|
|
}
|
|
}
|
|
|
|
void CmdLineParserUnitTests::TestParseCmdLineRandomSequentialMixed()
|
|
{
|
|
// Coverage for -rs and combinations of conflicts with -r/-s/-rs
|
|
|
|
CmdLineParser p;
|
|
struct Synchronization s = {};
|
|
|
|
//
|
|
// -rs cases
|
|
//
|
|
|
|
// Isolated
|
|
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-rs50", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
VERIFY_ARE_EQUAL(profile.GetTimeSpans()[0].GetTargets()[0].GetRandomRatio(), (UINT32) 50);
|
|
}
|
|
|
|
// Combined with -r<value>, in any order
|
|
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-rs50", "-r8k", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
VERIFY_ARE_EQUAL(profile.GetTimeSpans()[0].GetTargets()[0].GetRandomRatio(), (UINT32) 50);
|
|
VERIFY_ARE_EQUAL(profile.GetTimeSpans()[0].GetTargets()[0].GetBlockAlignmentInBytes(), 8*1024);
|
|
}
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-r8k", "-rs50", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
VERIFY_ARE_EQUAL(profile.GetTimeSpans()[0].GetTargets()[0].GetRandomRatio(), (UINT32) 50);
|
|
VERIFY_ARE_EQUAL(profile.GetTimeSpans()[0].GetTargets()[0].GetBlockAlignmentInBytes(), 8*1024);
|
|
}
|
|
|
|
// Combined with -r, in any order (don't care block size)
|
|
// While the -r in this order has no effect and could be flagged as an error, we don't currently parse to this level
|
|
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-rs50", "-r", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
VERIFY_ARE_EQUAL(profile.GetTimeSpans()[0].GetTargets()[0].GetRandomRatio(), (UINT32) 50);
|
|
}
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-r", "-rs50", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
VERIFY_ARE_EQUAL(profile.GetTimeSpans()[0].GetTargets()[0].GetRandomRatio(), (UINT32) 50);
|
|
}
|
|
|
|
// Now for conflict cases
|
|
|
|
// Combined with -s<value> in any order
|
|
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-rs50", "-s8k", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == false);
|
|
}
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-s8k", "-rs50", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == false);
|
|
}
|
|
|
|
// Combined with -s in any order
|
|
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-rs50", "-s", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == false);
|
|
}
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-s", "-rs50", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == false);
|
|
}
|
|
|
|
// -r/-s conflict
|
|
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-r", "-s", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == false);
|
|
}
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-s", "-r", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == false);
|
|
}
|
|
|
|
// 3-way conflict
|
|
// If it were more important, we could/should enumerate the orderings
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-rs50", "-s", "-r", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == false);
|
|
}
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-s", "-rs50", "-r", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == false);
|
|
}
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-s", "-r", "-rs50", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == false);
|
|
}
|
|
|
|
// 3-way with -s<value>
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-rs50", "-s8k", "-r", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == false);
|
|
}
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-s8k", "-rs50", "-r", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == false);
|
|
}
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-s8k", "-r", "-rs50", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == false);
|
|
}
|
|
|
|
// 3-way with -r<value>
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-rs50", "-s", "-r8k", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == false);
|
|
}
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-s", "-rs50", "-r8k", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == false);
|
|
}
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-s", "-r8k", "-rs50", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == false);
|
|
}
|
|
|
|
// Duplicated specs
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-s", "-s8k", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == false);
|
|
}
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-s8k", "-s", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == false);
|
|
}
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-s", "-s", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == false);
|
|
}
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-s8k", "-s8k", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == false);
|
|
}
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-r", "-r8k", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == false);
|
|
}
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-r8k", "-r", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == false);
|
|
}
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-r", "-r", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == false);
|
|
}
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-r8k", "-r8k", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == false);
|
|
}
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-r8k", "-r4k", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == false);
|
|
}
|
|
|
|
// Bounds checks: -rs100 is OK w/wo random alignment and -rs0 is rejected
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-rs100", "-r", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
}
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-rs100", "-r8k", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
}
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-r", "-rs100", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
}
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-r8k", "-rs100", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == true);
|
|
}
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-rs0", "-r", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == false);
|
|
}
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-rs0", "-r8k", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == false);
|
|
}
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-rs0", "-s", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == false);
|
|
}
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-rs0", "-s8k", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s) == false);
|
|
}
|
|
}
|
|
|
|
void CmdLineParserUnitTests::TestParseCmdLineTargetDistribution()
|
|
{
|
|
// coverage for parsing of cmdline target distributions (percent/absolute)
|
|
|
|
CmdLineParser p;
|
|
struct Synchronization s = {};
|
|
|
|
//
|
|
// Positive cases - these match the ResultParser UTs
|
|
//
|
|
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-rdpct10/10:10/10:0/10", "-r", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s));
|
|
|
|
auto t = profile.GetTimeSpans()[0].GetTargets()[0]; // manage object lifetime so target is not destroyed
|
|
auto dt = t.GetDistributionType();
|
|
auto& v = t.GetDistributionRange();
|
|
|
|
VERIFY_ARE_EQUAL(dt, DistributionType::Percent);
|
|
VERIFY_ARE_EQUAL(v[0]._src, (UINT64) 0);
|
|
VERIFY_ARE_EQUAL(v[0]._span, (UINT64) 10);
|
|
VERIFY_ARE_EQUAL(v[0]._dst.first, (UINT64) 0);
|
|
VERIFY_ARE_EQUAL(v[0]._dst.second, (UINT64) 10);
|
|
VERIFY_ARE_EQUAL(v[1]._src, (UINT64) 10); ///
|
|
VERIFY_ARE_EQUAL(v[1]._span, (UINT64) 10);
|
|
VERIFY_ARE_EQUAL(v[1]._dst.first, (UINT64) 10);
|
|
VERIFY_ARE_EQUAL(v[1]._dst.second, (UINT64) 10);
|
|
VERIFY_ARE_EQUAL(v[2]._src, (UINT64) 20); ///
|
|
VERIFY_ARE_EQUAL(v[2]._span, (UINT64) 0);
|
|
VERIFY_ARE_EQUAL(v[2]._dst.first, (UINT64) 20);
|
|
VERIFY_ARE_EQUAL(v[2]._dst.second, (UINT64) 10);
|
|
VERIFY_ARE_EQUAL(v[3]._src, (UINT64) 20); ///
|
|
VERIFY_ARE_EQUAL(v[3]._span, (UINT64) 80);
|
|
VERIFY_ARE_EQUAL(v[3]._dst.first, (UINT64) 30);
|
|
VERIFY_ARE_EQUAL(v[3]._dst.second, (UINT64) 70);
|
|
}
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-rdabs10/1G:10/1G:0/100G", "-r", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s));
|
|
|
|
auto t = profile.GetTimeSpans()[0].GetTargets()[0];
|
|
auto dt = t.GetDistributionType();
|
|
auto& v = t.GetDistributionRange();
|
|
|
|
VERIFY_ARE_EQUAL(dt, DistributionType::Absolute);
|
|
VERIFY_ARE_EQUAL(v[0]._src, (UINT64) 0);
|
|
VERIFY_ARE_EQUAL(v[0]._span, (UINT64) 10);
|
|
VERIFY_ARE_EQUAL(v[0]._dst.first, (UINT64) 0);
|
|
VERIFY_ARE_EQUAL(v[0]._dst.second, (UINT64) 1*GB);
|
|
VERIFY_ARE_EQUAL(v[1]._src, (UINT64) 10); ///
|
|
VERIFY_ARE_EQUAL(v[1]._span, (UINT64) 10);
|
|
VERIFY_ARE_EQUAL(v[1]._dst.first, (UINT64) 1*GB);
|
|
VERIFY_ARE_EQUAL(v[1]._dst.second, (UINT64) 1*GB);
|
|
VERIFY_ARE_EQUAL(v[2]._src, (UINT64) 20); ///
|
|
VERIFY_ARE_EQUAL(v[2]._span, (UINT64) 0);
|
|
VERIFY_ARE_EQUAL(v[2]._dst.first, (UINT64) 2*GB);
|
|
VERIFY_ARE_EQUAL(v[2]._dst.second, (UINT64) 100*GB);
|
|
VERIFY_ARE_EQUAL(v[3]._src, (UINT64) 20); ///
|
|
VERIFY_ARE_EQUAL(v[3]._span, (UINT64) 80);
|
|
VERIFY_ARE_EQUAL(v[3]._dst.first, (UINT64) 102*GB);
|
|
VERIFY_ARE_EQUAL(v[3]._dst.second, (UINT64) 0);
|
|
}
|
|
|
|
// valid with mixed load
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-rdpct90/10", "-rs50", "-r8k", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s));
|
|
}
|
|
|
|
//
|
|
// Negative cases
|
|
//
|
|
|
|
// not valid with sequential load
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-rdpct90/10", "-s", "testfile.dat" };
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s));
|
|
}
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-rdpct90/10", "testfile.dat" };
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s));
|
|
}
|
|
|
|
// no/invalid distribution
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-rd", "-r", "testfile.dat" };
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s));
|
|
}
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-rdfoo", "-r", "testfile.dat" };
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s));
|
|
}
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-rdfoo10/1G:10/1G:0/100G", "-r", "testfile.dat" };
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s));
|
|
}
|
|
|
|
// bad ints in first pos
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-rdpctBAD", "-r", "testfile.dat" };
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s));
|
|
}
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-rdabsBAD", "-r", "testfile.dat" };
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s));
|
|
}
|
|
|
|
// good int, no sep
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-rdpct10", "-r", "testfile.dat" };
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s));
|
|
}
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-rdabs10", "-r", "testfile.dat" };
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s));
|
|
}
|
|
|
|
// good int, bad sep
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-rdpct10[", "-r", "testfile.dat" };
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s));
|
|
}
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-rdabs10[", "-r", "testfile.dat" };
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s));
|
|
}
|
|
|
|
// good int, good sep, no int
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-rdpct10/", "-r", "testfile.dat" };
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s));
|
|
}
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-rdabs10/", "-r", "testfile.dat" };
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s));
|
|
}
|
|
|
|
// good int, good sep, bad int
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-rdpct10/BAD", "-r", "testfile.dat" };
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s));
|
|
}
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-rdabs10/BAD", "-r", "testfile.dat" };
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s));
|
|
}
|
|
|
|
// good int, good sep, good int, bad sep
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-rdpct10/10[", "-r", "testfile.dat" };
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s));
|
|
}
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-rdabs10/10g[", "-r", "testfile.dat" }; // detail - abs range > blocksize in order to be OK
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s));
|
|
}
|
|
|
|
// good int, good sep, good int, good sep, no int
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-rdpct10/10:", "-r", "testfile.dat" };
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s));
|
|
}
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-rdabs10/10g:", "-r", "testfile.dat" }; // detail - abs range > blocksize in order to be OK
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s));
|
|
}
|
|
|
|
// good int, good sep, good int, good sep, bad int
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-rdpct10/10:BAD", "-r", "testfile.dat" };
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s));
|
|
}
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-rdabs10/10g:BAD", "-r", "testfile.dat" }; // detail - abs range > blocksize in order to be OK
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s));
|
|
}
|
|
|
|
//
|
|
// Negative cases for IO%
|
|
//
|
|
|
|
// a single pct cannot be > 100, and cannot sum > 100
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-rdpct101/10", "-r", "testfile.dat" };
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s));
|
|
}
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-rdpct60/10:60/10", "-r", "testfile.dat" };
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s));
|
|
}
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-rdabs101/10g", "-r", "testfile.dat" };
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s));
|
|
}
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-rdabs60/10g:60/10g", "-r", "testfile.dat" };
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s));
|
|
}
|
|
|
|
// target% cannot be covered before IO% is covered
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-rdpct10/50:10/50", "-r", "testfile.dat" };
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s));
|
|
}
|
|
|
|
// target% cannot be > 100
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-rdpct10/50:10/60", "-r", "testfile.dat" };
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s));
|
|
}
|
|
|
|
//
|
|
// Negative cases for Target%/Size
|
|
//
|
|
|
|
// a target%/size cannot be zero (first/second positions)
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-rdpct10/0", "-r", "testfile.dat" };
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s));
|
|
}
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-rdpct60/10:10/0", "-r", "testfile.dat" };
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s));
|
|
}
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-rdabs10/0", "-r", "testfile.dat" };
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s));
|
|
}
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-rdabs60/10g:10/0", "-r", "testfile.dat" };
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s));
|
|
}
|
|
|
|
//
|
|
// Negative cases for abs
|
|
//
|
|
|
|
// abs range must be >= blocksize
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-rdabs10/10", "-r", "testfile.dat" };
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s));
|
|
}
|
|
}
|
|
|
|
void CmdLineParserUnitTests::TestParseCmdLineResultOutput()
|
|
{
|
|
// Cases for combinations of -R[p][text|xml]
|
|
|
|
CmdLineParser p;
|
|
struct Synchronization s = {};
|
|
|
|
char *aType[] = { "text", "xml" };
|
|
vector<char *> vType(aType, &aType[0] + _countof(aType));
|
|
char *aProfile[] = { "-R", "-Rp" };
|
|
vector<char *> vProfile(aProfile, &aProfile[0] + _countof(aProfile));
|
|
|
|
// combinations of p/text|xml OK
|
|
for (auto ty : vType)
|
|
{
|
|
for (auto pr : vProfile)
|
|
{
|
|
string str = pr;
|
|
str += ty;
|
|
|
|
Profile profile;
|
|
const char *argv[] = { "foo", str.c_str(), "testfile.dat" };
|
|
fprintf(stderr, "case: %s\n", str.c_str());
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s));
|
|
|
|
if (pr[2] == 'p')
|
|
{
|
|
VERIFY_IS_TRUE(profile.GetProfileOnly());
|
|
}
|
|
else
|
|
{
|
|
VERIFY_IS_FALSE(profile.GetProfileOnly());
|
|
}
|
|
|
|
if (*ty == 't')
|
|
{
|
|
VERIFY_ARE_EQUAL(ResultsFormat::Text, profile.GetResultsFormat());
|
|
}
|
|
else
|
|
{
|
|
VERIFY_ARE_EQUAL(ResultsFormat::Xml, profile.GetResultsFormat());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void CmdLineParserUnitTests::TestParseCmdLineTargetPosition()
|
|
{
|
|
// coverage for positioning of targets and parameters
|
|
|
|
CmdLineParser p;
|
|
struct Synchronization s = {};
|
|
|
|
// in order - this obviously duplicates all the other normal cases but, to
|
|
// document it in place against the negative cases, repeat.
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-r", "testfile.dat" };
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s));
|
|
}
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "-r", "testfile.dat" , "testfile2.dat"};
|
|
VERIFY_IS_TRUE(p.ParseCmdLine(_countof(argv), argv, &profile, &s));
|
|
}
|
|
|
|
// out of order - parameter follows one or more targets
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "testfile.dat" , "-r"};
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s));
|
|
}
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "testfile.dat" , "testfile2.dat", "-r"};
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s));
|
|
}
|
|
|
|
// out of order - in between
|
|
{
|
|
Profile profile;
|
|
const char *argv[] = { "foo", "testfile.dat" , "-r", "testfile2.dat"};
|
|
VERIFY_IS_FALSE(p.ParseCmdLine(_countof(argv), argv, &profile, &s));
|
|
}
|
|
}
|
|
} |