@@ -2,10 +2,13 @@ defmodule NervesHubWeb.DeviceChannelTest do
22 use NervesHubWeb.ChannelCase
33 use DefaultMocks
44
5+ import Ecto.Query
56 import TrackerHelper
67
78 alias NervesHub.Devices
9+ alias NervesHub.AuditLogs.AuditLog
810 alias NervesHub.Fixtures
11+ alias NervesHub.Repo
912 alias NervesHubWeb.DeviceChannel
1013 alias NervesHubWeb.DeviceSocket
1114 alias NervesHubWeb.ExtensionsChannel
@@ -91,6 +94,68 @@ defmodule NervesHubWeb.DeviceChannelTest do
9194 assert_push ( "archive_public_keys" , % { keys: [ _ ] } )
9295 end
9396
97+ test "if archive is sent on connect an audit log is not created" do
98+ % { certificate: certificate , params: params , archive_uuid: archive_uuid } =
99+ archive_setup ( )
100+
101+ { :ok , socket } =
102+ connect ( DeviceSocket , % { } , connect_info: % { peer_data: % { ssl_cert: certificate . der } } )
103+
104+ { :ok , % { } , _socket } = subscribe_and_join ( socket , DeviceChannel , "device" , params )
105+
106+ audit_log_count_before = Repo . aggregate ( AuditLog , :count )
107+
108+ assert_push ( "archive" , % { uuid: ^ archive_uuid } )
109+
110+ assert audit_log_count_before == Repo . aggregate ( AuditLog , :count )
111+ end
112+
113+ test "if archive is sent when an archive updates an audit log is created" do
114+ % { device: device , certificate: certificate , params: params } = archive_setup ( )
115+
116+ { :ok , socket } =
117+ connect ( DeviceSocket , % { } , connect_info: % { peer_data: % { ssl_cert: certificate . der } } )
118+
119+ { :ok , % { } , socket } = subscribe_and_join ( socket , DeviceChannel , "device" , params )
120+
121+ Phoenix.PubSub . broadcast (
122+ NervesHub.PubSub ,
123+ "device:#{ device . id } " ,
124+ % Phoenix.Socket.Broadcast { event: "archives/updated" }
125+ )
126+
127+ _ = :sys . get_state ( socket . channel_pid )
128+
129+ assert Repo . exists? (
130+ from ( al in AuditLog ,
131+ where: like ( al . description , "Archive update triggered for%" )
132+ )
133+ )
134+ end
135+
136+ test "if archive is sent when a device updates an audit log is created" do
137+ % { device: device , certificate: certificate , params: params } = archive_setup ( )
138+
139+ { :ok , socket } =
140+ connect ( DeviceSocket , % { } , connect_info: % { peer_data: % { ssl_cert: certificate . der } } )
141+
142+ { :ok , % { } , socket } = subscribe_and_join ( socket , DeviceChannel , "device" , params )
143+
144+ Phoenix.PubSub . broadcast (
145+ NervesHub.PubSub ,
146+ "device:#{ device . id } " ,
147+ % Phoenix.Socket.Broadcast { event: "devices/updated" }
148+ )
149+
150+ _ = :sys . get_state ( socket . channel_pid )
151+
152+ assert Repo . exists? (
153+ from ( al in AuditLog ,
154+ where: like ( al . description , "Archive update triggered for%" )
155+ )
156+ )
157+ end
158+
94159 test "the first fwup_progress marks an update as happening" do
95160 user = Fixtures . user_fixture ( )
96161 { device , _firmware , _deployment } = device_fixture ( user , % { identifier: "123" } )
@@ -247,4 +312,30 @@ defmodule NervesHubWeb.DeviceChannelTest do
247312
248313 { device , firmware , deployment }
249314 end
315+
316+ defp archive_setup ( ) do
317+ user = Fixtures . user_fixture ( )
318+ org = Fixtures . org_fixture ( user , % { name: "BigOrg2022" } )
319+ product = Fixtures . product_fixture ( user , org , % { name: "Hop" } )
320+ org_key = Fixtures . org_key_fixture ( org , user )
321+ archive = % { uuid: archive_uuid } = Fixtures . archive_fixture ( org_key , product )
322+ firmware = Fixtures . firmware_fixture ( org_key , product , % { dir: System . tmp_dir ( ) } )
323+ deployment = Fixtures . deployment_fixture ( org , firmware , % { archive_id: archive . id } )
324+
325+ { device , _firmware , _deployment } =
326+ device_fixture ( user , % { identifier: "123" , deployment_id: deployment . id } )
327+
328+ % { db_cert: certificate } = Fixtures . device_certificate_fixture ( device )
329+
330+ params =
331+ for { k , v } <- Map . from_struct ( device . firmware_metadata ) ,
332+ into: % { "device_api_version" => "2.0.1" } do
333+ case k do
334+ :uuid -> { "nerves_fw_uuid" , Ecto.UUID . generate ( ) }
335+ _ -> { "nerves_fw_#{ k } " , v }
336+ end
337+ end
338+
339+ % { device: device , certificate: certificate , params: params , archive_uuid: archive_uuid }
340+ end
250341end
0 commit comments