diff options
Diffstat (limited to 'host/migration/src/MigrationTest.java')
-rw-r--r-- | host/migration/src/MigrationTest.java | 199 |
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 |