xref: /aosp_15_r20/tools/treble/build/sandbox/config_test.py (revision 105f628577ac4ba0e277a494fbb614ed8c12a994)
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