From ee61e79b8c842f0fa33a48fa0d099435f5b2c617 Mon Sep 17 00:00:00 2001 From: Junda Liu Date: Wed, 17 Jun 2015 23:00:57 -0700 Subject: Add tests for CarrierConfig app. These tests check that all asset XML files can be parsed into bundles and that they use valid filter attributes. Bug: b/21619172 Change-Id: I4242f77c3c7e8b0e2027bca164f7276b89bbcfb1 --- Android.mk | 4 +- assets/carrier_config_310180.xml | 4 - .../carrierconfig/DefaultCarrierConfigService.java | 3 - tests/Android.mk | 15 +++ tests/AndroidManifest.xml | 28 ++++++ .../android/carrierconfig/CarrierConfigTest.java | 103 +++++++++++++++++++++ 6 files changed, 149 insertions(+), 8 deletions(-) delete mode 100644 assets/carrier_config_310180.xml create mode 100644 tests/Android.mk create mode 100644 tests/AndroidManifest.xml create mode 100644 tests/src/com/android/carrierconfig/CarrierConfigTest.java diff --git a/Android.mk b/Android.mk index 40744ed..e6a9f2d 100644 --- a/Android.mk +++ b/Android.mk @@ -1,7 +1,7 @@ LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) -LOCAL_SRC_FILES := $(call all-subdir-java-files) +LOCAL_SRC_FILES := $(call all-java-files-under, src) LOCAL_JAVA_LIBRARIES := telephony-common @@ -13,3 +13,5 @@ LOCAL_PROGUARD_FLAG_FILES := proguard.flags include $(BUILD_PACKAGE) +# This finds and builds the test apk as well, so a single make does both. +include $(call all-makefiles-under,$(LOCAL_PATH)) diff --git a/assets/carrier_config_310180.xml b/assets/carrier_config_310180.xml deleted file mode 100644 index 925bb5c..0000000 --- a/assets/carrier_config_310180.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/src/com/android/carrierconfig/DefaultCarrierConfigService.java b/src/com/android/carrierconfig/DefaultCarrierConfigService.java index 069db65..9d61e1b 100644 --- a/src/com/android/carrierconfig/DefaultCarrierConfigService.java +++ b/src/com/android/carrierconfig/DefaultCarrierConfigService.java @@ -11,9 +11,6 @@ import android.util.Log; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; -import org.xmlpull.v1.XmlPullParserFactory; - - import java.io.File; import java.io.FileOutputStream; diff --git a/tests/Android.mk b/tests/Android.mk new file mode 100644 index 0000000..bb3bd18 --- /dev/null +++ b/tests/Android.mk @@ -0,0 +1,15 @@ +LOCAL_PATH := $(call my-dir) +include $(CLEAR_VARS) + +LOCAL_MODULE_TAGS := tests + +LOCAL_JAVA_LIBRARIES := android.test.runner + +LOCAL_SRC_FILES := $(call all-java-files-under, src) + +LOCAL_PACKAGE_NAME := CarrierConfigTests +LOCAL_CERTIFICATE := platform + +LOCAL_INSTRUMENTATION_FOR := CarrierConfig + +include $(BUILD_PACKAGE) diff --git a/tests/AndroidManifest.xml b/tests/AndroidManifest.xml new file mode 100644 index 0000000..42ea2b7 --- /dev/null +++ b/tests/AndroidManifest.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + diff --git a/tests/src/com/android/carrierconfig/CarrierConfigTest.java b/tests/src/com/android/carrierconfig/CarrierConfigTest.java new file mode 100644 index 0000000..5a29ea1 --- /dev/null +++ b/tests/src/com/android/carrierconfig/CarrierConfigTest.java @@ -0,0 +1,103 @@ +package com.android.carrierconfig; + +import android.content.Context; +import android.content.res.AssetManager; +import android.os.PersistableBundle; +import android.service.carrier.CarrierIdentifier; +import android.test.InstrumentationTestCase; +import android.util.Log; + +import java.io.IOException; +import java.io.InputStream; + +import junit.framework.AssertionFailedError; + +import org.xmlpull.v1.XmlPullParser; +import org.xmlpull.v1.XmlPullParserException; +import org.xmlpull.v1.XmlPullParserFactory; + +public class CarrierConfigTest extends InstrumentationTestCase { + + /** + * Iterate over all XML files in assets/ and ensure they parse without error. + */ + public void testAllFilesParse() { + forEachConfigXml(new ParserChecker() { + public void check(XmlPullParser parser) throws XmlPullParserException, IOException { + PersistableBundle b = DefaultCarrierConfigService.readConfigFromXml(parser, + new CarrierIdentifier("001", "001", "Test", "", "", "")); + assertNotNull("got null bundle", b); + assertTrue("got empty bundle", b.size() > 0); + } + }); + } + + /** + * Check that the config bundles in XML files have valid filter attributes. + * This checks the attribute names only. + */ + public void testFilterValidAttributes() { + forEachConfigXml(new ParserChecker() { + public void check(XmlPullParser parser) throws XmlPullParserException, IOException { + int event; + while (((event = parser.next()) != XmlPullParser.END_DOCUMENT)) { + if (event == XmlPullParser.START_TAG && "carrier_config".equals(parser.getName())) { + for (int i = 0; i < parser.getAttributeCount(); ++i) { + String attribute = parser.getAttributeName(i); + switch (attribute) { + case "mcc": + case "mnc": + case "gid1": + case "gid2": + case "spn": + case "device": + break; + default: + fail("Unknown attribute '" + attribute + "'"); + break; + } + } + } + } + } + }); + } + + /** + * Utility for iterating over each XML document in the assets folder. + * + * This can be used with {@link #forEachConfigXml} to run checks on each XML document. + * {@link #check} should {@link #fail} if the test does not pass. + */ + private interface ParserChecker { + void check(XmlPullParser parser) throws XmlPullParserException, IOException; + } + + /** + * Utility for iterating over each XML document in the assets folder. + */ + private void forEachConfigXml(ParserChecker checker) { + AssetManager assetMgr = getInstrumentation().getTargetContext().getAssets(); + try { + String[] files = assetMgr.list(""); + assertNotNull("failed to list files", files); + assertTrue("no files", files.length > 0); + for (String fileName : files) { + try { + if (!fileName.startsWith("carrier_config_")) continue; + + XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); + XmlPullParser parser = factory.newPullParser(); + parser.setInput(assetMgr.open(fileName), "utf-8"); + + checker.check(parser); + + } catch (Throwable e) { + throw new AssertionError("Problem in " + fileName + ": " + e.getMessage(), e); + } + } + } catch (IOException e) { + fail(e.toString()); + } + } +} -- cgit v1.2.3