fp-lab4/test/http/codec_test.exs
2026-01-13 18:26:26 +03:00

54 lines
1.4 KiB
Elixir

defmodule Exdns.HttpCodecTest do
use ExUnit.Case, async: true
alias Exdns.DnsPacket.ResourceRecord
alias Exdns.DnsPacket.RRData.Types
alias Exdns.HttpCodec
test "decode_records uses zone name when record name is missing" do
zone = ["example", "com"]
payload = %{
"records" => [
%{"type" => "A", "rdata" => %{"address" => "1.2.3.4"}}
]
}
assert {:ok, [rr]} = HttpCodec.decode_records(payload, zone)
assert rr.name == zone
assert rr.rdata == %Types.A{address: {1, 2, 3, 4}}
end
test "decode_records handles @ and *" do
zone = ["example", "com"]
payload = %{
"records" => [
%{"name" => "@", "type" => "A", "rdata" => %{"address" => "1.2.3.4"}},
%{"name" => "*", "type" => "A", "rdata" => %{"address" => "5.6.7.8"}}
]
}
assert {:ok, records} = HttpCodec.decode_records(payload, zone)
assert Enum.at(records, 0).name == zone
assert Enum.at(records, 1).name == ["*" | zone]
end
test "encode_records returns string names" do
records = [
%ResourceRecord{
name: ["www", "example", "com"],
type: :txt,
class: 1,
ttl: 0,
rdata: %Types.TXT{strings: ["hello"]}
}
]
[encoded] = HttpCodec.encode_records(records)
assert encoded["name"] == "www.example.com"
assert encoded["type"] == "txt"
assert encoded["rdata"]["strings"] == ["hello"]
end
end