diff options
Diffstat (limited to 'updater_sample/tests')
7 files changed, 371 insertions, 0 deletions
diff --git a/updater_sample/tests/Android.mk b/updater_sample/tests/Android.mk new file mode 100644 index 000000000..1ec68b9f3 --- /dev/null +++ b/updater_sample/tests/Android.mk @@ -0,0 +1,32 @@ +# +# Copyright (C) 2018 The Android Open Source Project +# +# 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. +# + +LOCAL_PATH := $(call my-dir) +include $(CLEAR_VARS) + +LOCAL_PACKAGE_NAME := SystemUpdaterSampleTests +LOCAL_SDK_VERSION := system_current +LOCAL_MODULE_TAGS := tests +LOCAL_JAVA_LIBRARIES := \ + android.test.runner \ + android.test.base +LOCAL_STATIC_JAVA_LIBRARIES := android-support-test +LOCAL_INSTRUMENTATION_FOR := SystemUpdaterSample +LOCAL_PROGUARD_ENABLED := disabled + +LOCAL_SRC_FILES := $(call all-subdir-java-files) + +include $(BUILD_PACKAGE) diff --git a/updater_sample/tests/AndroidManifest.xml b/updater_sample/tests/AndroidManifest.xml new file mode 100644 index 000000000..2392bb3af --- /dev/null +++ b/updater_sample/tests/AndroidManifest.xml @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2018 The Android Open Source Project + + 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. +--> + +<manifest xmlns:android="http://schemas.android.com/apk/res/android" + package="com.example.android.systemupdatersample.tests"> + + <!-- We add an application tag here just so that we can indicate that + this package needs to link against the android.test library, + which is needed when building test cases. --> + <application> + <uses-library android:name="android.test.runner" /> + </application> + + <instrumentation android:name="android.support.test.runner.AndroidJUnitRunner" + android:targetPackage="com.example.android.systemupdatersample" + android:label="Tests for SystemUpdaterSample."/> + +</manifest> diff --git a/updater_sample/tests/build.properties b/updater_sample/tests/build.properties new file mode 100644 index 000000000..e0c39def1 --- /dev/null +++ b/updater_sample/tests/build.properties @@ -0,0 +1 @@ +tested.project.dir=.. diff --git a/updater_sample/tests/src/com/example/android/systemupdatersample/UpdateConfigTest.java b/updater_sample/tests/src/com/example/android/systemupdatersample/UpdateConfigTest.java new file mode 100644 index 000000000..87153715e --- /dev/null +++ b/updater_sample/tests/src/com/example/android/systemupdatersample/UpdateConfigTest.java @@ -0,0 +1,79 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * 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 com.example.android.systemupdatersample; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertSame; + +import android.support.test.filters.SmallTest; +import android.support.test.runner.AndroidJUnit4; + +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.junit.runner.RunWith; + +/** + * Tests for {@link UpdateConfig} + */ +@RunWith(AndroidJUnit4.class) +@SmallTest +public class UpdateConfigTest { + + private static final String JSON_NON_STREAMING = + "{\"name\": \"vip update\", \"url\": \"file:///builds/a.zip\", " + + " \"type\": \"NON_STREAMING\"}"; + + private static final String JSON_STREAMING = + "{\"name\": \"vip update 2\", \"url\": \"http://foo.bar/a.zip\", " + + "\"type\": \"STREAMING\"}"; + + @Rule + public final ExpectedException thrown = ExpectedException.none(); + + @Test + public void fromJson_parsesJsonConfigWithoutMetadata() throws Exception { + UpdateConfig config = UpdateConfig.fromJson(JSON_NON_STREAMING); + assertEquals("name is parsed", "vip update", config.getName()); + assertEquals("stores raw json", JSON_NON_STREAMING, config.getRawJson()); + assertSame("type is parsed", UpdateConfig.TYPE_NON_STREAMING, config.getInstallType()); + assertEquals("url is parsed", "file:///builds/a.zip", config.getUrl()); + } + + @Test + public void getUpdatePackageFile_throwsErrorIfStreaming() throws Exception { + UpdateConfig config = UpdateConfig.fromJson(JSON_STREAMING); + thrown.expect(RuntimeException.class); + config.getUpdatePackageFile(); + } + + @Test + public void getUpdatePackageFile_throwsErrorIfNotAFile() throws Exception { + String json = "{\"name\": \"upd\", \"url\": \"http://foo.bar\"," + + " \"type\": \"NON_STREAMING\"}"; + UpdateConfig config = UpdateConfig.fromJson(json); + thrown.expect(RuntimeException.class); + config.getUpdatePackageFile(); + } + + @Test + public void getUpdatePackageFile_works() throws Exception { + UpdateConfig c = UpdateConfig.fromJson(JSON_NON_STREAMING); + assertEquals("correct path", "/builds/a.zip", c.getUpdatePackageFile().getAbsolutePath()); + } + +} diff --git a/updater_sample/tests/src/com/example/android/systemupdatersample/ui/MainActivityTest.java b/updater_sample/tests/src/com/example/android/systemupdatersample/ui/MainActivityTest.java new file mode 100644 index 000000000..01014168a --- /dev/null +++ b/updater_sample/tests/src/com/example/android/systemupdatersample/ui/MainActivityTest.java @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * 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 com.example.android.systemupdatersample.ui; + +import static org.junit.Assert.assertNotNull; + +import android.support.test.filters.MediumTest; +import android.support.test.rule.ActivityTestRule; +import android.support.test.runner.AndroidJUnit4; + +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; + +/** + * Make sure that the main launcher activity opens up properly, which will be + * verified by {@link #activityLaunches}. + */ +@RunWith(AndroidJUnit4.class) +@MediumTest +public class MainActivityTest { + + @Rule + public final ActivityTestRule<MainActivity> mActivityRule = + new ActivityTestRule<>(MainActivity.class); + + /** + * Verifies that the activity under test can be launched. + */ + @Test + public void activityLaunches() { + assertNotNull(mActivityRule.getActivity()); + } +} diff --git a/updater_sample/tests/src/com/example/android/systemupdatersample/util/PayloadSpecsTest.java b/updater_sample/tests/src/com/example/android/systemupdatersample/util/PayloadSpecsTest.java new file mode 100644 index 000000000..6f06ca3e1 --- /dev/null +++ b/updater_sample/tests/src/com/example/android/systemupdatersample/util/PayloadSpecsTest.java @@ -0,0 +1,117 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * 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 com.example.android.systemupdatersample.util; + +import static com.example.android.systemupdatersample.util.PackagePropertyFiles.PAYLOAD_BINARY_FILE_NAME; +import static com.example.android.systemupdatersample.util.PackagePropertyFiles.PAYLOAD_PROPERTIES_FILE_NAME; + +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; + +import android.content.Context; +import android.support.test.InstrumentationRegistry; +import android.support.test.filters.SmallTest; +import android.support.test.runner.AndroidJUnit4; + +import com.example.android.systemupdatersample.PayloadSpec; + +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.junit.runner.RunWith; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.util.zip.CRC32; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; + +/** + * Tests if PayloadSpecs parses update package zip file correctly. + */ +@RunWith(AndroidJUnit4.class) +@SmallTest +public class PayloadSpecsTest { + + private static final String PROPERTIES_CONTENTS = "k1=val1\nkey2=val2"; + private static final String PAYLOAD_CONTENTS = "hello\nworld"; + private static final int PAYLOAD_SIZE = PAYLOAD_CONTENTS.length(); + + private File mTestDir; + + private Context mContext; + + @Rule + public final ExpectedException thrown = ExpectedException.none(); + + @Before + public void setUp() { + mContext = InstrumentationRegistry.getTargetContext(); + + mTestDir = mContext.getFilesDir(); + } + + @Test + public void forNonStreaming_works() throws Exception { + File packageFile = createMockZipFile(); + PayloadSpec spec = PayloadSpecs.forNonStreaming(packageFile); + + assertEquals("correct url", "file://" + packageFile.getAbsolutePath(), spec.getUrl()); + assertEquals("correct payload offset", + 30 + PAYLOAD_BINARY_FILE_NAME.length(), spec.getOffset()); + assertEquals("correct payload size", PAYLOAD_SIZE, spec.getSize()); + assertArrayEquals("correct properties", + new String[]{"k1=val1", "key2=val2"}, spec.getProperties().toArray(new String[0])); + } + + @Test + public void forNonStreaming_IOException() throws Exception { + thrown.expect(IOException.class); + PayloadSpecs.forNonStreaming(new File("/fake/news.zip")); + } + + /** + * Creates package zip file that contains payload.bin and payload_properties.txt + */ + private File createMockZipFile() throws IOException { + File testFile = new File(mTestDir, "test.zip"); + try (ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(testFile))) { + // Add payload.bin entry. + ZipEntry entry = new ZipEntry(PAYLOAD_BINARY_FILE_NAME); + entry.setMethod(ZipEntry.STORED); + entry.setCompressedSize(PAYLOAD_SIZE); + entry.setSize(PAYLOAD_SIZE); + CRC32 crc = new CRC32(); + crc.update(PAYLOAD_CONTENTS.getBytes(StandardCharsets.UTF_8)); + entry.setCrc(crc.getValue()); + zos.putNextEntry(entry); + zos.write(PAYLOAD_CONTENTS.getBytes(StandardCharsets.UTF_8)); + zos.closeEntry(); + + // Add payload properties entry. + ZipEntry propertiesEntry = new ZipEntry(PAYLOAD_PROPERTIES_FILE_NAME); + zos.putNextEntry(propertiesEntry); + zos.write(PROPERTIES_CONTENTS.getBytes(StandardCharsets.UTF_8)); + zos.closeEntry(); + } + return testFile; + } + +} diff --git a/updater_sample/tests/src/com/example/android/systemupdatersample/util/UpdateConfigsTest.java b/updater_sample/tests/src/com/example/android/systemupdatersample/util/UpdateConfigsTest.java new file mode 100644 index 000000000..4aa8c6453 --- /dev/null +++ b/updater_sample/tests/src/com/example/android/systemupdatersample/util/UpdateConfigsTest.java @@ -0,0 +1,63 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * 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 com.example.android.systemupdatersample.util; + +import static org.junit.Assert.assertArrayEquals; + +import android.content.Context; +import android.support.test.InstrumentationRegistry; +import android.support.test.filters.SmallTest; +import android.support.test.runner.AndroidJUnit4; + +import com.example.android.systemupdatersample.UpdateConfig; + +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.junit.runner.RunWith; + +import java.util.Arrays; +import java.util.List; + +/** + * Tests for {@link UpdateConfigs} + */ +@RunWith(AndroidJUnit4.class) +@SmallTest +public class UpdateConfigsTest { + + private Context mContext; + + @Rule + public final ExpectedException thrown = ExpectedException.none(); + + @Before + public void setUp() { + mContext = InstrumentationRegistry.getTargetContext(); + } + + @Test + public void configsToNames_extractsNames() { + List<UpdateConfig> configs = Arrays.asList( + new UpdateConfig("blah", "http://", UpdateConfig.TYPE_NON_STREAMING), + new UpdateConfig("blah 2", "http://", UpdateConfig.TYPE_STREAMING) + ); + String[] names = UpdateConfigs.configsToNames(configs); + assertArrayEquals(new String[] {"blah", "blah 2"}, names); + } +} |