Current section

Files

Jump to
nerves_time test ntpd_parser_test.exs
Raw

test/ntpd_parser_test.exs

defmodule NtpdParserTest do
use ExUnit.Case
alias Nerves.Time.NtpdParser
test "decodes addresses" do
assert NtpdParser.parse("ntpd: bad address '0.pool.ntp.org'") ==
{:bad_address, %{server: "0.pool.ntp.org"}}
assert NtpdParser.parse("ntpd: '1.pool.ntp.org' is 195.78.244.50") ==
{:address, %{server: "1.pool.ntp.org", address: "195.78.244.50"}}
end
test "decodes requests" do
assert NtpdParser.parse("ntpd: sending query to 195.78.244.50") ==
{:query, %{address: "195.78.244.50"}}
end
test "decodes responses" do
{:reply, result} =
NtpdParser.parse(
"ntpd: reply from 35.237.173.121: offset:-0.000109 delay:0.018289 status:0x24 strat:3 refid:0xfea9fea9 rootdelay:0.000916 reach:0x03"
)
assert result.address == "35.237.173.121"
assert result.offset == -0.000109
assert result.delay == 0.018289
assert result.status == 0x24
assert result.stratum == 3
assert result.refid == 0xFEA9FEA9
assert result.rootdelay == 0.000916
assert result.reach == 0x03
end
test "decodes timeout" do
{:timeout, result} =
NtpdParser.parse(
"ntpd: timed out waiting for 35.237.173.121, reach 0x0a, next query in 33s"
)
assert result.address == "35.237.173.121"
assert result.reach == 0x0A
assert result.next_query == 33
end
test "decodes ntpscript stratum report" do
{:stratum, result} = NtpdParser.parse("ntpd_script: stratum,0,0.190975,3,1")
assert result.freq_drift_ppm == 0
assert result.offset == 0.190975
assert result.stratum == 3
assert result.poll_interval == 1
end
test "decodes ntpscript unsync report" do
{:unsync, result} = NtpdParser.parse("ntpd_script: unsync,-303,0.0000,16,64")
assert result.freq_drift_ppm == -303
assert result.offset == 0
assert result.stratum == 16
assert result.poll_interval == 64
end
test "decodes ntpscript step report" do
{:step, result} = NtpdParser.parse("ntpd_script: step,0,0.190975,3,1")
assert result.freq_drift_ppm == 0
assert result.offset == 0.190975
assert result.stratum == 3
assert result.poll_interval == 1
end
test "decodes ntpscript periodic report" do
{:periodic, result} = NtpdParser.parse("ntpd_script: periodic,-257,0.163099,3,32")
assert result.freq_drift_ppm == -257
assert result.offset == 0.163099
assert result.stratum == 3
assert result.poll_interval == 32
# Network totally down
{:periodic, result} = NtpdParser.parse("ntpd_script: periodic,0,0.000000,16,1")
assert result.freq_drift_ppm == 0
assert result.offset == 0
assert result.stratum == 16
assert result.poll_interval == 1
end
test "ignores junk" do
assert NtpdParser.parse("\n") == {:ignored, "\n"}
assert NtpdParser.parse("something") == {:ignored, "something"}
assert NtpdParser.parse("ntpd: new stuff") == {:ignored, "ntpd: new stuff"}
assert NtpdParser.parse("ntpd: executing './priv/ntpd_script stratum'") ==
{:ignored, "ntpd: executing './priv/ntpd_script stratum'"}
end
end