summaryrefslogtreecommitdiffstats
path: root/src/lib/hooks/tests/Makefile.am
blob: 8cbe4138fa6a187bc40a255d99b4403b97a41286 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
SUBDIRS = .

AM_CPPFLAGS  = -I$(top_builddir)/src/lib -I$(top_srcdir)/src/lib
AM_CPPFLAGS += $(BOOST_INCLUDES)

AM_CXXFLAGS  = $(KEA_CXXFLAGS)

# Kea libraries against which the test user libraries are linked.
HOOKS_LIB      = $(top_builddir)/src/lib/hooks/libkea-hooks.la
LOG_LIB        = $(top_builddir)/src/lib/log/libkea-log.la
UTIL_LIB       = $(top_builddir)/src/lib/util/libkea-util.la
EXCEPTIONS_LIB = $(top_builddir)/src/lib/exceptions/libkea-exceptions.la

ALL_LIBS       = $(HOOKS_LIB) $(LOG_LIB) $(UTIL_LIB) $(EXCEPTIONS_LIB) $(LOG4CPLUS_LIBS)

# Files to clean include the file created by testing.
CLEANFILES = *.gcno *.gcda $(builddir)/marker_file.dat

# Files generated by configure
DISTCLEANFILES = marker_file.h test_libraries.h

TESTS_ENVIRONMENT = $(LIBTOOL) --mode=execute $(VALGRIND_COMMAND)

TESTS =
if HAVE_GTEST
# Build shared libraries for testing. The libtool way to create a shared library
# is to specify "-avoid-version -export-dynamic -module" in the library LDFLAGS
# (see http://www.gnu.org/software/libtool/manual/html_node/Link-mode.html).
# Use of these switches will guarantee that the .so files are created in the
# .libs folder and they can be dlopened.
#
# Note that the shared libraries with callouts should not be used together with
# the --enable-static-link option. With this option, the bind10 libraries are
# statically linked with the program and if the callout invokes the methods
# which belong to these libraries, the library with the callout will get its
# own copy of the static objects (e.g. logger, ServerHooks) and that will lead
# to unexpected errors. For this reason, the --enable-static-link option is
# ignored for unit tests built here.

noinst_LTLIBRARIES = libnvl.la libivl.la libfxl.la libbcl.la liblcl.la
noinst_LTLIBRARIES += liblecl.la libucl.la libfcl.la libpcl.la libacl.la

# -rpath /nowhere is a hack to trigger libtool to not create a
# convenience archive, resulting in shared modules

# No version function
libnvl_la_SOURCES  = no_version_library.cc
libnvl_la_CXXFLAGS = $(AM_CXXFLAGS)
libnvl_la_CPPFLAGS = $(AM_CPPFLAGS)
libnvl_la_LDFLAGS  = -avoid-version -export-dynamic -module -rpath /nowhere

# Incorrect version function
libivl_la_SOURCES  = incorrect_version_library.cc
libivl_la_CXXFLAGS = $(AM_CXXFLAGS)
libivl_la_CPPFLAGS = $(AM_CPPFLAGS)
libivl_la_LDFLAGS  = -avoid-version -export-dynamic -module -rpath /nowhere

# All framework functions throw an exception
libfxl_la_SOURCES  = framework_exception_library.cc
libfxl_la_CXXFLAGS = $(AM_CXXFLAGS)
libfxl_la_CPPFLAGS = $(AM_CPPFLAGS)
libfxl_la_LDFLAGS  = -avoid-version -export-dynamic -module -rpath /nowhere

# The basic callout library - contains standard callouts
libbcl_la_SOURCES  = basic_callout_library.cc
libbcl_la_CXXFLAGS = $(AM_CXXFLAGS)
libbcl_la_CPPFLAGS = $(AM_CPPFLAGS)
libbcl_la_LDFLAGS  = -avoid-version -export-dynamic -module -rpath /nowhere

# The load callout library - contains a load function
liblcl_la_SOURCES  = load_callout_library.cc
liblcl_la_CXXFLAGS = $(AM_CXXFLAGS)
liblcl_la_CPPFLAGS = $(AM_CPPFLAGS)
liblcl_la_LDFLAGS  = -avoid-version -export-dynamic -module -rpath /nowhere

# The load error callout library - contains a load function that returns
# an error.
liblecl_la_SOURCES  = load_error_callout_library.cc
liblecl_la_CXXFLAGS = $(AM_CXXFLAGS)
liblecl_la_CPPFLAGS = $(AM_CPPFLAGS)
liblecl_la_LDFLAGS  = -avoid-version -export-dynamic -module -rpath /nowhere

# The unload callout library - contains an unload function that
# creates a marker file.
libucl_la_SOURCES  = unload_callout_library.cc
libucl_la_CXXFLAGS = $(AM_CXXFLAGS)
libucl_la_CPPFLAGS = $(AM_CPPFLAGS)
libucl_la_LDFLAGS  = -avoid-version -export-dynamic -module -rpath /nowhere

# The full callout library - contains all three framework functions.
libfcl_la_SOURCES  = full_callout_library.cc
libfcl_la_CXXFLAGS = $(AM_CXXFLAGS)
libfcl_la_CPPFLAGS = $(AM_CPPFLAGS)
libfcl_la_LDFLAGS  = -avoid-version -export-dynamic -module -rpath /nowhere

# The parameters checking callout library - expects
libpcl_la_SOURCES  = callout_params_library.cc
libpcl_la_CXXFLAGS = $(AM_CXXFLAGS)
libpcl_la_CPPFLAGS = $(AM_CPPFLAGS)
libpcl_la_LDFLAGS  = -avoid-version -export-dynamic -module -rpath /nowhere
libpcl_la_LDFLAGS += $(top_builddir)/src/lib/util/libkea-util.la

# The async callout library - parks object for asynchronous task
libacl_la_SOURCES  = async_callout_library.cc
libacl_la_CXXFLAGS = $(AM_CXXFLAGS)
libacl_la_CPPFLAGS = $(AM_CPPFLAGS)
libacl_la_LDFLAGS  = -avoid-version -export-dynamic -module -rpath /nowhere

TESTS += run_unittests
run_unittests_SOURCES  = run_unittests.cc
run_unittests_SOURCES += callout_handle_unittest.cc
run_unittests_SOURCES += callout_handle_associate_unittest.cc
run_unittests_SOURCES += callout_manager_unittest.cc
run_unittests_SOURCES += common_test_class.h
run_unittests_SOURCES += handles_unittest.cc
run_unittests_SOURCES += hooks_manager_unittest.cc
run_unittests_SOURCES += library_manager_collection_unittest.cc
run_unittests_SOURCES += library_manager_unittest.cc
run_unittests_SOURCES += parking_lots_unittest.cc
run_unittests_SOURCES += server_hooks_unittest.cc

nodist_run_unittests_SOURCES  = marker_file.h
nodist_run_unittests_SOURCES += test_libraries.h

run_unittests_CXXFLAGS  = $(AM_CXXFLAGS)
run_unittests_CPPFLAGS  = $(AM_CPPFLAGS) $(GTEST_INCLUDES)
run_unittests_LDFLAGS   = $(AM_LDFLAGS)  $(GTEST_LDFLAGS)
if USE_STATIC_LINK
run_unittests_LDFLAGS  += -static -export-dynamic
endif

run_unittests_LDADD  = $(AM_LDADD)
run_unittests_LDADD += $(ALL_LIBS)
run_unittests_LDADD += $(top_builddir)/src/lib/cc/libkea-cc.la
run_unittests_LDADD += $(top_builddir)/src/lib/asiolink/libkea-asiolink.la
run_unittests_LDADD += $(top_builddir)/src/lib/util/unittests/libutil_unittests.la
run_unittests_LDADD += $(GTEST_LDADD) $(LOG4CPLUS_LIBS) $(BOOST_LIBS)
# As noted in configure.ac, libtool doesn't work perfectly with Darwin: it
# embeds the final install path in dynamic libraries and loadable modules refer
# to that path even if its loaded within the source tree, so preventing tests
# from working - but only when linking statically.  The solution used in other
# Makefiles (setting the path to the dynamic libraries via an environment
# variable) don't seem to work.  What does work is to run the unit test using
# libtool and specifying paths via -dlopen switches.  So... If running in an
# environment where we have to set the library path AND if linking statically,
# override the "check" target and run the unit tests ourselves.

endif

noinst_PROGRAMS = $(TESTS)

EXTRA_DIST = marker_file.h.in test_libraries.h.in