|
1 | 1 | import sys
|
2 | 2 | from collections import namedtuple
|
3 | 3 | from unittest import TestCase, mock
|
| 4 | +from unittest.mock import patch |
4 | 5 |
|
5 | 6 | import pytest
|
| 7 | +from parameterized import parameterized |
6 | 8 |
|
7 | 9 | from aws_lambda_builders.architecture import ARM64, X86_64
|
8 | 10 | from aws_lambda_builders.workflows.python_pip.utils import OSUtils
|
9 | 11 | from aws_lambda_builders.workflows.python_pip.compat import pip_no_compile_c_env_vars
|
10 | 12 | from aws_lambda_builders.workflows.python_pip.compat import pip_no_compile_c_shim
|
11 |
| -from aws_lambda_builders.workflows.python_pip.packager import DependencyBuilder |
| 13 | +from aws_lambda_builders.workflows.python_pip.packager import DependencyBuilder, SDistMetadataFetcher |
12 | 14 | from aws_lambda_builders.workflows.python_pip.packager import PythonPipDependencyBuilder
|
13 | 15 | from aws_lambda_builders.workflows.python_pip.packager import Package
|
14 | 16 | from aws_lambda_builders.workflows.python_pip.packager import PipRunner
|
@@ -343,3 +345,115 @@ def test_check_pip_runner_string_pip(self):
|
343 | 345 |
|
344 | 346 | pip_runner_string = fake_osutils.popens[0][0][0][2].split(";")[-1:][0]
|
345 | 347 | self.assertIn("main", pip_runner_string)
|
| 348 | + |
| 349 | + |
| 350 | +class TestSDistMetadataFetcher(TestCase): |
| 351 | + @parameterized.expand( |
| 352 | + [ |
| 353 | + (False,), |
| 354 | + (True,), |
| 355 | + ] |
| 356 | + ) |
| 357 | + @patch("aws_lambda_builders.workflows.python_pip.packager.SDistMetadataFetcher._unpack_sdist_into_dir") |
| 358 | + @patch("aws_lambda_builders.workflows.python_pip.packager.SDistMetadataFetcher._get_pkg_info_filepath") |
| 359 | + @patch("aws_lambda_builders.workflows.python_pip.packager.SDistMetadataFetcher._get_name_version") |
| 360 | + @patch("aws_lambda_builders.workflows.python_pip.packager.SDistMetadataFetcher._get_fallback_pkg_info_filepath") |
| 361 | + @patch("aws_lambda_builders.workflows.python_pip.packager.SDistMetadataFetcher._is_default_setuptools_values") |
| 362 | + @patch("aws_lambda_builders.workflows.python_pip.utils.OSUtils.file_exists") |
| 363 | + @patch("aws_lambda_builders.workflows.python_pip.utils.OSUtils.tempdir") |
| 364 | + def test_get_package_name_version_fails_fallback( |
| 365 | + self, |
| 366 | + fallback_file_exists, |
| 367 | + tempdir_mock, |
| 368 | + file_exists_mock, |
| 369 | + is_default_values_mock, |
| 370 | + get_fallback_mock, |
| 371 | + get_name_ver_mock, |
| 372 | + get_pkg_mock, |
| 373 | + unpack_mock, |
| 374 | + ): |
| 375 | + """ |
| 376 | + Tests if both our generated PKG-INFO and PKG-INFO are missing/invalid |
| 377 | + """ |
| 378 | + file_exists_mock.return_value = fallback_file_exists |
| 379 | + is_default_values_mock.return_value = True |
| 380 | + |
| 381 | + original_name = "UNKNOWN" |
| 382 | + original_version = "5.5.0" |
| 383 | + |
| 384 | + get_name_ver_mock.side_effect = [(original_name, original_version), ("UNKNOWN", "0.0.0")] |
| 385 | + |
| 386 | + sdist = SDistMetadataFetcher(OSUtils) |
| 387 | + name, version = sdist.get_package_name_and_version(mock.Mock()) |
| 388 | + |
| 389 | + self.assertEqual(name, original_name) |
| 390 | + self.assertEqual(version, original_version) |
| 391 | + |
| 392 | + @parameterized.expand( |
| 393 | + [ |
| 394 | + (("UNKNOWN", "1.2.3"),), |
| 395 | + (("unknown", "1.2.3"),), |
| 396 | + (("foobar", "0.0.0"),), |
| 397 | + ] |
| 398 | + ) |
| 399 | + @patch("aws_lambda_builders.workflows.python_pip.packager.SDistMetadataFetcher._unpack_sdist_into_dir") |
| 400 | + @patch("aws_lambda_builders.workflows.python_pip.packager.SDistMetadataFetcher._get_pkg_info_filepath") |
| 401 | + @patch("aws_lambda_builders.workflows.python_pip.packager.SDistMetadataFetcher._get_name_version") |
| 402 | + @patch("aws_lambda_builders.workflows.python_pip.packager.SDistMetadataFetcher._get_fallback_pkg_info_filepath") |
| 403 | + @patch("aws_lambda_builders.workflows.python_pip.utils.OSUtils.file_exists") |
| 404 | + @patch("aws_lambda_builders.workflows.python_pip.utils.OSUtils.tempdir") |
| 405 | + def test_get_package_name_version_fallback( |
| 406 | + self, |
| 407 | + name_version, |
| 408 | + tempdir_mock, |
| 409 | + file_exists_mock, |
| 410 | + get_fallback_mock, |
| 411 | + get_name_ver_mock, |
| 412 | + get_pkg_mock, |
| 413 | + unpack_mock, |
| 414 | + ): |
| 415 | + """ |
| 416 | + Tests if we have UNKNOWN and if we use the fall back values |
| 417 | + """ |
| 418 | + fallback_name = "fallback" |
| 419 | + fallback_version = "1.0.0" |
| 420 | + |
| 421 | + get_name_ver_mock.side_effect = [name_version, (fallback_name, fallback_version)] |
| 422 | + |
| 423 | + sdist = SDistMetadataFetcher(OSUtils) |
| 424 | + name, version = sdist.get_package_name_and_version(mock.Mock()) |
| 425 | + |
| 426 | + self.assertEqual(name, fallback_name) |
| 427 | + self.assertEqual(version, fallback_version) |
| 428 | + |
| 429 | + @patch("aws_lambda_builders.workflows.python_pip.packager.SDistMetadataFetcher._unpack_sdist_into_dir") |
| 430 | + @patch("aws_lambda_builders.workflows.python_pip.packager.SDistMetadataFetcher._get_pkg_info_filepath") |
| 431 | + @patch("aws_lambda_builders.workflows.python_pip.packager.SDistMetadataFetcher._get_name_version") |
| 432 | + @patch("aws_lambda_builders.workflows.python_pip.packager.SDistMetadataFetcher._get_fallback_pkg_info_filepath") |
| 433 | + @patch("aws_lambda_builders.workflows.python_pip.utils.OSUtils.file_exists") |
| 434 | + @patch("aws_lambda_builders.workflows.python_pip.utils.OSUtils.tempdir") |
| 435 | + def test_get_package_name_version( |
| 436 | + self, |
| 437 | + tempdir_mock, |
| 438 | + file_exists_mock, |
| 439 | + get_fallback_mock, |
| 440 | + get_name_ver_mock, |
| 441 | + get_pkg_mock, |
| 442 | + unpack_mock, |
| 443 | + ): |
| 444 | + """ |
| 445 | + Tests return original results |
| 446 | + """ |
| 447 | + not_default_name = "real" |
| 448 | + not_default_version = "1.2.3" |
| 449 | + |
| 450 | + fallback_name = "fallback" |
| 451 | + fallback_version = "1.0.0" |
| 452 | + |
| 453 | + get_name_ver_mock.side_effect = [(not_default_name, not_default_version), (fallback_name, fallback_version)] |
| 454 | + |
| 455 | + sdist = SDistMetadataFetcher(OSUtils) |
| 456 | + name, version = sdist.get_package_name_and_version(mock.Mock()) |
| 457 | + |
| 458 | + self.assertEqual(name, not_default_name) |
| 459 | + self.assertEqual(version, not_default_version) |
0 commit comments