Skip to content

Commit 426a360

Browse files
committed
Refactored BinaryToHexStringTests
1 parent 7e84fb0 commit 426a360

1 file changed

Lines changed: 48 additions & 36 deletions

File tree

Lines changed: 48 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.Runtime.InteropServices;
23
using Microsoft.VisualStudio.TestTools.UnitTesting;
34
using SysadminsLV.Asn1Parser;
45

@@ -39,78 +40,89 @@ 0020 f7 42 87 e7 c4 36 .B...6
3940

4041
[TestMethod]
4142
public void TestHex() {
42-
String str = AsnFormatter.BinaryToString(_rawData, EncodingType.Hex);
43-
Assert.AreEqual(HEX, str.TrimEnd());
44-
str = AsnFormatter.BinaryToString(_rawData, EncodingType.Hex, forceUpperCase: true);
45-
Assert.AreEqual(HEX.ToUpper(), str.TrimEnd());
43+
runTest(_rawData, EncodingType.Hex, HEX, true);
4644
}
4745
[TestMethod]
4846
public void TestHexRaw() {
49-
String str = AsnFormatter.BinaryToString(_rawData);
50-
Assert.AreEqual(HEX_RAW, str.TrimEnd());
51-
str = AsnFormatter.BinaryToString(_rawData, forceUpperCase: true);
52-
Assert.AreEqual(HEX_RAW.ToUpper(), str.TrimEnd());
47+
runTest(_rawData, EncodingType.HexRaw, HEX_RAW, true);
5348
}
5449
[TestMethod]
5550
public void TestHexAddr() {
56-
String str = AsnFormatter.BinaryToString(_rawData, EncodingType.HexAddress);
57-
Assert.AreEqual(HEX_ADDR + HEX, str.TrimEnd());
51+
runTest(_rawData, EncodingType.HexAddress, HEX_ADDR + HEX, true);
5852
}
5953
[TestMethod]
6054
public void TestHexAscii() {
61-
String str = AsnFormatter.BinaryToString(_rawData, EncodingType.HexAscii);
62-
Assert.AreEqual(HEX + HEX_ASCII, str.TrimEnd());
55+
runTest(_rawData, EncodingType.HexAscii, HEX + HEX_ASCII, true);
6356
}
6457
[TestMethod]
6558
public void TestHexAddrAscii() {
66-
String str = AsnFormatter.BinaryToString(_rawData, EncodingType.HexAsciiAddress);
67-
Assert.AreEqual(HEX_ADDR + HEX + HEX_ASCII, str.TrimEnd());
59+
runTest(_rawData, EncodingType.HexAsciiAddress, HEX_ADDR + HEX + HEX_ASCII, true);
6860
}
6961
[TestMethod]
7062
public void TestHexAddrTruncated() {
71-
String str = AsnFormatter.BinaryToString(_rawDataTruncated, EncodingType.HexAddress);
72-
Assert.AreEqual(HEX_ADDR + TRUNCATED_HEX, str.TrimEnd());
63+
runTest(_rawDataTruncated, EncodingType.HexAddress, HEX_ADDR + TRUNCATED_HEX, true);
7364
}
7465
[TestMethod]
7566
public void TestHexAsciiTruncated() {
76-
String str = AsnFormatter.BinaryToString(_rawDataTruncated, EncodingType.HexAscii);
77-
Assert.AreEqual(TRUNCATED_HEX + TRUNCATED_HEX_ASCII, str.TrimEnd());
67+
runTest(_rawDataTruncated, EncodingType.HexAscii, TRUNCATED_HEX + TRUNCATED_HEX_ASCII, true);
7868
}
7969
[TestMethod]
8070
public void TestHexAddrAsciiTruncated() {
81-
String str = AsnFormatter.BinaryToString(_rawDataTruncated, EncodingType.HexAsciiAddress);
82-
Assert.AreEqual(HEX_ADDR + TRUNCATED_HEX + TRUNCATED_HEX_ASCII, str.TrimEnd());
71+
runTest(_rawDataTruncated, EncodingType.HexAsciiAddress, HEX_ADDR + TRUNCATED_HEX + TRUNCATED_HEX_ASCII, true);
8372
}
8473

8574
[TestMethod]
8675
public void TestComplexHexRaw() {
87-
String str = AsnFormatter.BinaryToString(_complexRawData);
88-
Assert.AreEqual(COMPLEX_HEX_RAW, str.TrimEnd());
89-
str = AsnFormatter.BinaryToString(_complexRawData, forceUpperCase: true);
90-
Assert.AreEqual(COMPLEX_HEX_RAW.ToUpper(), str.TrimEnd());
76+
runTest(_complexRawData, EncodingType.HexRaw, COMPLEX_HEX_RAW, true);
9177
}
9278
[TestMethod]
9379
public void TestComplexHex() {
94-
String str = AsnFormatter.BinaryToString(_complexRawData, EncodingType.Hex);
95-
Assert.AreEqual(COMPLEX_HEX, str.TrimEnd());
96-
str = AsnFormatter.BinaryToString(_complexRawData, EncodingType.Hex, forceUpperCase: true);
97-
Assert.AreEqual(COMPLEX_HEX.ToUpper(), str.TrimEnd());
80+
runTest(_complexRawData, EncodingType.Hex, COMPLEX_HEX, true);
9881
}
9982
[TestMethod]
10083
public void TestComplexHexAddr() {
101-
String str = AsnFormatter.BinaryToString(_complexRawData, EncodingType.HexAddress);
102-
Assert.AreEqual(COMPLEX_HEX_ADDR, str.TrimEnd());
103-
str = AsnFormatter.BinaryToString(_complexRawData, EncodingType.HexAddress, forceUpperCase: true);
104-
Assert.AreEqual(COMPLEX_HEX_ADDR.ToUpper(), str.TrimEnd());
84+
runTest(_complexRawData, EncodingType.HexAddress, COMPLEX_HEX_ADDR, true);
10585
}
10686
[TestMethod]
10787
public void TestComplexHexAscii() {
108-
String str = AsnFormatter.BinaryToString(_complexRawData, EncodingType.HexAscii);
109-
Assert.AreEqual(COMPLEX_HEX_ASCII, str.TrimEnd());
88+
runTest(_complexRawData, EncodingType.HexAscii, COMPLEX_HEX_ASCII, false);
11089
}
11190
[TestMethod]
11291
public void TestComplexHexAddrAscii() {
113-
String str = AsnFormatter.BinaryToString(_complexRawData, EncodingType.HexAsciiAddress);
114-
Assert.AreEqual(COMPLEX_HEX_ADDR_ASCII, str.TrimEnd());
92+
runTest(_complexRawData, EncodingType.HexAsciiAddress, COMPLEX_HEX_ADDR_ASCII, false);
11593
}
94+
95+
void runTest(Byte[] rawData, EncodingType encoding, String expected, Boolean testUppercase) {
96+
String str = AsnFormatter.BinaryToString(rawData, encoding);
97+
Assert.AreEqual(expected, str.TrimEnd());
98+
EncodingType testedEncoding = AsnFormatter.TestInputString(str);
99+
EncodingType capiEncoding = tryCapiDecode(str);
100+
// commented for now. Need research for these tests
101+
//Assert.AreEqual(encoding, testedEncoding);
102+
//Assert.AreEqual(capiEncoding, testedEncoding);
103+
if (testUppercase) {
104+
str = AsnFormatter.BinaryToString(rawData, encoding, forceUpperCase: true);
105+
Assert.AreEqual(expected.ToUpper(), str.TrimEnd());
106+
}
107+
}
108+
109+
EncodingType tryCapiDecode(String s) {
110+
UInt32 pcbBinary = 0;
111+
if (!CryptStringToBinary(s, s.Length, 0x7, null, ref pcbBinary, out UInt32 pdwSkip, out EncodingType pdwFlags)) {
112+
Console.WriteLine(Marshal.GetLastWin32Error());
113+
return EncodingType.Binary;
114+
}
115+
116+
return pdwFlags;
117+
}
118+
[DllImport("crypt32.dll", CharSet = CharSet.Auto, SetLastError = true)]
119+
static extern Boolean CryptStringToBinary(
120+
[In] String pszString,
121+
[In] Int32 cchString,
122+
[In] UInt32 dwFlags,
123+
[In] Byte[]? pbBinary,
124+
[In, Out] ref UInt32 pcbBinary,
125+
[Out] out UInt32 pdwSkip,
126+
[Out] out EncodingType pdwFlags
127+
);
116128
}

0 commit comments

Comments
 (0)