123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 |
- import pytest
- import aos_version
- from collections import namedtuple
- Package = namedtuple('Package', ['name', 'version'])
- expected_pkgs = {
- "spam": {
- "name": "spam",
- "version": "3.2.1",
- "check_multi": False,
- },
- "eggs": {
- "name": "eggs",
- "version": "3.2.1",
- "check_multi": False,
- },
- }
- @pytest.mark.parametrize('pkgs,expected_pkgs_dict', [
- (
- # all found
- [Package('spam', '3.2.1'), Package('eggs', '3.2.1')],
- expected_pkgs,
- ),
- (
- # found with more specific version
- [Package('spam', '3.2.1'), Package('eggs', '3.2.1.5')],
- expected_pkgs,
- ),
- (
- [Package('ovs', '2.6'), Package('ovs', '2.4')],
- {
- "ovs": {
- "name": "ovs",
- "version": ["2.6", "2.7"],
- "check_multi": False,
- }
- },
- ),
- (
- [Package('ovs', '2.7')],
- {
- "ovs": {
- "name": "ovs",
- "version": ["2.6", "2.7"],
- "check_multi": False,
- }
- },
- ),
- ])
- def test_check_precise_version_found(pkgs, expected_pkgs_dict):
- aos_version._check_precise_version_found(pkgs, expected_pkgs_dict)
- @pytest.mark.parametrize('pkgs,expect_not_found', [
- (
- [],
- {
- "spam": {
- "name": "spam",
- "version": "3.2.1",
- "check_multi": False,
- },
- "eggs": {
- "name": "eggs",
- "version": "3.2.1",
- "check_multi": False,
- }
- }, # none found
- ),
- (
- [Package('spam', '3.2.1')],
- {
- "eggs": {
- "name": "eggs",
- "version": "3.2.1",
- "check_multi": False,
- }
- }, # completely missing
- ),
- (
- [Package('spam', '3.2.1'), Package('eggs', '3.3.2')],
- {
- "eggs": {
- "name": "eggs",
- "version": "3.2.1",
- "check_multi": False,
- }
- }, # not the right version
- ),
- (
- [Package('eggs', '1.2.3'), Package('eggs', '3.2.1.5')],
- {
- "spam": {
- "name": "spam",
- "version": "3.2.1",
- "check_multi": False,
- }
- }, # eggs found with multiple versions
- ),
- ])
- def test_check_precise_version_found_fail(pkgs, expect_not_found):
- with pytest.raises(aos_version.PreciseVersionNotFound) as e:
- aos_version._check_precise_version_found(pkgs, expected_pkgs)
- assert list(expect_not_found.values()) == e.value.problem_pkgs
- @pytest.mark.parametrize('pkgs,expected_pkgs_dict', [
- (
- [],
- expected_pkgs,
- ),
- (
- # more precise but not strictly higher
- [Package('spam', '3.2.1.9')],
- expected_pkgs,
- ),
- (
- [Package('ovs', '2.7')],
- {
- "ovs": {
- "name": "ovs",
- "version": ["2.6", "2.7"],
- "check_multi": False,
- }
- },
- ),
- ])
- def test_check_higher_version_found(pkgs, expected_pkgs_dict):
- aos_version._check_higher_version_found(pkgs, expected_pkgs_dict)
- @pytest.mark.parametrize('pkgs,expected_pkgs_dict,expect_higher', [
- (
- [Package('spam', '3.3')],
- expected_pkgs,
- ['spam-3.3'], # lower precision, but higher
- ),
- (
- [Package('spam', '3.2.1'), Package('eggs', '3.3.2')],
- expected_pkgs,
- ['eggs-3.3.2'], # one too high
- ),
- (
- [Package('eggs', '1.2.3'), Package('eggs', '3.2.1.5'), Package('eggs', '3.4')],
- expected_pkgs,
- ['eggs-3.4'], # multiple versions, one is higher
- ),
- (
- [Package('eggs', '3.2.1'), Package('eggs', '3.4'), Package('eggs', '3.3')],
- expected_pkgs,
- ['eggs-3.4'], # multiple versions, two are higher
- ),
- (
- [Package('ovs', '2.8')],
- {
- "ovs": {
- "name": "ovs",
- "version": ["2.6", "2.7"],
- "check_multi": False,
- }
- },
- ['ovs-2.8'],
- ),
- ])
- def test_check_higher_version_found_fail(pkgs, expected_pkgs_dict, expect_higher):
- with pytest.raises(aos_version.FoundHigherVersion) as e:
- aos_version._check_higher_version_found(pkgs, expected_pkgs_dict)
- assert set(expect_higher) == set(e.value.problem_pkgs)
- @pytest.mark.parametrize('pkgs', [
- [],
- [Package('spam', '3.2.1')],
- [Package('spam', '3.2.1'), Package('eggs', '3.2.2')],
- ])
- def test_check_multi_minor_release(pkgs):
- aos_version._check_multi_minor_release(pkgs, expected_pkgs)
- @pytest.mark.parametrize('pkgs,expect_to_flag_pkgs', [
- (
- [Package('spam', '3.2.1'), Package('spam', '3.3.2')],
- ['spam'],
- ),
- (
- [Package('eggs', '1.2.3'), Package('eggs', '3.2.1.5'), Package('eggs', '3.4')],
- ['eggs'],
- ),
- ])
- def test_check_multi_minor_release_fail(pkgs, expect_to_flag_pkgs):
- with pytest.raises(aos_version.FoundMultiRelease) as e:
- aos_version._check_multi_minor_release(pkgs, expected_pkgs)
- assert set(expect_to_flag_pkgs) == set(e.value.problem_pkgs)
|