aboutsummaryrefslogtreecommitdiffstats
path: root/host/migration/src/MigrationTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'host/migration/src/MigrationTest.java')
-rw-r--r--host/migration/src/MigrationTest.java199
1 files changed, 199 insertions, 0 deletions
diff --git a/host/migration/src/MigrationTest.java b/host/migration/src/MigrationTest.java
new file mode 100644
index 0000000..0949d09
--- /dev/null
+++ b/host/migration/src/MigrationTest.java
@@ -0,0 +1,199 @@
+/*
+ * Copyright (C) 2015 The CyanogenMod 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.
+ */
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+
+/**
+ * A verbose settings migration test
+ */
+class MigrationTest {
+ private static final String ARGUMENT_SETTINGS = "--settings";
+ private static final String ARGUMENT_BOOT_IMG = "--bootimg";
+ private static final String ARGUMENT_SYSTEM_IMG = "--systemimg";
+ private static final String ARGUMENT_PREFIX = "--";
+
+ public static final boolean DEBUG = true;
+
+ private static ArrayList<Setting> cmSystemSettingList = new ArrayList<Setting>();
+ private static ArrayList<Setting> cmSecureSettingList = new ArrayList<Setting>();
+ private static ArrayList<Setting> cmGlobalSettingList = new ArrayList<Setting>();
+
+ private static ArrayList<Setting> legacySystemSettings = new ArrayList<Setting>();
+ private static ArrayList<Setting> legacySecureSettings = new ArrayList<Setting>();
+ private static ArrayList<Setting> legacyGlobalSettings = new ArrayList<Setting>();
+
+ private static Tokenizer tokenizer;
+
+ public static void main(String[] args) throws IOException {
+ if (args.length < 1) {
+ showUsage();
+ System.exit(-1);
+ }
+ tokenizer = new Tokenizer(args);
+
+ String settingFileName = null;
+ String bootImage = null;
+ String systemImage = null;
+ for (String argument; (argument = tokenizer.nextArg())!= null;) {
+ if (ARGUMENT_SETTINGS.equals(argument)) {
+ settingFileName = argumentValueRequired(argument);
+ } else if (ARGUMENT_BOOT_IMG.equals(argument)) {
+ bootImage = argumentValueRequired(argument);
+ } else if (ARGUMENT_SYSTEM_IMG.equals(argument)) {
+ systemImage = argumentValueRequired(argument);
+ }
+ }
+
+ if (!new File(settingFileName).exists()) {
+ System.err.print("Invalid file provided " + settingFileName);
+ System.exit(-1);
+ }
+
+ SettingImageCommands legacySettings =
+ new SettingImageCommands(SettingsConstants.SETTINGS_AUTHORITY);
+ legacySettings.addRead(settingFileName, SettingsConstants.SYSTEM, legacySystemSettings);
+ legacySettings.addRead(settingFileName, SettingsConstants.SECURE, legacySecureSettings);
+ legacySettings.addRead(settingFileName, SettingsConstants.GLOBAL, legacyGlobalSettings);
+
+ //Read settings
+ legacySettings.execute();
+
+ SettingImageCommands legacyToCMSettings =
+ new SettingImageCommands(SettingsConstants.SETTINGS_AUTHORITY);
+ //For each example setting in the table, add inserts
+ for (Setting setting : legacySystemSettings) {
+ legacyToCMSettings.addInsert(SettingsConstants.SYSTEM, setting);
+ }
+ for (Setting setting : legacySecureSettings) {
+ legacyToCMSettings.addInsert(SettingsConstants.SECURE, setting);
+ }
+ for (Setting setting : legacyGlobalSettings) {
+ legacyToCMSettings.addInsert(SettingsConstants.GLOBAL, setting);
+ }
+ //Write them to the database for verification later
+ legacyToCMSettings.execute();
+
+ //Force update
+ SettingImageCommands updateRom = new SettingImageCommands(null);
+ updateRom.addFastboot(FastbootCommand.Types.ADB_REBOOT_BOOTLOADER, null);
+ updateRom.addFastboot(FastbootCommand.Types.FASTBOOT_DEVICES, null);
+ updateRom.addFastboot(FastbootCommand.Types.FASTBOOT_FLASH,
+ new String[]{"boot", bootImage});
+ updateRom.addFastboot(FastbootCommand.Types.FASTBOOT_FLASH,
+ new String[]{"system", systemImage});
+ updateRom.addFastboot(FastbootCommand.Types.FASTBOOT_REBOOT, null);
+ updateRom.execute();
+
+ //Requery
+ SettingImageCommands cmSettingImage =
+ new SettingImageCommands(SettingsConstants.CMSETTINGS_AUTHORITY);
+ cmSettingImage.addQuery(SettingsConstants.SYSTEM, cmSystemSettingList);
+ cmSettingImage.addQuery(SettingsConstants.SECURE, cmSecureSettingList);
+ cmSettingImage.addQuery(SettingsConstants.GLOBAL, cmGlobalSettingList);
+ cmSettingImage.execute();
+
+ //Validate
+ System.out.println("\n\nValidating " + SettingsConstants.SYSTEM + "...");
+ validate(legacySystemSettings, cmSystemSettingList);
+ System.out.println("\n\nValidating " + SettingsConstants.SECURE + "...");
+ validate(legacySecureSettings, cmSecureSettingList);
+ System.out.println("\n\nValidating " + SettingsConstants.GLOBAL + "...");
+ validate(legacyGlobalSettings, cmGlobalSettingList);
+ System.exit(0);
+ }
+
+ private static void showUsage() {
+ System.err.println("Usage: MigrationTest --settings [example setting file] "
+ + "--bootimg [image]"
+ + "--systemimg [image]");
+ }
+
+ private static class Tokenizer {
+ private final String[] mArgs;
+ private int mNextArg;
+
+ public Tokenizer(String[] args) {
+ mArgs = args;
+ }
+
+ private String nextArg() {
+ if (mNextArg < mArgs.length) {
+ return mArgs[mNextArg++];
+ } else {
+ return null;
+ }
+ }
+ }
+
+ private static String argumentValueRequired(String argument) {
+ String value = tokenizer.nextArg();
+ if (value == null || value.length() == 0 || value.startsWith(ARGUMENT_PREFIX)) {
+ throw new IllegalArgumentException("No value for argument: " + argument);
+ }
+ return value;
+ }
+
+ private static void validate(ArrayList<Setting> legacySettings, ArrayList<Setting> cmSettings) {
+ Collections.sort(legacySettings);
+ Collections.sort(cmSettings);
+
+ if (legacySettings.size() != cmSettings.size()) {
+ System.err.println("Warning: Size mismatch: " + " legacy "
+ + legacySettings.size() + " cm " + cmSettings.size());
+ }
+
+ for (int i = 0; i < legacySettings.size(); i++) {
+ Setting legacySetting = legacySettings.get(i);
+ Setting cmSetting = cmSettings.get(i);
+ int error = 0;
+
+ System.out.println("Comparing: legacy " + legacySetting.getKey() + " and cmsetting "
+ + cmSetting.getKey());
+
+ if (!legacySetting.getKey().equals(cmSetting.getKey())) {
+ System.err.println(" Key mismatch: " + legacySetting.getKey() + " and "
+ + cmSetting.getKey());
+ error = 1;
+ }
+ if (!legacySetting.getKeyType().equals(cmSetting.getKeyType())) {
+ System.err.println(" Key type mismatch: " + legacySetting.getKeyType() + " and "
+ + cmSetting.getKeyType());
+ error = 1;
+ }
+ if (legacySetting.getValue().length() > 0) {
+ if (!legacySetting.getValue().equals(cmSetting.getValue())) {
+ System.err.println(" Value mismatch: " + legacySetting.getValue() + " and "
+ + cmSetting.getValue());
+ error = 1;
+ }
+ }
+ if (!legacySetting.getValueType().equals(cmSetting.getValueType())) {
+ System.err.println(" Value type mismatch: " + legacySetting.getValueType()
+ + " and " + cmSetting.getValueType());
+ error = 1;
+ }
+
+ if (error > 0) {
+ System.exit(-1);
+ } else {
+ System.out.println("...OK");
+ }
+ }
+ }
+} \ No newline at end of file