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

ntimofeev pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cayenne.git


The following commit(s) were added to refs/heads/master by this push:
     new 5cf1b83  Fix test failure on JDK 16
5cf1b83 is described below

commit 5cf1b83e072e97ae8ad4d16de05d92f37ded4896
Author: Nikita Timofeev <stari...@gmail.com>
AuthorDate: Wed Oct 21 19:13:39 2020 +0300

    Fix test failure on JDK 16
---
 .../transformer/bytes/GzipEncryptorTest.java       | 38 +++++++++++++---------
 1 file changed, 23 insertions(+), 15 deletions(-)

diff --git 
a/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/transformer/bytes/GzipEncryptorTest.java
 
b/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/transformer/bytes/GzipEncryptorTest.java
index db7e567..0560f1b 100644
--- 
a/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/transformer/bytes/GzipEncryptorTest.java
+++ 
b/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/transformer/bytes/GzipEncryptorTest.java
@@ -26,11 +26,10 @@ import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
 import java.io.IOException;
-import java.io.UnsupportedEncodingException;
+import java.nio.charset.StandardCharsets;
 
 import org.apache.cayenne.crypto.unit.CryptoUnitUtils;
 import org.junit.Test;
-import org.mockito.invocation.InvocationOnMock;
 import org.mockito.stubbing.Answer;
 
 public class GzipEncryptorTest {
@@ -38,46 +37,55 @@ public class GzipEncryptorTest {
     @Test
     public void testGzip() throws IOException {
 
-        byte[] input1 = "Hello Hello Hello".getBytes("UTF8");
+        byte[] input1 = "Hello Hello Hello".getBytes(StandardCharsets.UTF_8);
         byte[] output1 = GzipEncryptor.gzip(input1);
         byte[] expectedOutput1 = 
CryptoUnitUtils.hexToBytes("1f8b0800000000000000f348cdc9c957f0409000a91a078c11000000");
+
+        // since JDK 16, gzip call sets OS flag to 255, that means "unknown", 
previous versions set this byte to 0
+        // see http://www.zlib.org/rfc-gzip.html spec for gzip header bytes 
details
+        if(output1.length > 8 && output1[9] == -1) {
+            output1[9] = 0;
+        }
+
         assertArrayEquals(expectedOutput1, output1);
     }
 
     @Test
-    public void testEncrypt() throws UnsupportedEncodingException {
+    public void testEncrypt() {
 
         BytesEncryptor delegate = mock(BytesEncryptor.class);
-        when(delegate.encrypt(any(byte[].class), anyInt(), 
any(byte[].class))).thenAnswer(new Answer<byte[]>() {
-            @Override
-            public byte[] answer(InvocationOnMock invocation) throws Throwable 
{
-                Object[] args = invocation.getArguments();
+        when(delegate.encrypt(any(byte[].class), anyInt(), 
any(byte[].class))).thenAnswer((Answer<byte[]>) invocation -> {
+            Object[] args = invocation.getArguments();
 
-                byte[] answer = (byte[]) args[0];
-                int offset = (Integer) args[1];
+            byte[] answer = (byte[]) args[0];
+            int offset = (Integer) args[1];
 
-                assertEquals(1, offset);
+            assertEquals(1, offset);
 
-                return answer;
-            }
+            return answer;
         });
 
         GzipEncryptor e = new GzipEncryptor(delegate);
 
-        byte[] input1 = "Hello Hello Hello".getBytes("UTF8");
+        byte[] input1 = "Hello Hello Hello".getBytes(StandardCharsets.UTF_8);
         byte[] output1 = e.encrypt(input1, 1, new byte[1]);
         byte[] expectedOutput1 = input1;
 
         assertArrayEquals(expectedOutput1, output1);
 
         byte[] input2 = ("Hello AAAAA Hello AAAAA Hello AAAAA Hello AAAAA 
Hello AAAAA Hello AAAAA Hello "
-                + "Hello AAAAA Hello AAAAA Hello AAAAA Hello AAAAA Hello AAAAA 
Hello AAAAA Hello").getBytes("UTF8");
+                + "Hello AAAAA Hello AAAAA Hello AAAAA Hello AAAAA Hello AAAAA 
Hello AAAAA Hello").getBytes(StandardCharsets.UTF_8);
         byte[] output2 = e.encrypt(input2, 1, new byte[1]);
 
         // somehow 'gzip -c' fills bytes 3..9 with values... the rest of the
         // gzip string is identical...
         byte[] expectedOutput2 = CryptoUnitUtils
                 
.hexToBytes("1f8b0800000000000000f348cdc9c957700401050f8ad9949b80c40600bbec62509b000000");
+        // since JDK 16, gzip call sets OS flag to 255, that means "unknown", 
previous versions set this byte to 0
+        // see http://www.zlib.org/rfc-gzip.html spec for gzip header bytes 
details
+        if(output2.length > 8 && output2[9] == -1) {
+            output2[9] = 0;
+        }
 
         assertArrayEquals(expectedOutput2, output2);
 

Reply via email to