Blob Blame History Raw
From c9bc471e063f2865d6423e4f1c9b81e73a45e43f Mon Sep 17 00:00:00 2001
From: Stanislav Levin <slev@altlinux.org>
Date: Wed, 4 Aug 2021 18:38:16 +0300
Subject: [PATCH] ipatests: Fix TestAJPSecretUpgrade tests on systems without
 pkiuser

Tests in `test_ipaserver.test_secure_ajp_connector' assume that there
is pkiuser in OS, but this is not always true (for example, in systems
having minimum installed dependencies, in particular, without pki-server
RPM package). Since the tests already use the mock and pkiuser entity is
not the subject of testing the pwd.getpwnam has been mocked.

Fixes: https://pagure.io/freeipa/issue/8942
Signed-off-by: Stanislav Levin <slev@altlinux.org>
Reviewed-By: Rob Crittenden <rcritten@redhat.com>
---
 .../test_secure_ajp_connector.py              | 40 ++++++++++++++++---
 1 file changed, 34 insertions(+), 6 deletions(-)

diff --git a/ipatests/test_ipaserver/test_secure_ajp_connector.py b/ipatests/test_ipaserver/test_secure_ajp_connector.py
index 2719dbc48..35ef7407a 100644
--- a/ipatests/test_ipaserver/test_secure_ajp_connector.py
+++ b/ipatests/test_ipaserver/test_secure_ajp_connector.py
@@ -1,5 +1,6 @@
 # Copyright (C) 2021  FreeIPA Project Contributors - see LICENSE file
 
+from collections import namedtuple
 from io import BytesIO
 from lxml.etree import parse as myparse  # pylint: disable=no-name-in-module
 import pytest
@@ -32,6 +33,32 @@ def mock_etree_parse(data):
     return myparse(f)
 
 
+def mock_pkiuser_entity():
+    """Return struct_passwd for mocked pkiuser"""
+    StructPasswd = namedtuple(
+        "StructPasswd",
+        [
+            "pw_name",
+            "pw_passwd",
+            "pw_uid",
+            "pw_gid",
+            "pw_gecos",
+            "pw_dir",
+            "pw_shell",
+        ]
+    )
+    pkiuser_entity = StructPasswd(
+        constants.PKI_USER,
+        pw_passwd="x",
+        pw_uid=-1,
+        pw_gid=-1,
+        pw_gecos="",
+        pw_dir="/dev/null",
+        pw_shell="/sbin/nologin",
+    )
+    return pkiuser_entity
+
+
 # Format of test_data is:
 #    (
 #        is_newer_tomcat (boolean),
@@ -148,14 +175,15 @@ test_data = (
 
 
 class TestAJPSecretUpgrade:
-    @patch('os.chown')
-    @patch('lxml.etree.parse')
-    @pytest.mark.parametrize('is_newer, data, secret, expect, rewrite',
-                             test_data)
-    def test_connecter(self, mock_parse, mock_chown, is_newer, data, secret,
-                       expect, rewrite):
+    @patch("ipaplatform.base.constants.pwd.getpwnam")
+    @patch("ipaplatform.base.constants.os.chown")
+    @patch("ipaserver.install.dogtaginstance.lxml.etree.parse")
+    @pytest.mark.parametrize("test_data", test_data)
+    def test_connecter(self, mock_parse, mock_chown, mock_getpwnam, test_data):
+        is_newer, data, secret, expect, rewrite = test_data
         mock_chown.return_value = None
         mock_parse.return_value = mock_etree_parse(data)
+        mock_getpwnam.return_value = mock_pkiuser_entity()
 
         dogtag = MyDogtagInstance(is_newer)
         with patch('ipaserver.install.dogtaginstance.open', mock_open()) \
-- 
2.31.1