|
17 | 17 | _DEFAULT_QEMU_CMD, _DEFAULT_REPO_CMD, \ |
18 | 18 | _DEFAULT_SHARED_FS_TYPE, _DEFAULT_VIRTIOFSD, \ |
19 | 19 | _DEFAULT_SYNC_METHOD, _DEFAULT_SYNC_INCLUDE, \ |
20 | | - _DEFAULT_SYNC_EXCLUDE |
| 20 | + _DEFAULT_SYNC_EXCLUDE, \ |
| 21 | + RiftDeprecatedConfWarning |
21 | 22 |
|
22 | 23 | class ConfigTest(RiftTestCase): |
23 | 24 |
|
@@ -1273,6 +1274,217 @@ def test_load_record_merged(self): |
1273 | 1274 | self.assertEqual(record0['value2'], 20) |
1274 | 1275 | self.assertEqual(record0['value3'], 3) |
1275 | 1276 |
|
| 1277 | + def test_deprecated_param(self): |
| 1278 | + """Load deprecated parameter""" |
| 1279 | + Config.SYNTAX.update({ |
| 1280 | + 'new_parameter': {}, |
| 1281 | + 'old_parameter': { |
| 1282 | + 'deprecated': 'new_parameter', |
| 1283 | + }, |
| 1284 | + }) |
| 1285 | + cfgfile = make_temp_file( |
| 1286 | + textwrap.dedent( |
| 1287 | + """ |
| 1288 | + old_parameter: test_value |
| 1289 | + """ |
| 1290 | + ) |
| 1291 | + ) |
| 1292 | + config = Config() |
| 1293 | + with self.assertWarns(RiftDeprecatedConfWarning) as cm: |
| 1294 | + config.load(cfgfile.name) |
| 1295 | + self.assertEqual( |
| 1296 | + config.get('new_parameter'), 'test_value' |
| 1297 | + ) |
| 1298 | + self.assertIsNone(config.get('old_parameter')) |
| 1299 | + self.assertEqual( |
| 1300 | + str(cm.warning), |
| 1301 | + "Configuration parameter old_parameter is deprecated, use " |
| 1302 | + "new_parameter instead" |
| 1303 | + ) |
| 1304 | + # Check set() on deprecated parameter raise declaration error. |
| 1305 | + with self.assertRaisesRegex( |
| 1306 | + DeclError, |
| 1307 | + "^Parameter old_parameter is deprecated, use new_parameter instead$" |
| 1308 | + ): |
| 1309 | + config.set('old_parameter', 'another value') |
| 1310 | + |
| 1311 | + |
| 1312 | + def test_deprecated_param_with_arch(self): |
| 1313 | + """Load deprecated parameter with arch override""" |
| 1314 | + Config.SYNTAX.update({ |
| 1315 | + 'new_parameter_1': {}, |
| 1316 | + 'old_parameter_1': { |
| 1317 | + 'deprecated': 'new_parameter_1', |
| 1318 | + }, |
| 1319 | + 'new_parameter_2': {}, |
| 1320 | + 'old_parameter_2': { |
| 1321 | + 'deprecated': 'new_parameter_2', |
| 1322 | + }, |
| 1323 | + }) |
| 1324 | + cfgfile = make_temp_file( |
| 1325 | + textwrap.dedent( |
| 1326 | + """ |
| 1327 | + arch: |
| 1328 | + - x86_64 |
| 1329 | + - aarch64 |
| 1330 | + old_parameter_1: generic_value |
| 1331 | + aarch64: |
| 1332 | + old_parameter_1: aarch64_value |
| 1333 | + old_parameter_2: generic_value_$arch |
| 1334 | + """ |
| 1335 | + ) |
| 1336 | + ) |
| 1337 | + config = Config() |
| 1338 | + with self.assertWarns(RiftDeprecatedConfWarning): |
| 1339 | + config.load(cfgfile.name) |
| 1340 | + self.assertEqual(config.get('new_parameter_1'), 'generic_value') |
| 1341 | + self.assertEqual( |
| 1342 | + config.get('new_parameter_1', arch='x86_64'), 'generic_value' |
| 1343 | + ) |
| 1344 | + self.assertEqual( |
| 1345 | + config.get('new_parameter_1', arch='aarch64'), 'aarch64_value' |
| 1346 | + ) |
| 1347 | + self.assertEqual( |
| 1348 | + config.get('new_parameter_2', arch='x86_64'), 'generic_value_x86_64' |
| 1349 | + ) |
| 1350 | + self.assertEqual( |
| 1351 | + config.get('new_parameter_2', arch='aarch64'), |
| 1352 | + 'generic_value_aarch64' |
| 1353 | + ) |
| 1354 | + self.assertIsNone(config.get('old_parameter_1')) |
| 1355 | + self.assertIsNone(config.get('old_parameter_2')) |
| 1356 | + |
| 1357 | + def test_deprecated_param_subdict(self): |
| 1358 | + """Load deprecated parameter moved in subdict""" |
| 1359 | + Config.SYNTAX.update({ |
| 1360 | + 'new_parameter': { |
| 1361 | + 'check': 'dict', |
| 1362 | + 'syntax': { |
| 1363 | + 'sub_dict1': { |
| 1364 | + 'check': 'dict', |
| 1365 | + 'syntax': { |
| 1366 | + 'new_key1': {} |
| 1367 | + }, |
| 1368 | + }, |
| 1369 | + }, |
| 1370 | + }, |
| 1371 | + 'old_parameter': { |
| 1372 | + 'deprecated': 'new_parameter.sub_dict1.new_key1', |
| 1373 | + }, |
| 1374 | + }) |
| 1375 | + cfgfile = make_temp_file( |
| 1376 | + textwrap.dedent( |
| 1377 | + """ |
| 1378 | + old_parameter: test_value |
| 1379 | + """ |
| 1380 | + ) |
| 1381 | + ) |
| 1382 | + config = Config() |
| 1383 | + with self.assertWarns(RiftDeprecatedConfWarning) as cm: |
| 1384 | + config.load(cfgfile.name) |
| 1385 | + self.assertEqual( |
| 1386 | + config.get('new_parameter').get('sub_dict1').get('new_key1'), 'test_value' |
| 1387 | + ) |
| 1388 | + self.assertIsNone(config.get('old_parameter')) |
| 1389 | + self.assertEqual( |
| 1390 | + str(cm.warning), |
| 1391 | + "Configuration parameter old_parameter is deprecated, use " |
| 1392 | + "new_parameter > sub_dict1 > new_key1 instead" |
| 1393 | + ) |
| 1394 | + |
| 1395 | + def test_deprecated_param_invalid_type(self): |
| 1396 | + """Deprecated parameter with invalid type error""" |
| 1397 | + Config.SYNTAX.update({ |
| 1398 | + 'new_parameter': { |
| 1399 | + 'check': 'digit', |
| 1400 | + }, |
| 1401 | + 'old_parameter': { |
| 1402 | + 'deprecated': 'new_parameter', |
| 1403 | + }, |
| 1404 | + }) |
| 1405 | + cfgfile = make_temp_file( |
| 1406 | + textwrap.dedent( |
| 1407 | + """ |
| 1408 | + old_parameter: test_value |
| 1409 | + """ |
| 1410 | + ) |
| 1411 | + ) |
| 1412 | + config = Config() |
| 1413 | + # In this case, Config.set() should emit a declaration error on |
| 1414 | + # new_parameter. Also check warning is emited for old_parameter. |
| 1415 | + with self.assertWarns(RiftDeprecatedConfWarning) as aw: |
| 1416 | + with self.assertRaisesRegex( |
| 1417 | + DeclError, |
| 1418 | + "Bad data type str for 'new_parameter'" |
| 1419 | + ): |
| 1420 | + config.load(cfgfile.name) |
| 1421 | + self.assertEqual( |
| 1422 | + str(aw.warning), |
| 1423 | + "Configuration parameter old_parameter is deprecated, use " |
| 1424 | + "new_parameter instead" |
| 1425 | + ) |
| 1426 | + |
| 1427 | + def test_deprecated_param_unexisting_replacement(self): |
| 1428 | + """Deprecated parameter without replacement error""" |
| 1429 | + Config.SYNTAX.update({ |
| 1430 | + 'old_parameter': { |
| 1431 | + 'deprecated': 'new_parameter', |
| 1432 | + }, |
| 1433 | + }) |
| 1434 | + cfgfile = make_temp_file( |
| 1435 | + textwrap.dedent( |
| 1436 | + """ |
| 1437 | + old_parameter: test_value |
| 1438 | + """ |
| 1439 | + ) |
| 1440 | + ) |
| 1441 | + config = Config() |
| 1442 | + # In this case, Config.set() should emit a declaration error. |
| 1443 | + with self.assertWarns(RiftDeprecatedConfWarning) as aw: |
| 1444 | + with self.assertRaisesRegex( |
| 1445 | + DeclError, "Unknown 'new_parameter' key"): |
| 1446 | + config.load(cfgfile.name) |
| 1447 | + self.assertEqual( |
| 1448 | + str(aw.warning), |
| 1449 | + "Configuration parameter old_parameter is deprecated, use " |
| 1450 | + "new_parameter instead" |
| 1451 | + ) |
| 1452 | + |
| 1453 | + def test_deprecated_param_conflict(self): |
| 1454 | + """Load deprecated parameter conflict with replacement parameter""" |
| 1455 | + Config.SYNTAX.update({ |
| 1456 | + 'new_parameter': {}, |
| 1457 | + 'old_parameter': { |
| 1458 | + 'deprecated': 'new_parameter', |
| 1459 | + }, |
| 1460 | + }) |
| 1461 | + cfgfile = make_temp_file( |
| 1462 | + textwrap.dedent( |
| 1463 | + """ |
| 1464 | + new_parameter: test_new_value |
| 1465 | + old_parameter: test_old_value |
| 1466 | + """ |
| 1467 | + ) |
| 1468 | + ) |
| 1469 | + config = Config() |
| 1470 | + with self.assertWarns(RiftDeprecatedConfWarning) as aw: |
| 1471 | + with self.assertLogs(level='WARNING') as al: |
| 1472 | + config.load(cfgfile.name) |
| 1473 | + self.assertEqual( |
| 1474 | + config.get('new_parameter'), 'test_new_value' |
| 1475 | + ) |
| 1476 | + self.assertIsNone(config.get('old_parameter')) |
| 1477 | + self.assertEqual( |
| 1478 | + str(aw.warning), |
| 1479 | + "Configuration parameter old_parameter is deprecated, use " |
| 1480 | + "new_parameter instead" |
| 1481 | + ) |
| 1482 | + self.assertEqual( |
| 1483 | + al.output, |
| 1484 | + ['WARNING:root:Both deprecated parameter old_parameter and new ' |
| 1485 | + 'parameter new_parameter are declared in configuration, ' |
| 1486 | + 'deprecated parameter old_parameter is ignored'] |
| 1487 | + ) |
1276 | 1488 |
|
1277 | 1489 | class ProjectConfigTest(RiftTestCase): |
1278 | 1490 |
|
|
0 commit comments