Merge pull request #1188 from FarmBot/mon_tests

Test Maintenance, Dead Code Removal
pull/1189/head
Rick Carlino 2020-04-06 14:11:39 -05:00 committed by GitHub
commit d513794868
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 69 additions and 20 deletions

View File

@ -43,3 +43,5 @@ config :farmbot_core, FarmbotCore.AssetWorker.FarmbotCore.Asset.FbosConfig,
firmware_flash_attempt_threshold: 0 firmware_flash_attempt_threshold: 0
config :plug, :validate_header_keys_during_test, true config :plug, :validate_header_keys_during_test, true
config :ex_unit, capture_logs: true

View File

@ -20,16 +20,7 @@ defmodule FarmbotOS.Configurator.LoggerSocket do
end end
@impl :cowboy_websocket @impl :cowboy_websocket
def websocket_handle({:text, message}, state) do def websocket_handle({:text, _}, state), do: {:ok, state}
case Jason.decode(message) do
{:ok, json} ->
websocket_handle({:json, json}, state)
_ ->
_ = Logger.debug("discarding info: #{message}")
{:ok, state}
end
end
@impl :cowboy_websocket @impl :cowboy_websocket
def websocket_info(:after_connect, state) do def websocket_info(:after_connect, state) do

View File

@ -3,12 +3,28 @@ defmodule FarmbotOS.Configurator.LoggerSocketTest do
use Mimic use Mimic
alias FarmbotOS.Configurator.LoggerSocket alias FarmbotOS.Configurator.LoggerSocket
setup :verify_on_exit! setup :verify_on_exit!
import ExUnit.CaptureLog
test "init/2" do test "init/2" do
# TODO(Rick) Not sure what the real args are.
# Circle back to make this test more realistic
# later.
expected = {:cowboy_websocket, :foo, :bar} expected = {:cowboy_websocket, :foo, :bar}
assert expected == LoggerSocket.init(:foo, :bar) assert expected == LoggerSocket.init(:foo, :bar)
end end
test "websocket_init" do
assert {:ok, %{}} == LoggerSocket.websocket_init(nil)
assert_receive :after_connect
end
test "websocket_handle (invalid JSON)" do
s = %{state: :yep}
msg = "Not JSON."
payl = {:text, msg}
assert {:ok, s} == LoggerSocket.websocket_handle(payl, s)
end
test "websocket_info/2" do
assert capture_log(fn ->
LoggerSocket.websocket_info(:whatever, %{})
end) =~ "Dropping :whatever"
end
end end

View File

@ -8,6 +8,8 @@ defmodule FarmbotOS.Configurator.RouterTest do
use Mimic use Mimic
setup :verify_on_exit! setup :verify_on_exit!
import ExUnit.CaptureIO
@opts Router.init([]) @opts Router.init([])
# Stolen from https://github.com/phoenixframework/phoenix/blob/3f157c30ceae8d1eb524fdd05b5e3de10e434c42/lib/phoenix/test/conn_test.ex#L438 # Stolen from https://github.com/phoenixframework/phoenix/blob/3f157c30ceae8d1eb524fdd05b5e3de10e434c42/lib/phoenix/test/conn_test.ex#L438
defp redirected_to(conn, status \\ 302) defp redirected_to(conn, status \\ 302)
@ -34,6 +36,7 @@ defmodule FarmbotOS.Configurator.RouterTest do
Router.call(conn, @opts) Router.call(conn, @opts)
end end
@tag :capture_log
test "index after reset" do test "index after reset" do
FarmbotOS.Configurator.ConfigDataLayer FarmbotOS.Configurator.ConfigDataLayer
|> expect(:load_last_reset_reason, fn -> "whoops!" end) |> expect(:load_last_reset_reason, fn -> "whoops!" end)
@ -45,6 +48,7 @@ defmodule FarmbotOS.Configurator.RouterTest do
assert conn.resp_body =~ "whoops!" assert conn.resp_body =~ "whoops!"
end end
@tag :capture_log
test "redirects" do test "redirects" do
redirects = [ redirects = [
"/check_network_status.txt", "/check_network_status.txt",
@ -66,6 +70,7 @@ defmodule FarmbotOS.Configurator.RouterTest do
end) end)
end end
@tag :capture_log
test "celeryscript requests don't get listed as last reset reason" do test "celeryscript requests don't get listed as last reset reason" do
FarmbotOS.Configurator.ConfigDataLayer FarmbotOS.Configurator.ConfigDataLayer
|> expect(:load_last_reset_reason, fn -> "CeleryScript request." end) |> expect(:load_last_reset_reason, fn -> "CeleryScript request." end)
@ -75,6 +80,7 @@ defmodule FarmbotOS.Configurator.RouterTest do
refute conn.resp_body =~ "CeleryScript request." refute conn.resp_body =~ "CeleryScript request."
end end
@tag :capture_log
test "no reset reason" do test "no reset reason" do
FarmbotOS.Configurator.ConfigDataLayer FarmbotOS.Configurator.ConfigDataLayer
|> expect(:load_last_reset_reason, fn -> nil end) |> expect(:load_last_reset_reason, fn -> nil end)
@ -84,6 +90,7 @@ defmodule FarmbotOS.Configurator.RouterTest do
refute conn.resp_body =~ "<div class=\"last-shutdown-reason\">" refute conn.resp_body =~ "<div class=\"last-shutdown-reason\">"
end end
@tag :capture_log
test "captive portal" do test "captive portal" do
conn = conn(:get, "/generate_204") conn = conn(:get, "/generate_204")
conn = Router.call(conn, @opts) conn = Router.call(conn, @opts)
@ -94,6 +101,7 @@ defmodule FarmbotOS.Configurator.RouterTest do
assert conn.status == 302 assert conn.status == 302
end end
@tag :capture_log
test "network index" do test "network index" do
FarmbotOS.Configurator.FakeNetworkLayer FarmbotOS.Configurator.FakeNetworkLayer
|> expect(:list_interfaces, fn -> |> expect(:list_interfaces, fn ->
@ -108,6 +116,7 @@ defmodule FarmbotOS.Configurator.RouterTest do
assert conn.resp_body =~ "eth0" assert conn.resp_body =~ "eth0"
end end
@tag :capture_log
test "select network sets session data" do test "select network sets session data" do
conn = conn(:post, "select_interface") conn = conn(:post, "select_interface")
conn = Router.call(conn, @opts) conn = Router.call(conn, @opts)
@ -124,6 +133,7 @@ defmodule FarmbotOS.Configurator.RouterTest do
assert get_session(conn, "ifname") == "wlan0" assert get_session(conn, "ifname") == "wlan0"
end end
@tag :capture_log
test "config wired" do test "config wired" do
conn = conn =
conn(:get, "/config_wired") conn(:get, "/config_wired")
@ -133,6 +143,7 @@ defmodule FarmbotOS.Configurator.RouterTest do
assert conn.resp_body =~ "Advanced settings" assert conn.resp_body =~ "Advanced settings"
end end
@tag :capture_log
test "config wireless SSID list" do test "config wireless SSID list" do
FarmbotOS.Configurator.FakeNetworkLayer FarmbotOS.Configurator.FakeNetworkLayer
|> expect(:scan, fn _ -> |> expect(:scan, fn _ ->
@ -154,6 +165,7 @@ defmodule FarmbotOS.Configurator.RouterTest do
assert conn.resp_body =~ "Test Network" assert conn.resp_body =~ "Test Network"
end end
@tag :capture_log
test "config wireless" do test "config wireless" do
# No SSID or SECURITY # No SSID or SECURITY
conn = conn =
@ -238,6 +250,7 @@ defmodule FarmbotOS.Configurator.RouterTest do
assert conn.resp_body =~ "unknown or unsupported" assert conn.resp_body =~ "unknown or unsupported"
end end
@tag :capture_log
test "config_network" do test "config_network" do
params = %{ params = %{
"dns_name" => "super custom", "dns_name" => "super custom",
@ -290,6 +303,7 @@ defmodule FarmbotOS.Configurator.RouterTest do
assert redirected_to(conn) == "/credentials" assert redirected_to(conn) == "/credentials"
end end
@tag :capture_log
test "credentials index" do test "credentials index" do
FarmbotOS.Configurator.ConfigDataLayer FarmbotOS.Configurator.ConfigDataLayer
|> expect(:load_email, fn -> "test@test.org" end) |> expect(:load_email, fn -> "test@test.org" end)
@ -302,6 +316,7 @@ defmodule FarmbotOS.Configurator.RouterTest do
assert conn.resp_body =~ "https://my.farm.bot" assert conn.resp_body =~ "https://my.farm.bot"
end end
@tag :capture_log
test "configure credentials" do test "configure credentials" do
params = %{ params = %{
"email" => "test@test.org", "email" => "test@test.org",
@ -334,6 +349,7 @@ defmodule FarmbotOS.Configurator.RouterTest do
assert redirected_to(conn) == "/credentials" assert redirected_to(conn) == "/credentials"
end end
@tag :capture_log
test "finish" do test "finish" do
conn = conn =
conn(:get, "/finish") conn(:get, "/finish")
@ -342,6 +358,7 @@ defmodule FarmbotOS.Configurator.RouterTest do
assert redirected_to(conn) == "/" assert redirected_to(conn) == "/"
end end
@tag :capture_log
test "404" do test "404" do
conn = conn =
conn(:get, "/whoops") conn(:get, "/whoops")
@ -350,6 +367,7 @@ defmodule FarmbotOS.Configurator.RouterTest do
assert conn.resp_body == "Page not found" assert conn.resp_body == "Page not found"
end end
@tag :capture_log
test "500" do test "500" do
FarmbotOS.Configurator.FakeNetworkLayer FarmbotOS.Configurator.FakeNetworkLayer
|> expect(:scan, fn _ -> |> expect(:scan, fn _ ->
@ -360,20 +378,26 @@ defmodule FarmbotOS.Configurator.RouterTest do
] ]
end) end)
conn = crasher = fn ->
conn(:get, "/config_wireless") conn =
|> init_test_session(%{"ifname" => "wlan0"}) conn(:get, "/config_wireless")
|> Router.call(@opts) |> init_test_session(%{"ifname" => "wlan0"})
|> Router.call(@opts)
assert conn.status == 500 assert conn.status == 500
end
assert capture_io(:stderr, crasher) =~ "render error"
end end
@tag :capture_log
test "/scheduler_debugger" do test "/scheduler_debugger" do
kon = get_con("/scheduler_debugger") kon = get_con("/scheduler_debugger")
assert String.contains?(kon.resp_body, "scheduler_debugger.js") assert String.contains?(kon.resp_body, "scheduler_debugger.js")
assert String.contains?(kon.resp_body, "<title>Scheduler Debugger</title>") assert String.contains?(kon.resp_body, "<title>Scheduler Debugger</title>")
end end
@tag :capture_log
test "/logger" do test "/logger" do
kon = get_con("/logger") kon = get_con("/logger")
@ -391,6 +415,7 @@ defmodule FarmbotOS.Configurator.RouterTest do
end) end)
end end
@tag :capture_log
test "/api/telemetry/cpu_usage" do test "/api/telemetry/cpu_usage" do
{:ok, json} = Jason.decode(get_con("/api/telemetry/cpu_usage").resp_body) {:ok, json} = Jason.decode(get_con("/api/telemetry/cpu_usage").resp_body)
assert Enum.count(json) == 10 assert Enum.count(json) == 10
@ -400,6 +425,7 @@ defmodule FarmbotOS.Configurator.RouterTest do
assert(is_integer(zero["value"])) assert(is_integer(zero["value"]))
end end
@tag :capture_log
test "/finish" do test "/finish" do
expect(ConfigDataLayer, :save_config, 1, fn _conf -> expect(ConfigDataLayer, :save_config, 1, fn _conf ->
:ok :ok

View File

@ -4,6 +4,7 @@ defmodule FarmbotOS.LuaTest do
setup :verify_on_exit! setup :verify_on_exit!
alias FarmbotOS.Lua alias FarmbotOS.Lua
@tag :capture_log
test "evaluates Lua" do test "evaluates Lua" do
assert Lua.eval_assertion("Returns 'true'", "return true") assert Lua.eval_assertion("Returns 'true'", "return true")
{:error, message1} = Lua.eval_assertion("Returns 'true'", "-1") {:error, message1} = Lua.eval_assertion("Returns 'true'", "-1")

View File

@ -11,6 +11,7 @@ defmodule FarmbotOS.SysCallsTest do
use Mimic use Mimic
setup :verify_on_exit! setup :verify_on_exit!
import ExUnit.CaptureIO
test "emergency_unlock" do test "emergency_unlock" do
expect(FarmbotFirmware, :command, fn {:command_emergency_unlock, []} -> expect(FarmbotFirmware, :command, fn {:command_emergency_unlock, []} ->
@ -71,6 +72,7 @@ defmodule FarmbotOS.SysCallsTest do
assert {:error, "Could not find peripheral by id: 11"} == result6 assert {:error, "Could not find peripheral by id: 11"} == result6
end end
@tag :capture_log
test "sync() success" do test "sync() success" do
# Expect 5 calls and an :ok response. # Expect 5 calls and an :ok response.
expect(FarmbotExt.API.Reconciler, :sync_group, 5, fn changeset, _group -> expect(FarmbotExt.API.Reconciler, :sync_group, 5, fn changeset, _group ->
@ -81,16 +83,21 @@ defmodule FarmbotOS.SysCallsTest do
{:ok, %{wut: module}} {:ok, %{wut: module}}
end) end)
assert :ok == SysCalls.sync() assert capture_io(fn ->
assert :ok == SysCalls.sync()
end) =~ "green really_fast_blink"
end end
@tag :capture_log
test "sync() failure" do test "sync() failure" do
# Expect 5 calls and an :ok response. # Expect 5 calls and an :ok response.
expect(FarmbotExt.API, :get_changeset, fn FarmbotCore.Asset.Sync -> expect(FarmbotExt.API, :get_changeset, fn FarmbotCore.Asset.Sync ->
"this is a test" "this is a test"
end) end)
assert {:error, "\"this is a test\""} == SysCalls.sync() assert capture_io(fn ->
assert {:error, "\"this is a test\""} == SysCalls.sync()
end) =~ "green slow_blink"
end end
test "get_sequence(id)" do test "get_sequence(id)" do

View File

@ -91,6 +91,7 @@ defmodule FarmbotOS.SysCalls.MovementTest do
assert msg == error_log assert msg == error_log
end end
@tag :capture_log
test "move_absolute/4 - error (in tuple)" do test "move_absolute/4 - error (in tuple)" do
expect(FarmbotFirmware, :request, 1, fn {:parameter_read, [_]} -> expect(FarmbotFirmware, :request, 1, fn {:parameter_read, [_]} ->
{:error, "boom"} {:error, "boom"}

View File

@ -6,6 +6,7 @@ defmodule FarmbotOS.SysCalls.PinControlTest do
alias FarmbotCore.Asset.Peripheral alias FarmbotCore.Asset.Peripheral
@digital 0 @digital 0
@tag :capture_log
test "read_pin with %Peripheral{}, pin is 1" do test "read_pin with %Peripheral{}, pin is 1" do
expect(FarmbotFirmware, :request, 1, fn expect(FarmbotFirmware, :request, 1, fn
{:pin_read, [p: 13, m: 0]} -> {:pin_read, [p: 13, m: 0]} ->
@ -20,6 +21,7 @@ defmodule FarmbotOS.SysCalls.PinControlTest do
assert 1 == PinControl.read_pin(peripheral, @digital) assert 1 == PinControl.read_pin(peripheral, @digital)
end end
@tag :capture_log
test "read_pin with %Peripheral{}, pin is 0" do test "read_pin with %Peripheral{}, pin is 0" do
expect(FarmbotFirmware, :request, 1, fn expect(FarmbotFirmware, :request, 1, fn
{:pin_read, [p: 13, m: 0]} -> {:pin_read, [p: 13, m: 0]} ->
@ -30,6 +32,7 @@ defmodule FarmbotOS.SysCalls.PinControlTest do
assert 0 == PinControl.read_pin(peripheral, @digital) assert 0 == PinControl.read_pin(peripheral, @digital)
end end
@tag :capture_log
test "toggle_pin, 1 => 0" do test "toggle_pin, 1 => 0" do
expect(FarmbotCore.Asset, :get_peripheral_by_pin, 1, fn 12 -> expect(FarmbotCore.Asset, :get_peripheral_by_pin, 1, fn 12 ->
nil nil
@ -48,6 +51,7 @@ defmodule FarmbotOS.SysCalls.PinControlTest do
assert :ok = PinControl.toggle_pin(12) assert :ok = PinControl.toggle_pin(12)
end end
@tag :capture_log
test "toggle_pin, 0 => 1" do test "toggle_pin, 0 => 1" do
expect(FarmbotCore.Asset, :get_peripheral_by_pin, 1, fn 12 -> expect(FarmbotCore.Asset, :get_peripheral_by_pin, 1, fn 12 ->
nil nil

View File

@ -101,6 +101,7 @@ defmodule FarmbotOS.SysCalls.PointLookupTest do
assert pg == PointLookup.get_point_group(pg.id) assert pg == PointLookup.get_point_group(pg.id)
end end
@tag :capture_log
test "PointLookup.get_point_group/1 - string" do test "PointLookup.get_point_group/1 - string" do
Repo.delete_all(PointGroup) Repo.delete_all(PointGroup)
Repo.delete_all(Point) Repo.delete_all(Point)