Inform Roundtrip: Fixture -> Inform -> InformResponse
Setup
Mix.install([
{:caretaker, path: "."}
])
alias Caretaker.CWMP.SOAP
require Logger
Load fixture Inform and decode
xml = File.read!("test/fixtures/tr069/inform.xml")
{:ok, %{header: %{id: id, cwmp_ns: ns}, body: %{rpc: "Inform", xml: body_xml}}} =
SOAP.decode_envelope(xml)
{:ok, inform} = Caretaker.TR069.RPC.Inform.decode(body_xml)
Logger.info("Inform device_id=#{inspect(inform.device_id)} id=#{id} cwmp_ns=#{ns}")
Build InformResponse, mirror namespace, echo cwmp:ID
{:ok, resp_body} =
Caretaker.TR069.RPC.InformResponse.encode(
%Caretaker.TR069.RPC.InformResponse{max_envelopes: 1}
)
{:ok, resp_env} = SOAP.encode_envelope(resp_body, %{id: id, cwmp_ns: ns})
tokens_ok = %{
has_inform_response: String.contains?(resp_env, "1"),
id_echo: String.contains?(resp_env, "#{id}"),
ns_mirrored: String.contains?(resp_env, "xmlns:cwmp=\"#{ns}\"")
}
Logger.info("Response envelope tokens_ok=#{inspect(tokens_ok)}")
IO.iodata_to_binary(resp_env)