34
34
namespace mtf=mir::mir_test_framework;
39
bool KilledByInvalidMemoryAccess(int exit_status)
41
return testing::KilledBySignal(SIGSEGV)(exit_status) ||
42
testing::KilledBySignal(SIGBUS)(exit_status) ||
43
testing::KilledBySignal(SIGABRT)(exit_status);
36
46
class UdevWrapperTest : public ::testing::Test
39
49
mtf::UdevEnvironment udev_environment;
42
54
TEST_F(UdevWrapperTest, IteratesOverCorrectNumberOfDevices)
44
56
udev_environment.add_device("drm", "fakedev1", NULL, {}, {});
271
typedef UdevWrapperTest UdevWrapperDeathTest;
273
TEST_F(UdevWrapperDeathTest, DereferencingEndReturnsInvalidObject)
275
::testing::FLAGS_gtest_death_test_style = "threadsafe";
276
udev_environment.add_device("drm", "control64D", NULL, {}, {});
277
udev_environment.add_device("drm", "card1", NULL, {}, {});
279
mir::udev::Enumerator devices(std::make_shared<mir::udev::Context>());
281
devices.scan_devices();
283
EXPECT_EXIT((*devices.end()).subsystem(), KilledByInvalidMemoryAccess, "");
285
auto iter = devices.begin();
287
while(iter != devices.end())
291
EXPECT_EXIT((*iter).subsystem(), KilledByInvalidMemoryAccess, "");
294
TEST_F(UdevWrapperTest, MemberDereferenceWorks)
296
udev_environment.add_device("drm", "control64D", NULL, {}, {});
297
udev_environment.add_device("drm", "card1", NULL, {}, {});
299
mir::udev::Enumerator devices(std::make_shared<mir::udev::Context>());
301
devices.scan_devices();
302
auto iter = devices.begin();
304
EXPECT_STREQ("drm", iter->subsystem());
305
EXPECT_STREQ("drm", iter->subsystem());
308
TEST_F(UdevWrapperDeathTest, MemberDereferenceOfEndDies)
310
::testing::FLAGS_gtest_death_test_style = "threadsafe";
311
udev_environment.add_device("drm", "control64D", NULL, {}, {});
312
udev_environment.add_device("drm", "card1", NULL, {}, {});
314
mir::udev::Enumerator devices(std::make_shared<mir::udev::Context>());
316
devices.scan_devices();
318
EXPECT_EXIT(devices.end()->subsystem(), KilledByInvalidMemoryAccess, "");
320
auto iter = devices.begin();
322
while(iter != devices.end())
326
EXPECT_EXIT(iter->subsystem(), KilledByInvalidMemoryAccess, "");
259
329
TEST_F(UdevWrapperTest, UdevMonitorDoesNotTriggerBeforeEnabling)
261
331
mir::udev::Monitor monitor{mir::udev::Context()};