Hey! > I have been working on a C++ project that uses libmm-glib, but I recently ran > into an issue around testing it. I was hoping to be able to create an > artificial MMSim (not based on a real card) and pass that to my code under > test. My main goal is to avoid dbus dependencies so I can directly instrument > the 'external' data types in my tests. It seemed like it was going to be > reasonably easy: > > Make a directory to hold my wrappers. > Create my own libmm-glib.h that imports the core enum and error header files. > Create my own GObject based MMSim class for instrumentation. > Do some clever stuff with include paths so my tests pull in my libmm-glib.h > but my libmm-glib.h pulls in the ModemManager ModemManager-enums.h/etc files. > > But I realized I would lose access to all of libmm-glib's other types. I > would have to reimplement types like MMBearerProperties (which is already a > basic data type that needs no modification for testing). > > Does anyone know a better way to do this? I have found details on > Aleksander's blog about how to test ModemManager, but I have not yet come up > with much on how to test code that uses ModemManager. Any advice would be > greatly appreciated. >
What you're trying to accomplish is a bit difficult, unless you implement custom DBus-less versions of all object types (modem, sim, bearer...) and interfaces (modem3gpp, modemsimple...) in a custom fake libmm-glib. See, with some clever setup you could even have your own version of the gdbus-codegen program (the one that builds all DBus-based object and interface types) so that it autogenerates DBus-less GObjects. That could be a fun exercise, but not sure how easy it would be. Another approach you could take, which I know others are taking, is to leave libmm-glib as it is, unmodified, based on D-Bus. And instead of mocking the library, you would be mocking the ModemManager daemon with a "fake" implementation that exposes the same DBus interface as the daemon. See the current support for this here: https://gitlab.freedesktop.org/mobile-broadband/ModemManager/-/blob/master/tools/test-modemmanager-service.py https://gitlab.freedesktop.org/mobile-broadband/ModemManager/-/tree/master/tools/tests With that setup above, you can have your program linked to the official libmm-glib, then you run the service stub daemon, and then you can instruct fake events like "AddModem" to add a fake modem with a SIM. It's not extremely powerful, but it has a lot of potential for growth I'd say. -- Aleksander https://aleksander.es _______________________________________________ ModemManager-devel mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/modemmanager-devel
