Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 32 additions & 0 deletions CodeCoverage.runsettings
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
<DataCollectionRunSettings>
<DataCollectors>
<DataCollector
friendlyName="Code Coverage"
uri="datacollector://Microsoft/CodeCoverage/2.0">

<Configuration>
<IncludeTestAssembly>True</IncludeTestAssembly>

<CodeCoverage>
<Sources>
<Include>
<Source>.*\\desktop\.ranger\.core\\.*</Source>
</Include>
</Sources>

<EnableStaticNativeInstrumentation>
True
</EnableStaticNativeInstrumentation>

<EnableDynamicNativeInstrumentation>
False
</EnableDynamicNativeInstrumentation>
</CodeCoverage>
</Configuration>

</DataCollector>
</DataCollectors>
</DataCollectionRunSettings>
</RunSettings>
1 change: 1 addition & 0 deletions desktop.ranger.core/desktop.ranger.core.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,7 @@
<PrecompiledHeaderFile>
</PrecompiledHeaderFile>
<PrecompiledHeaderOutputFile />
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<SubSystem>
Expand Down
12 changes: 6 additions & 6 deletions desktop.ranger.core/desktop_name_generator.cpp
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
#include "desktop_name_generator.h"

#include <array>
#include <random>
#include <string>
#include <string_view>

namespace DR
namespace DesktopRanger::DesktopName
{
namespace
{
Expand All @@ -19,7 +19,7 @@ namespace DR
return kDesktopNameAlphabet.find(character) != std::wstring_view::npos;
}

std::wstring GenerateDesktopName(std::mt19937 &generator, std::size_t length)
std::wstring Generate(std::mt19937 &generator, std::size_t length)
{
std::uniform_int_distribution<std::size_t> Distribution(
0, kDesktopNameAlphabet.size() - 1);
Expand All @@ -34,10 +34,10 @@ namespace DR
return Result;
}

std::wstring GenerateDesktopName()
std::wstring Generate()
{
thread_local std::mt19937 Generator{ std::random_device{}() };
return GenerateDesktopName(Generator);
return Generate(Generator);
}

} // namespace DR
} // namespace DesktopRanger::DesktopName
13 changes: 6 additions & 7 deletions desktop.ranger.core/desktop_name_generator.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,15 @@
#include <random>
#include <string>

namespace DR
namespace DesktopRanger::DesktopName
{
inline constexpr auto kDesktopNameLength = 255;

inline constexpr std::size_t kDesktopNameLength = 255;
std::wstring Generate();

std::wstring GenerateDesktopName();

std::wstring GenerateDesktopName(std::mt19937 &generator,
std::size_t length = kDesktopNameLength);
std::wstring Generate(std::mt19937 &generator,
std::size_t length = kDesktopNameLength);

bool IsValidDesktopNameCharacter(wchar_t character) noexcept;

} // namespace DR
} // namespace DesktopRanger::DesktopName
3 changes: 3 additions & 0 deletions desktop.ranger.tests/desktop.ranger.tests.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -45,10 +45,12 @@
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<Profile>true</Profile>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
Expand All @@ -68,6 +70,7 @@
<SubSystem>Console</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<Profile>false</Profile>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
Expand Down
38 changes: 26 additions & 12 deletions desktop.ranger.tests/desktop_name_generator_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,14 @@

#include "desktop_name_generator.h"

namespace DR::Tests
namespace DesktopRanger::DesktopName::Tests
{

TEST(DesktopNameGenerator, GeneratesDefaultLengthName)
{
std::mt19937 generator{ 12345 };

const std::wstring name = GenerateDesktopName(generator);
const std::wstring name = Generate(generator);

EXPECT_EQ(name.size(), kDesktopNameLength);
}
Expand All @@ -23,7 +23,7 @@ namespace DR::Tests
{
std::mt19937 generator{ 12345 };

const std::wstring name = GenerateDesktopName(generator, 32);
const std::wstring name = Generate(generator, 32);

EXPECT_EQ(name.size(), 32U);
}
Expand All @@ -32,7 +32,7 @@ namespace DR::Tests
{
std::mt19937 generator{ 12345 };

const std::wstring name = GenerateDesktopName(generator, 0);
const std::wstring name = Generate(generator, 0);

EXPECT_TRUE(name.empty());
}
Expand All @@ -41,7 +41,7 @@ namespace DR::Tests
{
std::mt19937 generator{ 12345 };

const std::wstring name = GenerateDesktopName(generator, 4096);
const std::wstring name = Generate(generator, 4096);

const bool allCharactersAreValid =
std::ranges::all_of(name, IsValidDesktopNameCharacter);
Expand All @@ -53,7 +53,7 @@ namespace DR::Tests
{
std::mt19937 generator{ 12345 };

const std::wstring name = GenerateDesktopName(generator);
const std::wstring name = Generate(generator);

EXPECT_EQ(name.find(L'\0'), std::wstring::npos);
}
Expand All @@ -63,9 +63,9 @@ namespace DR::Tests
std::mt19937 firstGenerator{ 12345 };
std::mt19937 secondGenerator{ 12345 };

const std::wstring firstName = GenerateDesktopName(firstGenerator);
const std::wstring firstName = Generate(firstGenerator);

const std::wstring secondName = GenerateDesktopName(secondGenerator);
const std::wstring secondName = Generate(secondGenerator);

EXPECT_EQ(firstName, secondName);
}
Expand All @@ -74,9 +74,9 @@ namespace DR::Tests
{
std::mt19937 generator{ 12345 };

const std::wstring firstName = GenerateDesktopName(generator);
const std::wstring firstName = Generate(generator);

const std::wstring secondName = GenerateDesktopName(generator);
const std::wstring secondName = Generate(generator);

EXPECT_NE(firstName, secondName);
}
Expand All @@ -90,10 +90,24 @@ namespace DR::Tests
names.reserve(sampleSize);

for (std::size_t index = 0; index < sampleSize; ++index) {
names.insert(GenerateDesktopName(generator));
names.insert(Generate(generator));
}

EXPECT_EQ(names.size(), sampleSize);
}

} // namespace DR::Tests
TEST(DesktopNameGenerator, RejectsDisallowedCharacters)
{
EXPECT_FALSE(DesktopRanger::DesktopName::IsValidDesktopNameCharacter(L'/'));
EXPECT_FALSE(DesktopRanger::DesktopName::IsValidDesktopNameCharacter(L'\\'));
EXPECT_FALSE(DesktopRanger::DesktopName::IsValidDesktopNameCharacter(L'\0'));
}

TEST(DesktopNameGenerator, AcceptsAllowedCharacters)
{
EXPECT_TRUE(DesktopRanger::DesktopName::IsValidDesktopNameCharacter(L'a'));
EXPECT_TRUE(DesktopRanger::DesktopName::IsValidDesktopNameCharacter(L'7'));
EXPECT_TRUE(DesktopRanger::DesktopName::IsValidDesktopNameCharacter(L'_'));
}

} // namespace DesktopRanger::DesktopName::Tests
20 changes: 1 addition & 19 deletions desktop.ranger/advanced_secure_desktop.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -43,25 +43,7 @@ namespace AdvancedSecureDesktop

std::wstring GetRandomDesktopName()
{
return DR::GenerateDesktopName();

// static constexpr wchar_t alphabet[] = L"abcdefghijklmnopqrstuvwxyz" // 26
// "0123456789" // 10
// "_-.,;:@#$%&'()[]{}+=~`!^"; // 25
//
// static constexpr auto alphabetSize =
// std::size(alphabet) - 1; // without null terminator
//
// static thread_local std::mt19937 generate(std::random_device{}());
//
// static constexpr auto length = 255;
// std::wstring result(length, L'\0');
//
// for (wchar_t &c : result) {
// c = alphabet[generate() % alphabetSize];
// }
//
// return result;
return DesktopRanger::DesktopName::Generate();
}

bool CreateNewDesktop(IN std::wstring DesktopName, OUT HDESK &DefaultDesktopHandle,
Expand Down
Loading