This is an automated email from the ASF dual-hosted git repository.

blerer pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/cassandra.git


The following commit(s) were added to refs/heads/trunk by this push:
     new d0cfd0d  Fix ValueAccessorTest.testSlice flakiness
d0cfd0d is described below

commit d0cfd0d9d93b77718e7403c3372e27b25e955e60
Author: Benjamin Lerer <[email protected]>
AuthorDate: Mon Mar 15 13:37:31 2021 +0100

    Fix ValueAccessorTest.testSlice flakiness
    
    patch by Benjamin Lerer; reviewed by Andrés de la Peña and Berenguer Blasi
    for CASSANDRA-16516
---
 .../cassandra/db/marshal/ValueAccessorTest.java    | 39 ++++++++++++++--------
 1 file changed, 26 insertions(+), 13 deletions(-)

diff --git a/test/unit/org/apache/cassandra/db/marshal/ValueAccessorTest.java 
b/test/unit/org/apache/cassandra/db/marshal/ValueAccessorTest.java
index d53d9c7..5a9760e 100644
--- a/test/unit/org/apache/cassandra/db/marshal/ValueAccessorTest.java
+++ b/test/unit/org/apache/cassandra/db/marshal/ValueAccessorTest.java
@@ -81,13 +81,13 @@ public class ValueAccessorTest extends ValueAccessorTester
             .checkAssert(ValueAccessorTest::testHashCodeAndEquals);
     }
 
-    private static <V> void testSlice(ValueAccessor<V> accessor, byte[] 
rawBytes, Slice slice, int padding)
+    private static <V> void testSlice(ValueAccessor<V> accessor, 
ByteArraySlice slice, int padding)
     {
-        V value = leftPad(accessor.valueOf(rawBytes), padding);
+        V value = leftPad(accessor.valueOf(slice.originalArray), padding);
         V s = accessor.slice(value, slice.offset, slice.length);
 
         byte[] array = accessor.toArray(s);
-        byte[] expected = Arrays.copyOfRange(rawBytes, slice.offset, 
slice.offset + slice.length);
+        byte[] expected = slice.toArray();
         Assert.assertArrayEquals(expected, array);
     }
 
@@ -95,10 +95,8 @@ public class ValueAccessorTest extends ValueAccessorTester
     public void testSlice()
     {
         qt().forAll(accessors(),
-                    byteArrays(integers().between(2, 200)),
-                    slices(integers().between(2, 100), integers().between(1, 
30)),
+                    slices(byteArrays(integers().between(2, 200))),
                     bbPadding())
-            .assuming((a, r, s, p) -> s.isValidFor(r))
             .checkAssert(ValueAccessorTest::testSlice);
     }
 
@@ -220,14 +218,25 @@ public class ValueAccessorTest extends ValueAccessorTester
                     integers().between(0, 
3)).checkAssert(ValueAccessorTest::testUnsignedShort);
     }
 
-    public static Gen<Slice> slices(Gen<Integer> offsets, Gen<Integer> lengths)
+    private static Gen<ByteArraySlice> slices(Gen<byte[]> arrayGen)
     {
-        return offsets.zip(lengths, (o, l) -> new Slice(o, l));
+        return td -> {
+            byte[] array = arrayGen.generate(td);
+            int arrayLength = array.length;
+            int offset = integers().between(0, arrayLength - 1).generate(td);
+            int length = integers().between(0, arrayLength - offset - 
1).generate(td);
+            return new ByteArraySlice(array, offset, length);
+        };
     }
 
-    private static final class Slice
+    private static final class ByteArraySlice
     {
         /**
+         * The original array
+         */
+        final byte[] originalArray;
+
+        /**
          * The slice offset;
          */
         final int offset;
@@ -237,21 +246,25 @@ public class ValueAccessorTest extends ValueAccessorTester
          */
         final int length;
 
-        public Slice(int offset, int length)
+        public ByteArraySlice(byte[] bytes, int offset, int length)
         {
+            this.originalArray = bytes;
             this.offset = offset;
             this.length = length;
         }
 
-        public boolean isValidFor(byte[] array)
+        /**
+         * Returns the silce as a byte array.
+         */
+        public byte[] toArray()
         {
-            return offset < array.length && offset + length < array.length;
+            return Arrays.copyOfRange(originalArray, offset, offset + length);
         }
 
         @Override
         public String toString()
         {
-            return "Slice [offset=" + offset + ", length=" + length + "]";
+            return "Byte Array Slice [array=" + Arrays.toString(originalArray) 
+ ", offset=" + offset + ", length=" + length + "]";
         }
     }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to