[v2] testing: add python-cryptography tests

Message ID 1504790742-27831-1-git-send-email-yegorslists@googlemail.com
State New
Headers show
Series
  • [v2] testing: add python-cryptography tests
Related show

Commit Message

Yegor Yefremov Sept. 7, 2017, 1:25 p.m.
From: Yegor Yefremov <yegorslists@googlemail.com>

Signed-off-by: Yegor Yefremov <yegorslists@googlemail.com>
---
Changes v1 -> v2:
  - rename test file to have only '_' delimiters (suggested by Ricardo Martincoski)
  - use intermediate class to avoid duplicate code (suggested by Ricardo Martincoski) 

 .gitlab-ci.yml                                     |  2 ++
 .../tests/package/test_python_cryptography.py      | 31 ++++++++++++++++++++++
 2 files changed, 33 insertions(+)
 create mode 100644 support/testing/tests/package/test_python_cryptography.py

Comments

Yegor Yefremov Sept. 7, 2017, 1:27 p.m. | #1
On Thu, Sep 7, 2017 at 3:25 PM,  <yegorslists@googlemail.com> wrote:
> From: Yegor Yefremov <yegorslists@googlemail.com>
>
> Signed-off-by: Yegor Yefremov <yegorslists@googlemail.com>
> ---
> Changes v1 -> v2:
>   - rename test file to have only '_' delimiters (suggested by Ricardo Martincoski)
>   - use intermediate class to avoid duplicate code (suggested by Ricardo Martincoski)
>
>  .gitlab-ci.yml                                     |  2 ++
>  .../tests/package/test_python_cryptography.py      | 31 ++++++++++++++++++++++
>  2 files changed, 33 insertions(+)
>  create mode 100644 support/testing/tests/package/test_python_cryptography.py
>
> diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
> index b44c935..091b016 100644
> --- a/.gitlab-ci.yml
> +++ b/.gitlab-ci.yml
> @@ -250,6 +250,8 @@ tests.package.test_ipython.TestIPythonPy2: *runtime_test
>  tests.package.test_ipython.TestIPythonPy3: *runtime_test
>  tests.package.test_python.TestPython2: *runtime_test
>  tests.package.test_python.TestPython3: *runtime_test
> +tests.package.test_python_cryptography.TestPythonPy2Cryptography: *runtime_test
> +tests.package.test_python_cryptography.TestPythonPy3Cryptography: *runtime_test
>  tests.toolchain.test_external.TestExternalToolchainBuildrootMusl: *runtime_test
>  tests.toolchain.test_external.TestExternalToolchainBuildrootuClibc: *runtime_test
>  tests.toolchain.test_external.TestExternalToolchainCCache: *runtime_test
> diff --git a/support/testing/tests/package/test_python_cryptography.py b/support/testing/tests/package/test_python_cryptography.py
> new file mode 100644
> index 0000000..b60152d
> --- /dev/null
> +++ b/support/testing/tests/package/test_python_cryptography.py
> @@ -0,0 +1,31 @@
> +import os
> +
> +from tests.package.test_python import TestPythonBase
> +
> +class TestPythonCryptography(TestPythonBase):
> +    def fernet_test(self, timeout=-1):
> +        cmd = self.interpreter + " -c 'from cryptography.fernet import Fernet;"
> +        cmd += "key = Fernet.generate_key();"
> +        cmd += "f = Fernet(key)'"
> +        _, exit_code = self.emulator.run(cmd, timeout)
> +        self.assertEqual(exit_code, 0)
> +
> +class TestPythonPy2Cryptography(TestPythonCryptography):
> +    config = TestPythonBase.config + \
> +"""
> +BR2_PACKAGE_PYTHON=y
> +BR2_PACKAGE_PYTHON_CRYPTOGRAPHY=y
> +"""
> +    def test_run(self):
> +        self.login()
> +        self.fernet_test(40)
> +
> +class TestPythonPy3Cryptography(TestPythonCryptography):
> +    config = TestPythonBase.config + \
> +"""
> +BR2_PACKAGE_PYTHON3=y
> +BR2_PACKAGE_PYTHON_CRYPTOGRAPHY=y
> +"""
> +    def test_run(self):
> +        self.login()
> +        self.fernet_test(40)
> --
> 2.1.4

Following patch [1] is required for error less execution in Python 2
environment.

[1] http://patchwork.ozlabs.org/patch/810953/

Yegor
Ricardo Martincoski Sept. 13, 2017, 3:18 a.m. | #2
Hello,

On Thu, Sep 07, 2017 at 10:25 AM, Yegor wrote:

> From: Yegor Yefremov <yegorslists@googlemail.com>
> 
> Signed-off-by: Yegor Yefremov <yegorslists@googlemail.com>

[code style follows test_python.py, let me fix both (and more) in a follow up
 series if this one gets applied now]
Reviewed-by: Ricardo Martincoski <ricardo.martincoski@gmail.com>

Thomas,
It's up to you to apply this now or to wait for a generic solution for all
python packages. I suppose the later will take a while.
Anyway, these test cases seem to be a good base to compare against the
auto-generated test cases for python packages.

[snip]
> +    def fernet_test(self, timeout=-1):
> +        cmd = self.interpreter + " -c 'from cryptography.fernet import Fernet;"
> +        cmd += "key = Fernet.generate_key();"
> +        cmd += "f = Fernet(key)'"
> +        _, exit_code = self.emulator.run(cmd, timeout)
> +        self.assertEqual(exit_code, 0)

This test could be expanded to catch also the missing hashlib dependency:
        out, exit_code = self.emulator.run(cmd, timeout)
        self.assertEqual(exit_code, 0)
        output = "\n".join(out) + "\n"
        self.assertNotRegexpMatches(output, "ERROR")
but it can be done later, maybe it is only a corner case (to fail based on
output instead of only on exit code).

It would fail like this (without "bbcc673b3a python-cryptography: add missing
dependency on BR2_PACKAGE_PYTHON_HASHLIB"):
https://gitlab.com/RicardoMartincoski/buildroot/-/jobs/32317984

Regards,
Ricardo

Patch

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index b44c935..091b016 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -250,6 +250,8 @@  tests.package.test_ipython.TestIPythonPy2: *runtime_test
 tests.package.test_ipython.TestIPythonPy3: *runtime_test
 tests.package.test_python.TestPython2: *runtime_test
 tests.package.test_python.TestPython3: *runtime_test
+tests.package.test_python_cryptography.TestPythonPy2Cryptography: *runtime_test
+tests.package.test_python_cryptography.TestPythonPy3Cryptography: *runtime_test
 tests.toolchain.test_external.TestExternalToolchainBuildrootMusl: *runtime_test
 tests.toolchain.test_external.TestExternalToolchainBuildrootuClibc: *runtime_test
 tests.toolchain.test_external.TestExternalToolchainCCache: *runtime_test
diff --git a/support/testing/tests/package/test_python_cryptography.py b/support/testing/tests/package/test_python_cryptography.py
new file mode 100644
index 0000000..b60152d
--- /dev/null
+++ b/support/testing/tests/package/test_python_cryptography.py
@@ -0,0 +1,31 @@ 
+import os
+
+from tests.package.test_python import TestPythonBase
+
+class TestPythonCryptography(TestPythonBase):
+    def fernet_test(self, timeout=-1):
+        cmd = self.interpreter + " -c 'from cryptography.fernet import Fernet;"
+        cmd += "key = Fernet.generate_key();"
+        cmd += "f = Fernet(key)'"
+        _, exit_code = self.emulator.run(cmd, timeout)
+        self.assertEqual(exit_code, 0)
+
+class TestPythonPy2Cryptography(TestPythonCryptography):
+    config = TestPythonBase.config + \
+"""
+BR2_PACKAGE_PYTHON=y
+BR2_PACKAGE_PYTHON_CRYPTOGRAPHY=y
+"""
+    def test_run(self):
+        self.login()
+        self.fernet_test(40)
+
+class TestPythonPy3Cryptography(TestPythonCryptography):
+    config = TestPythonBase.config + \
+"""
+BR2_PACKAGE_PYTHON3=y
+BR2_PACKAGE_PYTHON_CRYPTOGRAPHY=y
+"""
+    def test_run(self):
+        self.login()
+        self.fernet_test(40)