summaryrefslogtreecommitdiffstats
path: root/nixos/tests/home-assistant.nix
diff options
context:
space:
mode:
authorJörg Thalheim <joerg@thalheim.io>2020-06-20 11:05:30 +0100
committerJörg Thalheim <joerg@thalheim.io>2020-06-21 10:58:29 +0100
commita68c7e0fa7dca4107ffe83d21f3c53ba14c5c45f (patch)
tree17c9166bafdd1252bf30e40831a2d9a82ea78c4a /nixos/tests/home-assistant.nix
parent8dd2327bbd120ed68f37778a6e5b1ed7aedd81ff (diff)
nixos/home-assistant: fix tests
Diffstat (limited to 'nixos/tests/home-assistant.nix')
-rw-r--r--nixos/tests/home-assistant.nix119
1 files changed, 46 insertions, 73 deletions
diff --git a/nixos/tests/home-assistant.nix b/nixos/tests/home-assistant.nix
index 3365e74ba838..0d1fcedcd857 100644
--- a/nixos/tests/home-assistant.nix
+++ b/nixos/tests/home-assistant.nix
@@ -2,69 +2,53 @@ import ./make-test-python.nix ({ pkgs, ... }:
let
configDir = "/var/lib/foobar";
- apiPassword = "some_secret";
- mqttPassword = "another_secret";
- hassCli = "hass-cli --server http://hass:8123 --password '${apiPassword}'";
+ mqttPassword = "secret";
in {
name = "home-assistant";
meta = with pkgs.stdenv.lib; {
maintainers = with maintainers; [ dotlambda ];
};
- nodes = {
- hass =
- { pkgs, ... }:
- {
- environment.systemPackages = with pkgs; [
- mosquitto home-assistant-cli
- ];
- services.home-assistant = {
- inherit configDir;
- enable = true;
- package = pkgs.home-assistant.override {
- extraPackages = ps: with ps; [ hbmqtt ];
- };
- config = {
- homeassistant = {
- name = "Home";
- time_zone = "UTC";
- latitude = "0.0";
- longitude = "0.0";
- elevation = 0;
- auth_providers = [
- {
- type = "legacy_api_password";
- api_password = apiPassword;
- }
- ];
- };
- frontend = { };
- mqtt = { # Use hbmqtt as broker
- password = mqttPassword;
- };
- binary_sensor = [
- {
- platform = "mqtt";
- state_topic = "home-assistant/test";
- payload_on = "let_there_be_light";
- payload_off = "off";
- }
- ];
- };
- lovelaceConfig = {
- title = "My Awesome Home";
- views = [ {
- title = "Example";
- cards = [ {
- type = "markdown";
- title = "Lovelace";
- content = "Welcome to your **Lovelace UI**.";
- } ];
- } ];
- };
- lovelaceConfigWritable = true;
+ nodes.hass = { pkgs, ... }: {
+ environment.systemPackages = with pkgs; [ mosquitto ];
+ services.home-assistant = {
+ inherit configDir;
+ enable = true;
+ config = {
+ homeassistant = {
+ name = "Home";
+ time_zone = "UTC";
+ latitude = "0.0";
+ longitude = "0.0";
+ elevation = 0;
};
+ frontend = {};
+ # uses embedded mqtt broker
+ mqtt.password = mqttPassword;
+ binary_sensor = [{
+ platform = "mqtt";
+ state_topic = "home-assistant/test";
+ payload_on = "let_there_be_light";
+ payload_off = "off";
+ }];
+ logger = {
+ default = "info";
+ logs."homeassistant.components.mqtt" = "debug";
+ };
+ };
+ lovelaceConfig = {
+ title = "My Awesome Home";
+ views = [{
+ title = "Example";
+ cards = [{
+ type = "markdown";
+ title = "Lovelace";
+ content = "Welcome to your **Lovelace UI**.";
+ }];
+ }];
};
+ lovelaceConfigWritable = true;
+ };
};
testScript = ''
@@ -77,28 +61,13 @@ in {
with subtest("Check that Home Assistant's web interface and API can be reached"):
hass.wait_for_open_port(8123)
hass.succeed("curl --fail http://localhost:8123/lovelace")
- assert "API running" in hass.succeed(
- "curl --fail -H 'x-ha-access: ${apiPassword}' http://localhost:8123/api/"
- )
with subtest("Toggle a binary sensor using MQTT"):
- assert '"state": "off"' in hass.succeed(
- "curl http://localhost:8123/api/states/binary_sensor.mqtt_binary_sensor -H 'x-ha-access: ${apiPassword}'"
- )
+ # wait for broker to become available
hass.wait_until_succeeds(
- "mosquitto_pub -V mqttv311 -t home-assistant/test -u homeassistant -P '${mqttPassword}' -m let_there_be_light"
- )
- assert '"state": "on"' in hass.succeed(
- "curl http://localhost:8123/api/states/binary_sensor.mqtt_binary_sensor -H 'x-ha-access: ${apiPassword}'"
- )
- with subtest("Toggle a binary sensor using hass-cli"):
- assert '"state": "on"' in hass.succeed(
- "${hassCli} --output json state get binary_sensor.mqtt_binary_sensor"
+ "mosquitto_sub -V mqttv311 -t home-assistant/test -u homeassistant -P '${mqttPassword}' -W 1 -t '*'"
)
hass.succeed(
- "${hassCli} state edit binary_sensor.mqtt_binary_sensor --json='{\"state\": \"off\"}'"
- )
- assert '"state": "off"' in hass.succeed(
- "curl http://localhost:8123/api/states/binary_sensor.mqtt_binary_sensor -H 'x-ha-access: ${apiPassword}'"
+ "mosquitto_pub -V mqttv311 -t home-assistant/test -u homeassistant -P '${mqttPassword}' -m let_there_be_light"
)
with subtest("Print log to ease debugging"):
output_log = hass.succeed("cat ${configDir}/home-assistant.log")
@@ -107,5 +76,9 @@ in {
with subtest("Check that no errors were logged"):
assert "ERROR" not in output_log
+
+ # example line: 2020-06-20 10:01:32 DEBUG (MainThread) [homeassistant.components.mqtt] Received message on home-assistant/test: b'let_there_be_light'
+ with subtest("Check we received the mosquitto message"):
+ assert "let_there_be_light" in output_log
'';
})