77
88from ipahealthcheck .core import constants , config
99from ipahealthcheck .ipa .plugin import registry
10- from ipahealthcheck .ipa .certs import IPACertTracking , CertmongerStuckCheck
11- from unittest .mock import Mock
10+ from ipahealthcheck .ipa .certs import (
11+ IPACertTracking ,
12+ CertmongerStuckCheck ,
13+ CertmongerFIPTokensCheck
14+ )
15+ from unittest .mock import Mock , patch
1216from mock_certmonger import create_mock_dbus , _certmonger
1317from mock_certmonger import get_expected_requests , set_requests
1418
@@ -106,7 +110,7 @@ def test_none_stuck(self):
106110 self .results = capture_results (f )
107111
108112 assert len (self .results ) == 1
109- result = self .results .results [0 ]
113+ result = self .results .results [- 1 ]
110114 assert result .result == constants .SUCCESS
111115
112116 def test_one_stuck (self ):
@@ -128,3 +132,167 @@ def test_one_stuck(self):
128132 result = self .results .results [0 ]
129133 assert result .result == constants .WARNING
130134 assert result .kw .get ('key' ) == '7777'
135+
136+
137+ class TestFIPSTokens (BaseTest ):
138+ """Test the combination of FIPS configurations with tokens and
139+ also that when HSM is used the check is skipped.
140+ """
141+ patches = {
142+ 'ipahealthcheck.ipa.certs.get_expected_requests' :
143+ Mock (return_value = get_expected_requests ()),
144+ 'ipalib.install.certmonger._cm_dbus_object' :
145+ Mock (side_effect = create_mock_dbus ),
146+ 'ipalib.install.certmonger._certmonger' :
147+ Mock (return_value = _certmonger ())
148+ }
149+
150+ nss_tracking = {
151+ 'nickname' : '9876' ,
152+ 'ca-name' : 'dogtag-ipa-ca-renew-agent' ,
153+ 'template_profile' : 'caIPAserviceCert' ,
154+ 'cert-storage' : 'NSSDB' ,
155+ 'cert-storage_location' : '/etc/pki/pki-tomcat/alias' ,
156+ 'cert-token' : 'NSS Certificate DB' ,
157+ 'key-storage' : 'NSSDB' ,
158+ 'key-storage_location' : '/etc/pki/pki-tomcat/alias' ,
159+ 'key-token' : 'NSS Certificate DB' ,
160+ }
161+
162+ @patch ('ipaplatform.tasks.tasks.is_fips_enabled' )
163+ @patch ('ipalib.install.certmonger.get_request_value' )
164+ # @patch('ipahealthcheck.ipa.certs.get_expected_requests')
165+ # @patch('ipalib.install.certmonger._cm_dbus_object')
166+ def test_nonfips_token_correct (self , mock_value , mock_fips ):
167+ mock_value .side_effect = [
168+ 'FILE' ,
169+ 'FILE' ,
170+ 'NSSDB' , 'NSS Certificate DB' ,
171+ ]
172+ mock_fips .return_value = False
173+ set_requests (add = self .nss_tracking )
174+ # mock_requests.return_value=get_expected_requests()
175+ # mock_obj.side_effect=create_mock_dbus
176+
177+ framework = object ()
178+ registry .initialize (framework , config .Config )
179+ f = CertmongerFIPTokensCheck (registry )
180+
181+ self .results = capture_results (f )
182+
183+ assert len (self .results ) == 1
184+ result = self .results .results [0 ]
185+ assert result .result == constants .SUCCESS
186+
187+ @patch ('ipaplatform.tasks.tasks.is_fips_enabled' )
188+ @patch ('ipalib.install.certmonger.get_request_value' )
189+ def test_nonfips_token_wrong (self , mock_value , mock_fips ):
190+ mock_value .side_effect = [
191+ 'FILE' ,
192+ 'FILE' ,
193+ 'NSSDB' , 'NSS FIPS 140-2 Certificate DB' ,
194+ ]
195+ mock_fips .return_value = False
196+ set_requests (add = self .nss_tracking )
197+
198+ framework = object ()
199+ registry .initialize (framework , config .Config )
200+ f = CertmongerFIPTokensCheck (registry )
201+
202+ self .results = capture_results (f )
203+
204+ assert len (self .results ) == 1
205+ result = self .results .results [0 ]
206+ assert result .result == constants .ERROR
207+ assert result .kw .get ('key' ) == '9876'
208+ assert result .kw .get ('token' ) == 'NSS FIPS 140-2 Certificate DB'
209+
210+ @patch ('ipaplatform.tasks.tasks.is_fips_enabled' )
211+ @patch ('ipalib.install.certmonger.get_request_value' )
212+ def test_fips_token_correct (self , mock_value , mock_fips ):
213+ mock_value .side_effect = [
214+ 'FILE' ,
215+ 'FILE' ,
216+ 'NSSDB' , 'NSS FIPS 140-2 Certificate DB' ,
217+ ]
218+ mock_fips .return_value = True
219+ set_requests (add = self .nss_tracking )
220+
221+ framework = object ()
222+ registry .initialize (framework , config .Config )
223+ f = CertmongerFIPTokensCheck (registry )
224+
225+ self .results = capture_results (f )
226+
227+ assert len (self .results ) == 1
228+ result = self .results .results [0 ]
229+ assert result .result == constants .SUCCESS
230+
231+ @patch ('ipaplatform.tasks.tasks.is_fips_enabled' )
232+ @patch ('ipalib.install.certmonger.get_request_value' )
233+ def test_fips_token_wrong (self , mock_value , mock_fips ):
234+ mock_value .side_effect = [
235+ 'FILE' ,
236+ 'FILE' ,
237+ 'NSSDB' , 'NSS Certificate DB' ,
238+ ]
239+ mock_fips .return_value = True
240+ set_requests (add = self .nss_tracking )
241+
242+ framework = object ()
243+ registry .initialize (framework , config .Config )
244+ f = CertmongerFIPTokensCheck (registry )
245+
246+ self .results = capture_results (f )
247+
248+ assert len (self .results ) == 1
249+ result = self .results .results [0 ]
250+ assert result .result == constants .ERROR
251+ assert result .kw .get ('key' ) == '9876'
252+ assert result .kw .get ('token' ) == 'NSS Certificate DB'
253+ assert result .kw .get ('expected_token' ) == \
254+ 'NSS FIPS 140-2 Certificate DB'
255+
256+ @patch ('ipaplatform.tasks.tasks.is_fips_enabled' )
257+ @patch ('ipalib.install.certmonger.get_request_value' )
258+ def test_hsm_token_non_fips (self , mock_value , mock_fips ):
259+ """FIPS shouldn't make a difference as HSM tokens should be skipped"""
260+ mock_value .side_effect = [
261+ 'FILE' ,
262+ 'FILE' ,
263+ 'NSSDB' , 'ipa_token' ,
264+ ]
265+ mock_fips .return_value = False
266+ set_requests (add = self .nss_tracking )
267+
268+ framework = object ()
269+ registry .initialize (framework , config .Config )
270+ f = CertmongerFIPTokensCheck (registry )
271+
272+ self .results = capture_results (f )
273+
274+ assert len (self .results ) == 1
275+ result = self .results .results [0 ]
276+ assert result .result == constants .SUCCESS
277+
278+ @patch ('ipaplatform.tasks.tasks.is_fips_enabled' )
279+ @patch ('ipalib.install.certmonger.get_request_value' )
280+ def test_hsm_token_fips (self , mock_value , mock_fips ):
281+ """FIPS shouldn't make a difference as HSM tokens should be skipped"""
282+ mock_value .side_effect = [
283+ 'FILE' ,
284+ 'FILE' ,
285+ 'NSSDB' , 'ipa_token' ,
286+ ]
287+ mock_fips .return_value = True
288+ set_requests (add = self .nss_tracking )
289+
290+ framework = object ()
291+ registry .initialize (framework , config .Config )
292+ f = CertmongerFIPTokensCheck (registry )
293+
294+ self .results = capture_results (f )
295+
296+ assert len (self .results ) == 1
297+ result = self .results .results [0 ]
298+ assert result .result == constants .SUCCESS
0 commit comments