mirror of
https://github.com/ceph/ceph
synced 2025-03-01 14:03:04 +00:00
unit tests for src/common/buffer.{cc,h}
Implement unit tests covering most lines of code ( > 92% ) and all methods as show by the output of make check-coverage : http://dachary.org/wp-uploads/2013/03/ceph-lcov/ . The following static constructors are implemented by opaque classes defined in buffer.cc ( buffer::raw_char, buffer::raw_posix_aligned etc. ). Testing the implementation of these classes is done by variations of the calls to the static constructors. copy(const char *c, unsigned len); create(unsigned len); claim_char(unsigned len, char *buf); create_malloc(unsigned len); claim_malloc(unsigned len, char *buf); create_static(unsigned len, char *buf); create_page_aligned(unsigned len); The raw_mmap_pages class cannot be tested because it is commented out in raw_posix_aligned. The raw_hack_aligned class is only tested under Cygwin. The raw_posix_aligned class is not tested under Cygwin. The unittest_bufferlist.sh script calls unittest_bufferlist with the CEPH_BUFFER_TRACK=true environment variable to enable the code tracking the memory usage. It cannot be done within the bufferlist.cc file itself because it relies on the initialization of a global variable ( buffer_track_alloc ). When raw_posix_aligned is called on DARWIN, the data is not aligned on CEPH_PAGE_SIZE because it calls valloc(size) which is the equivalent of memalign(sysconf(_SC_PAGESIZE),size) and not memalign(CEPH_PAGE_SIZE,size). For this reason the alignment test is de-activated on DARWIN. The tests are grouped in TEST(BufferPtr, ... ) for buffer::ptr TEST(BufferListIterator, ...) for buffer::list::iterator TEST(BufferList, ...) for buffer::list TEST(BufferHash, ...) for buffer::hash and each method ( and all variations of the prototype ) are included into a single TEST() function. Although most aspects of the methods are tested, including exceptions and border cases, inconsistencies are not highlighted . For instance buffer::list::iterator i; i.advance(1); would dereference a buffer::raw NULL pointer although buffer::ptr p; p.wasted() asserts instead of dereferencing the buffer::raw NULL pointer. It would be better to always assert in case a NULL pointer is about to be used. But this is a minor inconsistency that is probably not worth a test. The following buffer::list methods ssize_t read_fd(int fd, size_t len); int write_fd(int fd) const; are not fully tested because the border cases cannot be reliably reproduced. Going thru a pointer indirection when calling the ::writev or safe_read functions would allow the test to create mockups to synthetize the conditions for border cases. tracker.ceph.com/issues/4066 refs #4066 Signed-off-by: Loic Dachary <loic@dachary.org>
This commit is contained in:
parent
94e7c14847
commit
fb472a57c6
@ -19,7 +19,8 @@ EXTRA_DIST = \
|
||||
libs3/libs3.spec \
|
||||
libs3/mswin \
|
||||
libs3/src \
|
||||
libs3/test
|
||||
libs3/test \
|
||||
unittest_bufferlist.sh
|
||||
|
||||
CLEANFILES =
|
||||
bin_PROGRAMS =
|
||||
@ -38,7 +39,7 @@ check_PROGRAMS =
|
||||
# tests to actually run on "make check"; if you need extra, non-test,
|
||||
# executables built, you need to replace this with manual assignments
|
||||
# target by target
|
||||
TESTS = $(check_PROGRAMS)
|
||||
TESTS = $(check_PROGRAMS) unittest_bufferlist.sh
|
||||
|
||||
check-local:
|
||||
$(srcdir)/test/encoding/check-generated.sh
|
||||
|
File diff suppressed because it is too large
Load Diff
19
src/unittest_bufferlist.sh
Executable file
19
src/unittest_bufferlist.sh
Executable file
@ -0,0 +1,19 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Ceph - scalable distributed file system
|
||||
#
|
||||
# Copyright (C) 2013 Cloudwatt <libre.licensing@cloudwatt.com>
|
||||
#
|
||||
# Author: Loic Dachary <loic@dachary.org>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Library Public License as published by
|
||||
# the Free Software Foundation; either version 2, or (at your option)
|
||||
# any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Library Public License for more details.
|
||||
#
|
||||
CEPH_BUFFER_TRACK=true ./unittest_bufferlist
|
Loading…
Reference in New Issue
Block a user