summaryrefslogtreecommitdiffstats
path: root/nixos/tests/home-assistant.nix
diff options
context:
space:
mode:
authorRobert Schütz <robert.schuetz@stud.uni-heidelberg.de>2018-02-17 19:24:20 +0100
committerRobert Schütz <robert.schuetz@stud.uni-heidelberg.de>2018-02-17 20:43:55 +0100
commit772b72a8d7fbb77e99478d2e2cfe9c60216aed7e (patch)
tree97b0f9491f43831c801c33225b5c52a90de9bdcd /nixos/tests/home-assistant.nix
parent76723a26f9e975676d98137981a3079426a0c75a (diff)
nixos/home-assistant: test MQTT configuration
Diffstat (limited to 'nixos/tests/home-assistant.nix')
-rw-r--r--nixos/tests/home-assistant.nix36
1 files changed, 33 insertions, 3 deletions
diff --git a/nixos/tests/home-assistant.nix b/nixos/tests/home-assistant.nix
index 5d7e0ec65e73..2e45dc78471f 100644
--- a/nixos/tests/home-assistant.nix
+++ b/nixos/tests/home-assistant.nix
@@ -2,17 +2,27 @@ import ./make-test.nix ({ pkgs, ... }:
let
configDir = "/var/lib/foobar";
+ apiPassword = "secret";
in {
name = "home-assistant";
+ meta = with pkgs.stdenv.lib; {
+ maintainers = with maintainers; [ dotlambda ];
+ };
nodes = {
hass =
{ config, pkgs, ... }:
{
+ environment.systemPackages = with pkgs; [
+ mosquitto
+ ];
services.home-assistant = {
inherit configDir;
enable = true;
+ package = pkgs.home-assistant.override {
+ extraPackages = ps: with ps; [ hbmqtt ];
+ };
config = {
homeassistant = {
name = "Home";
@@ -22,7 +32,16 @@ in {
elevation = 0;
};
frontend = { };
- http = { };
+ http.api_password = apiPassword;
+ mqtt = { }; # Use hbmqtt as broker
+ binary_sensor = [
+ {
+ platform = "mqtt";
+ state_topic = "home-assistant/test";
+ payload_on = "let_there_be_light";
+ payload_off = "off";
+ }
+ ];
};
};
};
@@ -31,7 +50,7 @@ in {
testScript = ''
startAll;
$hass->waitForUnit("home-assistant.service");
-
+
# Since config is specified using a Nix attribute set,
# configuration.yaml is a link to the Nix store
$hass->succeed("test -L ${configDir}/configuration.yaml");
@@ -39,8 +58,19 @@ in {
# Check that Home Assistant's web interface and API can be reached
$hass->waitForOpenPort(8123);
$hass->succeed("curl --fail http://localhost:8123/states");
- $hass->succeed("curl --fail http://localhost:8123/api/ | grep 'API running'");
+ $hass->succeed("curl --fail -H 'x-ha-access: ${apiPassword}' http://localhost:8123/api/ | grep -qF 'API running'");
+ # Toggle a binary sensor using MQTT
+ $hass->succeed("curl http://localhost:8123/api/states/binary_sensor.mqtt_binary_sensor -H 'x-ha-access: ${apiPassword}' | grep -qF '\"state\": \"off\"'");
+ $hass->waitUntilSucceeds("mosquitto_pub -V mqttv311 -t home-assistant/test -u homeassistant -P '${apiPassword}' -m let_there_be_light");
+ $hass->succeed("curl http://localhost:8123/api/states/binary_sensor.mqtt_binary_sensor -H 'x-ha-access: ${apiPassword}' | grep -qF '\"state\": \"on\"'");
+
+ # Check that no errors were logged
$hass->fail("cat ${configDir}/home-assistant.log | grep -qF ERROR");
+
+ # Print log to ease debugging
+ my $log = $hass->succeed("cat ${configDir}/home-assistant.log");
+ print "\n### home-assistant.log ###\n";
+ print "$log\n";
'';
})