===================================================== InSpec Matchers Reference ===================================================== Inspec uses matchers to help compare resource values to expectations. The following matchers are available: * `be` * `cmp` * `eq` * `include` * `match` be ===================================================== This matcher can be followed by many different comparison operators. Always make sure to use numbers, not strings, for these comparisons. .. code-block:: ruby describe file('/proc/cpuinfo') do its('size') { should be >= 10 } its('size') { should be < 1000 } end cmp ===================================================== Unlike ``eq``, cmp is a matcher for less-restrictive comparisons. It will try to fit the actual value to the type you are comparing it to. This is meant to relieve the user from having to write type-casts and resolutions. .. code-block:: ruby describe sshd_config do its('Protocol') { should cmp 2 } end describe passwd.uid(0) do its('users') { should cmp 'root' } end ``cmp`` behaves in the following way: * Compare strings to numbers .. code-block:: ruby describe sshd_config do its('Protocol') { should eq '2' } its('Protocol') { should cmp '2' } its('Protocol') { should cmp 2 } end * String comparisons are not case-sensitive .. code-block:: ruby describe auditd_conf do its('log_format') { should cmp 'raw' } its('log_format') { should cmp 'RAW' } end * Compare arrays with only one entry to a value .. code-block:: ruby describe passwd.uids(0) do its('users') { should cmp 'root' } its('users') { should cmp ['root'] } end * Single-value arrays of strings may also be compared to a regex .. code-block:: ruby describe auditd_conf do its('log_format') { should cmp /raw/i } end * Improved printing of octal comparisons .. code-block:: ruby describe file('/proc/cpuinfo') do its('mode') { should cmp '0345' } end expected: 0345 got: 0444 eq ===================================================== Test for exact equality of two values. .. code-block:: ruby describe sshd_config do its('RSAAuthentication') { should_not eq 'no' } its('Protocol') { should eq '2' } end It fails if types don't match. Please keep this in mind, when comparing configuration entries that are numbers: .. code-block:: ruby its('Port') { should eq '22' } # ok its('Port') { should eq 22 } # fails: '2' != 2 (string vs int) For less restrictive comparisons, please use ``cmp``. include ===================================================== Verifies if a value is included in a list. .. code-block:: ruby describe passwd do its('users') { should include 'my_user' } end match ===================================================== Check if a string matches a regular expression. .. code-block:: ruby describe sshd_config do its('Ciphers') { should_not match /cbc/ } end