@@ -92,6 +92,163 @@ TEST(
9292 }
9393}
9494
95+ TEST (
96+ LoaderVersionAPI,
97+ GivenLoaderWhenCallingzelGetLoaderVersionAfterInitThenValidVersionIsReturned) {
98+
99+ uint32_t pCount = 0 ;
100+ ze_init_driver_type_desc_t desc = {ZE_STRUCTURE_TYPE_INIT_DRIVER_TYPE_DESC};
101+ desc.flags = UINT32_MAX;
102+ desc.pNext = nullptr ;
103+ EXPECT_EQ (ZE_RESULT_SUCCESS, zeInitDrivers (&pCount, nullptr , &desc));
104+
105+ zel_component_version_t version = {};
106+ EXPECT_EQ (ZE_RESULT_SUCCESS, zelGetLoaderVersion (&version));
107+
108+ // Verify component name is "loader"
109+ EXPECT_STREQ (version.component_name , " loader" );
110+
111+ // Verify spec version is valid (current API version)
112+ EXPECT_GT (version.spec_version , 0 );
113+
114+ // Verify library version components are valid
115+ EXPECT_GE (version.component_lib_version .major , 0 );
116+ EXPECT_GE (version.component_lib_version .minor , 0 );
117+ EXPECT_GE (version.component_lib_version .patch , 0 );
118+ }
119+
120+ TEST (
121+ LoaderVersionAPI,
122+ GivenLoaderWhenCallingzelGetLoaderVersionWithNullPointerThenErrorIsReturned) {
123+
124+ uint32_t pCount = 0 ;
125+ ze_init_driver_type_desc_t desc = {ZE_STRUCTURE_TYPE_INIT_DRIVER_TYPE_DESC};
126+ desc.flags = UINT32_MAX;
127+ desc.pNext = nullptr ;
128+ EXPECT_EQ (ZE_RESULT_SUCCESS, zeInitDrivers (&pCount, nullptr , &desc));
129+
130+ EXPECT_EQ (ZE_RESULT_ERROR_INVALID_NULL_POINTER, zelGetLoaderVersion (nullptr ));
131+ }
132+
133+ TEST (
134+ LoaderVersionAPI,
135+ GivenLoaderWhenCallingzelGetLoaderVersionWithoutInitThenCorrectResultIsReturned) {
136+
137+ zel_component_version_t version = {};
138+
139+ #ifdef L0_STATIC_LOADER_BUILD
140+ // Static build: requires initialization
141+ EXPECT_EQ (ZE_RESULT_ERROR_UNINITIALIZED, zelGetLoaderVersion (&version));
142+ #else
143+ // Dynamic build: works without initialization
144+ EXPECT_EQ (ZE_RESULT_SUCCESS, zelGetLoaderVersion (&version));
145+
146+ EXPECT_STREQ (version.component_name , " loader" );
147+ EXPECT_GT (version.spec_version , 0 );
148+ EXPECT_GE (version.component_lib_version .major , 0 );
149+ EXPECT_GE (version.component_lib_version .minor , 0 );
150+ EXPECT_GE (version.component_lib_version .patch , 0 );
151+ #endif
152+ }
153+
154+ TEST (
155+ LoaderVersionAPI,
156+ GivenLoaderWhenCallingzelGetLoaderVersionBeforeAndAfterInitThenCorrectResultIsReturned) {
157+
158+ // Get version before initialization
159+ zel_component_version_t version_before = {};
160+
161+ #ifdef L0_STATIC_LOADER_BUILD
162+ // Static build: should fail before init
163+ EXPECT_EQ (ZE_RESULT_ERROR_UNINITIALIZED, zelGetLoaderVersion (&version_before));
164+ #else
165+ // Dynamic build: should work before init
166+ EXPECT_EQ (ZE_RESULT_SUCCESS, zelGetLoaderVersion (&version_before));
167+ #endif
168+
169+ // Initialize drivers
170+ uint32_t pCount = 0 ;
171+ ze_init_driver_type_desc_t desc = {ZE_STRUCTURE_TYPE_INIT_DRIVER_TYPE_DESC};
172+ desc.flags = UINT32_MAX;
173+ desc.pNext = nullptr ;
174+ EXPECT_EQ (ZE_RESULT_SUCCESS, zeInitDrivers (&pCount, nullptr , &desc));
175+
176+ // Get version after initialization
177+ zel_component_version_t version_after = {};
178+ EXPECT_EQ (ZE_RESULT_SUCCESS, zelGetLoaderVersion (&version_after));
179+
180+ #ifndef L0_STATIC_LOADER_BUILD
181+ // Dynamic build: verify both versions match
182+ EXPECT_STREQ (version_before.component_name , version_after.component_name );
183+ EXPECT_EQ (version_before.spec_version , version_after.spec_version );
184+ EXPECT_EQ (version_before.component_lib_version .major , version_after.component_lib_version .major );
185+ EXPECT_EQ (version_before.component_lib_version .minor , version_after.component_lib_version .minor );
186+ EXPECT_EQ (version_before.component_lib_version .patch , version_after.component_lib_version .patch );
187+ #endif
188+ }
189+
190+ TEST (
191+ LoaderVersionAPI,
192+ GivenLoaderWhenCallingzelGetLoaderVersionMultipleTimesThenConsistentVersionIsReturned) {
193+
194+ uint32_t pCount = 0 ;
195+ ze_init_driver_type_desc_t desc = {ZE_STRUCTURE_TYPE_INIT_DRIVER_TYPE_DESC};
196+ desc.flags = UINT32_MAX;
197+ desc.pNext = nullptr ;
198+ EXPECT_EQ (ZE_RESULT_SUCCESS, zeInitDrivers (&pCount, nullptr , &desc));
199+
200+ zel_component_version_t version1 = {};
201+ zel_component_version_t version2 = {};
202+
203+ EXPECT_EQ (ZE_RESULT_SUCCESS, zelGetLoaderVersion (&version1));
204+ EXPECT_EQ (ZE_RESULT_SUCCESS, zelGetLoaderVersion (&version2));
205+
206+ // Verify both calls return the same version
207+ EXPECT_STREQ (version1.component_name , version2.component_name );
208+ EXPECT_EQ (version1.spec_version , version2.spec_version );
209+ EXPECT_EQ (version1.component_lib_version .major , version2.component_lib_version .major );
210+ EXPECT_EQ (version1.component_lib_version .minor , version2.component_lib_version .minor );
211+ EXPECT_EQ (version1.component_lib_version .patch , version2.component_lib_version .patch );
212+ }
213+
214+ TEST (
215+ LoaderVersionAPI,
216+ GivenLoaderWhenComparingzelGetLoaderVersionWithzelLoaderGetVersionsThenVersionsMatch) {
217+
218+ uint32_t pCount = 0 ;
219+ ze_init_driver_type_desc_t desc = {ZE_STRUCTURE_TYPE_INIT_DRIVER_TYPE_DESC};
220+ desc.flags = UINT32_MAX;
221+ desc.pNext = nullptr ;
222+ EXPECT_EQ (ZE_RESULT_SUCCESS, zeInitDrivers (&pCount, nullptr , &desc));
223+
224+ // Get version via zelGetLoaderVersion
225+ zel_component_version_t single_version = {};
226+ EXPECT_EQ (ZE_RESULT_SUCCESS, zelGetLoaderVersion (&single_version));
227+
228+ // Get versions via zelLoaderGetVersions
229+ size_t size = 0 ;
230+ EXPECT_EQ (ZE_RESULT_SUCCESS, zelLoaderGetVersions (&size, nullptr ));
231+ EXPECT_GT (size, 0 );
232+
233+ std::vector<zel_component_version_t > versions (size);
234+ EXPECT_EQ (ZE_RESULT_SUCCESS, zelLoaderGetVersions (&size, versions.data ()));
235+
236+ // Find the loader component in the versions array
237+ bool found_loader = false ;
238+ for (const auto &component : versions) {
239+ if (strcmp (component.component_name , " loader" ) == 0 ) {
240+ found_loader = true ;
241+ // Verify both APIs return the same version info
242+ EXPECT_EQ (single_version.spec_version , component.spec_version );
243+ EXPECT_EQ (single_version.component_lib_version .major , component.component_lib_version .major );
244+ EXPECT_EQ (single_version.component_lib_version .minor , component.component_lib_version .minor );
245+ EXPECT_EQ (single_version.component_lib_version .patch , component.component_lib_version .patch );
246+ break ;
247+ }
248+ }
249+ EXPECT_TRUE (found_loader) << " Loader component not found in zelLoaderGetVersions output" ;
250+ }
251+
95252TEST (
96253 LoaderInit,
97254 GivenLevelZeroLoaderPresentWhenCallingZeInitDriversWithTypesUnsupportedWithFailureThenSupportedTypesThenSuccessReturned) {
0 commit comments