]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
common/bufferlist: Adds test cases for bufferlist::iterator::crc32c
authorIgor Fedotov <ifedotov@mirantis.com>
Thu, 2 Jun 2016 09:17:47 +0000 (12:17 +0300)
committerIgor Fedotov <ifedotov@mirantis.com>
Thu, 2 Jun 2016 09:17:47 +0000 (12:17 +0300)
Signed-off-by: Igor Fedotov <ifedotov@mirantis.com>
src/common/buffer.cc
src/test/bufferlist.cc

index 7f725094da60532d216a7aa8894e63e5ca924374..be6fa65eda5d44aed4b38d7c38f8ea8d84f49523 100644 (file)
@@ -1223,6 +1223,7 @@ static simple_spinlock_t buffer_debug_lock = SIMPLE_SPINLOCK_INITIALIZER;
   uint32_t buffer::list::iterator_impl<is_const>::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);
index e98a6dc2d87e82940a8b270b4cec7422e6981702..7b1f9a2dca9a4d06c759b36933f5c4b3230df138 100644 (file)
@@ -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);