From 29bdfb5739fd1edaf39748a68d4635f75ff7530a Mon Sep 17 00:00:00 2001 From: Jorge-Rodriguez Date: Tue, 30 Mar 2021 19:08:32 +0300 Subject: [PATCH] Add unit tests for the new function --- tests/unit/plugins/modules/test_mysql_user.py | 70 +++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/tests/unit/plugins/modules/test_mysql_user.py b/tests/unit/plugins/modules/test_mysql_user.py index fe5c853..1481ea5 100644 --- a/tests/unit/plugins/modules/test_mysql_user.py +++ b/tests/unit/plugins/modules/test_mysql_user.py @@ -4,12 +4,17 @@ from __future__ import (absolute_import, division, print_function) __metaclass__ = type import pytest +try: + from unittest.mock import MagicMock +except ImportError: + from mock import MagicMock from ansible_collections.community.mysql.plugins.modules.mysql_user import ( handle_grant_on_col, has_grant_on_col, normalize_col_grants, sort_column_order, + handle_requiressl_in_priv_string ) from ..utils import dummy_cursor_class @@ -74,6 +79,71 @@ def test_handle_grant_on_col(privileges, start, end, output): assert handle_grant_on_col(privileges, start, end) == output +@pytest.mark.parametrize( + 'input_tuple,output_tuple', + [ + (('*.*:REQUIRESSL', None), (None, 'SSL')), + (('*.*:ALL,REQUIRESSL', None), ('*.*:ALL', 'SSL')), + (('*.*:REQUIRESSL,ALL', None), ('*.*:ALL', 'SSL')), + (('*.*:ALL,REQUIRESSL,GRANT', None), ('*.*:ALL,GRANT', 'SSL')), + (('*.*:ALL,REQUIRESSL,GRANT/a.b:USAGE', None), ('*.*:ALL,GRANT/a.b:USAGE', 'SSL')), + (('*.*:REQUIRESSL', 'X509'), (None, 'X509')), + (('*.*:ALL,REQUIRESSL', 'X509'), ('*.*:ALL', 'X509')), + (('*.*:REQUIRESSL,ALL', 'X509'), ('*.*:ALL', 'X509')), + (('*.*:ALL,REQUIRESSL,GRANT', 'X509'), ('*.*:ALL,GRANT', 'X509')), + (('*.*:ALL,REQUIRESSL,GRANT/a.b:USAGE', 'X509'), ('*.*:ALL,GRANT/a.b:USAGE', 'X509')), + (('*.*:REQUIRESSL', { + 'subject': '/CN=alice/O=MyDom, Inc./C=US/ST=Oregon/L=Portland', + 'cipher': 'ECDHE-ECDSA-AES256-SHA384', + 'issuer': '/CN=org/O=MyDom, Inc./C=US/ST=Oregon/L=Portland' + }), (None, { + 'subject': '/CN=alice/O=MyDom, Inc./C=US/ST=Oregon/L=Portland', + 'cipher': 'ECDHE-ECDSA-AES256-SHA384', + 'issuer': '/CN=org/O=MyDom, Inc./C=US/ST=Oregon/L=Portland' + })), + (('*.*:ALL,REQUIRESSL', { + 'subject': '/CN=alice/O=MyDom, Inc./C=US/ST=Oregon/L=Portland', + 'cipher': 'ECDHE-ECDSA-AES256-SHA384', + 'issuer': '/CN=org/O=MyDom, Inc./C=US/ST=Oregon/L=Portland' + }), ('*.*:ALL', { + 'subject': '/CN=alice/O=MyDom, Inc./C=US/ST=Oregon/L=Portland', + 'cipher': 'ECDHE-ECDSA-AES256-SHA384', + 'issuer': '/CN=org/O=MyDom, Inc./C=US/ST=Oregon/L=Portland' + })), + (('*.*:REQUIRESSL,ALL', { + 'subject': '/CN=alice/O=MyDom, Inc./C=US/ST=Oregon/L=Portland', + 'cipher': 'ECDHE-ECDSA-AES256-SHA384', + 'issuer': '/CN=org/O=MyDom, Inc./C=US/ST=Oregon/L=Portland' + }), ('*.*:ALL', { + 'subject': '/CN=alice/O=MyDom, Inc./C=US/ST=Oregon/L=Portland', + 'cipher': 'ECDHE-ECDSA-AES256-SHA384', + 'issuer': '/CN=org/O=MyDom, Inc./C=US/ST=Oregon/L=Portland' + })), + (('*.*:ALL,REQUIRESSL,GRANT', { + 'subject': '/CN=alice/O=MyDom, Inc./C=US/ST=Oregon/L=Portland', + 'cipher': 'ECDHE-ECDSA-AES256-SHA384', + 'issuer': '/CN=org/O=MyDom, Inc./C=US/ST=Oregon/L=Portland' + }), ('*.*:ALL,GRANT', { + 'subject': '/CN=alice/O=MyDom, Inc./C=US/ST=Oregon/L=Portland', + 'cipher': 'ECDHE-ECDSA-AES256-SHA384', + 'issuer': '/CN=org/O=MyDom, Inc./C=US/ST=Oregon/L=Portland' + })), + (('*.*:ALL,REQUIRESSL,GRANT/a.b:USAGE', { + 'subject': '/CN=alice/O=MyDom, Inc./C=US/ST=Oregon/L=Portland', + 'cipher': 'ECDHE-ECDSA-AES256-SHA384', + 'issuer': '/CN=org/O=MyDom, Inc./C=US/ST=Oregon/L=Portland' + }), ('*.*:ALL,GRANT/a.b:USAGE', { + 'subject': '/CN=alice/O=MyDom, Inc./C=US/ST=Oregon/L=Portland', + 'cipher': 'ECDHE-ECDSA-AES256-SHA384', + 'issuer': '/CN=org/O=MyDom, Inc./C=US/ST=Oregon/L=Portland' + })) + ] +) +def test_handle_requiressl_in_priv_string(input_tuple, output_tuple): + """Tests the handle_requiressl_in_priv_string funciton.""" + assert handle_requiressl_in_priv_string(MagicMock(), *input_tuple) == output_tuple + + @pytest.mark.parametrize( 'input_,expected', [