From: Igor Fedotov Date: Thu, 2 Jun 2016 09:17:47 +0000 (+0300) Subject: common/bufferlist: Adds test cases for bufferlist::iterator::crc32c X-Git-Tag: v11.0.0~346^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=2322ab87fcd92a74500e20a7465d87e865c6564a;p=ceph.git common/bufferlist: Adds test cases for bufferlist::iterator::crc32c Signed-off-by: Igor Fedotov --- diff --git a/src/common/buffer.cc b/src/common/buffer.cc index 7f725094da60..be6fa65eda5d 100644 --- a/src/common/buffer.cc +++ b/src/common/buffer.cc @@ -1223,6 +1223,7 @@ static simple_spinlock_t buffer_debug_lock = SIMPLE_SPINLOCK_INITIALIZER; uint32_t buffer::list::iterator_impl::crc32c( size_t length, uint32_t crc) { + length = MIN( length, get_remaining()); while (length > 0) { const char *p; size_t l = get_ptr_and_advance(length, &p); diff --git a/src/test/bufferlist.cc b/src/test/bufferlist.cc index e98a6dc2d87e..7b1f9a2dca9a 100644 --- a/src/test/bufferlist.cc +++ b/src/test/bufferlist.cc @@ -1060,6 +1060,42 @@ TEST(BufferListIterator, get_ptr_and_advance) ASSERT_EQ(0u, p.get_remaining()); } +TEST(BufferListIterator, iterator_crc32c) { + bufferlist bl1; + bufferlist bl2; + bufferlist bl3; + + string s1(100, 'a'); + string s2(50, 'b'); + string s3(7, 'c'); + string s; + bl1.append(s1); + bl1.append(s2); + bl1.append(s3); + s = s1 + s2 + s3; + bl2.append(s); + + bufferlist::iterator it = bl2.begin(); + ASSERT_EQ(bl1.crc32c(0), it.crc32c(it.get_remaining(), 0)); + ASSERT_EQ(0u, it.get_remaining()); + + it = bl1.begin(); + ASSERT_EQ(bl2.crc32c(0), it.crc32c(it.get_remaining(), 0)); + + bl3.append(s.substr(98, 55)); + it = bl1.begin(); + it.advance(98); + ASSERT_EQ(bl3.crc32c(0), it.crc32c(55, 0)); + ASSERT_EQ(4u, it.get_remaining()); + + bl3.clear(); + bl3.append(s.substr(98 + 55)); + it = bl1.begin(); + it.advance(98 + 55); + ASSERT_EQ(bl3.crc32c(0), it.crc32c(10, 0)); + ASSERT_EQ(0u, it.get_remaining()); +} + TEST(BufferListIterator, seek) { bufferlist bl; bl.append("ABC", 3);