From 4a3071435f62d52733507a19f64a828fc71a687f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20=C5=A0tevko?= Date: Fri, 16 Oct 2020 19:55:36 +0200 Subject: [PATCH 1/5] Plugin version comparison should work for all cases --- aws_gate/decorators.py | 5 ++--- tests/unit/test_decorators.py | 12 ++++++++---- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/aws_gate/decorators.py b/aws_gate/decorators.py index 1f702f1f..984b7e27 100644 --- a/aws_gate/decorators.py +++ b/aws_gate/decorators.py @@ -2,6 +2,7 @@ import os from subprocess import PIPE +from packaging.version import parse as parse_version from wrapt import decorator from aws_gate.constants import PLUGIN_INSTALL_PATH, PLUGIN_NAME @@ -43,9 +44,7 @@ def wrapper( required_version, ) - if version and int(version.replace(".", "")) < int( - required_version.replace(".", "") - ): + if version and parse_version(version) < parse_version(required_version): raise ValueError("Invalid plugin version: {}".format(version)) return wrapped_function(*args, **kwargs) diff --git a/tests/unit/test_decorators.py b/tests/unit/test_decorators.py index 60acf075..175ae617 100644 --- a/tests/unit/test_decorators.py +++ b/tests/unit/test_decorators.py @@ -42,7 +42,7 @@ def test_function(): def test_plugin_version(mocker): - m = mocker.patch("aws_gate.decorators.execute_plugin", return_value="1.1.23.0") + m = mocker.patch("aws_gate.decorators.execute_plugin", return_value="1.2.7.0") @plugin_version("1.1.23.0") def test_function(): @@ -52,10 +52,14 @@ def test_function(): assert m.call_args == mocker.call(["--version"], stdout=PIPE, stderr=PIPE) -def test_plugin_version_bad_version(mocker): - mocker.patch("aws_gate.decorators.execute_plugin", return_value="1.1.23.0") +@pytest.mark.parametrize( + "plugin_version,required_version", + [("1.2.7.0", "1.1.25.0"), ("1.1.23.0", "1.1.25.0")], +) +def test_plugin_version_bad_version(mocker, plugin_version, required_version): + mocker.patch("aws_gate.decorators.execute_plugin", return_value=plugin_version) - @plugin_version("1.1.25.0") + @plugin_version(required_version) def test_function(): return "executed" From 279b0476b72480c159c95985eeddc0caaa5fe58e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20=C5=A0tevko?= Date: Fri, 16 Oct 2020 20:12:28 +0200 Subject: [PATCH 2/5] Plugin version comparison should work for all cases --- tests/unit/test_decorators.py | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/tests/unit/test_decorators.py b/tests/unit/test_decorators.py index 175ae617..8c73aac0 100644 --- a/tests/unit/test_decorators.py +++ b/tests/unit/test_decorators.py @@ -52,14 +52,10 @@ def test_function(): assert m.call_args == mocker.call(["--version"], stdout=PIPE, stderr=PIPE) -@pytest.mark.parametrize( - "plugin_version,required_version", - [("1.2.7.0", "1.1.25.0"), ("1.1.23.0", "1.1.25.0")], -) -def test_plugin_version_bad_version(mocker, plugin_version, required_version): - mocker.patch("aws_gate.decorators.execute_plugin", return_value=plugin_version) +def test_plugin_version_bad_version(mocker): + mocker.patch("aws_gate.decorators.execute_plugin", return_value="1.1.23.0") - @plugin_version(required_version) + @plugin_version("1.1.25.0") def test_function(): return "executed" From 5c254e0a2e44a59b07530e51de27d08eeb9a47c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20=C5=A0tevko?= Date: Fri, 16 Oct 2020 20:13:46 +0200 Subject: [PATCH 3/5] Add dependency on packaging --- requirements/requirements.txt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/requirements/requirements.txt b/requirements/requirements.txt index aba8563a..c713f44e 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -1,7 +1,8 @@ boto3~=1.15.15 +cryptography==3.1.1 marshmallow==3.8.0 +packaging==1.15.0 PyYAML>=5.1,<5.4 requests==2.24.0 -cryptography==3.1.1 -wrapt==1.12.1 unix-ar==0.2.1 +wrapt==1.12.1 From a634bdda61391b140e03447a736fd69d0f28344a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20=C5=A0tevko?= Date: Fri, 16 Oct 2020 20:17:05 +0200 Subject: [PATCH 4/5] Change version number --- requirements/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/requirements.txt b/requirements/requirements.txt index c713f44e..1dd6bbf0 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -1,7 +1,7 @@ boto3~=1.15.15 cryptography==3.1.1 marshmallow==3.8.0 -packaging==1.15.0 +packaging==20.4 PyYAML>=5.1,<5.4 requests==2.24.0 unix-ar==0.2.1 From 8e79d1c5e30e42b40cdda47545aa2d05c6deef97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20=C5=A0tevko?= Date: Sat, 17 Oct 2020 00:23:59 +0200 Subject: [PATCH 5/5] Add more test version numbers --- tests/unit/test_decorators.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/tests/unit/test_decorators.py b/tests/unit/test_decorators.py index 8c73aac0..7437fbc6 100644 --- a/tests/unit/test_decorators.py +++ b/tests/unit/test_decorators.py @@ -41,8 +41,9 @@ def test_function(): test_function() -def test_plugin_version(mocker): - m = mocker.patch("aws_gate.decorators.execute_plugin", return_value="1.2.7.0") +@pytest.mark.parametrize("version", ["1.1.23.0", "1.2.7.0"]) +def test_plugin_version(mocker, version): + m = mocker.patch("aws_gate.decorators.execute_plugin", return_value=version) @plugin_version("1.1.23.0") def test_function(): @@ -52,10 +53,11 @@ def test_function(): assert m.call_args == mocker.call(["--version"], stdout=PIPE, stderr=PIPE) -def test_plugin_version_bad_version(mocker): +@pytest.mark.parametrize("version", ["1.1.25.0", "1.2.7.0"]) +def test_plugin_version_bad_version(mocker, version): mocker.patch("aws_gate.decorators.execute_plugin", return_value="1.1.23.0") - @plugin_version("1.1.25.0") + @plugin_version(version) def test_function(): return "executed"