Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

nixosTests.home-assistant: port to python #74126

Closed

Conversation

@filalex77
Copy link
Contributor

filalex77 commented Nov 25, 2019

Motivation for this change

#72828

Things done
  • Tested using sandboxing (nix.useSandbox on NixOS, or option sandbox in nix.conf on non-NixOS linux)
  • Built on platform(s)
    • NixOS
    • macOS
    • other Linux distributions
  • Tested via one or more NixOS test(s) if existing and applicable for the change (look inside nixos/tests)
  • Tested compilation of all pkgs that depend on this change using nix-shell -p nix-review --run "nix-review wip"
  • Tested execution of all binary files (usually in ./result/bin/)
  • Determined the impact on package closure size (by running nix path-info -S before and after)
  • Ensured that relevant documentation is up to date
  • Fits CONTRIBUTING.md.
Notify maintainers

cc @dotlambda


This change is Reviewable

@filalex77
Copy link
Contributor Author

filalex77 commented Nov 25, 2019

@GrahamcOfBorg test home-assistant

nixos/tests/home-assistant.nix Outdated Show resolved Hide resolved
nixos/tests/home-assistant.nix Outdated Show resolved Hide resolved
@filalex77
Copy link
Contributor Author

filalex77 commented Nov 27, 2019

@tfc Thanks for the review!

@filalex77
Copy link
Contributor Author

filalex77 commented Nov 27, 2019

@GrahamcOfBorg test home-assistant

@tfc
tfc approved these changes Nov 27, 2019
@Mic92
Copy link
Contributor

Mic92 commented Dec 1, 2019

@GrahamcOfBorg test home-assistant

@Mic92 Mic92 mentioned this pull request Dec 1, 2019
4 of 10 tasks complete
@Mic92
Copy link
Contributor

Mic92 commented Dec 10, 2019

@GrahamcOfBorg test home-assistant

nixos/tests/home-assistant.nix Outdated Show resolved Hide resolved
@filalex77 filalex77 force-pushed the filalex77:nixosTests.home-assistant-python branch from ba18a85 to 73160c0 Dec 10, 2019
@filalex77 filalex77 requested a review from Mic92 Dec 10, 2019
@filalex77
Copy link
Contributor Author

filalex77 commented Dec 10, 2019

@GrahamcOfBorg test home-assistant

@Mic92
Copy link
Contributor

Mic92 commented Dec 10, 2019

You can fix the format issues by copying the python code to a dedicated file and use black to format it before copying it back into the file.

nixosTests.home-assistant: use subtests
@filalex77 filalex77 force-pushed the filalex77:nixosTests.home-assistant-python branch from 73160c0 to 631cbc3 Dec 10, 2019
@filalex77
Copy link
Contributor Author

filalex77 commented Dec 10, 2019

@Mic92 Thanks for the suggestion!
@GrahamcOfBorg test home-assistant

@jonringer jonringer mentioned this pull request Dec 20, 2019
3 of 10 tasks complete
@Mic92
Copy link
Contributor

Mic92 commented Dec 21, 2019

@GrahamcOfBorg test home-assistant

"${hassCli} --output json state get binary_sensor.mqtt_binary_sensor"
)
hass.succeed(
"${hassCli} state edit binary_sensor.mqtt_binary_sensor --json=\'{"state": "off"}\'"

This comment has been minimized.

Copy link
@makefu

makefu Dec 30, 2019

Contributor

you've got some typo there:

Suggested change
"${hassCli} state edit binary_sensor.mqtt_binary_sensor --json=\'{"state": "off"}\'"
"${hassCli} state edit binary_sensor.mqtt_binary_sensor --json='{\"state\": \"off\"}'"
hass.wait_until_succeeds(
"mosquitto_pub -V mqttv311 -t home-assistant/test -u homeassistant -P '${mqttPassword}' -m let_there_be_light"
)
assert '"state": "off"' in hass.succeed(

This comment has been minimized.

Copy link
@makefu

makefu Dec 30, 2019

Contributor

should be :

Suggested change
assert '"state": "off"' in hass.succeed(
assert '"state": "on"' in hass.succeed(
# Check that no errors were logged
$hass->fail("cat ${configDir}/home-assistant.log | grep -qF ERROR");
with subtest("Check that no errors were logged"):
assert "ERROR" not in log

This comment has been minimized.

Copy link
@makefu

makefu Dec 30, 2019

Contributor

this will work:

    with subtest("Print log to ease debugging"):
        print("\n### home-assistant.log ###\n")
        print(hass.succeed("cat ${configDir}/home-assistant.log"))

    with subtest("Check that no errors were logged"):
        assert "ERROR" not in hass.succeed("cat ${configDir}/home-assistant.log")
@makefu
Copy link
Contributor

makefu commented Dec 30, 2019

The complete working file:

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}'";

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;
        };
      };
  };

  testScript = ''
    start_all()
    hass.wait_for_unit("home-assistant.service")
    with subtest("Check that YAML configuration file is in place"):
        hass.succeed("test -L ${configDir}/configuration.yaml")
    with subtest("lovelace config is copied because lovelaceConfigWritable = true"):
        hass.succeed("test -f ${configDir}/ui-lovelace.yaml")
    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/states")
        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}'"
        )
        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"
        )
        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}'"
        )
    with subtest("Print log to ease debugging"):
        output_log = hass.succeed("cat ${configDir}/home-assistant.log")
        print("\n### home-assistant.log ###\n")
        print(output_log + "\n")

    with subtest("Check that no errors were logged"):
        assert "ERROR" not in output_log
  '';
})
@Mic92
Copy link
Contributor

Mic92 commented Jan 9, 2020

Part of #76088

@Mic92 Mic92 closed this Jan 9, 2020
@filalex77 filalex77 deleted the filalex77:nixosTests.home-assistant-python branch Jan 9, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Linked issues

Successfully merging this pull request may close these issues.

None yet

4 participants
You can’t perform that action at this time.