@@ -15,11 +15,16 @@ namespace L0 {
15
15
namespace ult {
16
16
17
17
struct MockDebugSessionWindows : DebugSessionWindows {
18
+ using DebugSessionWindows::allContexts;
19
+ using DebugSessionWindows::allElfs;
20
+ using DebugSessionWindows::asyncThread;
21
+ using DebugSessionWindows::closeAsyncThread;
18
22
using DebugSessionWindows::debugHandle;
19
23
using DebugSessionWindows::initialize;
20
24
using DebugSessionWindows::moduleDebugAreaCaptured;
21
25
using DebugSessionWindows::processId;
22
26
using DebugSessionWindows::readAndHandleEvent;
27
+ using DebugSessionWindows::startAsyncThread;
23
28
using DebugSessionWindows::wddm;
24
29
25
30
MockDebugSessionWindows (const zet_debug_config_t &config, L0::Device *device) : DebugSessionWindows(config, device) {}
@@ -40,6 +45,7 @@ struct MockDebugSessionWindows : DebugSessionWindows {
40
45
41
46
ze_result_t resultInitialize = ZE_RESULT_FORCE_UINT32;
42
47
ze_result_t resultReadAndHandleEvent = ZE_RESULT_FORCE_UINT32;
48
+ static constexpr uint64_t mockDebugHandle = 1 ;
43
49
};
44
50
45
51
struct DebugApiWindowsFixture : public DeviceFixture {
@@ -181,9 +187,7 @@ TEST_F(DebugApiWindowsTest, givenUnsupportedEventTypeWhenReadAndHandleEventCalle
181
187
182
188
for (auto unsupportedEventType : {DBGUMD_READ_EVENT_MODULE_CREATE_NOTIFICATION,
183
189
DBGUMD_READ_EVENT_EU_ATTN_BIT_SET,
184
- DBGUMD_READ_EVENT_CONTEXT_CREATE_DESTROY,
185
- DBGUMD_READ_EVENT_DEVICE_CREATE_DESTROY,
186
- DBGUMD_READ_EVENT_CREATE_DEBUG_DATA}) {
190
+ DBGUMD_READ_EVENT_DEVICE_CREATE_DESTROY}) {
187
191
mockWddm->readEventOutParams .readEventType = unsupportedEventType;
188
192
EXPECT_EQ (ZE_RESULT_ERROR_UNSUPPORTED_FEATURE, session->readAndHandleEvent (100 ));
189
193
}
@@ -199,6 +203,48 @@ TEST_F(DebugApiWindowsTest, givenUnknownEventTypeWhenReadAndHandleEventCalledThe
199
203
EXPECT_EQ (ZE_RESULT_ERROR_UNKNOWN, session->readAndHandleEvent (100 ));
200
204
}
201
205
206
+ TEST_F (DebugApiWindowsTest, givenDebugDataEventTypeWhenReadAndHandleEventCalledThenResultDebugDataIsSaved) {
207
+ zet_debug_config_t config = {};
208
+ config.pid = 0x1234 ;
209
+
210
+ auto session = std::make_unique<MockDebugSessionWindows>(config, device);
211
+ session->wddm = mockWddm;
212
+
213
+ mockWddm->readEventOutParams .readEventType = DBGUMD_READ_EVENT_CREATE_DEBUG_DATA;
214
+ mockWddm->readEventOutParams .eventParamsBuffer .ReadCreateDebugDataParams .DebugDataType = ELF_BINARY;
215
+ mockWddm->readEventOutParams .eventParamsBuffer .ReadCreateDebugDataParams .DataBufferPtr = 0xa000 ;
216
+ mockWddm->readEventOutParams .eventParamsBuffer .ReadCreateDebugDataParams .DataSize = 8 ;
217
+ EXPECT_EQ (ZE_RESULT_SUCCESS, session->readAndHandleEvent (100 ));
218
+ EXPECT_EQ (1 , session->allElfs .size ());
219
+ auto elf = session->allElfs [0 ];
220
+ EXPECT_EQ (elf.startVA , 0xa000 );
221
+ EXPECT_EQ (elf.endVA , 0xa008 );
222
+ }
223
+
224
+ TEST_F (DebugApiWindowsTest, givenContextCreateEventTypeWhenReadAndHandleEventCalledThenAllContextsIsSetCorrectly) {
225
+ zet_debug_config_t config = {};
226
+ config.pid = 0x1234 ;
227
+
228
+ auto session = std::make_unique<MockDebugSessionWindows>(config, device);
229
+ session->wddm = mockWddm;
230
+
231
+ mockWddm->readEventOutParams .readEventType = DBGUMD_READ_EVENT_CONTEXT_CREATE_DESTROY;
232
+ mockWddm->readEventOutParams .eventParamsBuffer .ContextCreateDestroyEventParams .hContextHandle = 0xa000 ;
233
+ mockWddm->readEventOutParams .eventParamsBuffer .ContextCreateDestroyEventParams .IsCreated = 1 ;
234
+ mockWddm->readEventOutParams .eventParamsBuffer .ContextCreateDestroyEventParams .IsSIPInstalled = 0 ;
235
+ EXPECT_EQ (ZE_RESULT_SUCCESS, session->readAndHandleEvent (100 ));
236
+ EXPECT_EQ (0 , session->allContexts .size ());
237
+
238
+ mockWddm->readEventOutParams .eventParamsBuffer .ContextCreateDestroyEventParams .IsSIPInstalled = 1 ;
239
+ EXPECT_EQ (ZE_RESULT_SUCCESS, session->readAndHandleEvent (100 ));
240
+ EXPECT_EQ (1 , session->allContexts .size ());
241
+ EXPECT_EQ (1 , session->allContexts .count (0xa000 ));
242
+
243
+ mockWddm->readEventOutParams .eventParamsBuffer .ContextCreateDestroyEventParams .IsCreated = 0 ;
244
+ EXPECT_EQ (ZE_RESULT_SUCCESS, session->readAndHandleEvent (100 ));
245
+ EXPECT_EQ (0 , session->allContexts .size ());
246
+ }
247
+
202
248
TEST (DebugSessionWindowsTest, whenTranslateEscapeErrorStatusCalledThenCorrectZeResultReturned) {
203
249
EXPECT_EQ (ZE_RESULT_SUCCESS, DebugSessionWindows::translateEscapeReturnStatusToZeResult (DBGUMD_RETURN_ESCAPE_SUCCESS));
204
250
EXPECT_EQ (ZE_RESULT_ERROR_NOT_AVAILABLE, DebugSessionWindows::translateEscapeReturnStatusToZeResult (DBGUMD_RETURN_DEBUGGER_ATTACH_DEVICE_BUSY));
@@ -210,5 +256,39 @@ TEST(DebugSessionWindowsTest, whenTranslateEscapeErrorStatusCalledThenCorrectZeR
210
256
EXPECT_EQ (ZE_RESULT_ERROR_UNKNOWN, DebugSessionWindows::translateEscapeReturnStatusToZeResult (DBGUMD_RETURN_TYPE_MAX));
211
257
}
212
258
259
+ using DebugApiWindowsAsyncThreadTest = Test<DebugApiWindowsFixture>;
260
+
261
+ TEST_F (DebugApiWindowsAsyncThreadTest, GivenDebugSessionWhenStartingAndClosingAsyncThreadThenThreadIsStartedAndFinishes) {
262
+ auto session = std::make_unique<MockDebugSessionWindows>(zet_debug_config_t {0x1234 }, device);
263
+ ASSERT_NE (nullptr , session);
264
+ session->wddm = mockWddm;
265
+ session->startAsyncThread ();
266
+
267
+ EXPECT_TRUE (session->asyncThread .threadActive );
268
+ EXPECT_FALSE (session->asyncThread .threadFinished );
269
+
270
+ session->closeAsyncThread ();
271
+
272
+ EXPECT_FALSE (session->asyncThread .threadActive );
273
+ EXPECT_TRUE (session->asyncThread .threadFinished );
274
+ }
275
+
276
+ TEST_F (DebugApiWindowsAsyncThreadTest, GivenDebugSessionWithAsyncThreadWhenClosingConnectionThenAsyncThreadIsTerminated) {
277
+ auto session = std::make_unique<MockDebugSessionWindows>(zet_debug_config_t {0x1234 }, device);
278
+ ASSERT_NE (nullptr , session);
279
+ session->wddm = mockWddm;
280
+ session->debugHandle = MockDebugSessionWindows::mockDebugHandle;
281
+
282
+ session->startAsyncThread ();
283
+
284
+ EXPECT_TRUE (session->asyncThread .threadActive );
285
+ EXPECT_FALSE (session->asyncThread .threadFinished );
286
+
287
+ session->closeConnection ();
288
+
289
+ EXPECT_FALSE (session->asyncThread .threadActive );
290
+ EXPECT_TRUE (session->asyncThread .threadFinished );
291
+ }
292
+
213
293
} // namespace ult
214
294
} // namespace L0
0 commit comments