From 76eb39b8c681e413a1ec4135b2949f3984b1aa0c Mon Sep 17 00:00:00 2001 From: Connor Tumbleson Date: Wed, 10 Aug 2016 09:24:48 -0400 Subject: [PATCH] Add passing unit-test for #1298 --- .../brut/androlib/UnknownCompressionTest.java | 95 ++++++++++++++++++ .../unknown_compression/deflated_unknowns.apk | Bin 0 -> 33072 bytes 2 files changed, 95 insertions(+) create mode 100644 brut.apktool/apktool-lib/src/test/java/brut/androlib/UnknownCompressionTest.java create mode 100644 brut.apktool/apktool-lib/src/test/resources/brut/apktool/unknown_compression/deflated_unknowns.apk diff --git a/brut.apktool/apktool-lib/src/test/java/brut/androlib/UnknownCompressionTest.java b/brut.apktool/apktool-lib/src/test/java/brut/androlib/UnknownCompressionTest.java new file mode 100644 index 00000000..f7d1875e --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/java/brut/androlib/UnknownCompressionTest.java @@ -0,0 +1,95 @@ +/** + * Copyright 2014 Ryszard Wiśniewski + * Copyright 2016 Connor Tumbleson + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package brut.androlib; + +import brut.androlib.res.util.ExtFile; +import brut.common.BrutException; +import brut.util.OS; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; + +import java.io.File; +import java.io.IOException; +import java.util.logging.Logger; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotSame; + +/** + * @author Connor Tumbleson + */ +public class UnknownCompressionTest { + + @BeforeClass + public static void beforeClass() throws Exception, BrutException { + TestUtils.cleanFrameworkFile(); + sTmpDir = new ExtFile(OS.createTempDirectory()); + TestUtils.copyResourceDir(LargeIntsInManifestTest.class, "brut/apktool/unknown_compression/", sTmpDir); + + String apk = "deflated_unknowns.apk"; + ApkOptions apkOptions = new ApkOptions(); + apkOptions.frameworkFolderLocation = sTmpDir.getAbsolutePath(); + + sOriginalFile = new ExtFile(sTmpDir, apk); + + // decode deflated_unknowns.apk + ApkDecoder apkDecoder = new ApkDecoder(sOriginalFile); + apkDecoder.setOutDir(new File(sOriginalFile.getAbsolutePath() + ".out")); + apkDecoder.decode(); + + // build deflated_unknowns + ExtFile clientApkFolder = new ExtFile(sOriginalFile.getAbsolutePath() + ".out"); + new Androlib(apkOptions).build(clientApkFolder, null); + sBuiltFile = new ExtFile(clientApkFolder, "dist" + File.separator + apk); + + } + + @AfterClass + public static void afterClass() throws BrutException { + OS.rmdir(sTmpDir); + } + + @Test + public void pkmExtensionDeflatedTest() throws BrutException, IOException { + Integer control = sOriginalFile.getDirectory().getCompressionLevel("assets/bin/Data/test.pkm"); + Integer rebuilt = sBuiltFile.getDirectory().getCompressionLevel("assets/bin/Data/test.pkm"); + + // Check that control = rebuilt (both deflated) + // Add extra check for checking not equal to 0, just in case control gets broken + assertEquals(control, rebuilt); + assertNotSame(0, rebuilt); + } + + @Test + public void doubleExtensionStoredTest() throws BrutException, IOException { + Integer control = sOriginalFile.getDirectory().getCompressionLevel("assets/bin/Data/two.extension.file"); + Integer rebuilt = sBuiltFile.getDirectory().getCompressionLevel("assets/bin/Data/two.extension.file"); + + // Check that control = rebuilt (both stored) + // Add extra check for checking = 0 to enforce check for stored just in case control breaks + assertEquals(control, rebuilt); + assertEquals(new Integer(0), rebuilt); + } + + private static ExtFile sTmpDir; + + private static ExtFile sOriginalFile; + private static ExtFile sBuiltFile; + + private final static Logger LOGGER = Logger.getLogger(BuildAndDecodeJarTest.class.getName()); +} \ No newline at end of file diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/unknown_compression/deflated_unknowns.apk b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/unknown_compression/deflated_unknowns.apk new file mode 100644 index 0000000000000000000000000000000000000000..2ec5db2d68b0bb9cd75824cb54173b210539a6cd GIT binary patch literal 33072 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