2424#include " runtime/program/program.h"
2525#include " runtime/helpers/string.h"
2626#include " unit_tests/helpers/test_files.h"
27+ #include " unit_tests/mocks/mock_program.h"
2728#include " gtest/gtest.h"
2829#include < cstring>
2930
3031using namespace OCLRT ;
3132
32- class ProcessElfBinaryTests : public Program ,
33- public ::testing::Test {
33+ class ProcessElfBinaryTests : public ::testing::Test {
34+ public:
35+ void SetUp () override {
36+ program = std::make_unique<MockProgram>();
37+ }
38+
39+ std::unique_ptr<MockProgram> program;
3440};
3541
3642TEST_F (ProcessElfBinaryTests, NullBinary) {
3743 uint32_t binaryVersion;
38- cl_int retVal = processElfBinary (nullptr , 0 , binaryVersion);
44+ cl_int retVal = program-> processElfBinary (nullptr , 0 , binaryVersion);
3945
4046 EXPECT_EQ (CL_INVALID_BINARY, retVal);
41- EXPECT_TRUE (elfBinary.empty ());
42- EXPECT_EQ (0u , elfBinarySize);
47+ EXPECT_TRUE (program-> elfBinary .empty ());
48+ EXPECT_EQ (0u , program-> elfBinarySize );
4349 EXPECT_NE (0u , binaryVersion);
4450}
4551
4652TEST_F (ProcessElfBinaryTests, InvalidBinary) {
4753 uint32_t binaryVersion;
4854 char pBinary[] = " thisistotallyinvalid\0 " ;
4955 size_t binarySize = strnlen_s (pBinary, 21 );
50- cl_int retVal = processElfBinary (pBinary, binarySize, binaryVersion);
56+ cl_int retVal = program-> processElfBinary (pBinary, binarySize, binaryVersion);
5157
5258 EXPECT_EQ (CL_INVALID_BINARY, retVal);
53- EXPECT_TRUE (elfBinary.empty ());
54- EXPECT_EQ (0u , elfBinarySize);
59+ EXPECT_TRUE (program-> elfBinary .empty ());
60+ EXPECT_EQ (0u , program-> elfBinarySize );
5561 EXPECT_NE (0u , binaryVersion);
5662}
5763
@@ -62,10 +68,10 @@ TEST_F(ProcessElfBinaryTests, ValidBinary) {
6268 retrieveBinaryKernelFilename (filePath, " CopyBuffer_simd8_" , " .bin" );
6369
6470 size_t binarySize = loadDataFromFile (filePath.c_str (), pBinary);
65- cl_int retVal = processElfBinary (pBinary, binarySize, binaryVersion);
71+ cl_int retVal = program-> processElfBinary (pBinary, binarySize, binaryVersion);
6672
6773 EXPECT_EQ (CL_SUCCESS, retVal);
68- EXPECT_EQ (0 , memcmp (pBinary, elfBinary.data (), binarySize));
74+ EXPECT_EQ (0 , memcmp (pBinary, program-> elfBinary .data (), binarySize));
6975 EXPECT_NE (0u , binaryVersion);
7076 deleteDataReadFromFile (pBinary);
7177}
@@ -74,30 +80,31 @@ TEST_F(ProcessElfBinaryTests, ValidSpirvBinary) {
7480 // clCreateProgramWithIL => SPIR-V stored as source code
7581 const uint32_t spirvBinary[2 ] = {0x03022307 , 0x07230203 };
7682 size_t spirvBinarySize = sizeof (spirvBinary);
77- isSpirV = Program::isValidSpirvBinary (spirvBinary, spirvBinarySize);
83+ auto isSpirV = Program::isValidSpirvBinary (spirvBinary, spirvBinarySize);
7884 EXPECT_TRUE (isSpirV);
7985
8086 // clCompileProgram => SPIR-V stored as IR binary
81- storeIrBinary (spirvBinary, spirvBinarySize, true );
82- programBinaryType = CL_PROGRAM_BINARY_TYPE_LIBRARY;
83- EXPECT_NE (nullptr , irBinary);
84- EXPECT_NE (0u , irBinarySize);
85- EXPECT_TRUE (isSpirV);
87+ program->isSpirV = true ;
88+ program->storeIrBinary (spirvBinary, spirvBinarySize, true );
89+ program->programBinaryType = CL_PROGRAM_BINARY_TYPE_LIBRARY;
90+ EXPECT_NE (nullptr , program->irBinary );
91+ EXPECT_NE (0u , program->irBinarySize );
92+ EXPECT_TRUE (program->getIsSpirV ());
8693
8794 // clGetProgramInfo => SPIR-V stored as ELF binary
88- cl_int retVal = resolveProgramBinary ();
95+ cl_int retVal = program-> resolveProgramBinary ();
8996 EXPECT_EQ (CL_SUCCESS, retVal);
90- EXPECT_FALSE (elfBinary.empty ());
91- EXPECT_NE (0u , elfBinarySize);
97+ EXPECT_FALSE (program-> elfBinary .empty ());
98+ EXPECT_NE (0u , program-> elfBinarySize );
9299
93100 // use ELF reader to parse and validate ELF binary
94101 CLElfLib::CElfReader *pElfReader = CLElfLib::CElfReader::create (
95- reinterpret_cast <const char *>(elfBinary.data ()), elfBinarySize);
102+ reinterpret_cast <const char *>(program-> elfBinary .data ()), program-> elfBinarySize );
96103 ASSERT_NE (nullptr , pElfReader);
97104 const CLElfLib::SElf64Header *pElfHeader = pElfReader->getElfHeader ();
98105 ASSERT_NE (nullptr , pElfHeader);
99106 EXPECT_EQ (pElfHeader->Type , CLElfLib::E_EH_TYPE::EH_TYPE_OPENCL_LIBRARY);
100- EXPECT_TRUE (CLElfLib::CElfReader::isValidElf64 (elfBinary.data (), elfBinarySize));
107+ EXPECT_TRUE (CLElfLib::CElfReader::isValidElf64 (program-> elfBinary .data (), program-> elfBinarySize ));
101108
102109 // check if ELF binary contains section SH_TYPE_SPIRV
103110 bool hasSpirvSection = false ;
@@ -112,13 +119,13 @@ TEST_F(ProcessElfBinaryTests, ValidSpirvBinary) {
112119 EXPECT_TRUE (hasSpirvSection);
113120
114121 // clCreateProgramWithBinary => new program should recognize SPIR-V binary
115- isSpirV = false ;
122+ program-> isSpirV = false ;
116123 uint32_t elfBinaryVersion;
117- auto pElfBinary = std::unique_ptr<char >(new char [elfBinarySize]);
118- memcpy_s (pElfBinary.get (), elfBinarySize, elfBinary.data (), elfBinarySize);
119- retVal = processElfBinary (pElfBinary.get (), elfBinarySize, elfBinaryVersion);
124+ auto pElfBinary = std::unique_ptr<char >(new char [program-> elfBinarySize ]);
125+ memcpy_s (pElfBinary.get (), program-> elfBinarySize , program-> elfBinary .data (), program-> elfBinarySize );
126+ retVal = program-> processElfBinary (pElfBinary.get (), program-> elfBinarySize , elfBinaryVersion);
120127 EXPECT_EQ (CL_SUCCESS, retVal);
121- EXPECT_TRUE (isSpirV );
128+ EXPECT_TRUE (program-> getIsSpirV () );
122129
123130 CLElfLib::CElfReader::destroy (pElfReader);
124131}
@@ -128,8 +135,13 @@ unsigned int BinaryTypeValues[] = {
128135 CL_PROGRAM_BINARY_TYPE_LIBRARY,
129136 CL_PROGRAM_BINARY_TYPE_COMPILED_OBJECT};
130137
131- class ProcessElfBinaryTestsWithBinaryType : public Program ,
132- public ::testing::TestWithParam<unsigned int > {
138+ class ProcessElfBinaryTestsWithBinaryType : public ::testing::TestWithParam<unsigned int > {
139+ public:
140+ void SetUp () override {
141+ program = std::make_unique<MockProgram>();
142+ }
143+
144+ std::unique_ptr<MockProgram> program;
133145};
134146
135147TEST_P (ProcessElfBinaryTestsWithBinaryType, GivenBinaryTypeWhenResolveProgramThenProgramIsProperlyResolved) {
@@ -139,28 +151,29 @@ TEST_P(ProcessElfBinaryTestsWithBinaryType, GivenBinaryTypeWhenResolveProgramThe
139151 retrieveBinaryKernelFilename (filePath, " CopyBuffer_simd8_" , " .bin" );
140152
141153 size_t binarySize = loadDataFromFile (filePath.c_str (), pBinary);
142- cl_int retVal = processElfBinary (pBinary, binarySize, binaryVersion);
154+ cl_int retVal = program-> processElfBinary (pBinary, binarySize, binaryVersion);
143155
156+ const auto &options = program->getOptions ();
144157 size_t optionsSize = strlen (options.c_str ()) + 1 ;
145- auto pTmpGenBinary = new char [genBinarySize];
146- auto pTmpIrBinary = new char [irBinarySize];
158+ auto pTmpGenBinary = new char [program-> genBinarySize ];
159+ auto pTmpIrBinary = new char [program-> irBinarySize ];
147160 auto pTmpOptions = new char [optionsSize];
148161
149- memcpy_s (pTmpGenBinary, genBinarySize, genBinary, genBinarySize);
150- memcpy_s (pTmpIrBinary, irBinarySize, irBinary, irBinarySize);
162+ memcpy_s (pTmpGenBinary, program-> genBinarySize , program-> genBinary , program-> genBinarySize );
163+ memcpy_s (pTmpIrBinary, program-> irBinarySize , program-> irBinary , program-> irBinarySize );
151164 memcpy_s (pTmpOptions, optionsSize, options.c_str (), optionsSize);
152165
153166 EXPECT_EQ (CL_SUCCESS, retVal);
154- EXPECT_EQ (0 , memcmp (pBinary, elfBinary.data (), binarySize));
167+ EXPECT_EQ (0 , memcmp (pBinary, program-> elfBinary .data (), binarySize));
155168 EXPECT_NE (0u , binaryVersion);
156169
157170 // delete program's elf reference to force a resolve
158- isProgramBinaryResolved = false ;
159- programBinaryType = GetParam ();
160- retVal = resolveProgramBinary ();
171+ program-> isProgramBinaryResolved = false ;
172+ program-> programBinaryType = GetParam ();
173+ retVal = program-> resolveProgramBinary ();
161174 EXPECT_EQ (CL_SUCCESS, retVal);
162- EXPECT_EQ (0 , memcmp (pTmpGenBinary, genBinary, genBinarySize));
163- EXPECT_EQ (0 , memcmp (pTmpIrBinary, irBinary, irBinarySize));
175+ EXPECT_EQ (0 , memcmp (pTmpGenBinary, program-> genBinary , program-> genBinarySize ));
176+ EXPECT_EQ (0 , memcmp (pTmpIrBinary, program-> irBinary , program-> irBinarySize ));
164177 EXPECT_EQ (0 , memcmp (pTmpOptions, options.c_str (), optionsSize));
165178
166179 delete[] pTmpGenBinary;
@@ -181,21 +194,21 @@ TEST_F(ProcessElfBinaryTests, BackToBack) {
181194 retrieveBinaryKernelFilename (filePath, " CopyBuffer_simd8_" , " .bin" );
182195
183196 size_t binarySize = loadDataFromFile (filePath.c_str (), pBinary);
184- cl_int retVal = processElfBinary (pBinary, binarySize, binaryVersion);
197+ cl_int retVal = program-> processElfBinary (pBinary, binarySize, binaryVersion);
185198
186199 EXPECT_EQ (CL_SUCCESS, retVal);
187- EXPECT_EQ (0 , memcmp (pBinary, elfBinary.data (), binarySize));
200+ EXPECT_EQ (0 , memcmp (pBinary, program-> elfBinary .data (), binarySize));
188201 EXPECT_NE (0u , binaryVersion);
189202 deleteDataReadFromFile (pBinary);
190203
191204 std::string filePath2;
192205 retrieveBinaryKernelFilename (filePath2, " simple_arg_int_" , " .bin" );
193206
194207 binarySize = loadDataFromFile (filePath2.c_str (), pBinary);
195- retVal = processElfBinary (pBinary, binarySize, binaryVersion);
208+ retVal = program-> processElfBinary (pBinary, binarySize, binaryVersion);
196209
197210 EXPECT_EQ (CL_SUCCESS, retVal);
198- EXPECT_EQ (0 , memcmp (pBinary, elfBinary.data (), binarySize));
211+ EXPECT_EQ (0 , memcmp (pBinary, program-> elfBinary .data (), binarySize));
199212 EXPECT_NE (0u , binaryVersion);
200213 deleteDataReadFromFile (pBinary);
201214}
@@ -207,9 +220,10 @@ TEST_F(ProcessElfBinaryTests, BuildOptionsEmpty) {
207220 retrieveBinaryKernelFilename (filePath, " simple_kernels_" , " .bin" );
208221
209222 size_t binarySize = loadDataFromFile (filePath.c_str (), pBinary);
210- cl_int retVal = processElfBinary (pBinary, binarySize, binaryVersion);
223+ cl_int retVal = program-> processElfBinary (pBinary, binarySize, binaryVersion);
211224
212225 EXPECT_EQ (CL_SUCCESS, retVal);
226+ const auto &options = program->getOptions ();
213227 size_t optionsSize = strlen (options.c_str ()) + 1 ;
214228 EXPECT_EQ (0 , memcmp (" " , options.c_str (), optionsSize));
215229 EXPECT_NE (0u , binaryVersion);
@@ -223,9 +237,10 @@ TEST_F(ProcessElfBinaryTests, BuildOptionsNotEmpty) {
223237 retrieveBinaryKernelFilename (filePath, " simple_kernels_opts_" , " .bin" );
224238
225239 size_t binarySize = loadDataFromFile (filePath.c_str (), pBinary);
226- cl_int retVal = processElfBinary (pBinary, binarySize, binaryVersion);
240+ cl_int retVal = program-> processElfBinary (pBinary, binarySize, binaryVersion);
227241
228242 EXPECT_EQ (CL_SUCCESS, retVal);
243+ const auto &options = program->getOptions ();
229244 size_t optionsSize = strlen (options.c_str ()) + 1 ;
230245 std::string buildOptionsNotEmpty = " -cl-opt-disable -DDEF_WAS_SPECIFIED=1" ;
231246 EXPECT_EQ (0 , memcmp (buildOptionsNotEmpty.c_str (), options.c_str (), optionsSize));
0 commit comments