From 273c69f34311f4f4e5f6b5896e71d0788f12d96a Mon Sep 17 00:00:00 2001 From: Sean Hall Date: Sat, 17 Oct 2020 19:12:21 -0500 Subject: WIXFEAT:6210 Change data type of versions to strings. --- src/test/BurnUnitTest/BurnUnitTest.vcxproj | 4 +-- src/test/BurnUnitTest/SearchTest.cpp | 17 ++++++---- src/test/BurnUnitTest/VariableHelpers.cpp | 34 ++++++++++++++----- src/test/BurnUnitTest/VariableHelpers.h | 4 +-- src/test/BurnUnitTest/VariableTest.cpp | 32 +++++++++--------- src/test/BurnUnitTest/VariantTest.cpp | 52 +++++++++++++++++++++--------- src/test/BurnUnitTest/packages.config | 2 +- src/test/BurnUnitTest/precomp.h | 1 + 8 files changed, 95 insertions(+), 51 deletions(-) (limited to 'src/test/BurnUnitTest') diff --git a/src/test/BurnUnitTest/BurnUnitTest.vcxproj b/src/test/BurnUnitTest/BurnUnitTest.vcxproj index fda7cb7b..cc19fa60 100644 --- a/src/test/BurnUnitTest/BurnUnitTest.vcxproj +++ b/src/test/BurnUnitTest/BurnUnitTest.vcxproj @@ -4,7 +4,7 @@ - + Debug @@ -80,6 +80,6 @@ - + diff --git a/src/test/BurnUnitTest/SearchTest.cpp b/src/test/BurnUnitTest/SearchTest.cpp index 32107d87..d868190d 100644 --- a/src/test/BurnUnitTest/SearchTest.cpp +++ b/src/test/BurnUnitTest/SearchTest.cpp @@ -106,6 +106,7 @@ namespace Bootstrapper BURN_SEARCHES searches = { }; BURN_EXTENSIONS burnExtensions = { }; ULARGE_INTEGER uliVersion = { }; + VERUTIL_VERSION* pVersion = NULL; try { hr = VariableInitialize(&variables); @@ -117,6 +118,9 @@ namespace Bootstrapper hr = FileVersion(wzFile2, &uliVersion.HighPart, &uliVersion.LowPart); TestThrowOnFailure(hr, L"Failed to get DLL version."); + hr = VerVersionFromQword(uliVersion.QuadPart, &pVersion); + NativeAssert::Succeeded(hr, "Failed to create version."); + VariableSetStringHelper(&variables, L"File1", wzFile1, FALSE); VariableSetStringHelper(&variables, L"File2", wzFile2, FALSE); @@ -140,10 +144,11 @@ namespace Bootstrapper // check variable values Assert::Equal(0ll, VariableGetNumericHelper(&variables, L"Variable1")); Assert::Equal(1ll, VariableGetNumericHelper(&variables, L"Variable2")); - Assert::Equal(uliVersion.QuadPart, VariableGetVersionHelper(&variables, L"Variable3")); + Assert::Equal(gcnew String(pVersion->sczVersion), VariableGetVersionHelper(&variables, L"Variable3")); } finally { + ReleaseVerutilVersion(pVersion); ReleaseObject(pixeBundle); VariablesUninitialize(&variables); SearchesUninitialize(&searches); @@ -247,8 +252,8 @@ namespace Bootstrapper Assert::NotEqual(gcnew String(L"String1 %TEMP%"), VariableGetStringHelper(&variables, L"Variable10")); Assert::Equal(1ll, VariableGetNumericHelper(&variables, L"Variable11")); Assert::Equal(1ll, VariableGetNumericHelper(&variables, L"Variable12")); - Assert::Equal(MAKEQWORDVERSION(1,1,1,1), VariableGetVersionHelper(&variables, L"Variable13")); - Assert::Equal(MAKEQWORDVERSION(1,1,1,1), VariableGetVersionHelper(&variables, L"Variable14")); + Assert::Equal(gcnew String(L"1.1.1.1"), VariableGetVersionHelper(&variables, L"Variable13")); + Assert::Equal(gcnew String(L"1.1.1.1"), VariableGetVersionHelper(&variables, L"Variable14")); Assert::Equal(gcnew String(L"String1"), VariableGetStringHelper(&variables, L"Variable15")); Assert::Equal(1ll, VariableGetNumericHelper(&variables, L"Variable16")); Assert::False(VariableExistsHelper(&variables, L"Variable17")); @@ -401,11 +406,11 @@ namespace Bootstrapper // check variable values Assert::Equal(2ll, VariableGetNumericHelper(&variables, L"Variable1")); - Assert::Equal(MAKEQWORDVERSION(1,0,0,0), VariableGetVersionHelper(&variables, L"Variable2")); + Assert::Equal(gcnew String(L"1.0.0.0"), VariableGetVersionHelper(&variables, L"Variable2")); Assert::Equal(1033ll, VariableGetNumericHelper(&variables, L"Variable3")); Assert::Equal(5ll, VariableGetNumericHelper(&variables, L"Variable4")); Assert::Equal(1ll, VariableGetNumericHelper(&variables, L"Variable5")); - Assert::Equal(MAKEQWORDVERSION(1,0,0,0), VariableGetVersionHelper(&variables, L"Variable6")); + Assert::Equal(gcnew String(L"1.0.0.0"), VariableGetVersionHelper(&variables, L"Variable6")); } finally { @@ -581,7 +586,7 @@ namespace Bootstrapper Assert::Equal(gcnew String(L"VAL5"), VariableGetStringHelper(&variables, L"PROP5")); Assert::Equal(gcnew String(L"VAL6"), VariableGetStringHelper(&variables, L"PROP6")); Assert::Equal(7ll, VariableGetNumericHelper(&variables, L"PROP7")); - Assert::Equal(MAKEQWORDVERSION(1, 1, 0, 0), VariableGetVersionHelper(&variables, L"PROP8")); + Assert::Equal(gcnew String(L"1.1.0.0"), VariableGetVersionHelper(&variables, L"PROP8")); Assert::Equal(gcnew String(L"1.1.0.0"), VariableGetStringHelper(&variables, L"PROP8")); Assert::Equal(gcnew String(L"[VAL9]"), VariableGetStringHelper(&variables, L"PROP9")); diff --git a/src/test/BurnUnitTest/VariableHelpers.cpp b/src/test/BurnUnitTest/VariableHelpers.cpp index fdfb9191..99ba492a 100644 --- a/src/test/BurnUnitTest/VariableHelpers.cpp +++ b/src/test/BurnUnitTest/VariableHelpers.cpp @@ -33,12 +33,23 @@ namespace Bootstrapper TestThrowOnFailure2(hr, L"Failed to set %s to: %I64d", wzVariable, llValue); } - void VariableSetVersionHelper(BURN_VARIABLES* pVariables, LPCWSTR wzVariable, DWORD64 qwValue) + void VariableSetVersionHelper(BURN_VARIABLES* pVariables, LPCWSTR wzVariable, LPCWSTR wzValue) { HRESULT hr = S_OK; + VERUTIL_VERSION* pVersion = NULL; - hr = VariableSetVersion(pVariables, wzVariable, qwValue, FALSE); - TestThrowOnFailure2(hr, L"Failed to set %s to: 0x%016I64x", wzVariable, qwValue); + try + { + hr = VerParseVersion(wzValue, 0, FALSE, &pVersion); + TestThrowOnFailure1(hr, L"Failed to parse version '%ls'", wzValue); + + hr = VariableSetVersion(pVariables, wzVariable, pVersion, FALSE); + TestThrowOnFailure2(hr, L"Failed to set %s to: '%ls'", wzVariable, wzValue); + } + finally + { + ReleaseVerutilVersion(pVersion); + } } String^ VariableGetStringHelper(BURN_VARIABLES* pVariables, LPCWSTR wzVariable) @@ -69,15 +80,22 @@ namespace Bootstrapper return llValue; } - unsigned __int64 VariableGetVersionHelper(BURN_VARIABLES* pVariables, LPCWSTR wzVariable) + String^ VariableGetVersionHelper(BURN_VARIABLES* pVariables, LPCWSTR wzVariable) { HRESULT hr = S_OK; - DWORD64 qwValue = 0; + VERUTIL_VERSION* pValue = NULL; - hr = VariableGetVersion(pVariables, wzVariable, &qwValue); - TestThrowOnFailure1(hr, L"Failed to get: %s", wzVariable); + try + { + hr = VariableGetVersion(pVariables, wzVariable, &pValue); + TestThrowOnFailure1(hr, L"Failed to get: %s", wzVariable); - return qwValue; + return gcnew String(pValue->sczVersion); + } + finally + { + ReleaseVerutilVersion(pValue); + } } String^ VariableGetFormattedHelper(BURN_VARIABLES* pVariables, LPCWSTR wzVariable) diff --git a/src/test/BurnUnitTest/VariableHelpers.h b/src/test/BurnUnitTest/VariableHelpers.h index 8c2b081a..96122219 100644 --- a/src/test/BurnUnitTest/VariableHelpers.h +++ b/src/test/BurnUnitTest/VariableHelpers.h @@ -16,10 +16,10 @@ namespace Bootstrapper void VariableSetStringHelper(BURN_VARIABLES* pVariables, LPCWSTR wzVariable, LPCWSTR wzValue, BOOL fFormatted); void VariableSetNumericHelper(BURN_VARIABLES* pVariables, LPCWSTR wzVariable, LONGLONG llValue); -void VariableSetVersionHelper(BURN_VARIABLES* pVariables, LPCWSTR wzVariable, DWORD64 qwValue); +void VariableSetVersionHelper(BURN_VARIABLES* pVariables, LPCWSTR wzVariable, LPCWSTR wzValue); System::String^ VariableGetStringHelper(BURN_VARIABLES* pVariables, LPCWSTR wzVariable); __int64 VariableGetNumericHelper(BURN_VARIABLES* pVariables, LPCWSTR wzVariable); -unsigned __int64 VariableGetVersionHelper(BURN_VARIABLES* pVariables, LPCWSTR wzVariable); +System::String^ VariableGetVersionHelper(BURN_VARIABLES* pVariables, LPCWSTR wzVariable); System::String^ VariableGetFormattedHelper(BURN_VARIABLES* pVariables, LPCWSTR wzVariable); System::String^ VariableFormatStringHelper(BURN_VARIABLES* pVariables, LPCWSTR wzIn); System::String^ VariableEscapeStringHelper(LPCWSTR wzIn); diff --git a/src/test/BurnUnitTest/VariableTest.cpp b/src/test/BurnUnitTest/VariableTest.cpp index 0b49a530..405c8fab 100644 --- a/src/test/BurnUnitTest/VariableTest.cpp +++ b/src/test/BurnUnitTest/VariableTest.cpp @@ -42,7 +42,7 @@ namespace Bootstrapper VariableSetStringHelper(&variables, L"PROP4", L"VAL4", FALSE); VariableSetStringHelper(&variables, L"PROP6", L"VAL6", FALSE); VariableSetStringHelper(&variables, L"PROP7", L"7", FALSE); - VariableSetVersionHelper(&variables, L"PROP8", MAKEQWORDVERSION(1,1,0,0)); + VariableSetVersionHelper(&variables, L"PROP8", L"1.1.0.0"); VariableSetStringHelper(&variables, L"PROP9", L"[VAL9]", TRUE); // set overwritten variables @@ -61,7 +61,7 @@ namespace Bootstrapper Assert::Equal(gcnew String(L"VAL5"), VariableGetStringHelper(&variables, L"PROP5")); Assert::Equal(gcnew String(L"VAL6"), VariableGetStringHelper(&variables, L"PROP6")); Assert::Equal(7ll, VariableGetNumericHelper(&variables, L"PROP7")); - Assert::Equal(MAKEQWORDVERSION(1,1,0,0), VariableGetVersionHelper(&variables, L"PROP8")); + Assert::Equal(gcnew String(L"1.1.0.0"), VariableGetVersionHelper(&variables, L"PROP8")); Assert::Equal(gcnew String(L"1.1.0.0"), VariableGetStringHelper(&variables, L"PROP8")); Assert::Equal(gcnew String(L"[VAL9]"), VariableGetStringHelper(&variables, L"PROP9")); @@ -110,7 +110,7 @@ namespace Bootstrapper Assert::Equal(1ll, VariableGetNumericHelper(&variables, L"Var1")); Assert::Equal(gcnew String(L"String value."), VariableGetStringHelper(&variables, L"Var2")); - Assert::Equal(MAKEQWORDVERSION(1,2,3,4), VariableGetVersionHelper(&variables, L"Var3")); + Assert::Equal(gcnew String(L"1.2.3.4"), VariableGetVersionHelper(&variables, L"Var3")); Assert::Equal(gcnew String(L"[Formatted]"), VariableGetStringHelper(&variables, L"Var6")); } finally @@ -214,13 +214,13 @@ namespace Bootstrapper VariableSetNumericHelper(&variables, L"PROP13", 0x00010000); VariableSetNumericHelper(&variables, L"PROP14", 0x00000001); VariableSetNumericHelper(&variables, L"PROP15", 0x00010001); - VariableSetVersionHelper(&variables, L"PROP16", MAKEQWORDVERSION(0,0,0,0)); - VariableSetVersionHelper(&variables, L"PROP17", MAKEQWORDVERSION(1,0,0,0)); - VariableSetVersionHelper(&variables, L"PROP18", MAKEQWORDVERSION(1,1,0,0)); - VariableSetVersionHelper(&variables, L"PROP19", MAKEQWORDVERSION(1,1,1,0)); - VariableSetVersionHelper(&variables, L"PROP20", MAKEQWORDVERSION(1,1,1,1)); + VariableSetVersionHelper(&variables, L"PROP16", L"0.0.0.0"); + VariableSetVersionHelper(&variables, L"PROP17", L"1.0.0.0"); + VariableSetVersionHelper(&variables, L"PROP18", L"1.1.0.0"); + VariableSetVersionHelper(&variables, L"PROP19", L"1.1.1.0"); + VariableSetVersionHelper(&variables, L"PROP20", L"1.1.1.1"); VariableSetNumericHelper(&variables, L"vPROP21", 1); - VariableSetVersionHelper(&variables, L"PROP22", MAKEQWORDVERSION(65535,65535,65535,65535)); + VariableSetVersionHelper(&variables, L"PROP22", L"65535.65535.65535.65535"); VariableSetStringHelper(&variables, L"PROP23", L"1.1.1", FALSE); VariableSetStringHelper(&variables, L"PROP24", L"[PROP1]", TRUE); VariableSetStringHelper(&variables, L"PROP25", L"[PROP7]", TRUE); @@ -233,7 +233,7 @@ namespace Bootstrapper Assert::False(EvaluateConditionHelper(&variables, L"PROP7")); Assert::False(EvaluateConditionHelper(&variables, L"PROP8")); Assert::True(EvaluateConditionHelper(&variables, L"_PROP9")); - Assert::False(EvaluateConditionHelper(&variables, L"PROP16")); + Assert::True(EvaluateConditionHelper(&variables, L"PROP16")); Assert::True(EvaluateConditionHelper(&variables, L"PROP17")); Assert::True(EvaluateConditionHelper(&variables, L"PROP24")); Assert::True(EvaluateConditionHelper(&variables, L"PROP25")); @@ -268,8 +268,8 @@ namespace Bootstrapper Assert::True(EvaluateConditionHelper(&variables, L"PROP18 = v1.1")); Assert::True(EvaluateConditionHelper(&variables, L"PROP19 = v1.1.1")); Assert::True(EvaluateConditionHelper(&variables, L"PROP20 = v1.1.1.1")); - Assert::True(EvaluateFailureConditionHelper(&variables, L"PROP20 = v1.1.1.1.0")); - Assert::True(EvaluateFailureConditionHelper(&variables, L"PROP20 = v1.1.1.1.1")); + Assert::True(EvaluateConditionHelper(&variables, L"PROP20 > v1.1.1.1.0")); + Assert::True(EvaluateConditionHelper(&variables, L"PROP20 > v1.1.1.1.1")); Assert::True(EvaluateConditionHelper(&variables, L"vPROP21 = 1")); Assert::True(EvaluateConditionHelper(&variables, L"PROP23 = v1.1.1")); Assert::True(EvaluateConditionHelper(&variables, L"v1.1.1 = PROP23")); @@ -287,8 +287,8 @@ namespace Bootstrapper Assert::True(EvaluateFailureConditionHelper(&variables, L"PROP12 = -92233720368547758080000")); Assert::True(EvaluateConditionHelper(&variables, L"PROP22 = v65535.65535.65535.65535")); - Assert::True(EvaluateFailureConditionHelper(&variables, L"PROP22 = v65536.65535.65535.65535")); - Assert::True(EvaluateFailureConditionHelper(&variables, L"PROP22 = v65535.655350000.65535.65535")); + Assert::True(EvaluateConditionHelper(&variables, L"PROP22 < v65536.65535.65535.65535")); + Assert::True(EvaluateConditionHelper(&variables, L"PROP22 < v65535.655350000.65535.65535")); Assert::True(EvaluateConditionHelper(&variables, L"PROP5 < 6")); Assert::False(EvaluateConditionHelper(&variables, L"PROP5 < 5")); @@ -388,7 +388,7 @@ namespace Bootstrapper VariableSetStringHelper(&variables1, L"PROP1", L"VAL1", FALSE); VariableSetNumericHelper(&variables1, L"PROP2", 2); - VariableSetVersionHelper(&variables1, L"PROP3", MAKEQWORDVERSION(1,1,1,1)); + VariableSetVersionHelper(&variables1, L"PROP3", L"1.1.1.1"); VariableSetStringHelper(&variables1, L"PROP4", L"VAL4", FALSE); VariableSetStringHelper(&variables1, L"PROP5", L"[PROP1]", TRUE); @@ -404,7 +404,7 @@ namespace Bootstrapper Assert::Equal(gcnew String(L"VAL1"), VariableGetStringHelper(&variables2, L"PROP1")); Assert::Equal(2ll, VariableGetNumericHelper(&variables2, L"PROP2")); - Assert::Equal(MAKEQWORDVERSION(1,1,1,1), VariableGetVersionHelper(&variables2, L"PROP3")); + Assert::Equal(gcnew String(L"1.1.1.1"), VariableGetVersionHelper(&variables2, L"PROP3")); Assert::Equal(gcnew String(L"VAL4"), VariableGetStringHelper(&variables2, L"PROP4")); Assert::Equal(gcnew String(L"[PROP1]"), VariableGetStringHelper(&variables2, L"PROP5")); diff --git a/src/test/BurnUnitTest/VariantTest.cpp b/src/test/BurnUnitTest/VariantTest.cpp index c982db72..34328f53 100644 --- a/src/test/BurnUnitTest/VariantTest.cpp +++ b/src/test/BurnUnitTest/VariantTest.cpp @@ -37,10 +37,10 @@ namespace Bootstrapper { InitNumericValue(expectedVariants + 0, 2, FALSE, L"PROP1", actualVariants + 0); InitStringValue(expectedVariants + 1, L"VAL2", FALSE, L"PROP2", actualVariants + 1); - InitVersionValue(expectedVariants + 2, MAKEQWORDVERSION(1, 1, 0, 0), FALSE, L"PROP3", actualVariants + 2); + InitVersionValue(expectedVariants + 2, L"1.1.0.0", FALSE, L"PROP3", actualVariants + 2); InitNoneValue(expectedVariants + 3, FALSE, L"PROP4", actualVariants + 3); InitNoneValue(expectedVariants + 4, TRUE, L"PROP5", actualVariants + 4); - InitVersionValue(expectedVariants + 5, MAKEQWORDVERSION(1, 1, 1, 0), TRUE, L"PROP6", actualVariants + 5); + InitVersionValue(expectedVariants + 5, L"1.1.1.0", TRUE, L"PROP6", actualVariants + 5); InitStringValue(expectedVariants + 6, L"7", TRUE, L"PROP7", actualVariants + 6); InitNumericValue(expectedVariants + 7, 11, TRUE, L"PROP8", actualVariants + 7); InitFormattedValue(expectedVariants + 8, L"VAL9", FALSE, L"PROP9", actualVariants + 8); @@ -143,21 +143,34 @@ namespace Bootstrapper } } - void InitVersionValue(BURN_VARIANT* pValue, DWORD64 qwValue, BOOL fHidden, LPCWSTR wz, BURN_VARIANT* pActualValue) + void InitVersionValue(BURN_VARIANT* pValue, LPCWSTR wzValue, BOOL fHidden, LPCWSTR wz, BURN_VARIANT* pActualValue) { HRESULT hr = S_OK; - pValue->Type = BURN_VARIANT_TYPE_VERSION; - pValue->qwValue = qwValue; + VERUTIL_VERSION* pVersion = NULL; - hr = BVariantCopy(pValue, pActualValue); - NativeAssert::Succeeded(hr, "Failed to copy variant {0}", wz); - - if (fHidden) + try { - hr = BVariantSetEncryption(pActualValue, TRUE); - NativeAssert::Succeeded(hr, "Failed to encrypt variant {0}", wz); + hr = VerParseVersion(wzValue, 0, FALSE, &pVersion); + NativeAssert::Succeeded(hr, "Failed to parse version {0}", wzValue); - NativeAssert::True(pActualValue->fEncryptString); + pValue->Type = BURN_VARIANT_TYPE_VERSION; + pValue->pValue = pVersion; + pVersion = NULL; + + hr = BVariantCopy(pValue, pActualValue); + NativeAssert::Succeeded(hr, "Failed to copy variant {0}", wz); + + if (fHidden) + { + hr = BVariantSetEncryption(pActualValue, TRUE); + NativeAssert::Succeeded(hr, "Failed to encrypt variant {0}", wz); + + NativeAssert::True(pActualValue->fEncryptString); + } + } + finally + { + ReleaseVerutilVersion(pVersion); } } @@ -224,14 +237,21 @@ namespace Bootstrapper void VerifyVersionValue(BURN_VARIANT* pExpectedValue, BURN_VARIANT* pActualValue) { HRESULT hr = S_OK; - DWORD64 qwValue = 0; + VERUTIL_VERSION* pValue = NULL; NativeAssert::Equal(BURN_VARIANT_TYPE_VERSION, pExpectedValue->Type); NativeAssert::Equal(BURN_VARIANT_TYPE_VERSION, pActualValue->Type); - hr = BVariantGetVersion(pActualValue, &qwValue); - NativeAssert::Succeeded(hr, "Failed to get version value"); + try + { + hr = BVariantGetVersion(pActualValue, &pValue); + NativeAssert::Succeeded(hr, "Failed to get version value"); - NativeAssert::Equal(pExpectedValue->qwValue, qwValue); + NativeAssert::StringEqual(pExpectedValue->pValue->sczVersion, pActualValue->pValue->sczVersion); + } + finally + { + ReleaseVerutilVersion(pValue); + } } }; } diff --git a/src/test/BurnUnitTest/packages.config b/src/test/BurnUnitTest/packages.config index e537bcdb..74f2523f 100644 --- a/src/test/BurnUnitTest/packages.config +++ b/src/test/BurnUnitTest/packages.config @@ -9,5 +9,5 @@ - + \ No newline at end of file diff --git a/src/test/BurnUnitTest/precomp.h b/src/test/BurnUnitTest/precomp.h index e288eb3e..fea30156 100644 --- a/src/test/BurnUnitTest/precomp.h +++ b/src/test/BurnUnitTest/precomp.h @@ -13,6 +13,7 @@ #include "wininet.h" #include +#include #include #include #include -- cgit v1.2.3-55-g6feb