@@ -21,6 +21,12 @@ defmodule Realtime.Tenants.CacheTest do
2121 assert % Api.Tenant { name: "new name" } = Tenants . get_tenant_by_external_id ( external_id )
2222 assert % Api.Tenant { name: "tenant" } = Cache . get_tenant_by_external_id ( external_id )
2323 end
24+
25+ test "does not cache when tenant is not found" do
26+ assert Cache . get_tenant_by_external_id ( "not found" ) == nil
27+
28+ assert Cachex . exists? ( Cache , { :get_tenant_by_external_id , "not found" } ) == { :ok , false }
29+ end
2430 end
2531
2632 describe "invalidate_tenant_cache/1" do
@@ -40,6 +46,18 @@ defmodule Realtime.Tenants.CacheTest do
4046 end
4147 end
4248
49+ describe "update_cache/1" do
50+ test "updates the cache given a tenant" , % { tenant: tenant } do
51+ external_id = tenant . external_id
52+ assert % Api.Tenant { name: "tenant" } = Cache . get_tenant_by_external_id ( external_id )
53+ # Update a tenant
54+ updated_tenant = % { tenant | name: "updated name" }
55+ # Update cache
56+ Cache . update_cache ( updated_tenant )
57+ assert % Api.Tenant { name: "updated name" } = Cache . get_tenant_by_external_id ( external_id )
58+ end
59+ end
60+
4361 describe "distributed_invalidate_tenant_cache/1" do
4462 setup do
4563 { :ok , node } = Clustered . start ( )
@@ -53,30 +71,61 @@ defmodule Realtime.Tenants.CacheTest do
5371 dummy_name = random_string ( )
5472
5573 # Ensure cache has the values
56- Cachex . put! (
57- Realtime.Tenants.Cache ,
58- { { :get_tenant_by_external_id , 1 } , [ external_id ] } ,
59- { :cached , % { tenant | name: dummy_name } }
60- )
61-
62- Rpc . enhanced_call ( node , Cachex , :put! , [
63- Realtime.Tenants.Cache ,
64- { { :get_tenant_by_external_id , 1 } , [ external_id ] } ,
65- { :cached , % { tenant | name: dummy_name } }
66- ] )
74+ Realtime.Tenants.Cache . update_cache ( % { tenant | name: dummy_name } )
75+
76+ Rpc . enhanced_call ( node , Realtime.Tenants.Cache , :update_cache , [ % { tenant | name: dummy_name } ] )
6777
6878 # Cache showing old value
69- assert % Api.Tenant { name: ^ dummy_name } = Cache . get_tenant_by_external_id ( external_id )
70- assert % Api.Tenant { name: ^ dummy_name } = Rpc . enhanced_call ( node , Cache , :get_tenant_by_external_id , [ external_id ] )
79+ assert { :ok , % Api.Tenant { name: ^ dummy_name } } = Cachex . get ( Cache , { :get_tenant_by_external_id , external_id } )
80+
81+ assert { :ok , % Api.Tenant { name: ^ dummy_name } } =
82+ Rpc . enhanced_call ( node , Cachex , :get , [ Cache , { :get_tenant_by_external_id , external_id } ] )
7183
7284 # Invalidate cache
73- assert true = Cache . distributed_invalidate_tenant_cache ( external_id )
85+ assert :ok = Cache . distributed_invalidate_tenant_cache ( external_id )
7486
87+ # wait for cache to be invalidated in both nodes
88+ Process . sleep ( 200 )
7589 # Cache showing new value
7690 assert % Api.Tenant { name: ^ expected_name } = Cache . get_tenant_by_external_id ( external_id )
7791
7892 assert % Api.Tenant { name: ^ expected_name } =
7993 Rpc . enhanced_call ( node , Cache , :get_tenant_by_external_id , [ external_id ] )
8094 end
8195 end
96+
97+ describe "global_cache_update/1" do
98+ setup do
99+ { :ok , node } = Clustered . start ( )
100+ % { node: node }
101+ end
102+
103+ test "update the cache given a tenant_id" , % { node: node } do
104+ external_id = "dev_tenant"
105+ % Api.Tenant { name: expected_name } = tenant = Tenants . get_tenant_by_external_id ( external_id )
106+
107+ dummy_name = random_string ( )
108+
109+ # Ensure cache has the values
110+ Realtime.Tenants.Cache . update_cache ( % { tenant | name: dummy_name } )
111+
112+ Rpc . enhanced_call ( node , Cache , :update_cache , [ % { tenant | name: dummy_name } ] )
113+
114+ # Cache showing old value
115+ assert % Api.Tenant { name: ^ dummy_name } = Cache . get_tenant_by_external_id ( external_id )
116+ assert % Api.Tenant { name: ^ dummy_name } = Rpc . enhanced_call ( node , Cache , :get_tenant_by_external_id , [ external_id ] )
117+
118+ # Update cache
119+ assert :ok = Cache . global_cache_update ( tenant )
120+
121+ # wait for cache to be updated in both nodes
122+ Process . sleep ( 200 )
123+
124+ # Cache showing new value
125+ assert { :ok , % Api.Tenant { name: ^ expected_name } } = Cachex . get ( Cache , { :get_tenant_by_external_id , external_id } )
126+
127+ assert { :ok , % Api.Tenant { name: ^ expected_name } } =
128+ Rpc . enhanced_call ( node , Cachex , :get , [ Cache , { :get_tenant_by_external_id , external_id } ] )
129+ end
130+ end
82131end
0 commit comments