src/backend/access/gin unit testsThe unit tests for src/backend/access/gin run differently from most other unit tests of backend modules.
Usually, backend modules' unit tests use src/backend/mock.mk file to provide test executables with mocks of most backend objects (e.g. palloc).
However, the named objects are quite dependant on each other. In order to provide a unified build script for all unit test cases, src/backend/mock.mk includes almost (see details in the mentioned file) all backend objects.
This behaviour makes every unit test case quite dependant on the rest of the backend. On the other hand, it provides a convenient backend unit testing framework.
src/backend/access/gin unit testsThe unit test mocks the functions of backend it uses (see ginpostinglist_fakes.c) and is not dependant on other parts of the backend. For this reason, it uses a custom test Makefile.
In order to expand the test suite, the Makefile may be expanded. To add a new test, one can use an existing target ginpostinglist.t as an example. Its definition is:
ginpostinglist.t: $(CMOCKERY_OBJS) $(top_srcdir)/$(subdir)/ginpostinglist.o $(CC) $(CFLAGS) $(LDFLAGS) $(CPPFLAGS) \ $(CMOCKERY_OBJS) \ $(top_srcdir)/$(subdir)/ginpostinglist.o \ ginpostinglist_fakes.c \ ginpostinglist_test.c \ -o ginpostinglist.t
In this definition:
$(CMOCKERY_OBJS) is a set of cmockery object files. The test target both depends on them, and links them to build an executable;$(top_srcdir)/$(subdir)/ginpostinglist.o is an object file whose functions are under test. The test target both depends on this file and links it to build an executable;ginpostinglist_fakes.c is a file with mocks specific for this particular unit tests;ginpostinglist_test.c is a test case file.The check target should list all unit test executables both as dependencies and as files to be executed.