1 /*
2 * Copyright (c) 2017, Intel Corporation
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
10 *
11 * The above copyright notice and this permission notice shall be included
12 * in all copies or substantial portions of the Software.
13 *
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
15 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
17 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
18 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20 * OTHER DEALINGS IN THE SOFTWARE.
21 */
22 
23 #ifndef MEDIADRIVER_LINUX_CODECHAL_ULT_ULTAPP_CMTEST_H_
24 #define MEDIADRIVER_LINUX_CODECHAL_ULT_ULTAPP_CMTEST_H_
25 
26 #include <malloc.h>
27 #include "gtest/gtest.h"
28 #include "mock_device.h"
29 #include "../memory_leak_detector.h"
30 
31 #pragma GCC diagnostic ignored "-Wnonnull"
32 
33 class CmTest: public testing::Test
34 {
35 public:
AllocateAlignedMemory(size_t size,size_t alignment)36     static void* AllocateAlignedMemory(size_t size, size_t alignment)
37     { return memalign(alignment, size); }
38 
FreeAlignedMemory(void * memory)39     static void FreeAlignedMemory(void *memory) { free(memory); }
40 
CmTest()41     CmTest(): m_currentPlatform(igfx_MAX) {}
42 
43     template<typename T, class Function>
RunEach(T expected_return,Function RunTest)44     bool RunEach(T expected_return, Function RunTest)
45     {
46         bool result = true;
47 
48         const std::vector<Platform_t> &platforms = m_driverLoader.GetPlatforms();
49         int platform_count = static_cast<int>(platforms.size());
50 
51         for (int i = 0; i < platform_count; ++i)
52         {
53             CreateMockDevice(platforms[i]);
54 
55             T function_return = RunTest();
56             EXPECT_EQ(function_return, expected_return);
57             result &= (function_return == expected_return);
58 
59             ReleaseMockDevice();
60         }
61         return result;
62     }//===============
63 
64 protected:
CreateMockDevice(const Platform_t & current_platform)65     bool CreateMockDevice(const Platform_t &current_platform)
66     {
67         int va_status = m_driverLoader.InitDriver(current_platform);
68         EXPECT_EQ(VA_STATUS_SUCCESS, va_status);
69         m_currentPlatform = current_platform;
70         m_mockDevice.Create(&m_driverLoader);
71         return true;
72     }//=============
73 
ReleaseMockDevice()74     bool ReleaseMockDevice()
75     {
76         m_mockDevice.Release();
77         int va_status = m_driverLoader.CloseDriver();
78         EXPECT_EQ(VA_STATUS_SUCCESS, va_status);
79         return true;
80     }//=============
81 
82     DriverDllLoader m_driverLoader;
83 
84     CMRT_UMD::MockDevice m_mockDevice;
85 
86     Platform_t m_currentPlatform;
87 };
88 
89 #endif  // #ifndef MEDIADRIVER_LINUX_CODECHAL_ULT_ULTAPP_CMTEST_H_
90