Advertisement
Guest User

Untitled

a guest
Jul 24th, 2019
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 85.38 KB | None | 0 0
  1. #include "DetectionMonitorMock.hpp"
  2. #include "HelperClasses.hpp"
  3. #include "HlapiClientMock.hpp"
  4. #include "PwmFanMock.hpp"
  5. #include <GpioHelpersMock.hpp>
  6.  
  7. using namespace ::testing;
  8. using namespace pss::gpio;
  9. namespace ho = ::hlapi::ho;
  10.  
  11. namespace fans
  12. {
  13. class DetectionPwmTestCases : public TestWithDefaultPwmConfig
  14. {
  15. public:
  16. DetectionPwmTestCases()
  17. : hlapiClientMock(mf::CpAddr(), mf::CpAddr(), "fans", state),
  18. fanModReader(std::make_shared<::testing::NiceMock<FanModuleReaderMock>>()),
  19. fanModStatDet(std::make_shared<NiceMock<FanModuleStatusDetector>>(fanModReader)),
  20. detMonMock(hlapiClientMock, state, config, mf::CpAddr(), fanModStatDet),
  21. timerNotif{0, static_cast<tf::SessionId>(EFansTimerSession::FanDetection), 0}
  22. {
  23. ON_CALL(detMonMock, detectFans(_))
  24. .WillByDefault(::testing::Invoke(&detMonMock, &DetectionMonitorMock::detectFansOrigin));
  25.  
  26. ON_CALL(*fanModReader, registerDefined(_)).WillByDefault(Return(false));
  27.  
  28. // emulating nice mocks:
  29. EXPECT_CALL(detMonMock, detectFans(_)).Times(AnyNumber());
  30. EXPECT_CALL(detMonMock, atLeastOnePwmFanNotDetected(_)).Times(AnyNumber());
  31. EXPECT_CALL(hlapiClientMock, sendUpdateFanModulesStatus(_)).Times(AnyNumber());
  32. EXPECT_CALL(hlapiClientMock, sendUpdateFanStatus(_)).Times(AnyNumber());
  33. }
  34.  
  35. protected:
  36. StubInstancesRemoveGuard stubGuard;
  37. HlapiClientMock hlapiClientMock;
  38. std::shared_ptr<FanModuleReaderMock> fanModReader;
  39. std::shared_ptr<FanModuleStatusDetector> fanModStatDet;
  40. DetectionMonitorMock detMonMock;
  41. tf::msg::TimerNotif timerNotif;
  42. };
  43.  
  44. TEST_F(DetectionPwmTestCases, ModInst_not_defined_speed_detection_not_allowed_VendorGpio_not_defined)
  45. {
  46. config.fanInstance.speedResponseDetectionAllowed = false;
  47. // ON_CALL(*fanModStatDet, detectFanModuleStatus(_)).WillByDefault(Return(::hlapi::ho::EFanModStatus_NothingInstalled));
  48.  
  49. auto checkDetection = [this]() {
  50. detMonMock.detectFans(timerNotif);
  51.  
  52. auto& moduleStatusExt = state.fanModules[0].modStatObj.GetExtension(ho::FanModuleStatus::object);
  53. EXPECT_EQ(ho::EFanModStatus_NothingInstalled, moduleStatusExt.status());
  54.  
  55. auto pwmFanStatusExt0 = state.fanModules[0].pwmFans[0].statusObj.GetExtension(ho::FanStatus::object);
  56. EXPECT_FALSE(pwmFanStatusExt0.detected());
  57. EXPECT_FALSE(pwmFanStatusExt0.working());
  58. EXPECT_EQ(VendorDetectionNotPossible, pwmFanStatusExt0.vendorid());
  59. EXPECT_EQ(0, pwmFanStatusExt0.fanmaxrpm());
  60. EXPECT_EQ(0, pwmFanStatusExt0.fanmaxcontrolpwm());
  61.  
  62. auto pwmFanStatusExt1 = state.fanModules[0].pwmFans[1].statusObj.GetExtension(ho::FanStatus::object);
  63. EXPECT_FALSE(pwmFanStatusExt1.detected());
  64. EXPECT_FALSE(pwmFanStatusExt1.working());
  65. EXPECT_EQ(VendorDetectionNotPossible, pwmFanStatusExt1.vendorid());
  66. EXPECT_EQ(0, pwmFanStatusExt1.fanmaxrpm());
  67. EXPECT_EQ(0, pwmFanStatusExt1.fanmaxcontrolpwm());
  68. };
  69.  
  70. // emulating periodic detection
  71. checkDetection();
  72. checkDetection();
  73. }
  74.  
  75. TEST_F(DetectionPwmTestCases, ModInst_not_defined_speed_detection_not_allowed_VendorGpio_defined_failure)
  76. {
  77. // ON_CALL(*fanModStatDet, detectFanModuleStatus(_)).WillByDefault(Return(::hlapi::ho::EFanModStatus_NothingInstalled));
  78.  
  79. config.fanInstance.speedResponseDetectionAllowed = false;
  80.  
  81. config.fanInstance.fanModules[0].vendorIdGpio.push_back(gpioInfo{1, "1", false});
  82. config.fanInstance.fanModules[0].vendorIdGpio.push_back(gpioInfo{2, "2", false});
  83. config.fanInstance.fanModules[0].vendorIdGpio.push_back(gpioInfo{3, "3", false});
  84.  
  85. auto checkDetection = [this]() {
  86. detMonMock.detectFans(timerNotif);
  87.  
  88. auto& moduleStatusExt = state.fanModules[0].modStatObj.GetExtension(ho::FanModuleStatus::object);
  89. EXPECT_EQ(ho::EFanModStatus_NothingInstalled, moduleStatusExt.status());
  90.  
  91. auto pwmFanStatusExt0 = state.fanModules[0].pwmFans[0].statusObj.GetExtension(ho::FanStatus::object);
  92. EXPECT_FALSE(pwmFanStatusExt0.detected());
  93. EXPECT_FALSE(pwmFanStatusExt0.working());
  94. EXPECT_EQ(VendorDetectionNotPossible, pwmFanStatusExt0.vendorid());
  95. EXPECT_EQ(0, pwmFanStatusExt0.fanmaxrpm());
  96. EXPECT_EQ(0, pwmFanStatusExt0.fanmaxcontrolpwm());
  97.  
  98. auto pwmFanStatusExt1 = state.fanModules[0].pwmFans[1].statusObj.GetExtension(ho::FanStatus::object);
  99. EXPECT_FALSE(pwmFanStatusExt1.detected());
  100. EXPECT_FALSE(pwmFanStatusExt1.working());
  101. EXPECT_EQ(VendorDetectionNotPossible, pwmFanStatusExt1.vendorid());
  102. EXPECT_EQ(0, pwmFanStatusExt1.fanmaxrpm());
  103. EXPECT_EQ(0, pwmFanStatusExt1.fanmaxcontrolpwm());
  104. };
  105.  
  106. {
  107. InSequence s;
  108. EXPECT_CALL(*GpioStub::instance(), getValue())
  109. .Times(1)
  110. .WillRepeatedly(Throw(std::runtime_error("Big GPIO ERROR"))); // reading vendorIdGpio[0]
  111. }
  112. checkDetection();
  113.  
  114. checkDetection();
  115. }
  116.  
  117. TEST_F(DetectionPwmTestCases,
  118. ModInst_not_defined_speed_detection_not_allowed_VendorGpio_defined_returned_vendorNotDetected)
  119. {
  120. // ON_CALL(*fanModStatDet, detectFanModuleStatus(_)).WillByDefault(Return(::hlapi::ho::EFanModStatus_NothingInstalled));
  121.  
  122. config.fanInstance.speedResponseDetectionAllowed = false;
  123.  
  124. config.fanInstance.fanModules[0].vendorIdGpio.push_back(gpioInfo{1, "1", false});
  125. config.fanInstance.fanModules[0].vendorIdGpio.push_back(gpioInfo{2, "2", false});
  126. config.fanInstance.fanModules[0].vendorIdGpio.push_back(gpioInfo{3, "3", false});
  127.  
  128. auto checkDetection = [this]() {
  129. detMonMock.detectFans(timerNotif);
  130.  
  131. auto& moduleStatusExt = state.fanModules[0].modStatObj.GetExtension(ho::FanModuleStatus::object);
  132. EXPECT_EQ(ho::EFanModStatus_NothingInstalled, moduleStatusExt.status());
  133.  
  134. auto pwmFanStatusExt0 = state.fanModules[0].pwmFans[0].statusObj.GetExtension(ho::FanStatus::object);
  135. EXPECT_FALSE(pwmFanStatusExt0.detected());
  136. EXPECT_FALSE(pwmFanStatusExt0.working());
  137. EXPECT_EQ(VendorNotDetected, pwmFanStatusExt0.vendorid());
  138. EXPECT_EQ(0, pwmFanStatusExt0.fanmaxrpm());
  139. EXPECT_EQ(0, pwmFanStatusExt0.fanmaxcontrolpwm());
  140.  
  141. auto pwmFanStatusExt1 = state.fanModules[0].pwmFans[1].statusObj.GetExtension(ho::FanStatus::object);
  142. EXPECT_FALSE(pwmFanStatusExt1.detected());
  143. EXPECT_FALSE(pwmFanStatusExt1.working());
  144. EXPECT_EQ(VendorNotDetected, pwmFanStatusExt1.vendorid());
  145. EXPECT_EQ(0, pwmFanStatusExt1.fanmaxrpm());
  146. EXPECT_EQ(0, pwmFanStatusExt1.fanmaxcontrolpwm());
  147. };
  148.  
  149. {
  150. InSequence s;
  151. EXPECT_CALL(*GpioStub::instance(), getValue())
  152. .Times(1)
  153. .WillRepeatedly(Return(true)); // reading vendorIdGpio[0]
  154. EXPECT_CALL(*GpioStub::instance(), getValue())
  155. .Times(1)
  156. .WillRepeatedly(Return(true)); // reading vendorIdGpio[1]
  157. EXPECT_CALL(*GpioStub::instance(), getValue())
  158. .Times(1)
  159. .WillRepeatedly(Return(true)); // reading vendorIdGpio[2]
  160. }
  161. checkDetection();
  162.  
  163. checkDetection();
  164. }
  165.  
  166. TEST_F(DetectionPwmTestCases,
  167. ModInst_not_defined_speed_detection_not_allowed_VendorGpio_defined_vendorId_not_found_in_the_table)
  168. {
  169. // ON_CALL(*fanModStatDet, detectFanModuleStatus(_)).WillByDefault(Return(::hlapi::ho::EFanModStatus_FanModuleInstalled));
  170. config.fanInstance.speedResponseDetectionAllowed = false;
  171.  
  172. config.fanInstance.fanModules[0].vendorIdGpio.push_back(gpioInfo{1, "1", false});
  173. config.fanInstance.fanModules[0].vendorIdGpio.push_back(gpioInfo{2, "2", false});
  174. config.fanInstance.fanModules[0].vendorIdGpio.push_back(gpioInfo{3, "3", false});
  175.  
  176. auto checkDetection = [this]() {
  177. detMonMock.detectFans(timerNotif);
  178.  
  179. auto& moduleStatusExt = state.fanModules[0].modStatObj.GetExtension(ho::FanModuleStatus::object);
  180. EXPECT_EQ(ho::EFanModStatus_FanModuleInstalled, moduleStatusExt.status());
  181.  
  182. auto pwmFanStatusExt0 = state.fanModules[0].pwmFans[0].statusObj.GetExtension(ho::FanStatus::object);
  183. EXPECT_TRUE(pwmFanStatusExt0.detected());
  184. EXPECT_TRUE(pwmFanStatusExt0.working());
  185. EXPECT_EQ(VendorNotDetected, pwmFanStatusExt0.vendorid());
  186. EXPECT_EQ(config.getFanInstance().fanMaxRpmDefault, pwmFanStatusExt0.fanmaxrpm());
  187. EXPECT_EQ(config.getFanInstance().fanMaxControlPwmDefault, pwmFanStatusExt0.fanmaxcontrolpwm());
  188.  
  189. auto pwmFanStatusExt1 = state.fanModules[0].pwmFans[1].statusObj.GetExtension(ho::FanStatus::object);
  190. EXPECT_TRUE(pwmFanStatusExt1.detected());
  191. EXPECT_TRUE(pwmFanStatusExt1.working());
  192. EXPECT_EQ(VendorNotDetected, pwmFanStatusExt1.vendorid());
  193. EXPECT_EQ(config.getFanInstance().fanMaxRpmDefault, pwmFanStatusExt1.fanmaxrpm());
  194. EXPECT_EQ(config.getFanInstance().fanMaxControlPwmDefault, pwmFanStatusExt1.fanmaxcontrolpwm());
  195. };
  196.  
  197. {
  198. InSequence s;
  199. EXPECT_CALL(*GpioStub::instance(), getValue())
  200. .Times(1)
  201. .WillRepeatedly(Return(false)); // reading vendorIdGpio[0]
  202. EXPECT_CALL(*GpioStub::instance(), getValue())
  203. .Times(1)
  204. .WillRepeatedly(Return(false)); // reading vendorIdGpio[1]
  205. EXPECT_CALL(*GpioStub::instance(), getValue())
  206. .Times(1)
  207. .WillRepeatedly(Return(true)); // reading vendorIdGpio[2]
  208. }
  209. checkDetection();
  210.  
  211. checkDetection();
  212. }
  213.  
  214. TEST_F(DetectionPwmTestCases, ModInst_not_defined_speed_detection_not_allowed_VendorGpio_defined_valid_vendorId)
  215. {
  216. // ON_CALL(*fanModStatDet, detectFanModuleStatus(_)).WillByDefault(Return(::hlapi::ho::EFanModStatus_FanModuleInstalled));
  217.  
  218. config.fanInstance.speedResponseDetectionAllowed = false;
  219.  
  220. config.fanInstance.fanModules[0].vendorIdGpio.push_back(gpioInfo{1, "1", false});
  221. config.fanInstance.fanModules[0].vendorIdGpio.push_back(gpioInfo{2, "2", false});
  222. config.fanInstance.fanModules[0].vendorIdGpio.push_back(gpioInfo{3, "3", false});
  223.  
  224. auto checkDetection = [this]() {
  225. detMonMock.detectFans(timerNotif);
  226.  
  227. auto& moduleStatusExt = state.fanModules[0].modStatObj.GetExtension(ho::FanModuleStatus::object);
  228. EXPECT_EQ(ho::EFanModStatus_FanModuleInstalled, moduleStatusExt.status());
  229.  
  230. auto pwmFanStatusExt0 = state.fanModules[0].pwmFans[0].statusObj.GetExtension(ho::FanStatus::object);
  231. EXPECT_TRUE(pwmFanStatusExt0.detected());
  232. EXPECT_TRUE(pwmFanStatusExt0.working());
  233. EXPECT_EQ(3, pwmFanStatusExt0.vendorid());
  234. EXPECT_EQ(config.getVendorConfig(3).fanMaxRpm, pwmFanStatusExt0.fanmaxrpm());
  235. EXPECT_EQ(config.getVendorConfig(3).fanMaxControlPwm, pwmFanStatusExt0.fanmaxcontrolpwm());
  236.  
  237. auto pwmFanStatusExt1 = state.fanModules[0].pwmFans[1].statusObj.GetExtension(ho::FanStatus::object);
  238. EXPECT_TRUE(pwmFanStatusExt1.detected());
  239. EXPECT_TRUE(pwmFanStatusExt1.working());
  240. EXPECT_EQ(3, pwmFanStatusExt1.vendorid());
  241. EXPECT_EQ(config.getVendorConfig(3).fanMaxRpm, pwmFanStatusExt1.fanmaxrpm());
  242. EXPECT_EQ(config.getVendorConfig(3).fanMaxControlPwm, pwmFanStatusExt1.fanmaxcontrolpwm());
  243. };
  244.  
  245. {
  246. InSequence s;
  247. EXPECT_CALL(*GpioStub::instance(), getValue())
  248. .Times(1)
  249. .WillRepeatedly(Return(false)); // reading vendorIdGpio[0]
  250. EXPECT_CALL(*GpioStub::instance(), getValue())
  251. .Times(1)
  252. .WillRepeatedly(Return(true)); // reading vendorIdGpio[1]
  253. EXPECT_CALL(*GpioStub::instance(), getValue())
  254. .Times(1)
  255. .WillRepeatedly(Return(true)); // reading vendorIdGpio[2]
  256. }
  257. checkDetection();
  258.  
  259. checkDetection();
  260. }
  261.  
  262. TEST_F(DetectionPwmTestCases, ModInst_not_defined_speed_detection_allowed_both_failed)
  263. {
  264. // ON_CALL(*fanModStatDet, detectFanModuleStatus(_)).WillByDefault(Return(::hlapi::ho::EFanModStatus_NothingInstalled));
  265.  
  266. config.fanInstance.speedResponseDetectionAllowed = true;
  267.  
  268. // Altough vendorId GPIO defined, they won't be read, because speed response allowed.
  269. config.fanInstance.fanModules[0].vendorIdGpio.push_back(gpioInfo{1, "1", false});
  270. config.fanInstance.fanModules[0].vendorIdGpio.push_back(gpioInfo{2, "2", false});
  271. config.fanInstance.fanModules[0].vendorIdGpio.push_back(gpioInfo{3, "3", false});
  272.  
  273. auto checkDetection = [this]() {
  274. detMonMock.detectFans(timerNotif);
  275.  
  276. ON_CALL(*std::dynamic_pointer_cast<PwmFanMock>(state.fanModules[0].pwmFans[0].hwHandle), rpm())
  277. .WillByDefault(Throw(HwMonException()));
  278. ON_CALL(*std::dynamic_pointer_cast<PwmFanMock>(state.fanModules[0].pwmFans[1].hwHandle), rpm())
  279. .WillByDefault(Throw(HwMonException()));
  280.  
  281. unsigned int sessionId =
  282. static_cast<unsigned int>(EFansTimerSession::SpeedResponseDetection) + state.fanModules[0].fanModId;
  283. tf::msg::TimerNotif timerNotifCorrect{0, static_cast<tf::SessionId>(sessionId), 0};
  284. detMonMock.detectFans(timerNotifCorrect);
  285.  
  286. auto& moduleStatusExt = state.fanModules[0].modStatObj.GetExtension(ho::FanModuleStatus::object);
  287. EXPECT_EQ(ho::EFanModStatus_NothingInstalled, moduleStatusExt.status());
  288.  
  289. auto pwmFanStatusExt0 = state.fanModules[0].pwmFans[0].statusObj.GetExtension(ho::FanStatus::object);
  290. EXPECT_FALSE(pwmFanStatusExt0.detected());
  291. EXPECT_FALSE(pwmFanStatusExt0.working());
  292. EXPECT_EQ(VendorNotDetected, pwmFanStatusExt0.vendorid());
  293. EXPECT_EQ(config.getFanInstance().fanMaxRpmDefault, pwmFanStatusExt0.fanmaxrpm());
  294. EXPECT_EQ(config.getFanInstance().fanMaxControlPwmDefault, pwmFanStatusExt0.fanmaxcontrolpwm());
  295.  
  296. auto pwmFanStatusExt1 = state.fanModules[0].pwmFans[1].statusObj.GetExtension(ho::FanStatus::object);
  297. EXPECT_FALSE(pwmFanStatusExt1.detected());
  298. EXPECT_FALSE(pwmFanStatusExt0.working());
  299. EXPECT_EQ(VendorNotDetected, pwmFanStatusExt0.vendorid());
  300. EXPECT_EQ(config.getFanInstance().fanMaxRpmDefault, pwmFanStatusExt0.fanmaxrpm());
  301. EXPECT_EQ(config.getFanInstance().fanMaxControlPwmDefault, pwmFanStatusExt0.fanmaxcontrolpwm());
  302. };
  303.  
  304. // emulating periodic detection
  305. checkDetection();
  306. checkDetection();
  307. }
  308.  
  309. TEST_F(DetectionPwmTestCases, ModInst_not_defined_speed_detection_allowed_first_zero_second_below_rpmMin)
  310. {
  311. // EXPECT_CALL(*fanModStatDet, detectFanModuleStatus(_))
  312. // .WillOnce(Return(::hlapi::ho::EFanModStatus_FanModuleInstalled))
  313. // .WillOnce(Return(::hlapi::ho::EFanModStatus_FanModuleInstalled));
  314.  
  315. config.fanInstance.speedResponseDetectionAllowed = true;
  316.  
  317. auto checkDetection = [this]() {
  318. detMonMock.detectFans(timerNotif);
  319.  
  320. ON_CALL(*std::dynamic_pointer_cast<PwmFanMock>(state.fanModules[0].pwmFans[0].hwHandle), rpm())
  321. .WillByDefault(Return(0));
  322. ON_CALL(*std::dynamic_pointer_cast<PwmFanMock>(state.fanModules[0].pwmFans[1].hwHandle), rpm())
  323. .WillByDefault(Return(3000));
  324.  
  325. unsigned int sessionId =
  326. static_cast<unsigned int>(EFansTimerSession::SpeedResponseDetection) + state.fanModules[0].fanModId;
  327. tf::msg::TimerNotif timerNotifCorrect{0, static_cast<tf::SessionId>(sessionId), 0};
  328. detMonMock.detectFans(timerNotifCorrect);
  329.  
  330. auto& moduleStatusExt = state.fanModules[0].modStatObj.GetExtension(ho::FanModuleStatus::object);
  331. EXPECT_EQ(ho::EFanModStatus_FanModuleInstalled, moduleStatusExt.status());
  332.  
  333. auto pwmFanStatusExt0 = state.fanModules[0].pwmFans[0].statusObj.GetExtension(ho::FanStatus::object);
  334. EXPECT_FALSE(pwmFanStatusExt0.detected());
  335. EXPECT_FALSE(pwmFanStatusExt0.working());
  336. EXPECT_EQ(VendorNotDetected, pwmFanStatusExt0.vendorid());
  337. EXPECT_EQ(config.getFanInstance().fanMaxRpmDefault, pwmFanStatusExt0.fanmaxrpm());
  338. EXPECT_EQ(config.getFanInstance().fanMaxControlPwmDefault, pwmFanStatusExt0.fanmaxcontrolpwm());
  339.  
  340. auto pwmFanStatusExt1 = state.fanModules[0].pwmFans[1].statusObj.GetExtension(ho::FanStatus::object);
  341. EXPECT_TRUE(pwmFanStatusExt1.detected());
  342. EXPECT_TRUE(pwmFanStatusExt1.working());
  343. EXPECT_EQ(VendorNotDetected, pwmFanStatusExt1.vendorid());
  344. EXPECT_EQ(config.getFanInstance().fanMaxRpmDefault, pwmFanStatusExt1.fanmaxrpm());
  345. EXPECT_EQ(config.getFanInstance().fanMaxControlPwmDefault, pwmFanStatusExt1.fanmaxcontrolpwm());
  346. };
  347.  
  348. // emulating periodic detection
  349. checkDetection();
  350. checkDetection();
  351. }
  352.  
  353. TEST_F(DetectionPwmTestCases, ModInst_not_defined_speed_detection_allowed_empty_conf_table)
  354. {
  355. // ON_CALL(*fanModStatDet, detectFanModuleStatus(_)).WillByDefault(Return(::hlapi::ho::EFanModStatus_FanModuleInstalled));
  356.  
  357. config.fanInstance.speedResponseDetectionAllowed = true;
  358. config.fanInstance.fanVendors = {};
  359.  
  360. auto checkDetection = [this]() {
  361. detMonMock.detectFans(timerNotif);
  362.  
  363. ON_CALL(*std::dynamic_pointer_cast<PwmFanMock>(state.fanModules[0].pwmFans[0].hwHandle), rpm())
  364. .WillByDefault(Return(0));
  365. ON_CALL(*std::dynamic_pointer_cast<PwmFanMock>(state.fanModules[0].pwmFans[1].hwHandle), rpm())
  366. .WillByDefault(Return(3800));
  367.  
  368. unsigned int sessionId =
  369. static_cast<unsigned int>(EFansTimerSession::SpeedResponseDetection) + state.fanModules[0].fanModId;
  370. tf::msg::TimerNotif timerNotifCorrect{0, static_cast<tf::SessionId>(sessionId), 0};
  371. detMonMock.detectFans(timerNotifCorrect);
  372.  
  373. auto& moduleStatusExt = state.fanModules[0].modStatObj.GetExtension(ho::FanModuleStatus::object);
  374. EXPECT_EQ(ho::EFanModStatus_FanModuleInstalled, moduleStatusExt.status());
  375.  
  376. auto pwmFanStatusExt0 = state.fanModules[0].pwmFans[0].statusObj.GetExtension(ho::FanStatus::object);
  377. EXPECT_FALSE(pwmFanStatusExt0.detected());
  378. EXPECT_FALSE(pwmFanStatusExt0.working());
  379. EXPECT_EQ(VendorNotDetected, pwmFanStatusExt0.vendorid());
  380. EXPECT_EQ(config.getFanInstance().fanMaxRpmDefault, pwmFanStatusExt0.fanmaxrpm());
  381. EXPECT_EQ(config.getFanInstance().fanMaxControlPwmDefault, pwmFanStatusExt0.fanmaxcontrolpwm());
  382.  
  383. auto pwmFanStatusExt1 = state.fanModules[0].pwmFans[1].statusObj.GetExtension(ho::FanStatus::object);
  384. EXPECT_TRUE(pwmFanStatusExt1.detected());
  385. EXPECT_TRUE(pwmFanStatusExt1.working());
  386. EXPECT_EQ(VendorNotDetected, pwmFanStatusExt1.vendorid());
  387. EXPECT_EQ(config.getFanInstance().fanMaxRpmDefault, pwmFanStatusExt1.fanmaxrpm());
  388. EXPECT_EQ(config.getFanInstance().fanMaxControlPwmDefault, pwmFanStatusExt1.fanmaxcontrolpwm());
  389. };
  390.  
  391. // emulating periodic detection
  392. checkDetection();
  393. checkDetection();
  394. }
  395.  
  396. TEST_F(DetectionPwmTestCases, ModInst_not_defined_speed_detection_allowed_success)
  397. {
  398. // ON_CALL(*fanModStatDet, detectFanModuleStatus(_)).WillByDefault(Return(::hlapi::ho::EFanModStatus_FanModuleInstalled));
  399.  
  400. config.fanInstance.speedResponseDetectionAllowed = true;
  401.  
  402. auto checkDetection = [this]() {
  403. auto& moduleStatusExt = state.fanModules[0].modStatObj.GetExtension(ho::FanModuleStatus::object);
  404. EXPECT_EQ(ho::EFanModStatus_FanModuleInstalled, moduleStatusExt.status());
  405.  
  406. auto pwmFanStatusExt0 = state.fanModules[0].pwmFans[0].statusObj.GetExtension(ho::FanStatus::object);
  407. EXPECT_TRUE(pwmFanStatusExt0.detected());
  408. EXPECT_TRUE(pwmFanStatusExt0.working());
  409. EXPECT_EQ(3, pwmFanStatusExt0.vendorid());
  410. EXPECT_EQ(config.getVendorConfig(3).fanMaxRpm, pwmFanStatusExt0.fanmaxrpm());
  411. EXPECT_EQ(config.getVendorConfig(3).fanMaxControlPwm, pwmFanStatusExt0.fanmaxcontrolpwm());
  412.  
  413. auto pwmFanStatusExt1 = state.fanModules[0].pwmFans[1].statusObj.GetExtension(ho::FanStatus::object);
  414. EXPECT_TRUE(pwmFanStatusExt1.detected());
  415. EXPECT_TRUE(pwmFanStatusExt1.working());
  416. EXPECT_EQ(6, pwmFanStatusExt1.vendorid());
  417. EXPECT_EQ(config.getVendorConfig(6).fanMaxRpm, pwmFanStatusExt1.fanmaxrpm());
  418. EXPECT_EQ(config.getVendorConfig(6).fanMaxControlPwm, pwmFanStatusExt1.fanmaxcontrolpwm());
  419. };
  420.  
  421. detMonMock.detectFans(timerNotif);
  422.  
  423. ON_CALL(*std::dynamic_pointer_cast<PwmFanMock>(state.fanModules[0].pwmFans[0].hwHandle), rpm())
  424. .WillByDefault(Return(3801));
  425. ON_CALL(*std::dynamic_pointer_cast<PwmFanMock>(state.fanModules[0].pwmFans[1].hwHandle), rpm())
  426. .WillByDefault(Return(3800));
  427.  
  428. unsigned int sessionId =
  429. static_cast<unsigned int>(EFansTimerSession::SpeedResponseDetection) + state.fanModules[0].fanModId;
  430. tf::msg::TimerNotif timerNotifCorrect{0, static_cast<tf::SessionId>(sessionId), 0};
  431. detMonMock.detectFans(timerNotifCorrect);
  432.  
  433. checkDetection();
  434.  
  435. detMonMock.detectFans(timerNotif);
  436.  
  437. checkDetection();
  438. }
  439.  
  440. TEST_F(DetectionPwmTestCases, ModInst_not_defined_speed_detection_allowed_first_success_second_below_rpmMin)
  441. {
  442.  
  443. // ON_CALL(*fanModStatDet, detectFanModuleStatus(_)).WillByDefault(Return(::hlapi::ho::EFanModStatus_FanModuleInstalled));
  444.  
  445. config.fanInstance.speedResponseDetectionAllowed = true;
  446.  
  447. auto checkDetection = [this]() {
  448. detMonMock.detectFans(timerNotif);
  449.  
  450. ON_CALL(*std::dynamic_pointer_cast<PwmFanMock>(state.fanModules[0].pwmFans[0].hwHandle), rpm())
  451. .WillByDefault(Return(3520));
  452. ON_CALL(*std::dynamic_pointer_cast<PwmFanMock>(state.fanModules[0].pwmFans[1].hwHandle), rpm())
  453. .WillByDefault(Return(3000));
  454.  
  455. unsigned int sessionId =
  456. static_cast<unsigned int>(EFansTimerSession::SpeedResponseDetection) + state.fanModules[0].fanModId;
  457. tf::msg::TimerNotif timerNotifCorrect{0, static_cast<tf::SessionId>(sessionId), 0};
  458. detMonMock.detectFans(timerNotifCorrect);
  459.  
  460. auto& moduleStatusExt = state.fanModules[0].modStatObj.GetExtension(ho::FanModuleStatus::object);
  461. EXPECT_EQ(ho::EFanModStatus_FanModuleInstalled, moduleStatusExt.status());
  462.  
  463. auto pwmFanStatusExt0 = state.fanModules[0].pwmFans[0].statusObj.GetExtension(ho::FanStatus::object);
  464. EXPECT_TRUE(pwmFanStatusExt0.detected());
  465. EXPECT_TRUE(pwmFanStatusExt0.working());
  466. EXPECT_EQ(5, pwmFanStatusExt0.vendorid());
  467. EXPECT_EQ(config.getVendorConfig(5).fanMaxRpm, pwmFanStatusExt0.fanmaxrpm());
  468. EXPECT_EQ(config.getVendorConfig(5).fanMaxControlPwm, pwmFanStatusExt0.fanmaxcontrolpwm());
  469.  
  470. auto pwmFanStatusExt1 = state.fanModules[0].pwmFans[1].statusObj.GetExtension(ho::FanStatus::object);
  471. EXPECT_TRUE(pwmFanStatusExt1.detected());
  472. EXPECT_TRUE(pwmFanStatusExt1.working());
  473. EXPECT_EQ(VendorNotDetected, pwmFanStatusExt1.vendorid());
  474. EXPECT_EQ(config.getFanInstance().fanMaxRpmDefault, pwmFanStatusExt1.fanmaxrpm());
  475. EXPECT_EQ(config.getFanInstance().fanMaxControlPwmDefault, pwmFanStatusExt1.fanmaxcontrolpwm());
  476. };
  477.  
  478. // emulating periodic detection
  479. checkDetection();
  480. checkDetection();
  481. }
  482.  
  483. TEST_F(DetectionPwmTestCases, ModInst_No_speed_detection_not_allowed_VendorGpio_not_defined)
  484. {
  485. // ON_CALL(*fanModStatDet, detectFanModuleStatus(_)).WillByDefault(Return(::hlapi::ho::EFanModStatus_IpCapInstalled));
  486.  
  487. config.fanInstance.fanModules[0].fanModInstalledGpio = gpioInfo{123, "123", false};
  488. config.fanInstance.fanModules[0].ipCapInstalledGpio = gpioInfo{234, "234", false};
  489.  
  490. config.fanInstance.speedResponseDetectionAllowed = false;
  491.  
  492. auto checkDetection = [this]() {
  493. detMonMock.detectFans(timerNotif);
  494.  
  495. auto& moduleStatusExt = state.fanModules[0].modStatObj.GetExtension(ho::FanModuleStatus::object);
  496. EXPECT_EQ(ho::EFanModStatus_IpCapInstalled, moduleStatusExt.status());
  497.  
  498. auto pwmFanStatusExt0 = state.fanModules[0].pwmFans[0].statusObj.GetExtension(ho::FanStatus::object);
  499. EXPECT_FALSE(pwmFanStatusExt0.detected());
  500. EXPECT_FALSE(pwmFanStatusExt0.working());
  501. EXPECT_EQ(VendorDetectionNotPossible, pwmFanStatusExt0.vendorid());
  502. EXPECT_EQ(0, pwmFanStatusExt0.fanmaxrpm());
  503. EXPECT_EQ(0, pwmFanStatusExt0.fanmaxcontrolpwm());
  504.  
  505. auto pwmFanStatusExt1 = state.fanModules[0].pwmFans[1].statusObj.GetExtension(ho::FanStatus::object);
  506. EXPECT_FALSE(pwmFanStatusExt1.detected());
  507. EXPECT_FALSE(pwmFanStatusExt1.working());
  508. EXPECT_EQ(VendorDetectionNotPossible, pwmFanStatusExt1.vendorid());
  509. EXPECT_EQ(0, pwmFanStatusExt1.fanmaxrpm());
  510. EXPECT_EQ(0, pwmFanStatusExt1.fanmaxcontrolpwm());
  511. };
  512.  
  513. {
  514. InSequence s;
  515. EXPECT_CALL(*GpioStub::instance(), getValue())
  516. .Times(1)
  517. .WillRepeatedly(Throw(std::runtime_error("Big GPIO ERROR"))); // reading fanModInstalledGpio
  518. EXPECT_CALL(*GpioStub::instance(), getValue())
  519. .Times(1)
  520. .WillRepeatedly(Return(true)); // reading ipCapInstalledGpio
  521. }
  522. checkDetection();
  523.  
  524. checkDetection();
  525. }
  526.  
  527. TEST_F(DetectionPwmTestCases, ModInst_No_speed_detection_not_allowed_VendorGpio_defined_failure)
  528. {
  529. // ON_CALL(*fanModStatDet, detectFanModuleStatus(_)).WillByDefault(Return(::hlapi::ho::EFanModStatus_IpCapInstalled));
  530. config.fanInstance.fanModules[0].fanModInstalledGpio = gpioInfo{123, "123", false};
  531. config.fanInstance.fanModules[0].ipCapInstalledGpio = gpioInfo{234, "234", false};
  532.  
  533. config.fanInstance.fanModules[0].vendorIdGpio.push_back(gpioInfo{1, "1", false});
  534. config.fanInstance.fanModules[0].vendorIdGpio.push_back(gpioInfo{2, "2", false});
  535. config.fanInstance.fanModules[0].vendorIdGpio.push_back(gpioInfo{3, "3", false});
  536.  
  537. config.fanInstance.speedResponseDetectionAllowed = false;
  538.  
  539. auto checkDetection = [this]() {
  540. detMonMock.detectFans(timerNotif);
  541.  
  542. auto& moduleStatusExt = state.fanModules[0].modStatObj.GetExtension(ho::FanModuleStatus::object);
  543. EXPECT_EQ(ho::EFanModStatus_IpCapInstalled, moduleStatusExt.status());
  544.  
  545. auto pwmFanStatusExt0 = state.fanModules[0].pwmFans[0].statusObj.GetExtension(ho::FanStatus::object);
  546. EXPECT_FALSE(pwmFanStatusExt0.detected());
  547. EXPECT_FALSE(pwmFanStatusExt0.working());
  548. EXPECT_EQ(VendorDetectionNotPossible, pwmFanStatusExt0.vendorid());
  549. EXPECT_EQ(0, pwmFanStatusExt0.fanmaxrpm());
  550. EXPECT_EQ(0, pwmFanStatusExt0.fanmaxcontrolpwm());
  551.  
  552. auto pwmFanStatusExt1 = state.fanModules[0].pwmFans[1].statusObj.GetExtension(ho::FanStatus::object);
  553. EXPECT_FALSE(pwmFanStatusExt1.detected());
  554. EXPECT_FALSE(pwmFanStatusExt1.working());
  555. EXPECT_EQ(VendorDetectionNotPossible, pwmFanStatusExt1.vendorid());
  556. EXPECT_EQ(0, pwmFanStatusExt1.fanmaxrpm());
  557. EXPECT_EQ(0, pwmFanStatusExt1.fanmaxcontrolpwm());
  558. };
  559.  
  560. {
  561. InSequence s;
  562. EXPECT_CALL(*GpioStub::instance(), getValue())
  563. .Times(1)
  564. .WillRepeatedly(Throw(std::runtime_error("Big GPIO ERROR"))); // reading fanModInstalledGpio
  565. EXPECT_CALL(*GpioStub::instance(), getValue())
  566. .Times(1)
  567. .WillRepeatedly(Return(true)); // reading ipCapInstalledGpio
  568. EXPECT_CALL(*GpioStub::instance(), getValue())
  569. .Times(1)
  570. .WillRepeatedly(Throw(std::runtime_error("Big GPIO ERROR"))); // reading vendorIdGpio[0]
  571. }
  572. checkDetection();
  573.  
  574. checkDetection();
  575. }
  576.  
  577. TEST_F(DetectionPwmTestCases, ModInst_No_speed_detection_not_allowed_VendorGpio_defined_returned_vendorNotDetected)
  578. {
  579. // ON_CALL(*fanModStatDet, detectFanModuleStatus(_)).WillByDefault(Return(::hlapi::ho::EFanModStatus_IpCapInstalled));
  580. config.fanInstance.fanModules[0].fanModInstalledGpio = gpioInfo{123, "123", false};
  581. config.fanInstance.fanModules[0].ipCapInstalledGpio = gpioInfo{234, "234", false};
  582.  
  583. config.fanInstance.fanModules[0].vendorIdGpio.push_back(gpioInfo{1, "1", false});
  584. config.fanInstance.fanModules[0].vendorIdGpio.push_back(gpioInfo{2, "2", false});
  585. config.fanInstance.fanModules[0].vendorIdGpio.push_back(gpioInfo{3, "3", false});
  586.  
  587. config.fanInstance.speedResponseDetectionAllowed = false;
  588.  
  589. auto checkDetection = [this]() {
  590. detMonMock.detectFans(timerNotif);
  591.  
  592. auto& moduleStatusExt = state.fanModules[0].modStatObj.GetExtension(ho::FanModuleStatus::object);
  593. EXPECT_EQ(ho::EFanModStatus_IpCapInstalled, moduleStatusExt.status());
  594.  
  595. auto pwmFanStatusExt0 = state.fanModules[0].pwmFans[0].statusObj.GetExtension(ho::FanStatus::object);
  596. EXPECT_FALSE(pwmFanStatusExt0.detected());
  597. EXPECT_FALSE(pwmFanStatusExt0.working());
  598. EXPECT_EQ(VendorNotDetected, pwmFanStatusExt0.vendorid());
  599. EXPECT_EQ(0, pwmFanStatusExt0.fanmaxrpm());
  600. EXPECT_EQ(0, pwmFanStatusExt0.fanmaxcontrolpwm());
  601.  
  602. auto pwmFanStatusExt1 = state.fanModules[0].pwmFans[1].statusObj.GetExtension(ho::FanStatus::object);
  603. EXPECT_FALSE(pwmFanStatusExt1.detected());
  604. EXPECT_FALSE(pwmFanStatusExt1.working());
  605. EXPECT_EQ(VendorNotDetected, pwmFanStatusExt1.vendorid());
  606. EXPECT_EQ(0, pwmFanStatusExt1.fanmaxrpm());
  607. EXPECT_EQ(0, pwmFanStatusExt1.fanmaxcontrolpwm());
  608. };
  609.  
  610. {
  611. InSequence s;
  612. EXPECT_CALL(*GpioStub::instance(), getValue())
  613. .Times(1)
  614. .WillRepeatedly(Throw(std::runtime_error("Big GPIO ERROR"))); // reading fanModInstalledGpio
  615. EXPECT_CALL(*GpioStub::instance(), getValue())
  616. .Times(1)
  617. .WillRepeatedly(Return(true)); // reading ipCapInstalledGpio
  618. EXPECT_CALL(*GpioStub::instance(), getValue())
  619. .Times(1)
  620. .WillRepeatedly(Return(true)); // reading vendorIdGpio[0]
  621. EXPECT_CALL(*GpioStub::instance(), getValue())
  622. .Times(1)
  623. .WillRepeatedly(Return(true)); // reading vendorIdGpio[1]
  624. EXPECT_CALL(*GpioStub::instance(), getValue())
  625. .Times(1)
  626. .WillRepeatedly(Return(true)); // reading vendorIdGpio[2]
  627. }
  628. checkDetection();
  629.  
  630. checkDetection();
  631. }
  632.  
  633. TEST_F(DetectionPwmTestCases, ModInst_No_speed_detection_not_allowed_VendorGpio_defined_not_found_in_the_table)
  634. {
  635. // ON_CALL(*fanModStatDet, detectFanModuleStatus(_)).WillByDefault(Return(::hlapi::ho::EFanModStatus_IpCapInstalled));
  636. config.fanInstance.fanModules[0].fanModInstalledGpio = gpioInfo{123, "123", false};
  637. config.fanInstance.fanModules[0].ipCapInstalledGpio = gpioInfo{234, "234", false};
  638.  
  639. config.fanInstance.fanModules[0].vendorIdGpio.push_back(gpioInfo{1, "1", false});
  640. config.fanInstance.fanModules[0].vendorIdGpio.push_back(gpioInfo{2, "2", false});
  641. config.fanInstance.fanModules[0].vendorIdGpio.push_back(gpioInfo{3, "3", false});
  642.  
  643. config.fanInstance.speedResponseDetectionAllowed = false;
  644.  
  645. auto checkDetection = [this]() {
  646. detMonMock.detectFans(timerNotif);
  647.  
  648. auto& moduleStatusExt = state.fanModules[0].modStatObj.GetExtension(ho::FanModuleStatus::object);
  649. EXPECT_EQ(ho::EFanModStatus_IpCapInstalled, moduleStatusExt.status());
  650.  
  651. auto pwmFanStatusExt0 = state.fanModules[0].pwmFans[0].statusObj.GetExtension(ho::FanStatus::object);
  652. EXPECT_FALSE(pwmFanStatusExt0.detected());
  653. EXPECT_FALSE(pwmFanStatusExt0.working());
  654. EXPECT_EQ(VendorNotDetected, pwmFanStatusExt0.vendorid());
  655. EXPECT_EQ(config.getFanInstance().fanMaxRpmDefault, pwmFanStatusExt0.fanmaxrpm());
  656. EXPECT_EQ(config.getFanInstance().fanMaxControlPwmDefault, pwmFanStatusExt0.fanmaxcontrolpwm());
  657.  
  658. auto pwmFanStatusExt1 = state.fanModules[0].pwmFans[1].statusObj.GetExtension(ho::FanStatus::object);
  659. EXPECT_FALSE(pwmFanStatusExt1.detected());
  660. EXPECT_FALSE(pwmFanStatusExt1.working());
  661. EXPECT_EQ(VendorNotDetected, pwmFanStatusExt1.vendorid());
  662. EXPECT_EQ(config.getFanInstance().fanMaxRpmDefault, pwmFanStatusExt1.fanmaxrpm());
  663. EXPECT_EQ(config.getFanInstance().fanMaxControlPwmDefault, pwmFanStatusExt1.fanmaxcontrolpwm());
  664. };
  665.  
  666. {
  667. InSequence s;
  668. EXPECT_CALL(*GpioStub::instance(), getValue())
  669. .Times(1)
  670. .WillRepeatedly(Throw(std::runtime_error("Big GPIO ERROR"))); // reading fanModInstalledGpio
  671. EXPECT_CALL(*GpioStub::instance(), getValue())
  672. .Times(1)
  673. .WillRepeatedly(Return(true)); // reading ipCapInstalledGpio
  674. EXPECT_CALL(*GpioStub::instance(), getValue())
  675. .Times(1)
  676. .WillRepeatedly(Return(false)); // reading vendorIdGpio[0]
  677. EXPECT_CALL(*GpioStub::instance(), getValue())
  678. .Times(1)
  679. .WillRepeatedly(Return(false)); // reading vendorIdGpio[1]
  680. EXPECT_CALL(*GpioStub::instance(), getValue())
  681. .Times(1)
  682. .WillRepeatedly(Return(true)); // reading vendorIdGpio[2]
  683. }
  684. checkDetection();
  685.  
  686. checkDetection();
  687. }
  688.  
  689. TEST_F(DetectionPwmTestCases, ModInst_No_speed_detection_not_allowed_VendorGpio_defined_valid_vendorId)
  690. {
  691. // ON_CALL(*fanModStatDet, detectFanModuleStatus(_)).WillByDefault(Return(::hlapi::ho::EFanModStatus_IpCapInstalled));
  692. config.fanInstance.fanModules[0].fanModInstalledGpio = gpioInfo{123, "123", false};
  693. config.fanInstance.fanModules[0].ipCapInstalledGpio = gpioInfo{234, "234", false};
  694.  
  695. config.fanInstance.fanModules[0].vendorIdGpio.push_back(gpioInfo{1, "1", false});
  696. config.fanInstance.fanModules[0].vendorIdGpio.push_back(gpioInfo{2, "2", false});
  697. config.fanInstance.fanModules[0].vendorIdGpio.push_back(gpioInfo{3, "3", false});
  698.  
  699. config.fanInstance.speedResponseDetectionAllowed = false;
  700.  
  701. auto checkDetection = [this]() {
  702. detMonMock.detectFans(timerNotif);
  703.  
  704. auto& moduleStatusExt = state.fanModules[0].modStatObj.GetExtension(ho::FanModuleStatus::object);
  705. EXPECT_EQ(ho::EFanModStatus_IpCapInstalled, moduleStatusExt.status());
  706.  
  707. auto pwmFanStatusExt0 = state.fanModules[0].pwmFans[0].statusObj.GetExtension(ho::FanStatus::object);
  708. EXPECT_FALSE(pwmFanStatusExt0.detected());
  709. EXPECT_FALSE(pwmFanStatusExt0.working());
  710. EXPECT_EQ(3, pwmFanStatusExt0.vendorid());
  711. EXPECT_EQ(config.getVendorConfig(3).fanMaxRpm, pwmFanStatusExt0.fanmaxrpm());
  712. EXPECT_EQ(config.getVendorConfig(3).fanMaxControlPwm, pwmFanStatusExt0.fanmaxcontrolpwm());
  713.  
  714. auto pwmFanStatusExt1 = state.fanModules[0].pwmFans[1].statusObj.GetExtension(ho::FanStatus::object);
  715. EXPECT_FALSE(pwmFanStatusExt1.detected());
  716. EXPECT_FALSE(pwmFanStatusExt1.working());
  717. EXPECT_EQ(3, pwmFanStatusExt1.vendorid());
  718. EXPECT_EQ(config.getVendorConfig(3).fanMaxRpm, pwmFanStatusExt1.fanmaxrpm());
  719. EXPECT_EQ(config.getVendorConfig(3).fanMaxControlPwm, pwmFanStatusExt1.fanmaxcontrolpwm());
  720. };
  721.  
  722. {
  723. InSequence s;
  724. EXPECT_CALL(*GpioStub::instance(), getValue())
  725. .Times(1)
  726. .WillRepeatedly(Throw(std::runtime_error("Big GPIO ERROR"))); // reading fanModInstalledGpio
  727. EXPECT_CALL(*GpioStub::instance(), getValue())
  728. .Times(1)
  729. .WillRepeatedly(Return(true)); // reading ipCapInstalledGpio
  730. EXPECT_CALL(*GpioStub::instance(), getValue())
  731. .Times(1)
  732. .WillRepeatedly(Return(false)); // reading vendorIdGpio[0]
  733. EXPECT_CALL(*GpioStub::instance(), getValue())
  734. .Times(1)
  735. .WillRepeatedly(Return(true)); // reading vendorIdGpio[1]
  736. EXPECT_CALL(*GpioStub::instance(), getValue())
  737. .Times(1)
  738. .WillRepeatedly(Return(true)); // reading vendorIdGpio[2]
  739. }
  740. checkDetection();
  741.  
  742. checkDetection();
  743. }
  744.  
  745. TEST_F(DetectionPwmTestCases, ModInst_No_speed_detection_allowed_both_failed)
  746. {
  747. // ON_CALL(*fanModStatDet, detectFanModuleStatus(_)).WillByDefault(Return(::hlapi::ho::EFanModStatus_IpCapInstalled));
  748. config.fanInstance.fanModules[0].fanModInstalledGpio = gpioInfo{123, "123", false};
  749. config.fanInstance.fanModules[0].ipCapInstalledGpio = gpioInfo{234, "234", false};
  750.  
  751. // although vendorId GPIO is defined it won't be read because speed response allowed
  752. config.fanInstance.fanModules[0].vendorIdGpio.push_back(gpioInfo{1, "1", false});
  753. config.fanInstance.fanModules[0].vendorIdGpio.push_back(gpioInfo{2, "2", false});
  754. config.fanInstance.fanModules[0].vendorIdGpio.push_back(gpioInfo{3, "3", false});
  755.  
  756. config.fanInstance.speedResponseDetectionAllowed = true;
  757.  
  758. auto checkDetection = [this]() {
  759. detMonMock.detectFans(timerNotif);
  760.  
  761. ON_CALL(*std::dynamic_pointer_cast<PwmFanMock>(state.fanModules[0].pwmFans[0].hwHandle), rpm())
  762. .WillByDefault(Throw(HwMonException()));
  763. ON_CALL(*std::dynamic_pointer_cast<PwmFanMock>(state.fanModules[0].pwmFans[1].hwHandle), rpm())
  764. .WillByDefault(Throw(HwMonException()));
  765.  
  766. unsigned int sessionId =
  767. static_cast<unsigned int>(EFansTimerSession::SpeedResponseDetection) + state.fanModules[0].fanModId;
  768. tf::msg::TimerNotif timerNotifCorrect{0, static_cast<tf::SessionId>(sessionId), 0};
  769. detMonMock.detectFans(timerNotifCorrect);
  770.  
  771. auto& moduleStatusExt = state.fanModules[0].modStatObj.GetExtension(ho::FanModuleStatus::object);
  772. EXPECT_EQ(ho::EFanModStatus_IpCapInstalled, moduleStatusExt.status());
  773.  
  774. auto pwmFanStatusExt0 = state.fanModules[0].pwmFans[0].statusObj.GetExtension(ho::FanStatus::object);
  775. EXPECT_FALSE(pwmFanStatusExt0.detected());
  776. EXPECT_FALSE(pwmFanStatusExt0.working());
  777. EXPECT_EQ(VendorNotDetected, pwmFanStatusExt0.vendorid());
  778. EXPECT_EQ(config.getFanInstance().fanMaxRpmDefault, pwmFanStatusExt0.fanmaxrpm());
  779. EXPECT_EQ(config.getFanInstance().fanMaxControlPwmDefault, pwmFanStatusExt0.fanmaxcontrolpwm());
  780.  
  781. auto pwmFanStatusExt1 = state.fanModules[0].pwmFans[1].statusObj.GetExtension(ho::FanStatus::object);
  782. EXPECT_FALSE(pwmFanStatusExt1.detected());
  783. EXPECT_FALSE(pwmFanStatusExt0.working());
  784. EXPECT_EQ(VendorNotDetected, pwmFanStatusExt0.vendorid());
  785. EXPECT_EQ(config.getFanInstance().fanMaxRpmDefault, pwmFanStatusExt0.fanmaxrpm());
  786. EXPECT_EQ(config.getFanInstance().fanMaxControlPwmDefault, pwmFanStatusExt0.fanmaxcontrolpwm());
  787. };
  788.  
  789. {
  790. InSequence s;
  791. EXPECT_CALL(*GpioStub::instance(), getValue())
  792. .Times(1)
  793. .WillRepeatedly(Throw(std::runtime_error("Big GPIO ERROR"))); // reading fanModInstalledGpio
  794. EXPECT_CALL(*GpioStub::instance(), getValue())
  795. .Times(1)
  796. .WillRepeatedly(Return(true)); // reading ipCapInstalledGpio
  797. }
  798. checkDetection();
  799.  
  800. checkDetection();
  801. }
  802.  
  803. TEST_F(DetectionPwmTestCases, ModInst_No_speed_detection_allowed_first_zero_second_below_rpmMin)
  804. {
  805. // ON_CALL(*fanModStatDet, detectFanModuleStatus(_)).WillByDefault(Return(::hlapi::ho::EFanModStatus_IpCapInstalled));
  806. config.fanInstance.fanModules[0].fanModInstalledGpio = gpioInfo{123, "123", false};
  807. config.fanInstance.fanModules[0].ipCapInstalledGpio = gpioInfo{234, "234", false};
  808.  
  809. config.fanInstance.speedResponseDetectionAllowed = true;
  810.  
  811. auto checkDetection = [this]() {
  812. detMonMock.detectFans(timerNotif);
  813.  
  814. ON_CALL(*std::dynamic_pointer_cast<PwmFanMock>(state.fanModules[0].pwmFans[0].hwHandle), rpm())
  815. .WillByDefault(Return(0));
  816. ON_CALL(*std::dynamic_pointer_cast<PwmFanMock>(state.fanModules[0].pwmFans[1].hwHandle), rpm())
  817. .WillByDefault(Return(3000));
  818.  
  819. unsigned int sessionId =
  820. static_cast<unsigned int>(EFansTimerSession::SpeedResponseDetection) + state.fanModules[0].fanModId;
  821. tf::msg::TimerNotif timerNotifCorrect{0, static_cast<tf::SessionId>(sessionId), 0};
  822. detMonMock.detectFans(timerNotifCorrect);
  823.  
  824. auto& moduleStatusExt = state.fanModules[0].modStatObj.GetExtension(ho::FanModuleStatus::object);
  825. EXPECT_EQ(ho::EFanModStatus_FanModuleInstalled, moduleStatusExt.status());
  826.  
  827. auto pwmFanStatusExt0 = state.fanModules[0].pwmFans[0].statusObj.GetExtension(ho::FanStatus::object);
  828. EXPECT_FALSE(pwmFanStatusExt0.detected());
  829. EXPECT_FALSE(pwmFanStatusExt0.working());
  830. EXPECT_EQ(VendorNotDetected, pwmFanStatusExt0.vendorid());
  831. EXPECT_EQ(config.getFanInstance().fanMaxRpmDefault, pwmFanStatusExt0.fanmaxrpm());
  832. EXPECT_EQ(config.getFanInstance().fanMaxControlPwmDefault, pwmFanStatusExt0.fanmaxcontrolpwm());
  833.  
  834. auto pwmFanStatusExt1 = state.fanModules[0].pwmFans[1].statusObj.GetExtension(ho::FanStatus::object);
  835. EXPECT_TRUE(pwmFanStatusExt1.detected());
  836. EXPECT_TRUE(pwmFanStatusExt1.working());
  837. EXPECT_EQ(VendorNotDetected, pwmFanStatusExt1.vendorid());
  838. EXPECT_EQ(config.getFanInstance().fanMaxRpmDefault, pwmFanStatusExt1.fanmaxrpm());
  839. EXPECT_EQ(config.getFanInstance().fanMaxControlPwmDefault, pwmFanStatusExt1.fanmaxcontrolpwm());
  840. };
  841.  
  842. {
  843. InSequence s;
  844. EXPECT_CALL(*GpioStub::instance(), getValue())
  845. .Times(1)
  846. .WillRepeatedly(Throw(std::runtime_error("Big GPIO ERROR"))); // reading fanModInstalledGpio
  847. EXPECT_CALL(*GpioStub::instance(), getValue())
  848. .Times(1)
  849. .WillRepeatedly(Return(true)); // reading ipCapInstalledGpio
  850. }
  851. checkDetection();
  852.  
  853. checkDetection();
  854. }
  855.  
  856. TEST_F(DetectionPwmTestCases, ModInst_No_speed_detection_allowed_empty_conf_table)
  857. {
  858. // ON_CALL(*fanModStatDet, detectFanModuleStatus(_)).WillByDefault(Return(::hlapi::ho::EFanModStatus_FanModuleInstalled));
  859. config.fanInstance.fanModules[0].fanModInstalledGpio = gpioInfo{123, "123", false};
  860. config.fanInstance.fanModules[0].ipCapInstalledGpio = gpioInfo{234, "234", false};
  861.  
  862. config.fanInstance.speedResponseDetectionAllowed = true;
  863.  
  864. config.fanInstance.fanVendors = {};
  865.  
  866. auto checkDetection = [this]() {
  867. detMonMock.detectFans(timerNotif);
  868.  
  869. ON_CALL(*std::dynamic_pointer_cast<PwmFanMock>(state.fanModules[0].pwmFans[0].hwHandle), rpm())
  870. .WillByDefault(Return(0));
  871. ON_CALL(*std::dynamic_pointer_cast<PwmFanMock>(state.fanModules[0].pwmFans[1].hwHandle), rpm())
  872. .WillByDefault(Return(3800));
  873.  
  874. unsigned int sessionId =
  875. static_cast<unsigned int>(EFansTimerSession::SpeedResponseDetection) + state.fanModules[0].fanModId;
  876. tf::msg::TimerNotif timerNotifCorrect{0, static_cast<tf::SessionId>(sessionId), 0};
  877. detMonMock.detectFans(timerNotifCorrect);
  878.  
  879. auto& moduleStatusExt = state.fanModules[0].modStatObj.GetExtension(ho::FanModuleStatus::object);
  880. EXPECT_EQ(ho::EFanModStatus_FanModuleInstalled, moduleStatusExt.status());
  881.  
  882. auto pwmFanStatusExt0 = state.fanModules[0].pwmFans[0].statusObj.GetExtension(ho::FanStatus::object);
  883. EXPECT_FALSE(pwmFanStatusExt0.detected());
  884. EXPECT_FALSE(pwmFanStatusExt0.working());
  885. EXPECT_EQ(VendorNotDetected, pwmFanStatusExt0.vendorid());
  886. EXPECT_EQ(config.getFanInstance().fanMaxRpmDefault, pwmFanStatusExt0.fanmaxrpm());
  887. EXPECT_EQ(config.getFanInstance().fanMaxControlPwmDefault, pwmFanStatusExt0.fanmaxcontrolpwm());
  888.  
  889. auto pwmFanStatusExt1 = state.fanModules[0].pwmFans[1].statusObj.GetExtension(ho::FanStatus::object);
  890. EXPECT_TRUE(pwmFanStatusExt1.detected());
  891. EXPECT_TRUE(pwmFanStatusExt1.working());
  892. EXPECT_EQ(VendorNotDetected, pwmFanStatusExt1.vendorid());
  893. EXPECT_EQ(config.getFanInstance().fanMaxRpmDefault, pwmFanStatusExt1.fanmaxrpm());
  894. EXPECT_EQ(config.getFanInstance().fanMaxControlPwmDefault, pwmFanStatusExt1.fanmaxcontrolpwm());
  895. };
  896.  
  897. {
  898. InSequence s;
  899. EXPECT_CALL(*GpioStub::instance(), getValue())
  900. .Times(1)
  901. .WillRepeatedly(Throw(std::runtime_error("Big GPIO ERROR"))); // reading fanModInstalledGpio
  902. EXPECT_CALL(*GpioStub::instance(), getValue())
  903. .Times(1)
  904. .WillRepeatedly(Return(true)); // reading ipCapInstalledGpio
  905. }
  906. checkDetection();
  907.  
  908. checkDetection();
  909. }
  910.  
  911. TEST_F(DetectionPwmTestCases, ModInst_No_speed_detection_allowed_success)
  912. {
  913. // ON_CALL(*fanModStatDet, detectFanModuleStatus(_)).WillByDefault(Return(::hlapi::ho::EFanModStatus_FanModuleInstalled));
  914. config.fanInstance.fanModules[0].fanModInstalledGpio = gpioInfo{123, "123", false};
  915. config.fanInstance.fanModules[0].ipCapInstalledGpio = gpioInfo{234, "234", false};
  916.  
  917. config.fanInstance.speedResponseDetectionAllowed = true;
  918.  
  919. auto checkDetection = [this]() {
  920. detMonMock.detectFans(timerNotif);
  921.  
  922. ON_CALL(*std::dynamic_pointer_cast<PwmFanMock>(state.fanModules[0].pwmFans[0].hwHandle), rpm())
  923. .WillByDefault(Return(3801));
  924. ON_CALL(*std::dynamic_pointer_cast<PwmFanMock>(state.fanModules[0].pwmFans[1].hwHandle), rpm())
  925. .WillByDefault(Return(3800));
  926.  
  927. unsigned int sessionId =
  928. static_cast<unsigned int>(EFansTimerSession::SpeedResponseDetection) + state.fanModules[0].fanModId;
  929. tf::msg::TimerNotif timerNotifCorrect{0, static_cast<tf::SessionId>(sessionId), 0};
  930. detMonMock.detectFans(timerNotifCorrect);
  931.  
  932. auto& moduleStatusExt = state.fanModules[0].modStatObj.GetExtension(ho::FanModuleStatus::object);
  933. EXPECT_EQ(ho::EFanModStatus_FanModuleInstalled, moduleStatusExt.status());
  934.  
  935. auto pwmFanStatusExt0 = state.fanModules[0].pwmFans[0].statusObj.GetExtension(ho::FanStatus::object);
  936. EXPECT_TRUE(pwmFanStatusExt0.detected());
  937. EXPECT_TRUE(pwmFanStatusExt0.working());
  938. EXPECT_EQ(3, pwmFanStatusExt0.vendorid());
  939. EXPECT_EQ(config.getVendorConfig(3).fanMaxRpm, pwmFanStatusExt0.fanmaxrpm());
  940. EXPECT_EQ(config.getVendorConfig(3).fanMaxControlPwm, pwmFanStatusExt0.fanmaxcontrolpwm());
  941.  
  942. auto pwmFanStatusExt1 = state.fanModules[0].pwmFans[1].statusObj.GetExtension(ho::FanStatus::object);
  943. EXPECT_TRUE(pwmFanStatusExt1.detected());
  944. EXPECT_TRUE(pwmFanStatusExt1.working());
  945. EXPECT_EQ(6, pwmFanStatusExt1.vendorid());
  946. EXPECT_EQ(config.getVendorConfig(6).fanMaxRpm, pwmFanStatusExt1.fanmaxrpm());
  947. EXPECT_EQ(config.getVendorConfig(6).fanMaxControlPwm, pwmFanStatusExt1.fanmaxcontrolpwm());
  948. };
  949.  
  950. {
  951. InSequence s;
  952. EXPECT_CALL(*GpioStub::instance(), getValue())
  953. .Times(1)
  954. .WillRepeatedly(Throw(std::runtime_error("Big GPIO ERROR"))); // reading fanModInstalledGpio
  955. EXPECT_CALL(*GpioStub::instance(), getValue())
  956. .Times(1)
  957. .WillRepeatedly(Return(true)); // reading ipCapInstalledGpio
  958. }
  959. checkDetection();
  960.  
  961. checkDetection();
  962. }
  963.  
  964. TEST_F(DetectionPwmTestCases, ModInst_No_speed_detection_allowed_first_success_second_below_rpmMin)
  965. {
  966. // ON_CALL(*fanModStatDet, detectFanModuleStatus(_)).WillByDefault(Return(::hlapi::ho::EFanModStatus_FanModuleInstalled));
  967. config.fanInstance.fanModules[0].fanModInstalledGpio = gpioInfo{123, "123", false};
  968. config.fanInstance.fanModules[0].ipCapInstalledGpio = gpioInfo{234, "234", false};
  969.  
  970. config.fanInstance.speedResponseDetectionAllowed = true;
  971.  
  972. auto checkDetection = [this]() {
  973. detMonMock.detectFans(timerNotif);
  974.  
  975. ON_CALL(*std::dynamic_pointer_cast<PwmFanMock>(state.fanModules[0].pwmFans[0].hwHandle), rpm())
  976. .WillByDefault(Return(3520));
  977. ON_CALL(*std::dynamic_pointer_cast<PwmFanMock>(state.fanModules[0].pwmFans[1].hwHandle), rpm())
  978. .WillByDefault(Return(3000));
  979.  
  980. unsigned int sessionId =
  981. static_cast<unsigned int>(EFansTimerSession::SpeedResponseDetection) + state.fanModules[0].fanModId;
  982. tf::msg::TimerNotif timerNotifCorrect{0, static_cast<tf::SessionId>(sessionId), 0};
  983. detMonMock.detectFans(timerNotifCorrect);
  984.  
  985. auto& moduleStatusExt = state.fanModules[0].modStatObj.GetExtension(ho::FanModuleStatus::object);
  986. EXPECT_EQ(ho::EFanModStatus_FanModuleInstalled, moduleStatusExt.status());
  987.  
  988. auto pwmFanStatusExt0 = state.fanModules[0].pwmFans[0].statusObj.GetExtension(ho::FanStatus::object);
  989. EXPECT_TRUE(pwmFanStatusExt0.detected());
  990. EXPECT_TRUE(pwmFanStatusExt0.working());
  991. EXPECT_EQ(5, pwmFanStatusExt0.vendorid());
  992. EXPECT_EQ(config.getVendorConfig(5).fanMaxRpm, pwmFanStatusExt0.fanmaxrpm());
  993. EXPECT_EQ(config.getVendorConfig(5).fanMaxControlPwm, pwmFanStatusExt0.fanmaxcontrolpwm());
  994.  
  995. auto pwmFanStatusExt1 = state.fanModules[0].pwmFans[1].statusObj.GetExtension(ho::FanStatus::object);
  996. EXPECT_TRUE(pwmFanStatusExt1.detected());
  997. EXPECT_TRUE(pwmFanStatusExt1.working());
  998. EXPECT_EQ(VendorNotDetected, pwmFanStatusExt1.vendorid());
  999. EXPECT_EQ(config.getFanInstance().fanMaxRpmDefault, pwmFanStatusExt1.fanmaxrpm());
  1000. EXPECT_EQ(config.getFanInstance().fanMaxControlPwmDefault, pwmFanStatusExt1.fanmaxcontrolpwm());
  1001. };
  1002.  
  1003. {
  1004. InSequence s;
  1005. EXPECT_CALL(*GpioStub::instance(), getValue())
  1006. .Times(1)
  1007. .WillRepeatedly(Throw(std::runtime_error("Big GPIO ERROR"))); // reading fanModInstalledGpio
  1008. EXPECT_CALL(*GpioStub::instance(), getValue())
  1009. .Times(1)
  1010. .WillRepeatedly(Return(true)); // reading ipCapInstalledGpio
  1011. }
  1012. checkDetection();
  1013.  
  1014. checkDetection();
  1015. }
  1016.  
  1017. TEST_F(DetectionPwmTestCases, ModInst_Yes_speed_detection_not_allowed_VendorGpio_not_defined)
  1018. {
  1019. // ON_CALL(*fanModStatDet, detectFanModuleStatus(_)).WillByDefault(Return(::hlapi::ho::EFanModStatus_FanModuleInstalled));
  1020. config.fanInstance.fanModules[0].fanModInstalledGpio = gpioInfo{123, "123", false};
  1021. config.fanInstance.fanModules[0].ipCapInstalledGpio = gpioInfo{234, "234", false};
  1022.  
  1023. config.fanInstance.speedResponseDetectionAllowed = false;
  1024.  
  1025. auto checkDetection = [this]() {
  1026. detMonMock.detectFans(timerNotif);
  1027.  
  1028. auto& moduleStatusExt = state.fanModules[0].modStatObj.GetExtension(ho::FanModuleStatus::object);
  1029. EXPECT_EQ(ho::EFanModStatus_FanModuleInstalled, moduleStatusExt.status());
  1030.  
  1031. auto pwmFanStatusExt0 = state.fanModules[0].pwmFans[0].statusObj.GetExtension(ho::FanStatus::object);
  1032. EXPECT_TRUE(pwmFanStatusExt0.detected());
  1033. EXPECT_TRUE(pwmFanStatusExt0.working());
  1034. EXPECT_EQ(VendorDetectionNotPossible, pwmFanStatusExt0.vendorid());
  1035. EXPECT_EQ(0, pwmFanStatusExt0.fanmaxrpm());
  1036. EXPECT_EQ(0, pwmFanStatusExt0.fanmaxcontrolpwm());
  1037.  
  1038. auto pwmFanStatusExt1 = state.fanModules[0].pwmFans[1].statusObj.GetExtension(ho::FanStatus::object);
  1039. EXPECT_TRUE(pwmFanStatusExt1.detected());
  1040. EXPECT_TRUE(pwmFanStatusExt1.working());
  1041. EXPECT_EQ(VendorDetectionNotPossible, pwmFanStatusExt1.vendorid());
  1042. EXPECT_EQ(0, pwmFanStatusExt1.fanmaxrpm());
  1043. EXPECT_EQ(0, pwmFanStatusExt1.fanmaxcontrolpwm());
  1044. };
  1045.  
  1046. {
  1047. InSequence s;
  1048. EXPECT_CALL(*GpioStub::instance(), getValue())
  1049. .Times(1)
  1050. .WillRepeatedly(Return(true)); // reading fanModInstalledGpio
  1051. EXPECT_CALL(*GpioStub::instance(), getValue())
  1052. .Times(1)
  1053. .WillRepeatedly(Return(false)); // reading ipCapInstalledGpio
  1054. }
  1055. checkDetection();
  1056.  
  1057. checkDetection();
  1058. }
  1059.  
  1060. TEST_F(DetectionPwmTestCases, ModInst_Yes_speed_detection_not_allowed_VendorGpio_defined_failure)
  1061. {
  1062. // ON_CALL(*fanModStatDet, detectFanModuleStatus(_)).WillByDefault(Return(::hlapi::ho::EFanModStatus_FanModuleInstalled));
  1063. config.fanInstance.fanModules[0].fanModInstalledGpio = gpioInfo{123, "123", false};
  1064. config.fanInstance.fanModules[0].ipCapInstalledGpio = gpioInfo{234, "234", false};
  1065.  
  1066. config.fanInstance.fanModules[0].vendorIdGpio.push_back(gpioInfo{1, "1", false});
  1067. config.fanInstance.fanModules[0].vendorIdGpio.push_back(gpioInfo{2, "2", false});
  1068. config.fanInstance.fanModules[0].vendorIdGpio.push_back(gpioInfo{3, "3", false});
  1069.  
  1070. config.fanInstance.speedResponseDetectionAllowed = false;
  1071.  
  1072. auto checkDetection = [this]() {
  1073. detMonMock.detectFans(timerNotif);
  1074.  
  1075. auto& moduleStatusExt = state.fanModules[0].modStatObj.GetExtension(ho::FanModuleStatus::object);
  1076. EXPECT_EQ(ho::EFanModStatus_FanModuleInstalled, moduleStatusExt.status());
  1077.  
  1078. auto pwmFanStatusExt0 = state.fanModules[0].pwmFans[0].statusObj.GetExtension(ho::FanStatus::object);
  1079. EXPECT_TRUE(pwmFanStatusExt0.detected());
  1080. EXPECT_TRUE(pwmFanStatusExt0.working());
  1081. EXPECT_EQ(VendorDetectionNotPossible, pwmFanStatusExt0.vendorid());
  1082. EXPECT_EQ(0, pwmFanStatusExt0.fanmaxrpm());
  1083. EXPECT_EQ(0, pwmFanStatusExt0.fanmaxcontrolpwm());
  1084.  
  1085. auto pwmFanStatusExt1 = state.fanModules[0].pwmFans[1].statusObj.GetExtension(ho::FanStatus::object);
  1086. EXPECT_TRUE(pwmFanStatusExt1.detected());
  1087. EXPECT_TRUE(pwmFanStatusExt1.working());
  1088. EXPECT_EQ(VendorDetectionNotPossible, pwmFanStatusExt1.vendorid());
  1089. EXPECT_EQ(0, pwmFanStatusExt1.fanmaxrpm());
  1090. EXPECT_EQ(0, pwmFanStatusExt1.fanmaxcontrolpwm());
  1091. };
  1092.  
  1093. {
  1094. InSequence s;
  1095. EXPECT_CALL(*GpioStub::instance(), getValue())
  1096. .Times(1)
  1097. .WillRepeatedly(Return(true)); // reading fanModInstalledGpio
  1098. EXPECT_CALL(*GpioStub::instance(), getValue())
  1099. .Times(1)
  1100. .WillRepeatedly(Return(false)); // reading ipCapInstalledGpio
  1101. EXPECT_CALL(*GpioStub::instance(), getValue())
  1102. .Times(1)
  1103. .WillRepeatedly(Throw(std::runtime_error("Big GPIO ERROR"))); // reading vendorIdGpio[0]
  1104. }
  1105. checkDetection();
  1106.  
  1107. checkDetection();
  1108. }
  1109.  
  1110. TEST_F(DetectionPwmTestCases, ModInst_Yes_speed_detection_not_allowed_VendorGpio_defined_returned_vendorNotDetected)
  1111. {
  1112. // ON_CALL(*fanModStatDet, detectFanModuleStatus(_)).WillByDefault(Return(::hlapi::ho::EFanModStatus_FanModuleInstalled));
  1113. config.fanInstance.fanModules[0].fanModInstalledGpio = gpioInfo{123, "123", false};
  1114. config.fanInstance.fanModules[0].ipCapInstalledGpio = gpioInfo{234, "234", false};
  1115.  
  1116. config.fanInstance.fanModules[0].vendorIdGpio.push_back(gpioInfo{1, "1", false});
  1117. config.fanInstance.fanModules[0].vendorIdGpio.push_back(gpioInfo{2, "2", false});
  1118. config.fanInstance.fanModules[0].vendorIdGpio.push_back(gpioInfo{3, "3", false});
  1119.  
  1120. config.fanInstance.speedResponseDetectionAllowed = false;
  1121.  
  1122. auto checkDetection = [this]() {
  1123. detMonMock.detectFans(timerNotif);
  1124.  
  1125. auto& moduleStatusExt = state.fanModules[0].modStatObj.GetExtension(ho::FanModuleStatus::object);
  1126. EXPECT_EQ(ho::EFanModStatus_FanModuleInstalled, moduleStatusExt.status());
  1127.  
  1128. auto pwmFanStatusExt0 = state.fanModules[0].pwmFans[0].statusObj.GetExtension(ho::FanStatus::object);
  1129. EXPECT_TRUE(pwmFanStatusExt0.detected());
  1130. EXPECT_TRUE(pwmFanStatusExt0.working());
  1131. EXPECT_EQ(VendorNotDetected, pwmFanStatusExt0.vendorid());
  1132. EXPECT_EQ(0, pwmFanStatusExt0.fanmaxrpm());
  1133. EXPECT_EQ(0, pwmFanStatusExt0.fanmaxcontrolpwm());
  1134.  
  1135. auto pwmFanStatusExt1 = state.fanModules[0].pwmFans[1].statusObj.GetExtension(ho::FanStatus::object);
  1136. EXPECT_TRUE(pwmFanStatusExt1.detected());
  1137. EXPECT_TRUE(pwmFanStatusExt1.working());
  1138. EXPECT_EQ(VendorNotDetected, pwmFanStatusExt1.vendorid());
  1139. EXPECT_EQ(0, pwmFanStatusExt1.fanmaxrpm());
  1140. EXPECT_EQ(0, pwmFanStatusExt1.fanmaxcontrolpwm());
  1141. };
  1142.  
  1143. {
  1144. InSequence s;
  1145. EXPECT_CALL(*GpioStub::instance(), getValue())
  1146. .Times(1)
  1147. .WillRepeatedly(Return(true)); // reading fanModInstalledGpio
  1148. EXPECT_CALL(*GpioStub::instance(), getValue())
  1149. .Times(1)
  1150. .WillRepeatedly(Return(false)); // reading ipCapInstalledGpio
  1151. EXPECT_CALL(*GpioStub::instance(), getValue())
  1152. .Times(1)
  1153. .WillRepeatedly(Return(true)); // reading vendorIdGpio[0]
  1154. EXPECT_CALL(*GpioStub::instance(), getValue())
  1155. .Times(1)
  1156. .WillRepeatedly(Return(true)); // reading vendorIdGpio[1]
  1157. EXPECT_CALL(*GpioStub::instance(), getValue())
  1158. .Times(1)
  1159. .WillRepeatedly(Return(true)); // reading vendorIdGpio[2]
  1160. }
  1161. checkDetection();
  1162.  
  1163. checkDetection();
  1164. }
  1165.  
  1166. TEST_F(DetectionPwmTestCases, ModInst_Yes_speed_detection_not_allowed_VendorGpio_defined_not_found_in_the_table)
  1167. {
  1168. // ON_CALL(*fanModStatDet, detectFanModuleStatus(_)).WillByDefault(Return(::hlapi::ho::EFanModStatus_FanModuleInstalled));
  1169. config.fanInstance.fanModules[0].fanModInstalledGpio = gpioInfo{123, "123", false};
  1170. config.fanInstance.fanModules[0].ipCapInstalledGpio = gpioInfo{234, "234", false};
  1171.  
  1172. config.fanInstance.fanModules[0].vendorIdGpio.push_back(gpioInfo{1, "1", false});
  1173. config.fanInstance.fanModules[0].vendorIdGpio.push_back(gpioInfo{2, "2", false});
  1174. config.fanInstance.fanModules[0].vendorIdGpio.push_back(gpioInfo{3, "3", false});
  1175.  
  1176. config.fanInstance.speedResponseDetectionAllowed = false;
  1177.  
  1178. auto checkDetection = [this]() {
  1179. detMonMock.detectFans(timerNotif);
  1180.  
  1181. auto& moduleStatusExt = state.fanModules[0].modStatObj.GetExtension(ho::FanModuleStatus::object);
  1182. EXPECT_EQ(ho::EFanModStatus_FanModuleInstalled, moduleStatusExt.status());
  1183.  
  1184. auto pwmFanStatusExt0 = state.fanModules[0].pwmFans[0].statusObj.GetExtension(ho::FanStatus::object);
  1185. EXPECT_TRUE(pwmFanStatusExt0.detected());
  1186. EXPECT_TRUE(pwmFanStatusExt0.working());
  1187. EXPECT_EQ(VendorNotDetected, pwmFanStatusExt0.vendorid());
  1188. EXPECT_EQ(config.getFanInstance().fanMaxRpmDefault, pwmFanStatusExt0.fanmaxrpm());
  1189. EXPECT_EQ(config.getFanInstance().fanMaxControlPwmDefault, pwmFanStatusExt0.fanmaxcontrolpwm());
  1190.  
  1191. auto pwmFanStatusExt1 = state.fanModules[0].pwmFans[1].statusObj.GetExtension(ho::FanStatus::object);
  1192. EXPECT_TRUE(pwmFanStatusExt1.detected());
  1193. EXPECT_TRUE(pwmFanStatusExt1.working());
  1194. EXPECT_EQ(VendorNotDetected, pwmFanStatusExt1.vendorid());
  1195. EXPECT_EQ(config.getFanInstance().fanMaxRpmDefault, pwmFanStatusExt1.fanmaxrpm());
  1196. EXPECT_EQ(config.getFanInstance().fanMaxControlPwmDefault, pwmFanStatusExt1.fanmaxcontrolpwm());
  1197. };
  1198.  
  1199. {
  1200. InSequence s;
  1201. EXPECT_CALL(*GpioStub::instance(), getValue())
  1202. .Times(1)
  1203. .WillRepeatedly(Return(true)); // reading fanModInstalledGpio
  1204. EXPECT_CALL(*GpioStub::instance(), getValue())
  1205. .Times(1)
  1206. .WillRepeatedly(Return(false)); // reading ipCapInstalledGpio
  1207. EXPECT_CALL(*GpioStub::instance(), getValue())
  1208. .Times(1)
  1209. .WillRepeatedly(Return(false)); // reading vendorIdGpio[0]
  1210. EXPECT_CALL(*GpioStub::instance(), getValue())
  1211. .Times(1)
  1212. .WillRepeatedly(Return(false)); // reading vendorIdGpio[1]
  1213. EXPECT_CALL(*GpioStub::instance(), getValue())
  1214. .Times(1)
  1215. .WillRepeatedly(Return(true)); // reading vendorIdGpio[2]
  1216. }
  1217. checkDetection();
  1218.  
  1219. checkDetection();
  1220. }
  1221.  
  1222. TEST_F(DetectionPwmTestCases, ModInst_Yes_speed_detection_not_allowed_VendorGpio_defined_valid_vendorId)
  1223. {
  1224. // ON_CALL(*fanModStatDet, detectFanModuleStatus(_)).WillByDefault(Return(::hlapi::ho::EFanModStatus_FanModuleInstalled));
  1225. config.fanInstance.fanModules[0].fanModInstalledGpio = gpioInfo{123, "123", false};
  1226. config.fanInstance.fanModules[0].ipCapInstalledGpio = gpioInfo{234, "234", false};
  1227.  
  1228. config.fanInstance.fanModules[0].vendorIdGpio.push_back(gpioInfo{1, "1", false});
  1229. config.fanInstance.fanModules[0].vendorIdGpio.push_back(gpioInfo{2, "2", false});
  1230. config.fanInstance.fanModules[0].vendorIdGpio.push_back(gpioInfo{3, "3", false});
  1231.  
  1232. config.fanInstance.speedResponseDetectionAllowed = false;
  1233.  
  1234. auto checkDetection = [this]() {
  1235. detMonMock.detectFans(timerNotif);
  1236.  
  1237. auto& moduleStatusExt = state.fanModules[0].modStatObj.GetExtension(ho::FanModuleStatus::object);
  1238. EXPECT_EQ(ho::EFanModStatus_FanModuleInstalled, moduleStatusExt.status());
  1239.  
  1240. auto pwmFanStatusExt0 = state.fanModules[0].pwmFans[0].statusObj.GetExtension(ho::FanStatus::object);
  1241. EXPECT_TRUE(pwmFanStatusExt0.detected());
  1242. EXPECT_TRUE(pwmFanStatusExt0.working());
  1243. EXPECT_EQ(3, pwmFanStatusExt0.vendorid());
  1244. EXPECT_EQ(config.getVendorConfig(3).fanMaxRpm, pwmFanStatusExt0.fanmaxrpm());
  1245. EXPECT_EQ(config.getVendorConfig(3).fanMaxControlPwm, pwmFanStatusExt0.fanmaxcontrolpwm());
  1246.  
  1247. auto pwmFanStatusExt1 = state.fanModules[0].pwmFans[1].statusObj.GetExtension(ho::FanStatus::object);
  1248. EXPECT_TRUE(pwmFanStatusExt1.detected());
  1249. EXPECT_TRUE(pwmFanStatusExt1.working());
  1250. EXPECT_EQ(3, pwmFanStatusExt1.vendorid());
  1251. EXPECT_EQ(config.getVendorConfig(3).fanMaxRpm, pwmFanStatusExt1.fanmaxrpm());
  1252. EXPECT_EQ(config.getVendorConfig(3).fanMaxControlPwm, pwmFanStatusExt1.fanmaxcontrolpwm());
  1253. };
  1254.  
  1255. {
  1256. InSequence s;
  1257. EXPECT_CALL(*GpioStub::instance(), getValue())
  1258. .Times(1)
  1259. .WillRepeatedly(Return(true)); // reading fanModInstalledGpio
  1260. EXPECT_CALL(*GpioStub::instance(), getValue())
  1261. .Times(1)
  1262. .WillRepeatedly(Return(false)); // reading ipCapInstalledGpio
  1263. EXPECT_CALL(*GpioStub::instance(), getValue())
  1264. .Times(1)
  1265. .WillRepeatedly(Return(false)); // reading vendorIdGpio[0]
  1266. EXPECT_CALL(*GpioStub::instance(), getValue())
  1267. .Times(1)
  1268. .WillRepeatedly(Return(true)); // reading vendorIdGpio[1]
  1269. EXPECT_CALL(*GpioStub::instance(), getValue())
  1270. .Times(1)
  1271. .WillRepeatedly(Return(true)); // reading vendorIdGpio[2]
  1272. }
  1273. checkDetection();
  1274.  
  1275. checkDetection();
  1276. }
  1277.  
  1278. TEST_F(DetectionPwmTestCases, ModInst_Yes_speed_detection_allowed_both_failed)
  1279. {
  1280. // ON_CALL(*fanModStatDet, detectFanModuleStatus(_)).WillByDefault(Return(::hlapi::ho::EFanModStatus_FanModuleInstalled));
  1281. config.fanInstance.fanModules[0].fanModInstalledGpio = gpioInfo{123, "123", false};
  1282. config.fanInstance.fanModules[0].ipCapInstalledGpio = gpioInfo{234, "234", false};
  1283.  
  1284. // although vendorId GPIO is defined it won't be read because speed response allowed
  1285. config.fanInstance.fanModules[0].vendorIdGpio.push_back(gpioInfo{1, "1", false});
  1286. config.fanInstance.fanModules[0].vendorIdGpio.push_back(gpioInfo{2, "2", false});
  1287. config.fanInstance.fanModules[0].vendorIdGpio.push_back(gpioInfo{3, "3", false});
  1288.  
  1289. config.fanInstance.speedResponseDetectionAllowed = true;
  1290.  
  1291. auto checkDetection = [this]() {
  1292. detMonMock.detectFans(timerNotif);
  1293.  
  1294. ON_CALL(*std::dynamic_pointer_cast<PwmFanMock>(state.fanModules[0].pwmFans[0].hwHandle), rpm())
  1295. .WillByDefault(Throw(HwMonException()));
  1296. ON_CALL(*std::dynamic_pointer_cast<PwmFanMock>(state.fanModules[0].pwmFans[1].hwHandle), rpm())
  1297. .WillByDefault(Throw(HwMonException()));
  1298.  
  1299. unsigned int sessionId =
  1300. static_cast<unsigned int>(EFansTimerSession::SpeedResponseDetection) + state.fanModules[0].fanModId;
  1301. tf::msg::TimerNotif timerNotifCorrect{0, static_cast<tf::SessionId>(sessionId), 0};
  1302. detMonMock.detectFans(timerNotifCorrect);
  1303.  
  1304. auto& moduleStatusExt = state.fanModules[0].modStatObj.GetExtension(ho::FanModuleStatus::object);
  1305. EXPECT_EQ(ho::EFanModStatus_FanModuleInstalled, moduleStatusExt.status());
  1306.  
  1307. auto pwmFanStatusExt0 = state.fanModules[0].pwmFans[0].statusObj.GetExtension(ho::FanStatus::object);
  1308. EXPECT_TRUE(pwmFanStatusExt0.detected());
  1309. EXPECT_FALSE(pwmFanStatusExt0.working());
  1310. EXPECT_EQ(VendorNotDetected, pwmFanStatusExt0.vendorid());
  1311. EXPECT_EQ(config.getFanInstance().fanMaxRpmDefault, pwmFanStatusExt0.fanmaxrpm());
  1312. EXPECT_EQ(config.getFanInstance().fanMaxControlPwmDefault, pwmFanStatusExt0.fanmaxcontrolpwm());
  1313.  
  1314. auto pwmFanStatusExt1 = state.fanModules[0].pwmFans[1].statusObj.GetExtension(ho::FanStatus::object);
  1315. EXPECT_TRUE(pwmFanStatusExt1.detected());
  1316. EXPECT_FALSE(pwmFanStatusExt0.working());
  1317. EXPECT_EQ(VendorNotDetected, pwmFanStatusExt0.vendorid());
  1318. EXPECT_EQ(config.getFanInstance().fanMaxRpmDefault, pwmFanStatusExt0.fanmaxrpm());
  1319. EXPECT_EQ(config.getFanInstance().fanMaxControlPwmDefault, pwmFanStatusExt0.fanmaxcontrolpwm());
  1320. };
  1321.  
  1322. {
  1323. InSequence s;
  1324. EXPECT_CALL(*GpioStub::instance(), getValue())
  1325. .Times(1)
  1326. .WillRepeatedly(Return(true)); // reading fanModInstalledGpio
  1327. EXPECT_CALL(*GpioStub::instance(), getValue())
  1328. .Times(1)
  1329. .WillRepeatedly(Return(false)); // reading ipCapInstalledGpio
  1330. }
  1331. checkDetection();
  1332.  
  1333. checkDetection();
  1334. }
  1335.  
  1336. TEST_F(DetectionPwmTestCases, ModInst_Yes_speed_detection_allowed_first_zero_second_below_rpmMin)
  1337. {
  1338. // ON_CALL(*fanModStatDet, detectFanModuleStatus(_)).WillByDefault(Return(::hlapi::ho::EFanModStatus_FanModuleInstalled));
  1339. config.fanInstance.fanModules[0].fanModInstalledGpio = gpioInfo{123, "123", false};
  1340. config.fanInstance.fanModules[0].ipCapInstalledGpio = gpioInfo{234, "234", false};
  1341.  
  1342. config.fanInstance.speedResponseDetectionAllowed = true;
  1343.  
  1344. auto checkDetection = [this]() {
  1345. detMonMock.detectFans(timerNotif);
  1346.  
  1347. ON_CALL(*std::dynamic_pointer_cast<PwmFanMock>(state.fanModules[0].pwmFans[0].hwHandle), rpm())
  1348. .WillByDefault(Return(0));
  1349. ON_CALL(*std::dynamic_pointer_cast<PwmFanMock>(state.fanModules[0].pwmFans[1].hwHandle), rpm())
  1350. .WillByDefault(Return(3000));
  1351.  
  1352. unsigned int sessionId =
  1353. static_cast<unsigned int>(EFansTimerSession::SpeedResponseDetection) + state.fanModules[0].fanModId;
  1354. tf::msg::TimerNotif timerNotifCorrect{0, static_cast<tf::SessionId>(sessionId), 0};
  1355. detMonMock.detectFans(timerNotifCorrect);
  1356.  
  1357. auto& moduleStatusExt = state.fanModules[0].modStatObj.GetExtension(ho::FanModuleStatus::object);
  1358. EXPECT_EQ(ho::EFanModStatus_FanModuleInstalled, moduleStatusExt.status());
  1359.  
  1360. auto pwmFanStatusExt0 = state.fanModules[0].pwmFans[0].statusObj.GetExtension(ho::FanStatus::object);
  1361. EXPECT_TRUE(pwmFanStatusExt0.detected());
  1362. EXPECT_FALSE(pwmFanStatusExt0.working());
  1363. EXPECT_EQ(VendorNotDetected, pwmFanStatusExt0.vendorid());
  1364. EXPECT_EQ(config.getFanInstance().fanMaxRpmDefault, pwmFanStatusExt0.fanmaxrpm());
  1365. EXPECT_EQ(config.getFanInstance().fanMaxControlPwmDefault, pwmFanStatusExt0.fanmaxcontrolpwm());
  1366.  
  1367. auto pwmFanStatusExt1 = state.fanModules[0].pwmFans[1].statusObj.GetExtension(ho::FanStatus::object);
  1368. EXPECT_TRUE(pwmFanStatusExt1.detected());
  1369. EXPECT_TRUE(pwmFanStatusExt1.working());
  1370. EXPECT_EQ(VendorNotDetected, pwmFanStatusExt1.vendorid());
  1371. EXPECT_EQ(config.getFanInstance().fanMaxRpmDefault, pwmFanStatusExt1.fanmaxrpm());
  1372. EXPECT_EQ(config.getFanInstance().fanMaxControlPwmDefault, pwmFanStatusExt1.fanmaxcontrolpwm());
  1373. };
  1374.  
  1375. {
  1376. InSequence s;
  1377. EXPECT_CALL(*GpioStub::instance(), getValue())
  1378. .Times(1)
  1379. .WillRepeatedly(Return(true)); // reading fanModInstalledGpio
  1380. EXPECT_CALL(*GpioStub::instance(), getValue())
  1381. .Times(1)
  1382. .WillRepeatedly(Return(false)); // reading ipCapInstalledGpio
  1383. }
  1384. checkDetection();
  1385.  
  1386. checkDetection();
  1387. }
  1388.  
  1389. TEST_F(DetectionPwmTestCases, ModInst_Yes_speed_detection_allowed_empty_conf_table)
  1390. {
  1391. // ON_CALL(*fanModStatDet, detectFanModuleStatus(_)).WillByDefault(Return(::hlapi::ho::EFanModStatus_FanModuleInstalled));
  1392. config.fanInstance.fanModules[0].fanModInstalledGpio = gpioInfo{123, "123", false};
  1393. config.fanInstance.fanModules[0].ipCapInstalledGpio = gpioInfo{234, "234", false};
  1394.  
  1395. config.fanInstance.speedResponseDetectionAllowed = true;
  1396.  
  1397. config.fanInstance.fanVendors = {};
  1398.  
  1399. auto checkDetection = [this]() {
  1400. detMonMock.detectFans(timerNotif);
  1401.  
  1402. ON_CALL(*std::dynamic_pointer_cast<PwmFanMock>(state.fanModules[0].pwmFans[0].hwHandle), rpm())
  1403. .WillByDefault(Return(0));
  1404. ON_CALL(*std::dynamic_pointer_cast<PwmFanMock>(state.fanModules[0].pwmFans[1].hwHandle), rpm())
  1405. .WillByDefault(Return(3800));
  1406.  
  1407. unsigned int sessionId =
  1408. static_cast<unsigned int>(EFansTimerSession::SpeedResponseDetection) + state.fanModules[0].fanModId;
  1409. tf::msg::TimerNotif timerNotifCorrect{0, static_cast<tf::SessionId>(sessionId), 0};
  1410. detMonMock.detectFans(timerNotifCorrect);
  1411.  
  1412. auto& moduleStatusExt = state.fanModules[0].modStatObj.GetExtension(ho::FanModuleStatus::object);
  1413. EXPECT_EQ(ho::EFanModStatus_FanModuleInstalled, moduleStatusExt.status());
  1414.  
  1415. auto pwmFanStatusExt0 = state.fanModules[0].pwmFans[0].statusObj.GetExtension(ho::FanStatus::object);
  1416. EXPECT_TRUE(pwmFanStatusExt0.detected());
  1417. EXPECT_FALSE(pwmFanStatusExt0.working());
  1418. EXPECT_EQ(VendorNotDetected, pwmFanStatusExt0.vendorid());
  1419. EXPECT_EQ(config.getFanInstance().fanMaxRpmDefault, pwmFanStatusExt0.fanmaxrpm());
  1420. EXPECT_EQ(config.getFanInstance().fanMaxControlPwmDefault, pwmFanStatusExt0.fanmaxcontrolpwm());
  1421.  
  1422. auto pwmFanStatusExt1 = state.fanModules[0].pwmFans[1].statusObj.GetExtension(ho::FanStatus::object);
  1423. EXPECT_TRUE(pwmFanStatusExt1.detected());
  1424. EXPECT_TRUE(pwmFanStatusExt1.working());
  1425. EXPECT_EQ(VendorNotDetected, pwmFanStatusExt1.vendorid());
  1426. EXPECT_EQ(config.getFanInstance().fanMaxRpmDefault, pwmFanStatusExt1.fanmaxrpm());
  1427. EXPECT_EQ(config.getFanInstance().fanMaxControlPwmDefault, pwmFanStatusExt1.fanmaxcontrolpwm());
  1428. };
  1429.  
  1430. {
  1431. InSequence s;
  1432. EXPECT_CALL(*GpioStub::instance(), getValue())
  1433. .Times(1)
  1434. .WillRepeatedly(Return(true)); // reading fanModInstalledGpio
  1435. EXPECT_CALL(*GpioStub::instance(), getValue())
  1436. .Times(1)
  1437. .WillRepeatedly(Return(false)); // reading ipCapInstalledGpio
  1438. }
  1439. checkDetection();
  1440.  
  1441. checkDetection();
  1442. }
  1443.  
  1444. TEST_F(DetectionPwmTestCases, ModInst_Yes_speed_detection_allowed_success)
  1445. {
  1446. // ON_CALL(*fanModStatDet, detectFanModuleStatus(_)).WillByDefault(Return(::hlapi::ho::EFanModStatus_FanModuleInstalled));
  1447. config.fanInstance.fanModules[0].fanModInstalledGpio = gpioInfo{123, "123", false};
  1448. config.fanInstance.fanModules[0].ipCapInstalledGpio = gpioInfo{234, "234", false};
  1449.  
  1450. config.fanInstance.speedResponseDetectionAllowed = true;
  1451.  
  1452. auto checkDetection = [this]() {
  1453. detMonMock.detectFans(timerNotif);
  1454.  
  1455. ON_CALL(*std::dynamic_pointer_cast<PwmFanMock>(state.fanModules[0].pwmFans[0].hwHandle), rpm())
  1456. .WillByDefault(Return(3801));
  1457. ON_CALL(*std::dynamic_pointer_cast<PwmFanMock>(state.fanModules[0].pwmFans[1].hwHandle), rpm())
  1458. .WillByDefault(Return(3800));
  1459.  
  1460. unsigned int sessionId =
  1461. static_cast<unsigned int>(EFansTimerSession::SpeedResponseDetection) + state.fanModules[0].fanModId;
  1462. tf::msg::TimerNotif timerNotifCorrect{0, static_cast<tf::SessionId>(sessionId), 0};
  1463. detMonMock.detectFans(timerNotifCorrect);
  1464.  
  1465. auto& moduleStatusExt = state.fanModules[0].modStatObj.GetExtension(ho::FanModuleStatus::object);
  1466. EXPECT_EQ(ho::EFanModStatus_FanModuleInstalled, moduleStatusExt.status());
  1467.  
  1468. auto pwmFanStatusExt0 = state.fanModules[0].pwmFans[0].statusObj.GetExtension(ho::FanStatus::object);
  1469. EXPECT_TRUE(pwmFanStatusExt0.detected());
  1470. EXPECT_TRUE(pwmFanStatusExt0.working());
  1471. EXPECT_EQ(3, pwmFanStatusExt0.vendorid());
  1472. EXPECT_EQ(config.getVendorConfig(3).fanMaxRpm, pwmFanStatusExt0.fanmaxrpm());
  1473. EXPECT_EQ(config.getVendorConfig(3).fanMaxControlPwm, pwmFanStatusExt0.fanmaxcontrolpwm());
  1474.  
  1475. auto pwmFanStatusExt1 = state.fanModules[0].pwmFans[1].statusObj.GetExtension(ho::FanStatus::object);
  1476. EXPECT_TRUE(pwmFanStatusExt1.detected());
  1477. EXPECT_TRUE(pwmFanStatusExt1.working());
  1478. EXPECT_EQ(6, pwmFanStatusExt1.vendorid());
  1479. EXPECT_EQ(config.getVendorConfig(6).fanMaxRpm, pwmFanStatusExt1.fanmaxrpm());
  1480. EXPECT_EQ(config.getVendorConfig(6).fanMaxControlPwm, pwmFanStatusExt1.fanmaxcontrolpwm());
  1481. };
  1482.  
  1483. {
  1484. InSequence s;
  1485. EXPECT_CALL(*GpioStub::instance(), getValue())
  1486. .Times(1)
  1487. .WillRepeatedly(Return(true)); // reading fanModInstalledGpio
  1488. EXPECT_CALL(*GpioStub::instance(), getValue())
  1489. .Times(1)
  1490. .WillRepeatedly(Return(false)); // reading ipCapInstalledGpio
  1491. }
  1492. checkDetection();
  1493.  
  1494. checkDetection();
  1495. }
  1496.  
  1497. TEST_F(DetectionPwmTestCases, ModInst_Yes_speed_detection_allowed_first_success_second_below_rpmMin)
  1498. {
  1499. // ON_CALL(*fanModStatDet, detectFanModuleStatus(_)).WillByDefault(Return(::hlapi::ho::EFanModStatus_FanModuleInstalled));
  1500. config.fanInstance.fanModules[0].fanModInstalledGpio = gpioInfo{123, "123", false};
  1501. config.fanInstance.fanModules[0].ipCapInstalledGpio = gpioInfo{234, "234", false};
  1502.  
  1503. config.fanInstance.speedResponseDetectionAllowed = true;
  1504.  
  1505. auto checkDetection = [this]() {
  1506. detMonMock.detectFans(timerNotif);
  1507.  
  1508. ON_CALL(*std::dynamic_pointer_cast<PwmFanMock>(state.fanModules[0].pwmFans[0].hwHandle), rpm())
  1509. .WillByDefault(Return(3520));
  1510. ON_CALL(*std::dynamic_pointer_cast<PwmFanMock>(state.fanModules[0].pwmFans[1].hwHandle), rpm())
  1511. .WillByDefault(Return(3000));
  1512.  
  1513. unsigned int sessionId =
  1514. static_cast<unsigned int>(EFansTimerSession::SpeedResponseDetection) + state.fanModules[0].fanModId;
  1515. tf::msg::TimerNotif timerNotifCorrect{0, static_cast<tf::SessionId>(sessionId), 0};
  1516. detMonMock.detectFans(timerNotifCorrect);
  1517.  
  1518. auto& moduleStatusExt = state.fanModules[0].modStatObj.GetExtension(ho::FanModuleStatus::object);
  1519. EXPECT_EQ(ho::EFanModStatus_FanModuleInstalled, moduleStatusExt.status());
  1520.  
  1521. auto pwmFanStatusExt0 = state.fanModules[0].pwmFans[0].statusObj.GetExtension(ho::FanStatus::object);
  1522. EXPECT_TRUE(pwmFanStatusExt0.detected());
  1523. EXPECT_TRUE(pwmFanStatusExt0.working());
  1524. EXPECT_EQ(5, pwmFanStatusExt0.vendorid());
  1525. EXPECT_EQ(config.getVendorConfig(5).fanMaxRpm, pwmFanStatusExt0.fanmaxrpm());
  1526. EXPECT_EQ(config.getVendorConfig(5).fanMaxControlPwm, pwmFanStatusExt0.fanmaxcontrolpwm());
  1527.  
  1528. auto pwmFanStatusExt1 = state.fanModules[0].pwmFans[1].statusObj.GetExtension(ho::FanStatus::object);
  1529. EXPECT_TRUE(pwmFanStatusExt1.detected());
  1530. EXPECT_TRUE(pwmFanStatusExt1.working());
  1531. EXPECT_EQ(VendorNotDetected, pwmFanStatusExt1.vendorid());
  1532. EXPECT_EQ(config.getFanInstance().fanMaxRpmDefault, pwmFanStatusExt1.fanmaxrpm());
  1533. EXPECT_EQ(config.getFanInstance().fanMaxControlPwmDefault, pwmFanStatusExt1.fanmaxcontrolpwm());
  1534. };
  1535.  
  1536. {
  1537. InSequence s;
  1538. EXPECT_CALL(*GpioStub::instance(), getValue())
  1539. .Times(1)
  1540. .WillRepeatedly(Return(true)); // reading fanModInstalledGpio
  1541. EXPECT_CALL(*GpioStub::instance(), getValue())
  1542. .Times(1)
  1543. .WillRepeatedly(Return(false)); // reading ipCapInstalledGpio
  1544. }
  1545. checkDetection();
  1546.  
  1547. checkDetection();
  1548. }
  1549.  
  1550. TEST_F(DetectionPwmTestCases, ModInst_Yes_speed_detection_allowed_first_attempt_failed_second_success)
  1551. {
  1552. // ON_CALL(*fanModStatDet, detectFanModuleStatus(_)).WillByDefault(Return(::hlapi::ho::EFanModStatus_FanModuleInstalled));
  1553. config.fanInstance.fanModules[0].fanModInstalledGpio = gpioInfo{123, "123", false};
  1554. config.fanInstance.fanModules[0].ipCapInstalledGpio = gpioInfo{234, "234", false};
  1555.  
  1556. config.fanInstance.speedResponseDetectionAllowed = true;
  1557.  
  1558. auto checkDetectionFailure = [this]() {
  1559. {
  1560. InSequence s;
  1561. EXPECT_CALL(*GpioStub::instance(), getValue())
  1562. .Times(1)
  1563. .WillRepeatedly(Return(true)); // reading fanModInstalledGpio
  1564. EXPECT_CALL(*GpioStub::instance(), getValue())
  1565. .Times(1)
  1566. .WillRepeatedly(Return(false)); // reading ipCapInstalledGpio
  1567. }
  1568. detMonMock.detectFans(timerNotif);
  1569.  
  1570. ON_CALL(*std::dynamic_pointer_cast<PwmFanMock>(state.fanModules[0].pwmFans[0].hwHandle), rpm())
  1571. .WillByDefault(Throw(HwMonException()));
  1572. ON_CALL(*std::dynamic_pointer_cast<PwmFanMock>(state.fanModules[0].pwmFans[1].hwHandle), rpm())
  1573. .WillByDefault(Throw(HwMonException()));
  1574.  
  1575. unsigned int sessionId =
  1576. static_cast<unsigned int>(EFansTimerSession::SpeedResponseDetection) + state.fanModules[0].fanModId;
  1577. tf::msg::TimerNotif timerNotifCorrect{0, static_cast<tf::SessionId>(sessionId), 0};
  1578. detMonMock.detectFans(timerNotifCorrect);
  1579.  
  1580. auto& moduleStatusExt = state.fanModules[0].modStatObj.GetExtension(ho::FanModuleStatus::object);
  1581. EXPECT_EQ(ho::EFanModStatus_FanModuleInstalled, moduleStatusExt.status());
  1582.  
  1583. auto pwmFanStatusExt0 = state.fanModules[0].pwmFans[0].statusObj.GetExtension(ho::FanStatus::object);
  1584. EXPECT_TRUE(pwmFanStatusExt0.detected());
  1585. EXPECT_FALSE(pwmFanStatusExt0.working());
  1586. EXPECT_EQ(VendorNotDetected, pwmFanStatusExt0.vendorid());
  1587. EXPECT_EQ(config.getFanInstance().fanMaxRpmDefault, pwmFanStatusExt0.fanmaxrpm());
  1588. EXPECT_EQ(config.getFanInstance().fanMaxControlPwmDefault, pwmFanStatusExt0.fanmaxcontrolpwm());
  1589.  
  1590. auto pwmFanStatusExt1 = state.fanModules[0].pwmFans[1].statusObj.GetExtension(ho::FanStatus::object);
  1591. EXPECT_TRUE(pwmFanStatusExt1.detected());
  1592. EXPECT_FALSE(pwmFanStatusExt0.working());
  1593. EXPECT_EQ(VendorNotDetected, pwmFanStatusExt0.vendorid());
  1594. EXPECT_EQ(config.getFanInstance().fanMaxRpmDefault, pwmFanStatusExt0.fanmaxrpm());
  1595. EXPECT_EQ(config.getFanInstance().fanMaxControlPwmDefault, pwmFanStatusExt0.fanmaxcontrolpwm());
  1596.  
  1597. };
  1598.  
  1599. auto checkDetectionSuccess = [this]() {
  1600. detMonMock.detectFans(timerNotif);
  1601.  
  1602. ON_CALL(*std::dynamic_pointer_cast<PwmFanMock>(state.fanModules[0].pwmFans[0].hwHandle), rpm())
  1603. .WillByDefault(Return(3800));
  1604. ON_CALL(*std::dynamic_pointer_cast<PwmFanMock>(state.fanModules[0].pwmFans[1].hwHandle), rpm())
  1605. .WillByDefault(Return(3800));
  1606.  
  1607. unsigned int sessionId =
  1608. static_cast<unsigned int>(EFansTimerSession::SpeedResponseDetection) + state.fanModules[0].fanModId;
  1609. tf::msg::TimerNotif timerNotifCorrect{0, static_cast<tf::SessionId>(sessionId), 0};
  1610. detMonMock.detectFans(timerNotifCorrect);
  1611.  
  1612. auto& moduleStatusExt = state.fanModules[0].modStatObj.GetExtension(ho::FanModuleStatus::object);
  1613. EXPECT_EQ(ho::EFanModStatus_FanModuleInstalled, moduleStatusExt.status());
  1614.  
  1615. auto pwmFanStatusExt0 = state.fanModules[0].pwmFans[0].statusObj.GetExtension(ho::FanStatus::object);
  1616. EXPECT_TRUE(pwmFanStatusExt0.detected());
  1617. EXPECT_TRUE(pwmFanStatusExt0.working());
  1618. EXPECT_EQ(6, pwmFanStatusExt0.vendorid());
  1619. EXPECT_EQ(config.getVendorConfig(6).fanMaxRpm, pwmFanStatusExt0.fanmaxrpm());
  1620. EXPECT_EQ(config.getVendorConfig(6).fanMaxControlPwm, pwmFanStatusExt0.fanmaxcontrolpwm());
  1621.  
  1622. auto pwmFanStatusExt1 = state.fanModules[0].pwmFans[1].statusObj.GetExtension(ho::FanStatus::object);
  1623. EXPECT_TRUE(pwmFanStatusExt1.detected());
  1624. EXPECT_TRUE(pwmFanStatusExt1.working());
  1625. EXPECT_EQ(6, pwmFanStatusExt1.vendorid());
  1626. EXPECT_EQ(config.getVendorConfig(6).fanMaxRpm, pwmFanStatusExt1.fanmaxrpm());
  1627. EXPECT_EQ(config.getVendorConfig(6).fanMaxControlPwm, pwmFanStatusExt1.fanmaxcontrolpwm());
  1628. };
  1629.  
  1630. // emulating periodic detection
  1631. checkDetectionFailure();
  1632. checkDetectionSuccess();
  1633. }
  1634.  
  1635. TEST_F(DetectionPwmTestCases, if_speed_detection_failed_for_one_fan_it_will_be_repeated_for_all_fans_again)
  1636. {
  1637. // ON_CALL(*fanModStatDet, detectFanModuleStatus(_)).WillByDefault(Return(::hlapi::ho::EFanModStatus_FanModuleInstalled));
  1638. config.fanInstance.speedResponseDetectionAllowed = true;
  1639.  
  1640. auto checkDetectionFirstFailed = [this]() {
  1641. detMonMock.detectFans(timerNotif);
  1642.  
  1643. ON_CALL(*std::dynamic_pointer_cast<PwmFanMock>(state.fanModules[0].pwmFans[0].hwHandle), rpm())
  1644. .WillByDefault(Throw(HwMonException()));
  1645. ON_CALL(*std::dynamic_pointer_cast<PwmFanMock>(state.fanModules[0].pwmFans[1].hwHandle), rpm())
  1646. .WillByDefault(Return(3800));
  1647.  
  1648. unsigned int sessionId =
  1649. static_cast<unsigned int>(EFansTimerSession::SpeedResponseDetection) + state.fanModules[0].fanModId;
  1650. tf::msg::TimerNotif timerNotifCorrect{0, static_cast<tf::SessionId>(sessionId), 0};
  1651. detMonMock.detectFans(timerNotifCorrect);
  1652.  
  1653. auto& moduleStatusExt = state.fanModules[0].modStatObj.GetExtension(ho::FanModuleStatus::object);
  1654. EXPECT_EQ(ho::EFanModStatus_FanModuleInstalled, moduleStatusExt.status());
  1655.  
  1656. auto pwmFanStatusExt0 = state.fanModules[0].pwmFans[0].statusObj.GetExtension(ho::FanStatus::object);
  1657. EXPECT_FALSE(pwmFanStatusExt0.detected());
  1658. EXPECT_FALSE(pwmFanStatusExt0.working());
  1659. EXPECT_EQ(VendorNotDetected, pwmFanStatusExt0.vendorid());
  1660. EXPECT_EQ(config.getFanInstance().fanMaxRpmDefault, pwmFanStatusExt0.fanmaxrpm());
  1661. EXPECT_EQ(config.getFanInstance().fanMaxControlPwmDefault, pwmFanStatusExt0.fanmaxcontrolpwm());
  1662.  
  1663. auto pwmFanStatusExt1 = state.fanModules[0].pwmFans[1].statusObj.GetExtension(ho::FanStatus::object);
  1664. EXPECT_TRUE(pwmFanStatusExt1.detected());
  1665. EXPECT_TRUE(pwmFanStatusExt1.working());
  1666. EXPECT_EQ(6, pwmFanStatusExt1.vendorid());
  1667. EXPECT_EQ(config.getVendorConfig(6).fanMaxRpm, pwmFanStatusExt1.fanmaxrpm());
  1668. EXPECT_EQ(config.getVendorConfig(6).fanMaxControlPwm, pwmFanStatusExt1.fanmaxcontrolpwm());
  1669. };
  1670.  
  1671. auto checkDetectionSecondFailed = [this]() {
  1672. detMonMock.detectFans(timerNotif);
  1673.  
  1674. ON_CALL(*std::dynamic_pointer_cast<PwmFanMock>(state.fanModules[0].pwmFans[0].hwHandle), rpm())
  1675. .WillByDefault(Return(3800));
  1676. ON_CALL(*std::dynamic_pointer_cast<PwmFanMock>(state.fanModules[0].pwmFans[1].hwHandle), rpm())
  1677. .WillByDefault(Return(3000));
  1678.  
  1679. unsigned int sessionId =
  1680. static_cast<unsigned int>(EFansTimerSession::SpeedResponseDetection) + state.fanModules[0].fanModId;
  1681. tf::msg::TimerNotif timerNotifCorrect{0, static_cast<tf::SessionId>(sessionId), 0};
  1682. detMonMock.detectFans(timerNotifCorrect);
  1683.  
  1684. auto& moduleStatusExt = state.fanModules[0].modStatObj.GetExtension(ho::FanModuleStatus::object);
  1685. EXPECT_EQ(ho::EFanModStatus_FanModuleInstalled, moduleStatusExt.status());
  1686.  
  1687. auto pwmFanStatusExt0 = state.fanModules[0].pwmFans[0].statusObj.GetExtension(ho::FanStatus::object);
  1688. EXPECT_TRUE(pwmFanStatusExt0.detected());
  1689. EXPECT_TRUE(pwmFanStatusExt0.working());
  1690. EXPECT_EQ(6, pwmFanStatusExt0.vendorid());
  1691. EXPECT_EQ(config.getVendorConfig(6).fanMaxRpm, pwmFanStatusExt0.fanmaxrpm());
  1692. EXPECT_EQ(config.getVendorConfig(6).fanMaxControlPwm, pwmFanStatusExt0.fanmaxcontrolpwm());
  1693.  
  1694. auto pwmFanStatusExt1 = state.fanModules[0].pwmFans[1].statusObj.GetExtension(ho::FanStatus::object);
  1695. EXPECT_TRUE(pwmFanStatusExt1.detected());
  1696. EXPECT_TRUE(pwmFanStatusExt1.working());
  1697. EXPECT_EQ(VendorNotDetected, pwmFanStatusExt1.vendorid());
  1698. EXPECT_EQ(config.getFanInstance().fanMaxRpmDefault, pwmFanStatusExt1.fanmaxrpm());
  1699. EXPECT_EQ(config.getFanInstance().fanMaxControlPwmDefault, pwmFanStatusExt1.fanmaxcontrolpwm());
  1700. };
  1701.  
  1702. auto checkDetectionBothSuccess = [this]() {
  1703. detMonMock.detectFans(timerNotif);
  1704.  
  1705. ON_CALL(*std::dynamic_pointer_cast<PwmFanMock>(state.fanModules[0].pwmFans[0].hwHandle), rpm())
  1706. .WillByDefault(Return(3800));
  1707. ON_CALL(*std::dynamic_pointer_cast<PwmFanMock>(state.fanModules[0].pwmFans[1].hwHandle), rpm())
  1708. .WillByDefault(Return(3800));
  1709.  
  1710. unsigned int sessionId =
  1711. static_cast<unsigned int>(EFansTimerSession::SpeedResponseDetection) + state.fanModules[0].fanModId;
  1712. tf::msg::TimerNotif timerNotifCorrect{0, static_cast<tf::SessionId>(sessionId), 0};
  1713. detMonMock.detectFans(timerNotifCorrect);
  1714.  
  1715. auto& moduleStatusExt = state.fanModules[0].modStatObj.GetExtension(ho::FanModuleStatus::object);
  1716. EXPECT_EQ(ho::EFanModStatus_FanModuleInstalled, moduleStatusExt.status());
  1717.  
  1718. auto pwmFanStatusExt0 = state.fanModules[0].pwmFans[0].statusObj.GetExtension(ho::FanStatus::object);
  1719. EXPECT_TRUE(pwmFanStatusExt0.detected());
  1720. EXPECT_TRUE(pwmFanStatusExt0.working());
  1721. EXPECT_EQ(6, pwmFanStatusExt0.vendorid());
  1722. EXPECT_EQ(config.getVendorConfig(6).fanMaxRpm, pwmFanStatusExt0.fanmaxrpm());
  1723. EXPECT_EQ(config.getVendorConfig(6).fanMaxControlPwm, pwmFanStatusExt0.fanmaxcontrolpwm());
  1724.  
  1725. auto pwmFanStatusExt1 = state.fanModules[0].pwmFans[1].statusObj.GetExtension(ho::FanStatus::object);
  1726. EXPECT_TRUE(pwmFanStatusExt1.detected());
  1727. EXPECT_TRUE(pwmFanStatusExt1.working());
  1728. EXPECT_EQ(6, pwmFanStatusExt1.vendorid());
  1729. EXPECT_EQ(config.getVendorConfig(6).fanMaxRpm, pwmFanStatusExt1.fanmaxrpm());
  1730. EXPECT_EQ(config.getVendorConfig(6).fanMaxControlPwm, pwmFanStatusExt1.fanmaxcontrolpwm());
  1731. };
  1732.  
  1733. // emulating periodic detection
  1734. checkDetectionFirstFailed();
  1735. checkDetectionSecondFailed();
  1736. checkDetectionBothSuccess();
  1737. }
  1738. } // namespace fans
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement