diff --git a/homeassistant/components/device_tracker/unifi.py b/homeassistant/components/device_tracker/unifi.py index a471ca5c96a..3ed41b08082 100644 --- a/homeassistant/components/device_tracker/unifi.py +++ b/homeassistant/components/device_tracker/unifi.py @@ -32,7 +32,8 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Required(CONF_PASSWORD): cv.string, vol.Required(CONF_USERNAME): cv.string, vol.Required(CONF_PORT, default=DEFAULT_PORT): cv.port, - vol.Optional(CONF_VERIFY_SSL, default=DEFAULT_VERIFY_SSL): cv.boolean, + vol.Optional(CONF_VERIFY_SSL, default=DEFAULT_VERIFY_SSL): vol.Any( + cv.boolean, cv.isfile) }) diff --git a/tests/components/device_tracker/test_unifi.py b/tests/components/device_tracker/test_unifi.py index d62897a86c4..7ec72eaffac 100644 --- a/tests/components/device_tracker/test_unifi.py +++ b/tests/components/device_tracker/test_unifi.py @@ -25,6 +25,32 @@ def mock_scanner(): yield scanner +@mock.patch('os.access', return_value=True) +@mock.patch('os.path.isfile', mock.Mock(return_value=True)) +def test_config_valid_verify_ssl(hass, mock_scanner, mock_ctrl): + """Test the setup with a string for ssl_verify. + + Representing the absolute path to a CA certificate bundle. + """ + config = { + DOMAIN: unifi.PLATFORM_SCHEMA({ + CONF_PLATFORM: unifi.DOMAIN, + CONF_USERNAME: 'foo', + CONF_PASSWORD: 'password', + CONF_VERIFY_SSL: "/tmp/unifi.crt" + }) + } + result = unifi.get_scanner(hass, config) + assert mock_scanner.return_value == result + assert mock_ctrl.call_count == 1 + assert mock_ctrl.mock_calls[0] == \ + mock.call('localhost', 'foo', 'password', 8443, + version='v4', site_id='default', ssl_verify="/tmp/unifi.crt") + + assert mock_scanner.call_count == 1 + assert mock_scanner.call_args == mock.call(mock_ctrl.return_value) + + def test_config_minimal(hass, mock_scanner, mock_ctrl): """Test the setup with minimal configuration.""" config = { @@ -86,6 +112,13 @@ def test_config_error(): CONF_HOST: 'myhost', 'port': 'foo', # bad port! }) + with pytest.raises(vol.Invalid): + unifi.PLATFORM_SCHEMA({ + CONF_PLATFORM: unifi.DOMAIN, + CONF_USERNAME: 'foo', + CONF_PASSWORD: 'password', + CONF_VERIFY_SSL: "dfdsfsdfsd", # Invalid ssl_verify (no file) + }) def test_config_controller_failed(hass, mock_ctrl, mock_scanner):