1 /*
2  * Copyright (C) 2020-2021 Intel Corporation
3  *
4  * SPDX-License-Identifier: MIT
5  *
6  */
7 
8 #include "level_zero/tools/source/sysman/fan/linux/os_fan_imp.h"
9 #include "level_zero/tools/test/unit_tests/sources/sysman/linux/mock_sysman_fixture.h"
10 
11 #include "sysman/fan/fan_imp.h"
12 
13 extern bool sysmanUltsEnable;
14 
15 namespace L0 {
16 namespace ult {
17 
18 constexpr uint32_t fanHandleComponentCount = 0u;
19 class SysmanDeviceFanFixture : public SysmanDeviceFixture {
20   protected:
SetUp()21     void SetUp() override {
22         if (!sysmanUltsEnable) {
23             GTEST_SKIP();
24         }
25         SysmanDeviceFixture::SetUp();
26         pSysmanDeviceImp->pFanHandleContext->init();
27     }
TearDown()28     void TearDown() override {
29         if (!sysmanUltsEnable) {
30             GTEST_SKIP();
31         }
32         SysmanDeviceFixture::TearDown();
33     }
34 
get_fan_handles(uint32_t count)35     std::vector<zes_fan_handle_t> get_fan_handles(uint32_t count) {
36         std::vector<zes_fan_handle_t> handles(count, nullptr);
37         EXPECT_EQ(zesDeviceEnumFans(device->toHandle(), &count, handles.data()), ZE_RESULT_SUCCESS);
38         return handles;
39     }
40 };
41 
TEST_F(SysmanDeviceFanFixture,GivenComponentCountZeroWhenEnumeratingFanDomainsThenValidCountIsReturnedAndVerifySysmanFanGetCallSucceeds)42 TEST_F(SysmanDeviceFanFixture, GivenComponentCountZeroWhenEnumeratingFanDomainsThenValidCountIsReturnedAndVerifySysmanFanGetCallSucceeds) {
43     uint32_t count = 0;
44     EXPECT_EQ(zesDeviceEnumFans(device->toHandle(), &count, nullptr), ZE_RESULT_SUCCESS);
45     EXPECT_EQ(count, fanHandleComponentCount);
46 }
47 
TEST_F(SysmanDeviceFanFixture,GivenInvalidComponentCountWhenEnumeratingFanDomainsThenValidCountIsReturnedAndVerifySysmanFanGetCallSucceeds)48 TEST_F(SysmanDeviceFanFixture, GivenInvalidComponentCountWhenEnumeratingFanDomainsThenValidCountIsReturnedAndVerifySysmanFanGetCallSucceeds) {
49     uint32_t count = 0;
50     EXPECT_EQ(zesDeviceEnumFans(device->toHandle(), &count, nullptr), ZE_RESULT_SUCCESS);
51     EXPECT_EQ(count, fanHandleComponentCount);
52 
53     count = count + 1;
54     EXPECT_EQ(zesDeviceEnumFans(device->toHandle(), &count, nullptr), ZE_RESULT_SUCCESS);
55     EXPECT_EQ(count, fanHandleComponentCount);
56 }
57 
TEST_F(SysmanDeviceFanFixture,GivenComponentCountZeroWhenEnumeratingFanDomainsThenValidFanHandlesIsReturned)58 TEST_F(SysmanDeviceFanFixture, GivenComponentCountZeroWhenEnumeratingFanDomainsThenValidFanHandlesIsReturned) {
59     uint32_t count = 0;
60     EXPECT_EQ(zesDeviceEnumFans(device->toHandle(), &count, nullptr), ZE_RESULT_SUCCESS);
61     EXPECT_EQ(count, fanHandleComponentCount);
62 
63     std::vector<zes_fan_handle_t> handles(count, nullptr);
64     EXPECT_EQ(zesDeviceEnumFans(device->toHandle(), &count, handles.data()), ZE_RESULT_SUCCESS);
65     for (auto handle : handles) {
66         EXPECT_NE(handle, nullptr);
67     }
68 }
69 
TEST_F(SysmanDeviceFanFixture,GivenValidFanHandleWhenGettingFanPropertiesThenCallSucceeds)70 TEST_F(SysmanDeviceFanFixture, GivenValidFanHandleWhenGettingFanPropertiesThenCallSucceeds) {
71     auto handles = get_fan_handles(fanHandleComponentCount);
72 
73     for (auto handle : handles) {
74         zes_fan_properties_t properties;
75         EXPECT_EQ(ZE_RESULT_SUCCESS, zesFanGetProperties(handle, &properties));
76     }
77 }
78 
TEST_F(SysmanDeviceFanFixture,GivenValidFanHandleWhenGettingFanConfigThenUnsupportedIsReturned)79 TEST_F(SysmanDeviceFanFixture, GivenValidFanHandleWhenGettingFanConfigThenUnsupportedIsReturned) {
80     auto handles = get_fan_handles(fanHandleComponentCount);
81 
82     for (auto handle : handles) {
83         zes_fan_config_t fanConfig;
84         EXPECT_EQ(ZE_RESULT_ERROR_UNSUPPORTED_FEATURE, zesFanGetConfig(handle, &fanConfig));
85     }
86 }
87 
TEST_F(SysmanDeviceFanFixture,GivenValidFanHandleWhenSettingDefaultModeThenUnsupportedIsReturned)88 TEST_F(SysmanDeviceFanFixture, GivenValidFanHandleWhenSettingDefaultModeThenUnsupportedIsReturned) {
89     auto handles = get_fan_handles(fanHandleComponentCount);
90 
91     for (auto handle : handles) {
92         EXPECT_EQ(ZE_RESULT_ERROR_UNSUPPORTED_FEATURE, zesFanSetDefaultMode(handle));
93     }
94 }
95 
TEST_F(SysmanDeviceFanFixture,GivenValidFanHandleWhenSettingFixedSpeedModeThenUnsupportedIsReturned)96 TEST_F(SysmanDeviceFanFixture, GivenValidFanHandleWhenSettingFixedSpeedModeThenUnsupportedIsReturned) {
97     auto handles = get_fan_handles(fanHandleComponentCount);
98 
99     for (auto handle : handles) {
100         zes_fan_speed_t fanSpeed = {0};
101         EXPECT_EQ(ZE_RESULT_ERROR_UNSUPPORTED_FEATURE, zesFanSetFixedSpeedMode(handle, &fanSpeed));
102     }
103 }
104 
TEST_F(SysmanDeviceFanFixture,GivenValidFanHandleWhenSettingTheSpeedTableModeThenUnsupportedIsReturned)105 TEST_F(SysmanDeviceFanFixture, GivenValidFanHandleWhenSettingTheSpeedTableModeThenUnsupportedIsReturned) {
106     auto handles = get_fan_handles(fanHandleComponentCount);
107 
108     for (auto handle : handles) {
109         zes_fan_speed_table_t fanSpeedTable = {0};
110         EXPECT_EQ(ZE_RESULT_ERROR_UNSUPPORTED_FEATURE, zesFanSetSpeedTableMode(handle, &fanSpeedTable));
111     }
112 }
113 
TEST_F(SysmanDeviceFanFixture,GivenValidFanHandleWhenGettingFanSpeedWithRPMUnitThenValidFanSpeedReadingsRetrieved)114 TEST_F(SysmanDeviceFanFixture, GivenValidFanHandleWhenGettingFanSpeedWithRPMUnitThenValidFanSpeedReadingsRetrieved) {
115     auto handles = get_fan_handles(fanHandleComponentCount);
116 
117     for (auto handle : handles) {
118         zes_fan_speed_units_t unit = zes_fan_speed_units_t::ZES_FAN_SPEED_UNITS_RPM;
119         int32_t fanSpeed = 0;
120         EXPECT_EQ(ZE_RESULT_ERROR_UNSUPPORTED_FEATURE, zesFanGetState(handle, unit, &fanSpeed));
121     }
122 }
123 
TEST_F(SysmanDeviceFanFixture,GivenValidFanHandleWhenGettingFanSpeedWithPercentUnitThenUnsupportedIsReturned)124 TEST_F(SysmanDeviceFanFixture, GivenValidFanHandleWhenGettingFanSpeedWithPercentUnitThenUnsupportedIsReturned) {
125     auto handles = get_fan_handles(fanHandleComponentCount);
126 
127     for (auto handle : handles) {
128         zes_fan_speed_units_t unit = zes_fan_speed_units_t::ZES_FAN_SPEED_UNITS_PERCENT;
129         int32_t fanSpeed = 0;
130         EXPECT_EQ(ZE_RESULT_ERROR_UNSUPPORTED_FEATURE, zesFanGetState(handle, unit, &fanSpeed));
131     }
132 }
133 
134 } // namespace ult
135 } // namespace L0
136