LearnBitcoin

Bitcoin Dev Archive 2011

Unit tests

3 messages, 31 Jul 2011. Started by John Smith.

John Smith (2), Matt Corallo

Permalink Original thread on gnusha.org

John Smith permalink original

Oops, should have gone to the list

On Sat, Jul 30, 2011 at 2:07 PM, Matt Corallo <bitcoin-list@bluematt•me>wrote:

Quoted text (14 lines)
> On Sat, 2011-07-30 at 07:06 -0700, Rick Wesson wrote:
> > +1
> >
> > Putting a bounty on the test framework might put some loose change to
> work.
> >
> > http://code.google.com/p/googletest/ would be my choice
> >
> > the list of c++ frameworks is at
> > http://en.wikipedia.org/wiki/List_of_unit_testing_frameworks#C.2B.2B
>
> We already have boost testing framework implemented, it just doesn't
> have many tests.
>

BTW, talking about the unit testframework: It doesn't build here by default:

$ make -f makefile.unix test_bitcoin USE_UPNP=

g++ -static -o test_bitcoin obj/test/test_bitcoin.o -Wl,-Bstatic -l boost_system -l boost_filesystem -l boost_program_options -l boost_thread -l db_cxx -l ssl -l crypto -Wl,-Bdynamic -l gthread-2.0 -l z -l dl -l pthread -lboost_unit_test_framework /usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../../lib/crt1.o: In function `_start': (.text+0x20): undefined reference to `main' collect2: ld returned 1 exit status make: *** [test_bitcoin] Error 1

Two ways to fix this:

1) Add #define BOOST_TEST_DYN_LINK to the top of test_bitcoin.cpp. This is needed for dynamic linking.

2) Link boost_unit_test_framework statically
test_bitcoin: obj/test/test_bitcoin.o
        $(CXX) $(CFLAGS) -o $@ $(LIBPATHS) $^ $(LIBS) -Wl,-Bstatic
-lboost_unit_test_framework -Wl,-Bdynamic

(yes, it needs the switch to dynamic again at the end, otherwise libgcc will be linked statically which results in an error ...)

JS

Matt Corallo in reply to John Smith permalink original

On Sun, 2011-07-31 at 11:21 +0000, John Smith wrote:

Quoted text (31 lines)
>
> BTW, talking about the unit testframework: It doesn't build here by
> default:
>
> $ make -f makefile.unix test_bitcoin  USE_UPNP=
>
> g++ -static  -o test_bitcoin  obj/test/test_bitcoin.o -Wl,-Bstatic -l
> boost_system -l boost_filesystem -l boost_program_options -l
> boost_thread -l db_cxx -l ssl -l crypto -Wl,-Bdynamic -l gthread-2.0
> -l z -l dl -l pthread -lboost_unit_test_framework
> /usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../../lib/crt1.o: In
> function `_start':
> (.text+0x20): undefined reference to `main'
> collect2: ld returned 1 exit status
> make: *** [test_bitcoin] Error 1
>
> Two ways to fix this:
>
> 1) Add #define BOOST_TEST_DYN_LINK  to the top of test_bitcoin.cpp.
> This is needed for dynamic linking.
>
> 2) Link boost_unit_test_framework statically
>
> test_bitcoin: obj/test/test_bitcoin.o
>         $(CXX) $(CFLAGS) -o $@ $(LIBPATHS) $^ $(LIBS) -Wl,-Bstatic
> -lboost_unit_test_framework -Wl,-Bdynamic
>
> (yes, it needs the switch to dynamic again at the end, otherwise
> libgcc will be linked statically which results in an error ...)
>
> JS

See pull 363 and 442 :)

Matt

John Smith in reply to Matt Corallo permalink original
Quoted text (3 lines)
>
> See pull 363 and 442 :)
>

Great. I really hope these get pulled ASAP, having the tests all over the place in different forks is really confusing :(

JS