1#!/usr/bin/env vpython3 2# Copyright 2024 The Chromium Authors 3# Use of this source code is governed by a BSD-style license that can be 4# found in the LICENSE file. 5 6import os 7import sys 8import unittest 9 10from unittest.mock import patch, mock_open 11 12sys.path.append( 13 os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', '..'))) 14from pylib.local.emulator import avd 15from pylib.local.emulator.proto import avd_pb2 16 17 18def CreateAvdSettings(): 19 # python generated codes are simplified since Protobuf v3.20.0 and cause 20 # pylint error: https://github.com/protocolbuffers/protobuf/issues/9730 21 # pylint: disable=no-member 22 return avd_pb2.AvdSettings() 23 24 25class DebugTagsTest(unittest.TestCase): 26 27 def testOrdering(self): 28 self.assertEqual(['a', 'b', 'c'], avd.ProcessDebugTags('c,b,a')) 29 self.assertEqual(['a', 'd', '-b', '-c'], avd.ProcessDebugTags('-c,-b,d,a')) 30 31 def testOrderingWithDefaultTags(self): 32 default_debug_tags = ['a', '-d', '-c'] 33 tags = avd.ProcessDebugTags('c,b,-e', default_debug_tags=default_debug_tags) 34 self.assertEqual(['a', 'b', 'c', '-c', '-d', '-e'], tags) 35 36 37class AvdCreateTest(unittest.TestCase): 38 39 _CONFIG = """ 40 avd_settings { 41 screen { 42 density: 480 43 height: 1920 44 width: 1080 45 } 46 } 47 """ 48 49 def setUp(self): 50 with patch('builtins.open', mock_open(read_data=self._CONFIG)): 51 self.avd_config = avd.AvdConfig('/path/to/creation.textpb') 52 53 def testGetAvdSettingsWithoutVariants(self): 54 avd_settings = self.avd_config.GetAvdSettings() 55 self.assertEqual(avd_settings.screen.density, 480) 56 self.assertEqual(avd_settings.screen.height, 1920) 57 self.assertEqual(avd_settings.screen.width, 1080) 58 59 with self.assertRaises(avd.AvdException): 60 self.avd_config.GetAvdSettings('baz') 61 62 def testGetAvdSettingsWithVariants(self): 63 avd_settings = CreateAvdSettings() 64 avd_settings.avd_properties['disk.dataPartition.size'] = '4G' 65 self.avd_config.avd_variants['foo'].CopyFrom(avd_settings) 66 avd_settings.avd_properties['disk.dataPartition.size'] = '8G' 67 self.avd_config.avd_variants['bar'].CopyFrom(avd_settings) 68 69 avd_settings_foo = self.avd_config.GetAvdSettings('foo') 70 avd_settings_bar = self.avd_config.GetAvdSettings('bar') 71 72 # The value of screen should be the same. 73 self.assertEqual(avd_settings_foo.screen.density, 480) 74 self.assertEqual(avd_settings_foo.screen.height, 1920) 75 self.assertEqual(avd_settings_foo.screen.width, 1080) 76 77 self.assertEqual(avd_settings_bar.screen.density, 480) 78 self.assertEqual(avd_settings_bar.screen.height, 1920) 79 self.assertEqual(avd_settings_bar.screen.width, 1080) 80 81 # The values of the avd_properties should be different. 82 self.assertEqual(avd_settings_foo.avd_properties['disk.dataPartition.size'], 83 '4G') 84 self.assertEqual(avd_settings_bar.avd_properties['disk.dataPartition.size'], 85 '8G') 86 87 # The base avd_settings should not be changed. 88 self.assertEqual(self.avd_config.avd_settings.screen.density, 480) 89 self.assertEqual(self.avd_config.avd_settings.screen.height, 1920) 90 self.assertEqual(self.avd_config.avd_settings.screen.width, 1080) 91 self.assertNotIn('disk.dataPartition.size', 92 self.avd_config.avd_settings.avd_properties) 93 94 # Non-exist variant 95 with self.assertRaises(avd.AvdException): 96 self.avd_config.GetAvdSettings('baz') 97 98 def testGetMetadataWithoutVariants(self): 99 metadata = self.avd_config.GetMetadata() 100 self.assertIn('avd_proto_path', metadata) 101 self.assertIn('is_available', metadata) 102 self.assertNotIn('avd_variants', metadata) 103 104 def testGetMetadataWithVariants(self): 105 avd_settings = CreateAvdSettings() 106 avd_settings.avd_properties['disk.dataPartition.size'] = '4G' 107 self.avd_config.avd_variants['foo'].CopyFrom(avd_settings) 108 avd_settings.avd_properties['disk.dataPartition.size'] = '8G' 109 self.avd_config.avd_variants['bar'].CopyFrom(avd_settings) 110 111 metadata = self.avd_config.GetMetadata() 112 self.assertIn('avd_proto_path', metadata) 113 self.assertIn('is_available', metadata) 114 self.assertIn('avd_variants', metadata) 115 self.assertEqual(['bar', 'foo'], metadata['avd_variants']) 116 117 118if __name__ == "__main__": 119 unittest.main() 120