def test_no_ec2(self): _register_uris(self.VERSION, {}, {}, OS_FILES) f = ds.read_metadata_service(BASE_URL, version=self.VERSION) self.assertEquals(VENDOR_DATA, f.get('vendordata')) self.assertEquals(CONTENT_0, f['files']['/etc/foo.cfg']) self.assertEquals(CONTENT_1, f['files']['/etc/bar/bar.cfg']) self.assertEquals(USER_DATA, f.get('userdata')) self.assertEquals({}, f.get('ec2-metadata')) self.assertEquals(2, f.get('version'))
def test_vendordata_empty(self): os_files = copy.deepcopy(OS_FILES) for k in list(os_files.keys()): if k.endswith('vendor_data.json'): os_files.pop(k, None) _register_uris(self.VERSION, {}, {}, os_files) f = ds.read_metadata_service(BASE_URL, version=self.VERSION) self.assertEquals(CONTENT_0, f['files']['/etc/foo.cfg']) self.assertEquals(CONTENT_1, f['files']['/etc/bar/bar.cfg']) self.assertFalse(f.get('vendordata'))
def test_detect_openstack_oraclecloud_chassis_asset_tag(self, m_dmi, m_is_x86): """Return True on OpenStack reporting Oracle cloud asset-tag.""" m_is_x86.return_value = True def fake_dmi_read(dmi_key): if dmi_key == 'system-product-name': return 'Standard PC (i440FX + PIIX, 1996)' # No match if dmi_key == 'chassis-asset-tag': return 'OracleCloud.com' assert False, 'Unexpected dmi read of %s' % dmi_key m_dmi.side_effect = fake_dmi_read self.assertTrue( ds.detect_openstack(accept_oracle=True), 'Expected detect_openstack == True on OracleCloud.com') self.assertFalse( ds.detect_openstack(accept_oracle=False), 'Expected detect_openstack == False.')
def test_detect_openstack_intel_product_name_compute(self, m_dmi, m_is_x86): """Return True on OpenStack compute and nova instances.""" m_is_x86.return_value = True openstack_product_names = ['OpenStack Nova', 'OpenStack Compute'] for product_name in openstack_product_names: m_dmi.return_value = product_name self.assertTrue( ds.detect_openstack(), 'Failed to detect_openstack')
def test_detect_openstack_opentelekomcloud_chassis_asset_tag(self, m_dmi, m_is_x86): """Return True on OpenStack reporting OpenTelekomCloud asset-tag.""" m_is_x86.return_value = True def fake_dmi_read(dmi_key): if dmi_key == 'system-product-name': return 'HVM domU' # Nothing 'openstackish' on OpenTelekomCloud if dmi_key == 'chassis-asset-tag': return 'OpenTelekomCloud' assert False, 'Unexpected dmi read of %s' % dmi_key m_dmi.side_effect = fake_dmi_read self.assertTrue( ds.detect_openstack(), 'Expected detect_openstack == True on OpenTelekomCloud')
def test_not_detect_openstack_intel_x86_ec2(self, m_dmi, m_proc_env, m_is_x86): """Return False on EC2 platforms.""" m_is_x86.return_value = True # No product_name in proc/1/environ m_proc_env.return_value = {'HOME': '/'} def fake_dmi_read(dmi_key): if dmi_key == 'system-product-name': return 'HVM domU' # Nothing 'openstackish' on EC2 if dmi_key == 'chassis-asset-tag': return '' # Empty string on EC2 assert False, 'Unexpected dmi read of %s' % dmi_key m_dmi.side_effect = fake_dmi_read self.assertFalse( ds.detect_openstack(), 'Expected detect_openstack == False on EC2') m_proc_env.assert_called_with(1)
def test_successful(self): _register_uris(self.VERSION, EC2_FILES, EC2_META, OS_FILES) f = ds.read_metadata_service(BASE_URL, version=self.VERSION) self.assertEquals(VENDOR_DATA, f.get('vendordata')) self.assertEquals(CONTENT_0, f['files']['/etc/foo.cfg']) self.assertEquals(CONTENT_1, f['files']['/etc/bar/bar.cfg']) self.assertEquals(2, len(f['files'])) self.assertEquals(USER_DATA, f.get('userdata')) self.assertEquals(EC2_META, f.get('ec2-metadata')) self.assertEquals(2, f.get('version')) metadata = f['metadata'] self.assertEquals('nova', metadata.get('availability_zone')) self.assertEquals('sm-foo-test.novalocal', metadata.get('hostname')) self.assertEquals('sm-foo-test.novalocal', metadata.get('local-hostname')) self.assertEquals('sm-foo-test', metadata.get('name')) self.assertEquals('b0fa911b-69d4-4476-bbe2-1c92bff6535c', metadata.get('uuid')) self.assertEquals('b0fa911b-69d4-4476-bbe2-1c92bff6535c', metadata.get('instance-id'))
def test_detect_openstack_by_proc_1_environ(self, m_dmi, m_proc_env, m_is_x86): """Return True when nova product_name specified in /proc/1/environ.""" m_is_x86.return_value = True # Nova product_name in proc/1/environ m_proc_env.return_value = { 'HOME': '/', 'product_name': 'OpenStack Nova'} def fake_dmi_read(dmi_key): if dmi_key == 'system-product-name': return 'HVM domU' # Nothing 'openstackish' if dmi_key == 'chassis-asset-tag': return '' # Nothin 'openstackish' assert False, 'Unexpected dmi read of %s' % dmi_key m_dmi.side_effect = fake_dmi_read self.assertTrue( ds.detect_openstack(), 'Expected detect_openstack == True on OpenTelekomCloud') m_proc_env.assert_called_with(1)
def test_disabled_datasource(self): os_files = copy.deepcopy(OS_FILES) os_meta = copy.deepcopy(OSTACK_META) os_meta['meta'] = { 'dsmode': 'disabled', } for k in list(os_files.keys()): if k.endswith('meta_data.json'): os_files[k] = json.dumps(os_meta) _register_uris(self.VERSION, {}, {}, os_files) ds_os = ds.DataSourceOpenStack(settings.CFG_BUILTIN, None, helpers.Paths({'run_dir': self.tmp})) ds_os.ds_cfg = { 'max_wait': 0, 'timeout': 0, } self.assertIsNone(ds_os.version) found = ds_os.get_data() self.assertFalse(found) self.assertIsNone(ds_os.version)
def test_bad_datasource_meta(self): os_files = copy.deepcopy(OS_FILES) for k in list(os_files.keys()): if k.endswith("meta_data.json"): os_files[k] = "{" # some invalid json _register_uris(self.VERSION, {}, {}, os_files) ds_os = ds.DataSourceOpenStack( settings.CFG_BUILTIN, None, helpers.Paths({"run_dir": self.tmp}) ) self.assertIsNone(ds_os.version) mock_path = MOCK_PATH + "detect_openstack" with test_helpers.mock.patch(mock_path) as m_detect_os: m_detect_os.return_value = True found = ds_os.get_data() self.assertFalse(found) self.assertIsNone(ds_os.version) self.assertIn( "InvalidMetaDataException: Broken metadata address" " http://169.254.169.25", self.logs.getvalue(), )
def test_network_config_from_network_json(self): """The datasource gets network_config from network_data.json.""" mock_path = MOCK_PATH + 'openstack.convert_net_json' example_cfg = {'version': 1, 'config': []} ds_os = ds.DataSourceOpenStack(settings.CFG_BUILTIN, None, helpers.Paths({'run_dir': self.tmp})) sample_json = { 'links': [{ 'ethernet_mac_address': 'mymac' }], 'networks': [], 'services': [] } ds_os.ds_cfg = {'apply_network_config': True} # Default is False ds_os.network_json = sample_json with test_helpers.mock.patch(mock_path) as m_convert_json: m_convert_json.return_value = example_cfg self.assertEqual(example_cfg, ds_os.network_config) self.assertIn('network config provided via network_json', self.logs.getvalue()) m_convert_json.assert_called_with(sample_json, known_macs=None)
def test_datasource(self, m_dhcp): _register_uris(self.VERSION, EC2_FILES, EC2_META, OS_FILES) ds_os = ds.DataSourceOpenStack(settings.CFG_BUILTIN, None, helpers.Paths({'run_dir': self.tmp})) self.assertIsNone(ds_os.version) mock_path = MOCK_PATH + 'detect_openstack' with test_helpers.mock.patch(mock_path) as m_detect_os: m_detect_os.return_value = True found = ds_os.get_data() self.assertTrue(found) self.assertEqual(2, ds_os.version) md = dict(ds_os.metadata) md.pop('instance-id', None) md.pop('local-hostname', None) self.assertEqual(OSTACK_META, md) self.assertEqual(EC2_META, ds_os.ec2_metadata) self.assertEqual(USER_DATA, ds_os.userdata_raw) self.assertEqual(2, len(ds_os.files)) self.assertEqual(VENDOR_DATA, ds_os.vendordata_pure) self.assertIsNone(ds_os.vendordata_raw) m_dhcp.assert_not_called()
def test_wb__crawl_metadata_does_not_persist(self): """_crawl_metadata returns current metadata and does not cache.""" _register_uris(self.VERSION, EC2_FILES, EC2_META, OS_FILES) ds_os = ds.DataSourceOpenStack( settings.CFG_BUILTIN, None, helpers.Paths({"run_dir": self.tmp}) ) crawled_data = ds_os._crawl_metadata() self.assertEqual(UNSET, ds_os.ec2_metadata) self.assertIsNone(ds_os.userdata_raw) self.assertEqual(0, len(ds_os.files)) self.assertIsNone(ds_os.vendordata_raw) self.assertEqual( [ "dsmode", "ec2-metadata", "files", "metadata", "networkdata", "userdata", "vendordata", "vendordata2", "version", ], sorted(crawled_data.keys()), ) self.assertEqual("local", crawled_data["dsmode"]) self.assertEqual(EC2_META, crawled_data["ec2-metadata"]) self.assertEqual(2, len(crawled_data["files"])) md = copy.deepcopy(crawled_data["metadata"]) md.pop("instance-id") md.pop("local-hostname") self.assertEqual(OSTACK_META, md) self.assertEqual( json.loads(OS_FILES["openstack/latest/network_data.json"]), crawled_data["networkdata"], ) self.assertEqual(USER_DATA, crawled_data["userdata"]) self.assertEqual(VENDOR_DATA, crawled_data["vendordata"]) self.assertEqual(VENDOR_DATA2, crawled_data["vendordata2"]) self.assertEqual(2, crawled_data["version"])
def test_detect_openstack_by_proc_1_environ(self, m_dmi, m_proc_env, m_is_x86): """Return True when nova product_name specified in /proc/1/environ.""" m_is_x86.return_value = True # Nova product_name in proc/1/environ m_proc_env.return_value = { 'HOME': '/', 'product_name': 'OpenStack Nova' } def fake_dmi_read(dmi_key): if dmi_key == 'system-product-name': return 'HVM domU' # Nothing 'openstackish' if dmi_key == 'chassis-asset-tag': return '' # Nothin 'openstackish' assert False, 'Unexpected dmi read of %s' % dmi_key m_dmi.side_effect = fake_dmi_read self.assertTrue( ds.detect_openstack(), 'Expected detect_openstack == True on OpenTelekomCloud') m_proc_env.assert_called_with(1)
def test_disabled_datasource(self): os_files = copy.deepcopy(OS_FILES) os_meta = copy.deepcopy(OSTACK_META) os_meta["meta"] = { "dsmode": "disabled", } for k in list(os_files.keys()): if k.endswith("meta_data.json"): os_files[k] = json.dumps(os_meta) _register_uris(self.VERSION, {}, {}, os_files) ds_os = ds.DataSourceOpenStack(settings.CFG_BUILTIN, None, helpers.Paths({"run_dir": self.tmp})) ds_os.ds_cfg = { "max_wait": 0, "timeout": 0, } self.assertIsNone(ds_os.version) mock_path = MOCK_PATH + "detect_openstack" with test_helpers.mock.patch(mock_path) as m_detect_os: m_detect_os.return_value = True found = ds_os.get_data() self.assertFalse(found) self.assertIsNone(ds_os.version)
def test_detect_openstack_by_proc_1_environ(self, m_dmi, m_proc_env, m_is_x86): """Return True when nova product_name specified in /proc/1/environ.""" m_is_x86.return_value = True # Nova product_name in proc/1/environ m_proc_env.return_value = { "HOME": "/", "product_name": "OpenStack Nova", } def fake_dmi_read(dmi_key): if dmi_key == "system-product-name": return "HVM domU" # Nothing 'openstackish' if dmi_key == "chassis-asset-tag": return "" # Nothin 'openstackish' assert False, "Unexpected dmi read of %s" % dmi_key m_dmi.side_effect = fake_dmi_read self.assertTrue( ds.detect_openstack(), "Expected detect_openstack == True on OpenTelekomCloud", ) m_proc_env.assert_called_with(1)
def test_detect_openstack_non_intel_x86(self, m_is_x86): """Return True on non-intel platforms because dmi isn't conclusive.""" m_is_x86.return_value = False self.assertTrue( ds.detect_openstack(), 'Expected detect_openstack == True')
def _read_metadata_service(): return ds.read_metadata_service(BASE_URL, retries=0, timeout=0.1)