/src/prod/src/data/utilities/StatusConverter.Test.cpp

https://github.com/Microsoft/service-fabric · C++ · 416 lines · 303 code · 109 blank · 4 comment · 64 complexity · 28247fb6e701d9e3f735f0767d5b73f4 MD5 · raw file

  1. // ------------------------------------------------------------
  2. // Copyright (c) Microsoft Corporation. All rights reserved.
  3. // Licensed under the MIT License (MIT). See License.txt in the repo root for license information.
  4. // ------------------------------------------------------------
  5. #include "stdafx.h"
  6. #include <stdlib.h>
  7. #include <boost/test/unit_test.hpp>
  8. #include "Common/boost-taef.h"
  9. namespace UtilitiesTests
  10. {
  11. using namespace Data::Utilities;
  12. class StatusConverterTests
  13. {
  14. public:
  15. Common::CommonConfig config; // load the config object as its needed for the tracing to work
  16. private:
  17. KtlSystem* ktlSystem_;
  18. };
  19. BOOST_FIXTURE_TEST_SUITE(StatusConverterTestSuite, StatusConverterTests)
  20. BOOST_AUTO_TEST_CASE(IsSFHResult_SFHResult_TRUE)
  21. {
  22. VERIFY_IS_TRUE(StatusConverter::IsSFHResult(FABRIC_E_COMMUNICATION_ERROR));
  23. VERIFY_IS_TRUE(StatusConverter::IsSFHResult(FABRIC_E_RECONFIGURATION_PENDING));
  24. VERIFY_IS_TRUE(StatusConverter::IsSFHResult(FABRIC_E_WRITE_CONFLICT));
  25. VERIFY_IS_TRUE(StatusConverter::IsSFHResult(FABRIC_E_UPLOAD_SESSION_ID_CONFLICT));
  26. }
  27. BOOST_AUTO_TEST_CASE(IsSFHResult_NotSF_FALSE)
  28. {
  29. VERIFY_IS_FALSE(StatusConverter::IsSFHResult(E_ABORT));
  30. VERIFY_IS_FALSE(StatusConverter::IsSFHResult(E_ACCESSDENIED));
  31. VERIFY_IS_FALSE(StatusConverter::IsSFHResult(E_OUTOFMEMORY));
  32. VERIFY_IS_FALSE(StatusConverter::IsSFHResult(E_BOUNDS));
  33. }
  34. BOOST_AUTO_TEST_CASE(TryConvertConvertToSFSTATUS_SFHResult_TRUE)
  35. {
  36. bool isConverted = false;
  37. NTSTATUS result;
  38. isConverted = StatusConverter::TryConvertToSFSTATUS(FABRIC_E_COMMUNICATION_ERROR, result);
  39. VERIFY_IS_TRUE(isConverted);
  40. VERIFY_IS_TRUE(result == SF_STATUS_COMMUNICATION_ERROR);
  41. isConverted = StatusConverter::TryConvertToSFSTATUS(FABRIC_E_RECONFIGURATION_PENDING, result);
  42. VERIFY_IS_TRUE(isConverted);
  43. VERIFY_IS_TRUE(result == SF_STATUS_RECONFIGURATION_PENDING);
  44. isConverted = StatusConverter::TryConvertToSFSTATUS(FABRIC_E_NOT_PRIMARY, result);
  45. VERIFY_IS_TRUE(isConverted);
  46. VERIFY_IS_TRUE(result == SF_STATUS_NOT_PRIMARY);
  47. isConverted = StatusConverter::TryConvertToSFSTATUS(FABRIC_E_REPLICATION_QUEUE_FULL, result);
  48. VERIFY_IS_TRUE(isConverted);
  49. VERIFY_IS_TRUE(result == SF_STATUS_REPLICATION_QUEUE_FULL);
  50. isConverted = StatusConverter::TryConvertToSFSTATUS(FABRIC_E_OBJECT_CLOSED, result);
  51. VERIFY_IS_TRUE(isConverted);
  52. VERIFY_IS_TRUE(result == SF_STATUS_OBJECT_CLOSED);
  53. isConverted = StatusConverter::TryConvertToSFSTATUS(FABRIC_E_TIMEOUT, result);
  54. VERIFY_IS_TRUE(isConverted);
  55. VERIFY_IS_TRUE(result == SF_STATUS_TIMEOUT);
  56. isConverted = StatusConverter::TryConvertToSFSTATUS(FABRIC_E_OBJECT_DISPOSED, result);
  57. VERIFY_IS_TRUE(isConverted);
  58. VERIFY_IS_TRUE(result == SF_STATUS_OBJECT_DISPOSED);
  59. isConverted = StatusConverter::TryConvertToSFSTATUS(FABRIC_E_NOT_READABLE, result);
  60. VERIFY_IS_TRUE(isConverted);
  61. VERIFY_IS_TRUE(result == SF_STATUS_NOT_READABLE);
  62. }
  63. BOOST_AUTO_TEST_CASE(TryConvertConvertToSFSTATUS_NotSF_FALSE)
  64. {
  65. bool isConverted = true;
  66. NTSTATUS result;
  67. isConverted = StatusConverter::TryConvertToSFSTATUS(E_ABORT, result);
  68. VERIFY_IS_FALSE(isConverted);
  69. isConverted = StatusConverter::TryConvertToSFSTATUS(E_ACCESSDENIED, result);
  70. VERIFY_IS_FALSE(isConverted);
  71. isConverted = StatusConverter::TryConvertToSFSTATUS(E_OUTOFMEMORY, result);
  72. VERIFY_IS_FALSE(isConverted);
  73. isConverted = StatusConverter::TryConvertToSFSTATUS(E_BOUNDS, result);
  74. VERIFY_IS_FALSE(isConverted);
  75. }
  76. BOOST_AUTO_TEST_CASE(TryConvert_SFHResult_TRUE)
  77. {
  78. bool isConverted = false;
  79. NTSTATUS result;
  80. isConverted = StatusConverter::TryConvert(FABRIC_E_COMMUNICATION_ERROR, result);
  81. VERIFY_IS_TRUE(isConverted);
  82. VERIFY_IS_TRUE(result == SF_STATUS_COMMUNICATION_ERROR);
  83. isConverted = StatusConverter::TryConvert(FABRIC_E_RECONFIGURATION_PENDING, result);
  84. VERIFY_IS_TRUE(isConverted);
  85. VERIFY_IS_TRUE(result == SF_STATUS_RECONFIGURATION_PENDING);
  86. isConverted = StatusConverter::TryConvert(FABRIC_E_NOT_PRIMARY, result);
  87. VERIFY_IS_TRUE(isConverted);
  88. VERIFY_IS_TRUE(result == SF_STATUS_NOT_PRIMARY);
  89. isConverted = StatusConverter::TryConvert(FABRIC_E_REPLICATION_QUEUE_FULL, result);
  90. VERIFY_IS_TRUE(isConverted);
  91. VERIFY_IS_TRUE(result == SF_STATUS_REPLICATION_QUEUE_FULL);
  92. isConverted = StatusConverter::TryConvert(FABRIC_E_OBJECT_CLOSED, result);
  93. VERIFY_IS_TRUE(isConverted);
  94. VERIFY_IS_TRUE(result == SF_STATUS_OBJECT_CLOSED);
  95. isConverted = StatusConverter::TryConvert(FABRIC_E_TIMEOUT, result);
  96. VERIFY_IS_TRUE(isConverted);
  97. VERIFY_IS_TRUE(result == SF_STATUS_TIMEOUT);
  98. isConverted = StatusConverter::TryConvert(FABRIC_E_OBJECT_DISPOSED, result);
  99. VERIFY_IS_TRUE(isConverted);
  100. VERIFY_IS_TRUE(result == SF_STATUS_OBJECT_DISPOSED);
  101. isConverted = StatusConverter::TryConvert(FABRIC_E_NOT_READABLE, result);
  102. VERIFY_IS_TRUE(isConverted);
  103. VERIFY_IS_TRUE(result == SF_STATUS_NOT_READABLE);
  104. }
  105. BOOST_AUTO_TEST_CASE(TryConvert_WellKnown_TRUE)
  106. {
  107. bool isConverted = false;
  108. NTSTATUS result;
  109. isConverted = StatusConverter::TryConvert(S_OK, result);
  110. VERIFY_IS_TRUE(isConverted);
  111. VERIFY_IS_TRUE(result == STATUS_SUCCESS);
  112. isConverted = StatusConverter::TryConvert(E_INVALIDARG, result);
  113. VERIFY_IS_TRUE(isConverted);
  114. VERIFY_IS_TRUE(result == STATUS_INVALID_PARAMETER);
  115. isConverted = StatusConverter::TryConvert(E_ACCESSDENIED, result);
  116. VERIFY_IS_TRUE(isConverted);
  117. VERIFY_IS_TRUE(result == STATUS_ACCESS_DENIED);
  118. isConverted = StatusConverter::TryConvert(E_POINTER, result);
  119. VERIFY_IS_TRUE(isConverted);
  120. VERIFY_IS_TRUE(result == Common::K_STATUS_NULL_REF_POINTER);
  121. isConverted = StatusConverter::TryConvert(E_ABORT, result);
  122. VERIFY_IS_TRUE(isConverted);
  123. VERIFY_IS_TRUE(result == STATUS_CANCELLED);
  124. isConverted = StatusConverter::TryConvert(E_FAIL, result);
  125. VERIFY_IS_TRUE(isConverted);
  126. VERIFY_IS_TRUE(result == STATUS_UNSUCCESSFUL);
  127. isConverted = StatusConverter::TryConvert(E_OUTOFMEMORY, result);
  128. VERIFY_IS_TRUE(isConverted);
  129. VERIFY_IS_TRUE(result == STATUS_INSUFFICIENT_RESOURCES);
  130. isConverted = StatusConverter::TryConvert(E_NOTIMPL, result);
  131. VERIFY_IS_TRUE(isConverted);
  132. VERIFY_IS_TRUE(result == STATUS_NOT_IMPLEMENTED);
  133. }
  134. BOOST_AUTO_TEST_CASE(TryConvert_Unknown_TRUE)
  135. {
  136. bool isConverted = false;
  137. NTSTATUS status;
  138. HRESULT hResult;
  139. isConverted = StatusConverter::TryConvert(E_NOINTERFACE, status);
  140. VERIFY_IS_TRUE(isConverted);
  141. hResult = StatusConverter::ToHResult(status);
  142. VERIFY_IS_TRUE(hResult == E_NOINTERFACE);
  143. isConverted = StatusConverter::TryConvert(E_HANDLE, status);
  144. VERIFY_IS_TRUE(isConverted);
  145. hResult = StatusConverter::ToHResult(status);
  146. VERIFY_IS_TRUE(hResult == E_HANDLE);
  147. }
  148. BOOST_AUTO_TEST_CASE(IsSFStatus_SFStatus_TRUE)
  149. {
  150. VERIFY_IS_TRUE(StatusConverter::IsSFStatus(SF_STATUS_COMMUNICATION_ERROR));
  151. VERIFY_IS_TRUE(StatusConverter::IsSFStatus(SF_STATUS_TIMEOUT));
  152. VERIFY_IS_TRUE(StatusConverter::IsSFStatus(SF_STATUS_NAME_ALREADY_EXISTS));
  153. VERIFY_IS_TRUE(StatusConverter::IsSFStatus(SF_STATUS_NO_WRITE_QUORUM));
  154. }
  155. BOOST_AUTO_TEST_CASE(IsSFStatus_NotSFStatus_FALSE)
  156. {
  157. VERIFY_IS_FALSE(StatusConverter::IsSFStatus(STATUS_SUCCESS));
  158. VERIFY_IS_FALSE(StatusConverter::IsSFStatus(STATUS_INVALID_PARAMETER_1));
  159. VERIFY_IS_FALSE(StatusConverter::IsSFStatus(STATUS_INVALID_PARAMETER));
  160. VERIFY_IS_FALSE(StatusConverter::IsSFStatus(STATUS_INSUFFICIENT_RESOURCES));
  161. VERIFY_IS_FALSE(StatusConverter::IsSFStatus(SF_STATUS_COMMUNICATION_ERROR - 1));
  162. }
  163. BOOST_AUTO_TEST_CASE(TOSFHResult_SFStatus_TRUE)
  164. {
  165. bool isConverted = false;
  166. HRESULT result;
  167. isConverted = StatusConverter::ToSFHResult(SF_STATUS_COMMUNICATION_ERROR, result);
  168. VERIFY_IS_TRUE(isConverted);
  169. VERIFY_IS_TRUE(result == FABRIC_E_COMMUNICATION_ERROR);
  170. isConverted = StatusConverter::ToSFHResult(SF_STATUS_RECONFIGURATION_PENDING, result);
  171. VERIFY_IS_TRUE(isConverted);
  172. VERIFY_IS_TRUE(result == FABRIC_E_RECONFIGURATION_PENDING);
  173. isConverted = StatusConverter::ToSFHResult(SF_STATUS_NOT_PRIMARY, result);
  174. VERIFY_IS_TRUE(isConverted);
  175. VERIFY_IS_TRUE(result == FABRIC_E_NOT_PRIMARY);
  176. isConverted = StatusConverter::ToSFHResult(SF_STATUS_REPLICATION_QUEUE_FULL, result);
  177. VERIFY_IS_TRUE(isConverted);
  178. VERIFY_IS_TRUE(result == FABRIC_E_REPLICATION_QUEUE_FULL);
  179. isConverted = StatusConverter::ToSFHResult(SF_STATUS_OBJECT_CLOSED, result);
  180. VERIFY_IS_TRUE(isConverted);
  181. VERIFY_IS_TRUE(result == FABRIC_E_OBJECT_CLOSED);
  182. isConverted = StatusConverter::ToSFHResult(SF_STATUS_TIMEOUT, result);
  183. VERIFY_IS_TRUE(isConverted);
  184. VERIFY_IS_TRUE(result == FABRIC_E_TIMEOUT);
  185. isConverted = StatusConverter::ToSFHResult(SF_STATUS_OBJECT_DISPOSED, result);
  186. VERIFY_IS_TRUE(isConverted);
  187. VERIFY_IS_TRUE(result == FABRIC_E_OBJECT_DISPOSED);
  188. isConverted = StatusConverter::ToSFHResult(SF_STATUS_NOT_READABLE, result);
  189. VERIFY_IS_TRUE(isConverted);
  190. VERIFY_IS_TRUE(result == FABRIC_E_NOT_READABLE);
  191. }
  192. BOOST_AUTO_TEST_CASE(ToSFHResult_NotSFStatus_FALSE)
  193. {
  194. bool isConverted = true;
  195. NTSTATUS result;
  196. isConverted = StatusConverter::ToSFHResult(STATUS_SUCCESS, result);
  197. VERIFY_IS_FALSE(isConverted);
  198. isConverted = StatusConverter::ToSFHResult(STATUS_INVALID_PARAMETER_1, result);
  199. VERIFY_IS_FALSE(isConverted);
  200. isConverted = StatusConverter::ToSFHResult(STATUS_INVALID_PARAMETER, result);
  201. VERIFY_IS_FALSE(isConverted);
  202. isConverted = StatusConverter::ToSFHResult(STATUS_INSUFFICIENT_RESOURCES, result);
  203. VERIFY_IS_FALSE(isConverted);
  204. isConverted = StatusConverter::ToSFHResult(SF_STATUS_COMMUNICATION_ERROR - 1, result);
  205. VERIFY_IS_FALSE(isConverted);
  206. }
  207. BOOST_AUTO_TEST_CASE(ToHResult_SFHResult_TRUE)
  208. {
  209. HRESULT result;
  210. result = StatusConverter::ToHResult(SF_STATUS_COMMUNICATION_ERROR);
  211. VERIFY_IS_TRUE(result == FABRIC_E_COMMUNICATION_ERROR);
  212. result = StatusConverter::ToHResult(SF_STATUS_RECONFIGURATION_PENDING);
  213. VERIFY_IS_TRUE(result == FABRIC_E_RECONFIGURATION_PENDING);
  214. result = StatusConverter::ToHResult(SF_STATUS_NOT_PRIMARY);
  215. VERIFY_IS_TRUE(result == FABRIC_E_NOT_PRIMARY);
  216. result = StatusConverter::ToHResult(SF_STATUS_REPLICATION_QUEUE_FULL);
  217. VERIFY_IS_TRUE(result == FABRIC_E_REPLICATION_QUEUE_FULL);
  218. result = StatusConverter::ToHResult(SF_STATUS_OBJECT_CLOSED);
  219. VERIFY_IS_TRUE(result == FABRIC_E_OBJECT_CLOSED);
  220. result = StatusConverter::ToHResult(SF_STATUS_TIMEOUT);
  221. VERIFY_IS_TRUE(result == FABRIC_E_TIMEOUT);
  222. result = StatusConverter::ToHResult(SF_STATUS_OBJECT_DISPOSED);
  223. VERIFY_IS_TRUE(result == FABRIC_E_OBJECT_DISPOSED);
  224. result = StatusConverter::ToHResult(SF_STATUS_NOT_READABLE);
  225. VERIFY_IS_TRUE(result == FABRIC_E_NOT_READABLE);
  226. }
  227. BOOST_AUTO_TEST_CASE(ToHResult_WellKnown_TRUE)
  228. {
  229. HRESULT result;
  230. result = StatusConverter::ToHResult(STATUS_SUCCESS);
  231. VERIFY_IS_TRUE(result == S_OK);
  232. result = StatusConverter::ToHResult(STATUS_INVALID_PARAMETER);
  233. VERIFY_IS_TRUE(result == E_INVALIDARG);
  234. result = StatusConverter::ToHResult(STATUS_ACCESS_DENIED);
  235. VERIFY_IS_TRUE(result == E_ACCESSDENIED);
  236. result = StatusConverter::ToHResult(Common::K_STATUS_NULL_REF_POINTER);
  237. VERIFY_IS_TRUE(result == E_POINTER);
  238. result = StatusConverter::ToHResult(STATUS_CANCELLED);
  239. VERIFY_IS_TRUE(result == E_ABORT);
  240. result = StatusConverter::ToHResult(STATUS_UNSUCCESSFUL);
  241. VERIFY_IS_TRUE(result == E_FAIL);
  242. result = StatusConverter::ToHResult(STATUS_INSUFFICIENT_RESOURCES);
  243. VERIFY_IS_TRUE(result == E_OUTOFMEMORY);
  244. result = StatusConverter::ToHResult(STATUS_NOT_IMPLEMENTED);
  245. VERIFY_IS_TRUE(result == E_NOTIMPL);
  246. }
  247. BOOST_AUTO_TEST_CASE(ToHResult_Unknown_TRUE)
  248. {
  249. HRESULT hResult;
  250. NTSTATUS status;
  251. hResult = StatusConverter::ToHResult(STATUS_ABIOS_INVALID_COMMAND);
  252. StatusConverter::TryConvert(hResult, status);
  253. VERIFY_IS_TRUE(status == STATUS_ABIOS_INVALID_COMMAND);
  254. hResult = StatusConverter::ToHResult(STATUS_NAME_TOO_LONG);
  255. StatusConverter::TryConvert(hResult, status);
  256. VERIFY_IS_TRUE(status == STATUS_NAME_TOO_LONG);
  257. hResult = StatusConverter::ToHResult(STATUS_OBJECT_NAME_EXISTS);
  258. StatusConverter::TryConvert(hResult, status);
  259. VERIFY_IS_TRUE(status == STATUS_OBJECT_NAME_EXISTS);
  260. hResult = StatusConverter::ToHResult(STATUS_UNSUCCESSFUL);
  261. StatusConverter::TryConvert(hResult, status);
  262. VERIFY_IS_TRUE(status == STATUS_UNSUCCESSFUL);
  263. hResult = StatusConverter::ToHResult(STATUS_INTERNAL_DB_CORRUPTION);
  264. StatusConverter::TryConvert(hResult, status);
  265. VERIFY_IS_TRUE(status == STATUS_INTERNAL_DB_CORRUPTION);
  266. hResult = StatusConverter::ToHResult(STATUS_INTERNAL_DB_ERROR);
  267. StatusConverter::TryConvert(hResult, status);
  268. VERIFY_IS_TRUE(status == STATUS_INTERNAL_DB_ERROR);
  269. }
  270. BOOST_AUTO_TEST_CASE(TryConvert_Win32Error_WellKnown_TRUE)
  271. {
  272. bool isConverted = true;
  273. NTSTATUS result;
  274. isConverted = StatusConverter::TryConvert(HRESULT_FROM_WIN32(ERROR_DISK_FULL), result);
  275. VERIFY_IS_TRUE(isConverted);
  276. VERIFY_IS_TRUE(result == STATUS_DISK_FULL);
  277. isConverted = StatusConverter::TryConvert(HRESULT_FROM_WIN32(ERROR_ACCESS_DENIED), result);
  278. VERIFY_IS_TRUE(isConverted);
  279. VERIFY_IS_TRUE(result == STATUS_ACCESS_DENIED);
  280. isConverted = StatusConverter::TryConvert(HRESULT_FROM_WIN32(ERROR_OUTOFMEMORY), result);
  281. VERIFY_IS_TRUE(isConverted);
  282. VERIFY_IS_TRUE(result == STATUS_INSUFFICIENT_RESOURCES);
  283. isConverted = StatusConverter::TryConvert(HRESULT_FROM_WIN32(ERROR_NOT_ENOUGH_MEMORY), result);
  284. VERIFY_IS_TRUE(isConverted);
  285. VERIFY_IS_TRUE(result == STATUS_INSUFFICIENT_RESOURCES);
  286. isConverted = StatusConverter::TryConvert(HRESULT_FROM_WIN32(ERROR_OPEN_FAILED), result);
  287. VERIFY_IS_TRUE(isConverted);
  288. VERIFY_IS_TRUE(result == STATUS_OPEN_FAILED);
  289. isConverted = StatusConverter::TryConvert(HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND), result);
  290. VERIFY_IS_TRUE(isConverted);
  291. VERIFY_IS_TRUE(result == SF_STATUS_FILE_NOT_FOUND);
  292. isConverted = StatusConverter::TryConvert(HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND), result);
  293. VERIFY_IS_TRUE(isConverted);
  294. VERIFY_IS_TRUE(result == SF_STATUS_DIRECTORY_NOT_FOUND);
  295. }
  296. BOOST_AUTO_TEST_CASE(TryConvert_Win32Error_UnKnown_TRUE)
  297. {
  298. bool isConverted = true;
  299. NTSTATUS status;
  300. HRESULT hResult;
  301. isConverted = StatusConverter::TryConvert(HRESULT_FROM_WIN32(ERROR_CURRENT_DIRECTORY), status);
  302. VERIFY_IS_TRUE(isConverted);
  303. hResult = StatusConverter::ToHResult(status);
  304. VERIFY_IS_TRUE(hResult == HRESULT_FROM_WIN32(ERROR_CURRENT_DIRECTORY));
  305. }
  306. BOOST_AUTO_TEST_SUITE_END()
  307. }