add tests for serial
parent
3b174ae126
commit
0d29b163b2
|
@ -19,6 +19,7 @@ before_install:
|
|||
before_script:
|
||||
- export PATH=`pwd`/elixir/bin:$PATH
|
||||
script:
|
||||
- scripts/tty0tty.sh
|
||||
- mix local.hex --force
|
||||
- mix local.rebar --force
|
||||
- mix archive.install https://github.com/nerves-project/archives/raw/master/nerves_bootstrap.ez --force
|
||||
|
|
|
@ -13,3 +13,5 @@ config :farmbot, auth_callbacks: []
|
|||
|
||||
# frontend <-> bot transports.
|
||||
config :farmbot, transports: []
|
||||
|
||||
config :farmbot, logger: false
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -31,7 +31,7 @@ defmodule Farmbot.HTTP do
|
|||
|
||||
def process_request_options(opts),
|
||||
do: opts
|
||||
|> Keyword.merge(@http_config, fn(_key, user_provided, _default) ->
|
||||
|> Keyword.merge(@http_config, fn(_key, user_provided, _default) ->
|
||||
user_provided
|
||||
end)
|
||||
|
||||
|
|
|
@ -4,6 +4,8 @@ defmodule Farmbot.BotState.Supervisor do
|
|||
things can subscribe too.
|
||||
"""
|
||||
|
||||
@use_logger Application.get_env(:farmbot, :logger, true)
|
||||
|
||||
use Supervisor
|
||||
require Logger
|
||||
alias Farmbot.EasterEggs
|
||||
|
@ -37,7 +39,7 @@ defmodule Farmbot.BotState.Supervisor do
|
|||
# like position and some configuraion.
|
||||
sup = Supervisor.start_link(__MODULE__, args, name: __MODULE__)
|
||||
EasterEggs.start_cron_job
|
||||
Logger.add_backend(Farmbot.Logger)
|
||||
if @use_logger, do: Logger.add_backend(Farmbot.Logger)
|
||||
sup
|
||||
end
|
||||
end
|
||||
|
|
|
@ -21,11 +21,7 @@ defmodule Farmbot.CeleryScript.Command.ConfigUpdate do
|
|||
blah = pairs_to_tuples(config_pairs)
|
||||
current = Farmbot.BotState.get_all_mcu_params
|
||||
|
||||
# we only want to update the params that changed. This makes this operation
|
||||
# way more stable.
|
||||
params = Enum.filter(blah, fn({param_str, val}) ->
|
||||
current[param_str] != val
|
||||
end)
|
||||
params = filter_params(blah, current)
|
||||
|
||||
for {param_str, val} <- params do
|
||||
param_int = GParser.parse_param(param_str)
|
||||
|
@ -50,4 +46,11 @@ defmodule Farmbot.CeleryScript.Command.ConfigUpdate do
|
|||
end
|
||||
end
|
||||
|
||||
@spec filter_params([{binary, any}], map) :: [{binary, any}]
|
||||
defp filter_params(blah, current) do
|
||||
Enum.filter(blah, fn({param_str, val}) ->
|
||||
current[param_str] != val
|
||||
end)
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
@ -53,10 +53,16 @@ defmodule Farmbot.Serial.Handler do
|
|||
Checks if we have a handler available
|
||||
"""
|
||||
@spec available?(handler) :: boolean
|
||||
def available?(handler \\ __MODULE__) do
|
||||
def available?(handler \\ __MODULE__)
|
||||
|
||||
def available?(handler) when is_pid(handler) do
|
||||
GenServer.call(handler, :available?)
|
||||
end
|
||||
|
||||
def available?(handler) do
|
||||
uh = Process.whereis(handler)
|
||||
if uh do
|
||||
GenServer.call(uh, :available?)
|
||||
available?(uh)
|
||||
else
|
||||
false
|
||||
end
|
||||
|
|
|
@ -15,13 +15,6 @@ defmodule Farmbot.Serial.Supervisor do
|
|||
Supervisor.start_link(__MODULE__, [], name: __MODULE__)
|
||||
end
|
||||
|
||||
@doc """
|
||||
Stop the Serial Supervisor
|
||||
"""
|
||||
def stop do
|
||||
Supervisor.stop(__MODULE__)
|
||||
end
|
||||
|
||||
def init([]) do
|
||||
children = [
|
||||
worker(Task, [__MODULE__, :open_ttys, [__MODULE__]], restart: :transient)
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
#!/bin/sh
|
||||
CWD=`pwd`
|
||||
mkdir /tmp/tty0tty
|
||||
cd /tmp/tty0tty
|
||||
git clone https://github.com/freemed/tty0tty .
|
||||
cd module
|
||||
make
|
||||
sudo cp tty0tty.ko /lib/modules/$(uname -r)/kernel/drivers/misc/
|
||||
sudo depmod
|
||||
sudo modprobe tty0tty
|
||||
cd $CWD
|
|
@ -1,10 +0,0 @@
|
|||
defmodule Farmbot.CeleryScript.Command.ConfigUpdateTest do
|
||||
use ExUnit.Case
|
||||
alias Farmbot.CeleryScript.Ast
|
||||
alias Farmbot.CeleryScript.Command
|
||||
|
||||
test "the truth" do
|
||||
# TODO(Connor) fix the truth in ConfigUpdate
|
||||
assert true == false
|
||||
end
|
||||
end
|
|
@ -1,10 +0,0 @@
|
|||
defmodule Farmbot.CeleryScript.Command.FactoryResetTest do
|
||||
use ExUnit.Case
|
||||
alias Farmbot.CeleryScript.Ast
|
||||
alias Farmbot.CeleryScript.Command
|
||||
|
||||
test "the truth" do
|
||||
# TODO(Connor) fix the truth in FactoryReset
|
||||
assert true == false
|
||||
end
|
||||
end
|
|
@ -5,7 +5,11 @@ defmodule Farmbot.LoggerTest do
|
|||
require Logger
|
||||
|
||||
setup_all do
|
||||
Logger.flush()
|
||||
Logger.add_backend(Farmbot.Logger)
|
||||
on_exit(fn() ->
|
||||
Logger.remove_backend(Farmbot.Logger)
|
||||
end)
|
||||
use_cassette "good_login" do
|
||||
:ok = Auth.interim("admin@admin.com", "password123", "http://localhost:3000")
|
||||
{:ok, token} = Auth.try_log_in
|
||||
|
@ -19,7 +23,7 @@ defmodule Farmbot.LoggerTest do
|
|||
for i <- 0..51 do
|
||||
Logger.info "Farmbot can count to: #{i}"
|
||||
end
|
||||
Process.sleep(3000)
|
||||
Process.sleep(100)
|
||||
|
||||
r = Farmbot.HTTP.get! "/api/logs"
|
||||
body = Poison.decode!(r.body)
|
||||
|
|
|
@ -1,41 +1,73 @@
|
|||
defmodule Farmbot.Serial.HandlerTest do
|
||||
# this is set async false because all the commands coming over the serial line
|
||||
# Will only ever be one at a time
|
||||
use ExUnit.Case, async: false
|
||||
def fix_race, do: Process.sleep(10)
|
||||
|
||||
# def send_fake_msg(msg) do
|
||||
# GenServer.cast(Nerves.FakeUART, {:fake_message, msg<>"\r\n"})
|
||||
# end
|
||||
#
|
||||
# def set_param(param, value) do
|
||||
# send_fake_msg("R21 P#{param} V#{value}")
|
||||
# end
|
||||
use ExUnit.Case
|
||||
alias Nerves.UART
|
||||
alias Farmbot.Serial.Handler
|
||||
|
||||
# test "sets position" do
|
||||
# send_fake_msg("R82 X-20 Y0 Z0")
|
||||
# # Just pretend this isnt here
|
||||
# fix_race
|
||||
# pos = Farmbot.BotState.get_current_pos
|
||||
# assert(pos == [-20,0,0])
|
||||
# end
|
||||
#
|
||||
# test "sets some params" do
|
||||
# set_param("0", 123)
|
||||
# set_param("103", 1)
|
||||
# set_param("32", 0)
|
||||
#
|
||||
# fix_race # shhhh
|
||||
#
|
||||
# version = Farmbot.BotState.get_fw_version
|
||||
# assert(version == 123)
|
||||
#
|
||||
# # 103
|
||||
# zencen = Farmbot.BotState.get_param :encoder_enabled_z
|
||||
# assert(zencen == 1)
|
||||
#
|
||||
# # 32
|
||||
# whatever = Farmbot.BotState.get_param :movement_invert_motor_y
|
||||
# assert(whatever == 0)
|
||||
# end
|
||||
defmodule GcodeMock do
|
||||
@moduledoc false
|
||||
use GenServer
|
||||
def start_link(tty) do
|
||||
GenServer.start_link(__MODULE__, tty)
|
||||
end
|
||||
|
||||
def init(tty) do
|
||||
{:ok, uart} = UART.start_link()
|
||||
UART.open(uart, tty)
|
||||
UART.configure(uart,
|
||||
framing: {UART.Framing.Line, separator: "\r\n"},
|
||||
active: true,
|
||||
rx_framing_timeout: 500)
|
||||
{:ok, %{uart: uart}}
|
||||
end
|
||||
|
||||
def handle_info({:nerves_uart, "/dev/tnt1", code}, state) do
|
||||
handle_code(code, state.uart)
|
||||
{:noreply, state}
|
||||
end
|
||||
|
||||
def handle_info(thing, state) do
|
||||
IO.inspect thing
|
||||
{:noreply, state}
|
||||
end
|
||||
|
||||
def handle_code("F83 Q" <> code, uart) do
|
||||
UART.write(uart, "R83 mock_fw Q#{code}")
|
||||
end
|
||||
|
||||
def handle_code(code, _uart) do
|
||||
IO.warn "whoops!: #{inspect code}"
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
setup_all do
|
||||
{:ok, mock} = GcodeMock.start_link("/dev/tnt1")
|
||||
|
||||
# start a nerves genserver
|
||||
{:ok, nerves} = UART.start_link()
|
||||
{:ok, handler} = Handler.start_link(nerves, "/dev/tnt0")
|
||||
|
||||
on_exit(fn() ->
|
||||
if Process.alive?(mock) do
|
||||
GenServer.stop(mock, :normal)
|
||||
end
|
||||
|
||||
if Process.alive?(handler) do
|
||||
GenServer.stop(handler, :normal)
|
||||
end
|
||||
end)
|
||||
|
||||
{:ok, mock: mock, handler: handler, handler_nerves: nerves}
|
||||
end
|
||||
|
||||
test "checks serial availablity", %{handler: handler} do
|
||||
bool = Handler.available?(handler)
|
||||
assert bool == true
|
||||
end
|
||||
|
||||
test "gets the state", %{handler: handler, handler_nerves: nerves} do
|
||||
state = Handler.get_state(handler)
|
||||
assert state.nerves == nerves
|
||||
assert state.tty == "/dev/tnt0"
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,8 +1,14 @@
|
|||
ExUnit.start
|
||||
IO.puts "deleting config and secret"
|
||||
Mix.shell.info [:green, "deleting config and secret"]
|
||||
File.rm_rf! "/tmp/config.json"
|
||||
File.rm_rf! "/tmp/secret"
|
||||
File.rm_rf! "/tmp/farmware"
|
||||
|
||||
Mix.shell.info [:green, "Setting up faker"]
|
||||
Faker.start
|
||||
|
||||
Mix.shell.info [:green, "Setting up vcr"]
|
||||
ExVCR.Config.cassette_library_dir("fixture/cassettes")
|
||||
:ok = Logger.remove_backend Farmbot.Logger
|
||||
|
||||
Mix.shell.info [:green, "removeing logger"]
|
||||
Logger.remove_backend Farmbot.Logger
|
||||
|
|
Loading…
Reference in New Issue