1*105f6285SAndroid Build Coastguard Worker# Copyright 2020 Google LLC 2*105f6285SAndroid Build Coastguard Worker# 3*105f6285SAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); 4*105f6285SAndroid Build Coastguard Worker# you may not use this file except in compliance with the License. 5*105f6285SAndroid Build Coastguard Worker# You may obtain a copy of the License at 6*105f6285SAndroid Build Coastguard Worker# 7*105f6285SAndroid Build Coastguard Worker# https://www.apache.org/licenses/LICENSE-2.0 8*105f6285SAndroid Build Coastguard Worker# 9*105f6285SAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 10*105f6285SAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, 11*105f6285SAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*105f6285SAndroid Build Coastguard Worker# See the License for the specific language governing permissions and 13*105f6285SAndroid Build Coastguard Worker# limitations under the License. 14*105f6285SAndroid Build Coastguard Worker"""Test config.""" 15*105f6285SAndroid Build Coastguard Worker 16*105f6285SAndroid Build Coastguard Workerimport tempfile 17*105f6285SAndroid Build Coastguard Workerimport unittest 18*105f6285SAndroid Build Coastguard Workerfrom . import config 19*105f6285SAndroid Build Coastguard Worker 20*105f6285SAndroid Build Coastguard Worker_TEST_CONFIG_XML = """<config> 21*105f6285SAndroid Build Coastguard Worker <target name="android_target_1"> 22*105f6285SAndroid Build Coastguard Worker <build_config> 23*105f6285SAndroid Build Coastguard Worker <goal name="droid"/> 24*105f6285SAndroid Build Coastguard Worker <flag name="dist"/> 25*105f6285SAndroid Build Coastguard Worker </build_config> 26*105f6285SAndroid Build Coastguard Worker </target> 27*105f6285SAndroid Build Coastguard Worker <target name="android_target_2" tags="cool,hot"> 28*105f6285SAndroid Build Coastguard Worker <config name="fmc_framework_images" value="image1,image2"/> 29*105f6285SAndroid Build Coastguard Worker <config name="fmc_misc_info_keys" value="misc_info_keys.txt"/> 30*105f6285SAndroid Build Coastguard Worker <goal name="common_goal"/> 31*105f6285SAndroid Build Coastguard Worker <build_config tags="warm"> 32*105f6285SAndroid Build Coastguard Worker <goal name="droid"/> 33*105f6285SAndroid Build Coastguard Worker <flag name="dist"/> 34*105f6285SAndroid Build Coastguard Worker <goal name="goal_for_android_target_2"/> 35*105f6285SAndroid Build Coastguard Worker </build_config> 36*105f6285SAndroid Build Coastguard Worker <build_config name="build_target_2" tags="dry"> 37*105f6285SAndroid Build Coastguard Worker <config name="fmc_framework_images" value="bt1,bt2"/> 38*105f6285SAndroid Build Coastguard Worker <config name="fmc_misc_info_keys" value="misc_info_keys_2.txt"/> 39*105f6285SAndroid Build Coastguard Worker <goal name="droid"/> 40*105f6285SAndroid Build Coastguard Worker <flag name="VAR=a"/> 41*105f6285SAndroid Build Coastguard Worker </build_config> 42*105f6285SAndroid Build Coastguard Worker </target> 43*105f6285SAndroid Build Coastguard Worker <target name="android_target_3" tags=""> 44*105f6285SAndroid Build Coastguard Worker <build_config> 45*105f6285SAndroid Build Coastguard Worker <goal name="droid"/> 46*105f6285SAndroid Build Coastguard Worker </build_config> 47*105f6285SAndroid Build Coastguard Worker </target> 48*105f6285SAndroid Build Coastguard Worker <target name="some_target" android_target="android_target_4"> 49*105f6285SAndroid Build Coastguard Worker <goal name="droid"/> 50*105f6285SAndroid Build Coastguard Worker <build_config> 51*105f6285SAndroid Build Coastguard Worker </build_config> 52*105f6285SAndroid Build Coastguard Worker </target> 53*105f6285SAndroid Build Coastguard Worker <target name="no_goals_target"> 54*105f6285SAndroid Build Coastguard Worker <build_config/> 55*105f6285SAndroid Build Coastguard Worker </target> 56*105f6285SAndroid Build Coastguard Worker</config> 57*105f6285SAndroid Build Coastguard Worker""" 58*105f6285SAndroid Build Coastguard Worker 59*105f6285SAndroid Build Coastguard Worker_TEST_CONTEXTS_CONFIG_XML = """<config> 60*105f6285SAndroid Build Coastguard Worker <target name="test_target"> 61*105f6285SAndroid Build Coastguard Worker <build_config> 62*105f6285SAndroid Build Coastguard Worker 63*105f6285SAndroid Build Coastguard Worker <!-- no contexts attribute: always selected --> 64*105f6285SAndroid Build Coastguard Worker <goal name="droid"/> 65*105f6285SAndroid Build Coastguard Worker 66*105f6285SAndroid Build Coastguard Worker <!-- empty contexts attribute: always selected --> 67*105f6285SAndroid Build Coastguard Worker <goal name="always" contexts=""/> 68*105f6285SAndroid Build Coastguard Worker 69*105f6285SAndroid Build Coastguard Worker <!-- selected if ci context requested --> 70*105f6285SAndroid Build Coastguard Worker <flag name="dist" contexts="ci"/> 71*105f6285SAndroid Build Coastguard Worker 72*105f6285SAndroid Build Coastguard Worker <!-- selected if x context requested --> 73*105f6285SAndroid Build Coastguard Worker <flag name="VAR=value" contexts="x"/> 74*105f6285SAndroid Build Coastguard Worker 75*105f6285SAndroid Build Coastguard Worker <!-- selected if ci or x context requested --> 76*105f6285SAndroid Build Coastguard Worker <goal name="extra_goal" contexts="ci,x"/> 77*105f6285SAndroid Build Coastguard Worker 78*105f6285SAndroid Build Coastguard Worker </build_config> 79*105f6285SAndroid Build Coastguard Worker </target> 80*105f6285SAndroid Build Coastguard Worker</config> 81*105f6285SAndroid Build Coastguard Worker""" 82*105f6285SAndroid Build Coastguard Worker 83*105f6285SAndroid Build Coastguard Worker 84*105f6285SAndroid Build Coastguard Workerclass ConfigTest(unittest.TestCase): 85*105f6285SAndroid Build Coastguard Worker """unittest for Config.""" 86*105f6285SAndroid Build Coastguard Worker 87*105f6285SAndroid Build Coastguard Worker def testConfigFilenameNone(self): 88*105f6285SAndroid Build Coastguard Worker cfg = config.factory(None) 89*105f6285SAndroid Build Coastguard Worker self.assertIsNone(cfg) 90*105f6285SAndroid Build Coastguard Worker 91*105f6285SAndroid Build Coastguard Worker def testAvailableBuildTargets(self): 92*105f6285SAndroid Build Coastguard Worker with tempfile.NamedTemporaryFile('w+t') as test_config: 93*105f6285SAndroid Build Coastguard Worker test_config.write(_TEST_CONFIG_XML) 94*105f6285SAndroid Build Coastguard Worker test_config.flush() 95*105f6285SAndroid Build Coastguard Worker cfg = config.factory(test_config.name) 96*105f6285SAndroid Build Coastguard Worker self.assertListEqual( 97*105f6285SAndroid Build Coastguard Worker cfg.get_available_build_targets(), 98*105f6285SAndroid Build Coastguard Worker # Sorted; not in document order. 99*105f6285SAndroid Build Coastguard Worker [ 100*105f6285SAndroid Build Coastguard Worker 'android_target_1', 101*105f6285SAndroid Build Coastguard Worker 'android_target_2', 102*105f6285SAndroid Build Coastguard Worker 'android_target_3', 103*105f6285SAndroid Build Coastguard Worker 'build_target_2', 104*105f6285SAndroid Build Coastguard Worker 'no_goals_target', 105*105f6285SAndroid Build Coastguard Worker 'some_target', 106*105f6285SAndroid Build Coastguard Worker ]) 107*105f6285SAndroid Build Coastguard Worker 108*105f6285SAndroid Build Coastguard Worker def testBuildTargetTags(self): 109*105f6285SAndroid Build Coastguard Worker with tempfile.NamedTemporaryFile('w+t') as test_config: 110*105f6285SAndroid Build Coastguard Worker test_config.write(_TEST_CONFIG_XML) 111*105f6285SAndroid Build Coastguard Worker test_config.flush() 112*105f6285SAndroid Build Coastguard Worker cfg = config.factory(test_config.name) 113*105f6285SAndroid Build Coastguard Worker 114*105f6285SAndroid Build Coastguard Worker self.assertSetEqual(cfg.get_tags('android_target_1'), set()) 115*105f6285SAndroid Build Coastguard Worker self.assertSetEqual( 116*105f6285SAndroid Build Coastguard Worker cfg.get_tags('android_target_2'), set(['cool', 'hot', 'warm'])) 117*105f6285SAndroid Build Coastguard Worker self.assertSetEqual( 118*105f6285SAndroid Build Coastguard Worker cfg.get_tags('build_target_2'), set(['cool', 'hot', 'dry'])) 119*105f6285SAndroid Build Coastguard Worker self.assertSetEqual(cfg.get_tags('android_target_3'), set()) 120*105f6285SAndroid Build Coastguard Worker 121*105f6285SAndroid Build Coastguard Worker self.assertFalse(cfg.has_tag('android_target_1', 'cool')) 122*105f6285SAndroid Build Coastguard Worker self.assertFalse(cfg.has_tag('android_target_1', 'hot')) 123*105f6285SAndroid Build Coastguard Worker self.assertFalse(cfg.has_tag('android_target_1', 'meh')) 124*105f6285SAndroid Build Coastguard Worker 125*105f6285SAndroid Build Coastguard Worker self.assertTrue(cfg.has_tag('android_target_2', 'cool')) 126*105f6285SAndroid Build Coastguard Worker self.assertTrue(cfg.has_tag('android_target_2', 'hot')) 127*105f6285SAndroid Build Coastguard Worker self.assertFalse(cfg.has_tag('android_target_2', 'meh')) 128*105f6285SAndroid Build Coastguard Worker 129*105f6285SAndroid Build Coastguard Worker self.assertTrue(cfg.has_tag('build_target_2', 'cool')) 130*105f6285SAndroid Build Coastguard Worker self.assertTrue(cfg.has_tag('build_target_2', 'hot')) 131*105f6285SAndroid Build Coastguard Worker self.assertFalse(cfg.has_tag('build_target_2', 'meh')) 132*105f6285SAndroid Build Coastguard Worker 133*105f6285SAndroid Build Coastguard Worker self.assertFalse(cfg.has_tag('android_target_3', 'cool')) 134*105f6285SAndroid Build Coastguard Worker self.assertFalse(cfg.has_tag('android_target_3', 'hot')) 135*105f6285SAndroid Build Coastguard Worker self.assertFalse(cfg.has_tag('android_target_3', 'meh')) 136*105f6285SAndroid Build Coastguard Worker 137*105f6285SAndroid Build Coastguard Worker def testBuildTargetToAndroidTarget(self): 138*105f6285SAndroid Build Coastguard Worker with tempfile.NamedTemporaryFile('w+t') as test_config: 139*105f6285SAndroid Build Coastguard Worker test_config.write(_TEST_CONFIG_XML) 140*105f6285SAndroid Build Coastguard Worker test_config.flush() 141*105f6285SAndroid Build Coastguard Worker cfg = config.factory(test_config.name) 142*105f6285SAndroid Build Coastguard Worker 143*105f6285SAndroid Build Coastguard Worker # Test that build_target android_target_1 -> android_target_1. 144*105f6285SAndroid Build Coastguard Worker self.assertEqual( 145*105f6285SAndroid Build Coastguard Worker cfg.get_build_config_android_target('android_target_1'), 146*105f6285SAndroid Build Coastguard Worker 'android_target_1') 147*105f6285SAndroid Build Coastguard Worker 148*105f6285SAndroid Build Coastguard Worker # Test that build_target android_target_2 -> android_target_2. 149*105f6285SAndroid Build Coastguard Worker self.assertEqual( 150*105f6285SAndroid Build Coastguard Worker cfg.get_build_config_android_target('android_target_2'), 151*105f6285SAndroid Build Coastguard Worker 'android_target_2') 152*105f6285SAndroid Build Coastguard Worker 153*105f6285SAndroid Build Coastguard Worker # Test that build_target build_target_2 -> android_target_2. 154*105f6285SAndroid Build Coastguard Worker self.assertEqual( 155*105f6285SAndroid Build Coastguard Worker cfg.get_build_config_android_target('build_target_2'), 156*105f6285SAndroid Build Coastguard Worker 'android_target_2') 157*105f6285SAndroid Build Coastguard Worker 158*105f6285SAndroid Build Coastguard Worker # Test overriding android_target property 159*105f6285SAndroid Build Coastguard Worker self.assertEqual( 160*105f6285SAndroid Build Coastguard Worker cfg.get_build_config_android_target('some_target'), 161*105f6285SAndroid Build Coastguard Worker 'android_target_4') 162*105f6285SAndroid Build Coastguard Worker 163*105f6285SAndroid Build Coastguard Worker def testBuildTargetToBuildGoalsAndFlags(self): 164*105f6285SAndroid Build Coastguard Worker with tempfile.NamedTemporaryFile('w+t') as test_config: 165*105f6285SAndroid Build Coastguard Worker test_config.write(_TEST_CONFIG_XML) 166*105f6285SAndroid Build Coastguard Worker test_config.flush() 167*105f6285SAndroid Build Coastguard Worker cfg = config.factory(test_config.name) 168*105f6285SAndroid Build Coastguard Worker 169*105f6285SAndroid Build Coastguard Worker self.assertEqual(cfg.get_build_goals('android_target_1'), ['droid']) 170*105f6285SAndroid Build Coastguard Worker self.assertEqual(cfg.get_build_flags('android_target_1'), ['dist']) 171*105f6285SAndroid Build Coastguard Worker 172*105f6285SAndroid Build Coastguard Worker self.assertEqual( 173*105f6285SAndroid Build Coastguard Worker cfg.get_build_goals('android_target_2'), 174*105f6285SAndroid Build Coastguard Worker ['common_goal', 'droid', 'goal_for_android_target_2']) 175*105f6285SAndroid Build Coastguard Worker self.assertEqual(cfg.get_build_flags('android_target_2'), ['dist']) 176*105f6285SAndroid Build Coastguard Worker 177*105f6285SAndroid Build Coastguard Worker self.assertEqual( 178*105f6285SAndroid Build Coastguard Worker cfg.get_build_goals('build_target_2'), ['common_goal', 'droid']) 179*105f6285SAndroid Build Coastguard Worker self.assertEqual(cfg.get_build_flags('build_target_2'), ['VAR=a']) 180*105f6285SAndroid Build Coastguard Worker 181*105f6285SAndroid Build Coastguard Worker # Test empty goals 182*105f6285SAndroid Build Coastguard Worker self.assertEqual(cfg.get_build_goals('no_goals_target'), []) 183*105f6285SAndroid Build Coastguard Worker 184*105f6285SAndroid Build Coastguard Worker def testBuildTargetToBuildGoalsAndFlagsWithContexts(self): 185*105f6285SAndroid Build Coastguard Worker with tempfile.NamedTemporaryFile('w+t') as test_config: 186*105f6285SAndroid Build Coastguard Worker test_config.write(_TEST_CONTEXTS_CONFIG_XML) 187*105f6285SAndroid Build Coastguard Worker test_config.flush() 188*105f6285SAndroid Build Coastguard Worker cfg = config.factory(test_config.name) 189*105f6285SAndroid Build Coastguard Worker 190*105f6285SAndroid Build Coastguard Worker # Test that when contexts is the default (empty), we select only the 191*105f6285SAndroid Build Coastguard Worker # "always" goals. 192*105f6285SAndroid Build Coastguard Worker 193*105f6285SAndroid Build Coastguard Worker build_goals = cfg.get_build_goals('test_target') 194*105f6285SAndroid Build Coastguard Worker self.assertEqual(build_goals, ['droid', 'always']) 195*105f6285SAndroid Build Coastguard Worker 196*105f6285SAndroid Build Coastguard Worker # Test that when contexts is explicitly empty, we select only the 197*105f6285SAndroid Build Coastguard Worker # "always" goals. 198*105f6285SAndroid Build Coastguard Worker 199*105f6285SAndroid Build Coastguard Worker build_goals = cfg.get_build_goals('test_target', set()) 200*105f6285SAndroid Build Coastguard Worker self.assertEqual(build_goals, ['droid', 'always']) 201*105f6285SAndroid Build Coastguard Worker 202*105f6285SAndroid Build Coastguard Worker # Similarly, test that when contexts is doesn't match any goal_contexts, 203*105f6285SAndroid Build Coastguard Worker # we select only the "always" goals. 204*105f6285SAndroid Build Coastguard Worker 205*105f6285SAndroid Build Coastguard Worker build_goals = cfg.get_build_goals('test_target', set('no_matchy')) 206*105f6285SAndroid Build Coastguard Worker self.assertEqual(build_goals, ['droid', 'always']) 207*105f6285SAndroid Build Coastguard Worker 208*105f6285SAndroid Build Coastguard Worker # Test that when contexts is set(['x']), we select the "always" goals and 209*105f6285SAndroid Build Coastguard Worker # the x goals. 210*105f6285SAndroid Build Coastguard Worker 211*105f6285SAndroid Build Coastguard Worker build_goals = cfg.get_build_goals('test_target', set(['x'])) 212*105f6285SAndroid Build Coastguard Worker build_flags = cfg.get_build_flags('test_target', set(['x'])) 213*105f6285SAndroid Build Coastguard Worker 214*105f6285SAndroid Build Coastguard Worker self.assertEqual(build_goals, ['droid', 'always', 'extra_goal']) 215*105f6285SAndroid Build Coastguard Worker self.assertEqual(build_flags, ['VAR=value']) 216*105f6285SAndroid Build Coastguard Worker 217*105f6285SAndroid Build Coastguard Worker # Test that when requested_contexts is set(['ci', 'x']), we select the 218*105f6285SAndroid Build Coastguard Worker # "always" goals, the ci goals, and the x goals. 219*105f6285SAndroid Build Coastguard Worker 220*105f6285SAndroid Build Coastguard Worker build_goals = cfg.get_build_goals('test_target', set(['ci', 'x'])) 221*105f6285SAndroid Build Coastguard Worker build_flags = cfg.get_build_flags('test_target', set(['ci', 'x'])) 222*105f6285SAndroid Build Coastguard Worker 223*105f6285SAndroid Build Coastguard Worker self.assertEqual(build_goals, ['droid', 'always', 'extra_goal']) 224*105f6285SAndroid Build Coastguard Worker self.assertEqual(build_flags, ['dist', 'VAR=value']) 225*105f6285SAndroid Build Coastguard Worker 226*105f6285SAndroid Build Coastguard Worker def testAllowReadWriteAll(self): 227*105f6285SAndroid Build Coastguard Worker with tempfile.NamedTemporaryFile('w+t') as test_config: 228*105f6285SAndroid Build Coastguard Worker test_config.write("""<?xml version="1.0" encoding="UTF-8" ?> 229*105f6285SAndroid Build Coastguard Worker <config> 230*105f6285SAndroid Build Coastguard Worker <target name="target_allowed" allow_readwrite_all="true"> 231*105f6285SAndroid Build Coastguard Worker <build_config> 232*105f6285SAndroid Build Coastguard Worker <goal name="droid"/> 233*105f6285SAndroid Build Coastguard Worker </build_config> 234*105f6285SAndroid Build Coastguard Worker <allow_readwrite_all/> 235*105f6285SAndroid Build Coastguard Worker </target> 236*105f6285SAndroid Build Coastguard Worker <target name="target_not_allowed"> 237*105f6285SAndroid Build Coastguard Worker <build_config> 238*105f6285SAndroid Build Coastguard Worker <goal name="droid"/> 239*105f6285SAndroid Build Coastguard Worker </build_config> 240*105f6285SAndroid Build Coastguard Worker </target> 241*105f6285SAndroid Build Coastguard Worker <target name="target_also_not_allowed" allow_readwrite_all="false"> 242*105f6285SAndroid Build Coastguard Worker <build_config> 243*105f6285SAndroid Build Coastguard Worker <goal name="droid"/> 244*105f6285SAndroid Build Coastguard Worker </build_config> 245*105f6285SAndroid Build Coastguard Worker </target> 246*105f6285SAndroid Build Coastguard Worker </config>""") 247*105f6285SAndroid Build Coastguard Worker test_config.flush() 248*105f6285SAndroid Build Coastguard Worker cfg = config.factory(test_config.name) 249*105f6285SAndroid Build Coastguard Worker 250*105f6285SAndroid Build Coastguard Worker self.assertTrue(cfg.get_allow_readwrite_all('target_allowed')) 251*105f6285SAndroid Build Coastguard Worker 252*105f6285SAndroid Build Coastguard Worker self.assertFalse(cfg.get_allow_readwrite_all('target_not_allowed')) 253*105f6285SAndroid Build Coastguard Worker 254*105f6285SAndroid Build Coastguard Worker self.assertFalse(cfg.get_allow_readwrite_all('target_also_not_allowed')) 255*105f6285SAndroid Build Coastguard Worker 256*105f6285SAndroid Build Coastguard Worker def testAllowedProjectsFile(self): 257*105f6285SAndroid Build Coastguard Worker with tempfile.NamedTemporaryFile('w+t') as test_config: 258*105f6285SAndroid Build Coastguard Worker test_config.write( 259*105f6285SAndroid Build Coastguard Worker '<?xml version="1.0" encoding="UTF-8" ?>' 260*105f6285SAndroid Build Coastguard Worker '<config>' 261*105f6285SAndroid Build Coastguard Worker ' <target name="target_name">' 262*105f6285SAndroid Build Coastguard Worker ' <build_config allowed_projects_file="path/to/default/build/config/allowed_projects.xml">' 263*105f6285SAndroid Build Coastguard Worker ' <goal name="build_goal"/>' 264*105f6285SAndroid Build Coastguard Worker ' </build_config>' 265*105f6285SAndroid Build Coastguard Worker ' <build_config name="has_allowed_projects_file" allowed_projects_file="path/to/named/build/config/allowed_projects.xml">' 266*105f6285SAndroid Build Coastguard Worker ' <goal name="build_goal"/>' 267*105f6285SAndroid Build Coastguard Worker ' </build_config>' 268*105f6285SAndroid Build Coastguard Worker ' <build_config name="no_allowed_projects_file">' 269*105f6285SAndroid Build Coastguard Worker ' <goal name="build_goal"/>' 270*105f6285SAndroid Build Coastguard Worker ' </build_config>' 271*105f6285SAndroid Build Coastguard Worker ' </target>' 272*105f6285SAndroid Build Coastguard Worker '</config>') 273*105f6285SAndroid Build Coastguard Worker test_config.flush() 274*105f6285SAndroid Build Coastguard Worker cfg = config.factory(test_config.name) 275*105f6285SAndroid Build Coastguard Worker 276*105f6285SAndroid Build Coastguard Worker self.assertEqual( 277*105f6285SAndroid Build Coastguard Worker cfg.get_allowed_projects_file('target_name'), 278*105f6285SAndroid Build Coastguard Worker 'path/to/default/build/config/allowed_projects.xml') 279*105f6285SAndroid Build Coastguard Worker self.assertEqual( 280*105f6285SAndroid Build Coastguard Worker cfg.get_allowed_projects_file('has_allowed_projects_file'), 281*105f6285SAndroid Build Coastguard Worker 'path/to/named/build/config/allowed_projects.xml') 282*105f6285SAndroid Build Coastguard Worker self.assertIsNone( 283*105f6285SAndroid Build Coastguard Worker cfg.get_allowed_projects_file('no_allowed_projects_file')) 284*105f6285SAndroid Build Coastguard Worker 285*105f6285SAndroid Build Coastguard Worker def testMergeConfig(self): 286*105f6285SAndroid Build Coastguard Worker with tempfile.NamedTemporaryFile('w+t') as test_config: 287*105f6285SAndroid Build Coastguard Worker test_config.write(_TEST_CONFIG_XML) 288*105f6285SAndroid Build Coastguard Worker test_config.flush() 289*105f6285SAndroid Build Coastguard Worker cfg = config.factory(test_config.name) 290*105f6285SAndroid Build Coastguard Worker 291*105f6285SAndroid Build Coastguard Worker bc_at2 = cfg.get_build_config('android_target_2') 292*105f6285SAndroid Build Coastguard Worker self.assertDictEqual( 293*105f6285SAndroid Build Coastguard Worker bc_at2.configurations, { 294*105f6285SAndroid Build Coastguard Worker 'fmc_framework_images': 'image1,image2', 295*105f6285SAndroid Build Coastguard Worker 'fmc_misc_info_keys': 'misc_info_keys.txt' 296*105f6285SAndroid Build Coastguard Worker }) 297*105f6285SAndroid Build Coastguard Worker 298*105f6285SAndroid Build Coastguard Worker bc_bt2 = cfg.get_build_config('build_target_2') 299*105f6285SAndroid Build Coastguard Worker self.assertDictEqual( 300*105f6285SAndroid Build Coastguard Worker bc_bt2.configurations, { 301*105f6285SAndroid Build Coastguard Worker 'fmc_framework_images': 'bt1,bt2', 302*105f6285SAndroid Build Coastguard Worker 'fmc_misc_info_keys': 'misc_info_keys_2.txt' 303*105f6285SAndroid Build Coastguard Worker }) 304*105f6285SAndroid Build Coastguard Worker 305*105f6285SAndroid Build Coastguard Worker 306*105f6285SAndroid Build Coastguard Workerif __name__ == '__main__': 307*105f6285SAndroid Build Coastguard Worker unittest.main() 308