### Summary

The test_real_path_dev_null test fails on OpenIndiana (a Solaris clone) because on illumos (and Solaris) `/dev/null` is a symlink:
```
$ ls -l /dev/null
lrwxrwxrwx 1 root root 27 Mar 31  2015 /dev/null -> ../devices/pseudo/mm@0:null
$
```

### Issue Type

Bug Report

### Component Name

test_vault_editor.py

### Ansible Version

```console
$ ansible --version
ansible [core 2.14.4]
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/home/marcel/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.9/vendor-packages/ansible
  ansible collection location = /home/marcel/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/bin/ansible
  python version = 3.9.16 (main, Feb 19 2023, 15:42:40) [GCC 10.4.0] (/usr/bin/python3.9)
  jinja version = 3.0.3
  libyaml = True
$
```


### Configuration

```console
NA.  Tests are run directly in the source directory after the source tarball is unpacked.
```


### OS / Environment

OpenIndiana

### Steps to Reproduce

```
$ bin/ansible-test units --python 3.9 --python-interpreter /usr/bin/python3.9 --local --color no --verbose
```


### Expected Results

The `test_real_path_dev_null` test either pass or is skipped.

### Actual Results

```console
___________________ TestVaultEditor.test_real_path_dev_null ____________________
[gw0] sunos5 -- Python 3.9.16 /usr/bin/python3.9
self = <units.parsing.vault.test_vault_editor.TestVaultEditor testMethod=test_real_path_dev_null>

    def test_real_path_dev_null(self):
        filename = '/dev/null'
        ve = self._vault_editor()

        res = ve._real_path(filename)
>       self.assertEqual(res, '/dev/null')

test/units/parsing/vault/test_vault_editor.py:509:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/lib/python3.9/vendor-packages/teamcity/diff_tools.py:33: in _patched_equals
    old(self, first, second, msg)
E   AssertionError: '/devices/pseudo/mm@0:null' != '/dev/null'
E   - /devices/pseudo/mm@0:null
E   + /dev/null
```


### Code of Conduct

- [X] I agree to follow the Ansible Code of Conduct
def sc_side_effect(filename):
            return ['touch', filename]
        mock_editor_shell_command.side_effect = sc_side_effect
        tmp_file = tempfile.NamedTemporaryFile()
        os.unlink(tmp_file.name)
        _secrets = self._secrets('ansible')
        ve = self._vault_editor(_secrets)
        ve.create_file(tmp_file.name, vault.match_encrypt_secret(_secrets)[1])
        self.assertTrue(os.path.exists(tmp_file.name))
    def test_decrypt_1_1(self):
        v11_file = tempfile.NamedTemporaryFile(delete=False)
        with v11_file as f:
            f.write(to_bytes(v11_data))
        ve = self._vault_editor(self._secrets("ansible"))
        
        error_hit = False
        try:
            ve.decrypt_file(v11_file.name)
        except errors.AnsibleError:
            error_hit = True
        
        with open(v11_file.name, "rb") as f:
            fdata = to_text(f.read())
        os.unlink(v11_file.name)
        assert error_hit is False, "error decrypting 1.1 file"
        assert fdata.strip() == "foo", "incorrect decryption of 1.1 file: %s" % fdata.strip()
    def test_real_path_dash(self):