Эх сурвалжийг харах

Fix test

Signed-off-by: alperozturk <alper_ozturk@proton.me>
alperozturk 1 жил өмнө
parent
commit
99f7b672d8

+ 31 - 26
app/src/androidTest/java/com/owncloud/android/util/EncryptionTestIT.java

@@ -43,6 +43,7 @@ import com.owncloud.android.lib.resources.e2ee.CsrHelper;
 import com.owncloud.android.utils.EncryptionUtils;
 
 import org.apache.commons.codec.binary.Hex;
+import org.junit.Assert;
 import org.junit.Rule;
 import org.junit.Test;
 
@@ -51,9 +52,11 @@ import java.io.FileInputStream;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.math.BigInteger;
+import java.security.DigestInputStream;
 import java.security.KeyPair;
 import java.security.KeyPairGenerator;
 import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
 import java.security.PrivateKey;
 import java.security.SecureRandom;
 import java.security.interfaces.RSAPrivateCrtKey;
@@ -100,6 +103,8 @@ public class EncryptionTestIT extends AbstractIT {
 
     ArbitraryDataProvider arbitraryDataProvider = new ArbitraryDataProviderImpl(targetContext);
 
+    private static final String MD5_ALGORITHM = "MD5";
+
     public static final String privateKey = "MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAo" +
         "IBAQDsn0JKS/THu328z1IgN0VzYU53HjSX03WJIgWkmyTaxbiKpoJaKbksXmfSpgzV" +
         "GzKFvGfZ03fwFrN7Q8P8R2e8SNiell7mh1TDw9/0P7Bt/ER8PJrXORo+GviKHxaLr7" +
@@ -842,11 +847,10 @@ public class EncryptionTestIT extends AbstractIT {
         return new DecryptedFolderMetadataFileV1(metadata1, files);
     }
 
-    // FIXME
     private boolean cryptFile(String fileName, String md5, byte[] key, byte[] iv)
         throws Exception {
         File file = File.createTempFile(fileName, "enc");
-        assertEquals(md5, getMD5Sum(file));
+        String md5BeforeEncryption = getMD5Sum(file);
 
         // Encryption
         Cipher encryptorCipher = EncryptionUtils.getCipher(Cipher.ENCRYPT_MODE, key, iv);
@@ -858,35 +862,36 @@ public class EncryptionTestIT extends AbstractIT {
         File decryptedFile = File.createTempFile("file", "dec");
         decryptFile(decryptorCipher, file, decryptedFile, encryptorCipherAuthTag, new ArbitraryDataProviderImpl(targetContext), user);
 
-        return md5.compareTo(getMD5Sum(decryptedFile)) == 0;
-    }
-
-    private String getMD5Sum(File file) {
-        FileInputStream fileInputStream = null;
-        try {
-            fileInputStream = new FileInputStream(file);
-            MessageDigest md5 = MessageDigest.getInstance("MD5");
-            byte[] bytes = new byte[2048];
-            int readBytes;
+        String md5AfterEncryption = getMD5Sum(decryptedFile);
 
-            while ((readBytes = fileInputStream.read(bytes)) != -1) {
-                md5.update(bytes, 0, readBytes);
-            }
+        if (md5BeforeEncryption == null) {
+            Assert.fail();
+        }
 
-            return new String(Hex.encodeHex(md5.digest()));
+        return md5BeforeEncryption.equals(md5AfterEncryption);
+    }
 
-        } catch (Exception e) {
-            Log_OC.e(this, e.getMessage());
-        } finally {
-            if (fileInputStream != null) {
-                try {
-                    fileInputStream.close();
-                } catch (IOException e) {
-                    Log_OC.e(this, "Error getting MD5 checksum for file", e);
-                }
+    public static String getMD5Sum(File file) {
+        try (FileInputStream fis = new FileInputStream(file)) {
+            MessageDigest md = MessageDigest.getInstance(MD5_ALGORITHM);
+            DigestInputStream dis = new DigestInputStream(fis, md);
+            byte[] buffer = new byte[4096];
+            int bytesRead;
+            while ((bytesRead = dis.read(buffer)) != -1) {
+                md.update(buffer, 0, bytesRead);
             }
+            byte[] digest = md.digest();
+            return bytesToHex(digest);
+        } catch (IOException | NoSuchAlgorithmException e) {
+            return null;
         }
+    }
 
-        return "";
+    private static String bytesToHex(byte[] bytes) {
+        StringBuilder sb = new StringBuilder();
+        for (byte b : bytes) {
+            sb.append(String.format("%02x", b));
+        }
+        return sb.toString();
     }
 }