Skip to content

Commit

Permalink
feat(capabilities): capabilities topic
Browse files Browse the repository at this point in the history
- Adds the `capabilities` endpoint for the device

Signed-off-by: Luca Zaninotto <[email protected]>
  • Loading branch information
lusergit committed Jan 16, 2025
1 parent 43e3bcb commit 2e339a4
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 0 deletions.
7 changes: 7 additions & 0 deletions lib/astarte_vmq_plugin.ex
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,9 @@ defmodule Astarte.VMQ.Plugin do
control_path = "/" <> Enum.join(control_path_tokens, "/")
publish_control_message(realm, device_id, control_path, payload, timestamp)

[^realm, ^device_id, "capabilities"] ->
publish_capabilities(realm, device_id, payload, timestamp)

[^realm, ^device_id, interface | path_tokens] ->
path = "/" <> Enum.join(path_tokens, "/")
publish_data(realm, device_id, interface, path, payload, timestamp)
Expand Down Expand Up @@ -207,6 +210,10 @@ defmodule Astarte.VMQ.Plugin do
publish(realm, device_id, payload, "data", timestamp, additional_headers)
end

defp publish_capabilities(realm, device_id, payload, timestamp) do
publish(realm, device_id, payload, "capabilities", timestamp)
end

defp publish_control_message(realm, device_id, control_path, payload, timestamp) do
additional_headers = [x_astarte_control_path: control_path]

Expand Down
26 changes: 26 additions & 0 deletions test/astarte_vmq_plugin_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -422,6 +422,32 @@ defmodule Astarte.VMQ.PluginTest do
assert String.starts_with?(message_id, message_id_prefix(@realm, @device_id, timestamp))
end

test "device capabilities on_publish" do
payload = "payload"
capabilities_topic = [@realm, @device_id, "capabilities"]

Plugin.on_publish(
:dontcare,
{:dontcare, @device_base_path},
:dontcare,
capabilities_topic,
payload,
:dontcare
)

assert_receive {:amqp_msg, ^payload, %{headers: headers, timestamp: timestamp} = _metadata}

# 5 seconds
assert_in_delta timestamp, now_us_x10_timestamp(), 50_000_000

assert %{
"x_astarte_vmqamqp_proto_ver" => 1,
"x_astarte_msg_type" => "capabilities",
"x_astarte_realm" => @realm,
"x_astarte_device_id" => @device_id
} = amqp_headers_to_map(headers)
end

test "device data on_publish" do
path = "/some/data/path"
interface = "com.my.Interface"
Expand Down

0 comments on commit 2e339a4

Please sign in to comment.