66import pytest
77from mock import mock_open , patch
88
9+ from datadog_checks .base .stubs .aggregator import AggregatorStub
10+ from datadog_checks .base .stubs .datadog_agent import DatadogAgentStub
11+ from datadog_checks .linux_proc_extras import MoreUnixCheck
12+
913from . import common
1014
1115pytestmark = pytest .mark .unit
@@ -31,6 +35,11 @@ def test_check(aggregator, check):
3135 with patch ('datadog_checks.linux_proc_extras.linux_proc_extras.open' , m ):
3236 check .get_stat_info ()
3337
38+ with open (os .path .join (common .FIXTURE_DIR , "fips_enabled" )) as f :
39+ m = mock_open (read_data = f .read ())
40+ with patch ('datadog_checks.linux_proc_extras.linux_proc_extras.open' , m ):
41+ check .get_fips_info ()
42+
3443 with open (os .path .join (common .FIXTURE_DIR , "process_stats" )) as f :
3544 with patch (
3645 'datadog_checks.linux_proc_extras.linux_proc_extras.get_subprocess_output' , return_value = (f .read (), "" , 0 )
@@ -52,3 +61,52 @@ def test_check(aggregator, check):
5261 aggregator .assert_metric ("system.linux.irq" , value = None , tags = tags )
5362
5463 aggregator .assert_all_metrics_covered ()
64+
65+
66+ @pytest .mark .parametrize ('content, expected_value' , [('1\n ' , 1.0 ), ('0\n ' , 0.0 )])
67+ def test_fips_info (aggregator : AggregatorStub , check : MoreUnixCheck , content : str , expected_value : float ) -> None :
68+ m = mock_open (read_data = content )
69+ with patch ('datadog_checks.linux_proc_extras.linux_proc_extras.open' , m ):
70+ check .get_fips_info ()
71+
72+ m .assert_called_once_with ('/proc/sys/crypto/fips_enabled' , 'r' )
73+ aggregator .assert_metric ('system.crypto.fips_enabled' , value = expected_value , count = 1 , tags = [common .EXPECTED_TAG ])
74+ aggregator .assert_all_metrics_covered ()
75+
76+
77+ def test_fips_info_honors_procfs_path (
78+ aggregator : AggregatorStub , check : MoreUnixCheck , datadog_agent : DatadogAgentStub
79+ ) -> None :
80+ with patch .dict (datadog_agent ._config , {'procfs_path' : '/host/proc' }):
81+ check .set_paths ()
82+
83+ m = mock_open (read_data = '1\n ' )
84+ with patch ('datadog_checks.linux_proc_extras.linux_proc_extras.open' , m ):
85+ check .get_fips_info ()
86+
87+ m .assert_called_once_with ('/host/proc/sys/crypto/fips_enabled' , 'r' )
88+ aggregator .assert_metric ('system.crypto.fips_enabled' , value = 1.0 , count = 1 , tags = [common .EXPECTED_TAG ])
89+ aggregator .assert_all_metrics_covered ()
90+
91+
92+ def test_fips_info_missing_file (aggregator : AggregatorStub , check : MoreUnixCheck ) -> None :
93+ with patch ('datadog_checks.linux_proc_extras.linux_proc_extras.open' , side_effect = FileNotFoundError ):
94+ check .get_fips_info ()
95+
96+ aggregator .assert_metric ('system.crypto.fips_enabled' , value = 0.0 , count = 1 , tags = [common .EXPECTED_TAG ])
97+ aggregator .assert_all_metrics_covered ()
98+
99+
100+ def test_fips_info_unreadable (aggregator : AggregatorStub , check : MoreUnixCheck ) -> None :
101+ with patch ('datadog_checks.linux_proc_extras.linux_proc_extras.open' , side_effect = PermissionError ):
102+ check .get_fips_info ()
103+
104+ aggregator .assert_metric ('system.crypto.fips_enabled' , count = 0 )
105+
106+
107+ def test_fips_info_unparseable (aggregator : AggregatorStub , check : MoreUnixCheck ) -> None :
108+ m = mock_open (read_data = 'not a number\n ' )
109+ with patch ('datadog_checks.linux_proc_extras.linux_proc_extras.open' , m ):
110+ check .get_fips_info ()
111+
112+ aggregator .assert_metric ('system.crypto.fips_enabled' , count = 0 )
0 commit comments