[libvirt] [PATCH v2 3/4] tests: Add more test suite mock helpers
Jim Fehlig
jfehlig at suse.com
Tue Jun 3 21:30:56 UTC 2014
Daniel P. Berrange wrote:
> Rename the VIR_MOCK_IMPL* macros to VIR_MOCK_WRAP*
> and add new VIR_MOCK_IMPL macros which let you directly
> implement overrides in the preloaded source.
>
> Signed-off-by: Daniel P. Berrange <berrange at redhat.com>
> ---
> tests/virfirewalltest.c | 4 ++--
> tests/virmock.h | 54 +++++++++++++++++++++++++++++++++++++------------
> tests/virsystemdtest.c | 4 ++--
> 3 files changed, 45 insertions(+), 17 deletions(-)
>
> diff --git a/tests/virfirewalltest.c b/tests/virfirewalltest.c
> index ba2e6ad..81c5557 100644
> --- a/tests/virfirewalltest.c
> +++ b/tests/virfirewalltest.c
> @@ -67,7 +67,7 @@ static bool fwError;
> "target prot opt source destination\n"
>
> # if WITH_DBUS
> -VIR_MOCK_IMPL_RET_ARGS(dbus_connection_send_with_reply_and_block,
> +VIR_MOCK_WRAP_RET_ARGS(dbus_connection_send_with_reply_and_block,
> DBusMessage *,
> DBusConnection *, connection,
> DBusMessage *, message,
> @@ -82,7 +82,7 @@ VIR_MOCK_IMPL_RET_ARGS(dbus_connection_send_with_reply_and_block,
> char **args = NULL;
> char *type = NULL;
>
> - VIR_MOCK_IMPL_INIT_REAL(dbus_connection_send_with_reply_and_block);
> + VIR_MOCK_REAL_INIT(dbus_connection_send_with_reply_and_block);
>
> if (STREQ(service, "org.freedesktop.DBus") &&
> STREQ(member, "ListNames")) {
> diff --git a/tests/virmock.h b/tests/virmock.h
> index 0dd8bb5..8352e30 100644
> --- a/tests/virmock.h
> +++ b/tests/virmock.h
> @@ -234,33 +234,61 @@
> */
>
> # define VIR_MOCK_IMPL_RET_ARGS(name, rettype, ...) \
> + rettype name(VIR_MOCK_ARGTYPENAMES(__VA_ARGS__)); \
> + static rettype (*real_##name)(VIR_MOCK_ARGTYPES(__VA_ARGS__)); \
> + rettype name(VIR_MOCK_ARGTYPENAMES_UNUSED(__VA_ARGS__))
> +
> +# define VIR_MOCK_IMPL_RET_VOID(name, rettype) \
> + rettype name(void); \
> + static rettype (*real_##name)(void); \
> + rettype name(void)
> +
> +# define VIR_MOCK_IMPL_VOID_ARGS(name, ...) \
> + void name(VIR_MOCK_ARGTYPENAMES(__VA_ARGS__)); \
> + static void (*real_##name)(VIR_MOCK_ARGTYPES(__VA_ARGS__)); \
> + void name(VIR_MOCK_ARGTYPENAMES_UNUSED(__VA_ARGS__))
> +
> +# define VIR_MOCK_IMPL_VOID_VOID(name) \
> + void name(void); \
> + static void (*real_##name)(void); \
> + void name(void)
> +
> +/*
> + * The VIR_MOCK_WRAP_NNN_MMM() macros are intended for use in the
> + * individual test suites. The define a stub implementation of
>
s/The/They/ or s/The/The macros/
This is the first time I've looked at virmock.h in any detail, but
didn't notice any problems with this patch. ACK.
Regards,
Jim
> + * the wrapped method and insert the caller provided code snippet
> + * as the body of the method.
> + */
> +
> +# define VIR_MOCK_WRAP_RET_ARGS(name, rettype, ...) \
> rettype wrap_##name(VIR_MOCK_ARGTYPENAMES(__VA_ARGS__)); \
> static rettype (*real_##name)(VIR_MOCK_ARGTYPES(__VA_ARGS__)); \
> rettype wrap_##name(VIR_MOCK_ARGTYPENAMES_UNUSED(__VA_ARGS__))
>
> -# define VIR_MOCK_IMPL_INIT_REAL(name) \
> - do { \
> - if (real_##name == NULL && \
> - !(real_##name = dlsym(RTLD_NEXT, \
> - #name))) { \
> - fprintf(stderr, "Missing symbol '" #name "'\n"); \
> - abort(); \
> - } \
> - } while (0)
> -
> -# define VIR_MOCK_IMPL_RET_VOID(name, rettype) \
> +# define VIR_MOCK_WRAP_RET_VOID(name, rettype) \
> rettype wrap_##name(void); \
> static rettype (*real_##name)(void); \
> rettype wrap_##name(void)
>
> -# define VIR_MOCK_IMPL_VOID_ARGS(name, ...) \
> +# define VIR_MOCK_WRAP_VOID_ARGS(name, ...) \
> void wrap_##name(VIR_MOCK_ARGTYPENAMES(__VA_ARGS__)); \
> static void (*real_##name)(VIR_MOCK_ARGTYPES(__VA_ARGS__)); \
> void wrap_##name(VIR_MOCK_ARGTYPENAMES_UNUSED(__VA_ARGS__))
>
> -# define VIR_MOCK_IMPL_VOID_VOID(name) \
> +# define VIR_MOCK_WRAP_VOID_VOID(name) \
> void wrap_##name(void); \
> static void (*real_##name)(void); \
> void wrap_##name(void)
>
> +
> +# define VIR_MOCK_REAL_INIT(name) \
> + do { \
> + if (real_##name == NULL && \
> + !(real_##name = dlsym(RTLD_NEXT, \
> + #name))) { \
> + fprintf(stderr, "Missing symbol '" #name "'\n"); \
> + abort(); \
> + } \
> + } while (0)
> +
> #endif /* __VIR_MOCK_H__ */
> diff --git a/tests/virsystemdtest.c b/tests/virsystemdtest.c
> index 8f7b47e..0d57a6a 100644
> --- a/tests/virsystemdtest.c
> +++ b/tests/virsystemdtest.c
> @@ -34,7 +34,7 @@
>
> VIR_LOG_INIT("tests.systemdtest");
>
> -VIR_MOCK_IMPL_RET_ARGS(dbus_connection_send_with_reply_and_block,
> +VIR_MOCK_WRAP_RET_ARGS(dbus_connection_send_with_reply_and_block,
> DBusMessage *,
> DBusConnection *, connection,
> DBusMessage *, message,
> @@ -45,7 +45,7 @@ VIR_MOCK_IMPL_RET_ARGS(dbus_connection_send_with_reply_and_block,
> const char *service = dbus_message_get_destination(message);
> const char *member = dbus_message_get_member(message);
>
> - VIR_MOCK_IMPL_INIT_REAL(dbus_connection_send_with_reply_and_block);
> + VIR_MOCK_REAL_INIT(dbus_connection_send_with_reply_and_block);
>
> if (STREQ(service, "org.freedesktop.machine1")) {
> if (getenv("FAIL_BAD_SERVICE")) {
>
More information about the libvir-list
mailing list