]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
unittest_cdc: generate fragmented buffers
authorSage Weil <sage@newdream.net>
Sat, 16 May 2020 15:00:29 +0000 (10:00 -0500)
committerSage Weil <sage@newdream.net>
Wed, 27 May 2020 12:47:28 +0000 (07:47 -0500)
Signed-off-by: Sage Weil <sage@newdream.net>
src/test/common/test_cdc.cc

index b34ecac3f3b379484205d8bd0b0a81fe8e42d337..00187804fb17926fb5d595cb24813844f60ad399 100644 (file)
 
 void generate_buffer(int size, bufferlist *outbl, int seed = 0)
 {
-  outbl->clear();
-  outbl->append_zero(size);
-  char *b = outbl->c_str();
-  std::mt19937_64 engine;
+  std::mt19937_64 engine, engine2;
   engine.seed(seed);
-  for (size_t i = 0; i < size / sizeof(uint64_t); ++i) {
-    ((uint64_t*)b)[i] = engine();
+  engine2.seed(seed);
+
+  // assemble from randomly-sized segments!
+  outbl->clear();
+  auto left = size;
+  while (left) {
+    size_t l = std::min<size_t>((engine2() & 0xffff0) + 16, left);
+    left -= l;
+    bufferptr p(l);
+    p.set_length(l);
+    char *b = p.c_str();
+    for (size_t i = 0; i < l / sizeof(uint64_t); ++i) {
+      ((uint64_t*)b)[i] = engine();
+    }
+    outbl->append(p);
   }
 }