From 387202d92d75442af53fd339822eaf4c8e86b134 Mon Sep 17 00:00:00 2001 From: Felix Ableitner Date: Tue, 22 Jul 2014 18:01:13 +0200 Subject: [PATCH] Set correct permissions for moved certificates, added missing test changes. --- .../CertificateAdapterTest.java | 10 +++-- .../CertificateManagerTest.java | 41 ++++++++++++++++++- .../MovedCertificatesStorageTest.java | 5 --- .../nutomic/zertman/CertificateManager.java | 1 + .../com/nutomic/zertman/MainActivity.java | 2 - 5 files changed, 47 insertions(+), 12 deletions(-) diff --git a/app/src/androidTest/java/com.nutomic.zertman.test/CertificateAdapterTest.java b/app/src/androidTest/java/com.nutomic.zertman.test/CertificateAdapterTest.java index a34daed..73d5852 100644 --- a/app/src/androidTest/java/com.nutomic.zertman.test/CertificateAdapterTest.java +++ b/app/src/androidTest/java/com.nutomic.zertman.test/CertificateAdapterTest.java @@ -4,8 +4,8 @@ import android.test.AndroidTestCase; import android.test.suitebuilder.annotation.SmallTest; import android.widget.TextView; -import com.nutomic.zertman.Certificate; -import com.nutomic.zertman.CertificateAdapter; +import com.nutomic.zertman.*; +import com.nutomic.zertman.R; import java.util.ArrayList; @@ -19,7 +19,9 @@ public class CertificateAdapterTest extends AndroidTestCase { protected void setUp() throws Exception { super.setUp(); - mCertificateAdapter = new CertificateAdapter(getContext()); + CertificateManager cm = new CertificateManager(); + MovedCertificatesStorage mv = new MovedCertificatesStorage(getContext()); + mCertificateAdapter = new CertificateAdapter(getContext(), cm, mv); mTestCertificates.add(new Certificate("first", false)); mTestCertificates.add(new Certificate("second", true)); mCertificateAdapter.addAll(mTestCertificates); @@ -29,7 +31,7 @@ public class CertificateAdapterTest extends AndroidTestCase { public void testAdapter() { for (int i = 0; i < mTestCertificates.size(); i++) { TextView tv1 = (TextView) mCertificateAdapter.getView(i, null, null) - .findViewById(android.R.id.text1); + .findViewById(R.id.title); assertTrue(tv1.getText().equals(mTestCertificates.get(i).getFile().getName())); } } diff --git a/app/src/androidTest/java/com.nutomic.zertman.test/CertificateManagerTest.java b/app/src/androidTest/java/com.nutomic.zertman.test/CertificateManagerTest.java index 3507c30..99208af 100644 --- a/app/src/androidTest/java/com.nutomic.zertman.test/CertificateManagerTest.java +++ b/app/src/androidTest/java/com.nutomic.zertman.test/CertificateManagerTest.java @@ -3,15 +3,20 @@ package com.nutomic.zertman.test; import android.test.AndroidTestCase; import android.test.suitebuilder.annotation.MediumTest; import android.test.suitebuilder.annotation.SmallTest; +import android.util.Log; import com.nutomic.zertman.Certificate; import com.nutomic.zertman.CertificateManager; +import java.io.BufferedReader; +import java.io.DataInputStream; +import java.io.DataOutputStream; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; +import java.io.InputStreamReader; import java.util.List; import eu.chainfire.libsuperuser.Shell; @@ -51,12 +56,46 @@ public class CertificateManagerTest extends AndroidTestCase { assertNotNull(newCertificate); assertEquals(newCertificate.getFile().getName(), cert.getFile().getName()); assertNotSame(newCertificate.getFile(), cert.getFile()); + assertPermissions(newCertificate.getFile(), "-rw-r--r--"); assertFalse(mCertificateManager.getCertificates(false).contains(cert)); assertTrue(mCertificateManager.getCertificates(true).contains(newCertificate)); assertTrue(mCertificateManager.deleteCertificate(newCertificate)); assertReadOnly(); } + /** + * Asserts that file has the given permissions. + */ + private void assertPermissions(File file, String expectedPermissions) { + Process process; + DataOutputStream dos = null; + InputStreamReader isr = null; + BufferedReader br = null; + try { + process = Runtime.getRuntime().exec("sh"); + dos = new DataOutputStream(process.getOutputStream()); + isr = new InputStreamReader(process.getInputStream()); + dos.writeBytes("ls -l " + file.getAbsolutePath() + "\n"); + dos.writeBytes("exit\n"); + br = new BufferedReader(isr); + assertTrue(br.readLine().startsWith(expectedPermissions)); + dos.flush(); + } + catch (IOException e) { + fail(); + } + finally { + try { + dos.close(); + br.close(); + isr.close(); + } + catch (IOException e) { + fail(); + } + } + } + @SmallTest public void testSystemCertificates() { Certificate cert = copyCertificate(true); @@ -122,4 +161,4 @@ public class CertificateManagerTest extends AndroidTestCase { return null; } -} \ No newline at end of file +} diff --git a/app/src/androidTest/java/com.nutomic.zertman.test/MovedCertificatesStorageTest.java b/app/src/androidTest/java/com.nutomic.zertman.test/MovedCertificatesStorageTest.java index 0c1c8be..1db8151 100644 --- a/app/src/androidTest/java/com.nutomic.zertman.test/MovedCertificatesStorageTest.java +++ b/app/src/androidTest/java/com.nutomic.zertman.test/MovedCertificatesStorageTest.java @@ -31,11 +31,6 @@ public class MovedCertificatesStorageTest extends AndroidTestCase { mMovedCertificatesStorage.close(); } - @SmallTest - public void testInvalidInsert() { - assertFalse(mMovedCertificatesStorage.insert(new Certificate("user", false))); - } - @SmallTest public void testInvalidDelete() { assertFalse(mMovedCertificatesStorage.delete(new Certificate("cert", true))); diff --git a/app/src/main/java/com/nutomic/zertman/CertificateManager.java b/app/src/main/java/com/nutomic/zertman/CertificateManager.java index 224ac1f..712fa4a 100644 --- a/app/src/main/java/com/nutomic/zertman/CertificateManager.java +++ b/app/src/main/java/com/nutomic/zertman/CertificateManager.java @@ -53,6 +53,7 @@ public class CertificateManager { // NOTE: Using mv gives error: "failed on *file* - Cross-device link". run("cp " + USER_CERTIFICATES_DIR + "/" + certificate.getFile().getName() + " " + SYSTEM_CERTIFICATES_DIR + "/" + certificate.getFile().getName()); + run("chmod 644 " + SYSTEM_CERTIFICATES_DIR + "/" + certificate.getFile().getName()); remountSystem(Mode.ReadOnly); deleteCertificate(certificate); return new Certificate(certificate.getFile().getName(), true); diff --git a/app/src/main/java/com/nutomic/zertman/MainActivity.java b/app/src/main/java/com/nutomic/zertman/MainActivity.java index f648e2e..0feb7c2 100644 --- a/app/src/main/java/com/nutomic/zertman/MainActivity.java +++ b/app/src/main/java/com/nutomic/zertman/MainActivity.java @@ -32,8 +32,6 @@ public class MainActivity extends ListActivity { new CertificateAdapter(this, mCertificateManager, mMovedCertificatesStorage); mCertificateAdapter.addAll(mCertificateManager.getCertificates(false)); - // FIXME: nothing listed - // -> db table is empty mCertificateAdapter.addAll(mMovedCertificatesStorage.list()); mListView.setAdapter(mCertificateAdapter); }