From d615d403931800c9f848f9cac082b0043738b3bc Mon Sep 17 00:00:00 2001 From: Jamie Rodriguez Date: Mon, 10 Jul 2023 16:57:39 +0200 Subject: [PATCH 1/6] Only broadcast `HostRemovedFromCluster` when Host is part of Cluster --- lib/trento/application/projectors/host_projector.ex | 10 ++++++++++ .../application/projectors/host_projector_test.exs | 12 ++++++++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/lib/trento/application/projectors/host_projector.ex b/lib/trento/application/projectors/host_projector.ex index 0104ed5c24..5bb1ec3b8a 100644 --- a/lib/trento/application/projectors/host_projector.ex +++ b/lib/trento/application/projectors/host_projector.ex @@ -275,6 +275,16 @@ defmodule Trento.HostProjector do end end + def after_update( + %HostRemovedFromCluster{host_id: host_id}, + _, + %{host: %Trento.HostReadModel{cluster_id: nil}} + ) do + TrentoWeb.Endpoint.broadcast("monitoring:hosts", "host_details_updated", %{ + id: host_id + }) + end + def after_update( %HostDetailsUpdated{}, _, diff --git a/test/trento/application/projectors/host_projector_test.exs b/test/trento/application/projectors/host_projector_test.exs index b5cd403776..8dca4b0720 100644 --- a/test/trento/application/projectors/host_projector_test.exs +++ b/test/trento/application/projectors/host_projector_test.exs @@ -148,8 +148,12 @@ defmodule Trento.HostProjectorTest do } ProjectorTestHelper.project(HostProjector, event, "host_projector") - projection = Repo.get!(HostReadModel, host_id) + assert_broadcast "host_details_updated", + %{id: ^host_id}, + 1000 + + projection = Repo.get!(HostReadModel, host_id) assert nil == projection.cluster_id end @@ -169,8 +173,12 @@ defmodule Trento.HostProjectorTest do } ProjectorTestHelper.project(HostProjector, event, "host_projector") - projection = Repo.get!(HostReadModel, host_id) + refute_broadcast "host_details_updated", + %{id: ^host_id}, + 1000 + + projection = Repo.get!(HostReadModel, host_id) assert cluster_id == projection.cluster_id end From 8f87ce1698898581f77aa642f9430538227201d3 Mon Sep 17 00:00:00 2001 From: Jamie Rodriguez Date: Tue, 11 Jul 2023 10:47:49 +0200 Subject: [PATCH 2/6] Reorder test assertions --- .../application/projectors/host_projector_test.exs | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/test/trento/application/projectors/host_projector_test.exs b/test/trento/application/projectors/host_projector_test.exs index 8dca4b0720..638b772316 100644 --- a/test/trento/application/projectors/host_projector_test.exs +++ b/test/trento/application/projectors/host_projector_test.exs @@ -148,13 +148,12 @@ defmodule Trento.HostProjectorTest do } ProjectorTestHelper.project(HostProjector, event, "host_projector") + projection = Repo.get!(HostReadModel, host_id) + assert nil == projection.cluster_id assert_broadcast "host_details_updated", %{id: ^host_id}, 1000 - - projection = Repo.get!(HostReadModel, host_id) - assert nil == projection.cluster_id end test "should not set the cluster_id to nil if a HostRemovedFromCluster event is received and the host is not part of the cluster anymore" do @@ -173,13 +172,12 @@ defmodule Trento.HostProjectorTest do } ProjectorTestHelper.project(HostProjector, event, "host_projector") + projection = Repo.get!(HostReadModel, host_id) + assert cluster_id == projection.cluster_id refute_broadcast "host_details_updated", %{id: ^host_id}, 1000 - - projection = Repo.get!(HostReadModel, host_id) - assert cluster_id == projection.cluster_id end test "should update an existing host when HostDetailsUpdated event is received", %{ From 6d4ac87ce3ab874d1031596c6d59176cc59dd904 Mon Sep 17 00:00:00 2001 From: Jamie Rodriguez Date: Tue, 11 Jul 2023 10:50:50 +0200 Subject: [PATCH 3/6] Add `cluster_id` to broadcast payload --- lib/trento/application/projectors/host_projector.ex | 3 ++- test/trento/application/projectors/host_projector_test.exs | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/trento/application/projectors/host_projector.ex b/lib/trento/application/projectors/host_projector.ex index 5bb1ec3b8a..7892b8d585 100644 --- a/lib/trento/application/projectors/host_projector.ex +++ b/lib/trento/application/projectors/host_projector.ex @@ -281,7 +281,8 @@ defmodule Trento.HostProjector do %{host: %Trento.HostReadModel{cluster_id: nil}} ) do TrentoWeb.Endpoint.broadcast("monitoring:hosts", "host_details_updated", %{ - id: host_id + id: host_id, + cluster_id: nil }) end diff --git a/test/trento/application/projectors/host_projector_test.exs b/test/trento/application/projectors/host_projector_test.exs index 638b772316..cbbca335a9 100644 --- a/test/trento/application/projectors/host_projector_test.exs +++ b/test/trento/application/projectors/host_projector_test.exs @@ -152,7 +152,7 @@ defmodule Trento.HostProjectorTest do assert nil == projection.cluster_id assert_broadcast "host_details_updated", - %{id: ^host_id}, + %{id: ^host_id, cluster_id: nil}, 1000 end From 762e3675f7dc64d6587ed6c29febd436a748f3a3 Mon Sep 17 00:00:00 2001 From: Jamie Rodriguez Date: Tue, 11 Jul 2023 10:52:33 +0200 Subject: [PATCH 4/6] Fix whitespace --- test/trento/application/projectors/host_projector_test.exs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/trento/application/projectors/host_projector_test.exs b/test/trento/application/projectors/host_projector_test.exs index cbbca335a9..6b05ea604b 100644 --- a/test/trento/application/projectors/host_projector_test.exs +++ b/test/trento/application/projectors/host_projector_test.exs @@ -149,6 +149,7 @@ defmodule Trento.HostProjectorTest do ProjectorTestHelper.project(HostProjector, event, "host_projector") projection = Repo.get!(HostReadModel, host_id) + assert nil == projection.cluster_id assert_broadcast "host_details_updated", @@ -173,6 +174,7 @@ defmodule Trento.HostProjectorTest do ProjectorTestHelper.project(HostProjector, event, "host_projector") projection = Repo.get!(HostReadModel, host_id) + assert cluster_id == projection.cluster_id refute_broadcast "host_details_updated", From 21834be33b699a2fa2d15aea51fc15e71c05bd65 Mon Sep 17 00:00:00 2001 From: Jamie Rodriguez Date: Tue, 11 Jul 2023 11:52:32 +0200 Subject: [PATCH 5/6] Reduce `refute_broadcast()` timeout --- test/trento/application/projectors/host_projector_test.exs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/trento/application/projectors/host_projector_test.exs b/test/trento/application/projectors/host_projector_test.exs index 6b05ea604b..9b4f1efbe4 100644 --- a/test/trento/application/projectors/host_projector_test.exs +++ b/test/trento/application/projectors/host_projector_test.exs @@ -179,7 +179,7 @@ defmodule Trento.HostProjectorTest do refute_broadcast "host_details_updated", %{id: ^host_id}, - 1000 + 100 end test "should update an existing host when HostDetailsUpdated event is received", %{ From f406559463d002377bf94b7e14131d7d0b7d143c Mon Sep 17 00:00:00 2001 From: Jamie Rodriguez Date: Tue, 11 Jul 2023 13:18:51 +0200 Subject: [PATCH 6/6] Use default `timeout` value of 100 mS for `refute_broadcast` --- test/trento/application/projectors/host_projector_test.exs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/test/trento/application/projectors/host_projector_test.exs b/test/trento/application/projectors/host_projector_test.exs index 9b4f1efbe4..084cd6b632 100644 --- a/test/trento/application/projectors/host_projector_test.exs +++ b/test/trento/application/projectors/host_projector_test.exs @@ -177,9 +177,7 @@ defmodule Trento.HostProjectorTest do assert cluster_id == projection.cluster_id - refute_broadcast "host_details_updated", - %{id: ^host_id}, - 100 + refute_broadcast "host_details_updated", %{id: ^host_id} end test "should update an existing host when HostDetailsUpdated event is received", %{