1+ package com .redis .autoscaler ;
2+
3+ import com .fasterxml .jackson .databind .ObjectMapper ;
4+ import org .junit .jupiter .api .Test ;
5+
6+ import static org .junit .jupiter .api .Assertions .*;
7+
8+ public class CrdbModelTests {
9+
10+ private final ObjectMapper objectMapper = new ObjectMapper ();
11+
12+ @ Test
13+ void testRegionSerialization () throws Exception {
14+ // Create a LocalThroughputMeasurement object
15+ LocalThroughputMeasurement throughput = LocalThroughputMeasurement .builder ()
16+ .readOperationsPerSecond (1500 )
17+ .writeOperationsPerSecond (1500 )
18+ .build ();
19+
20+ // Create a Region object
21+ Region region = Region .builder ()
22+ .region ("us-east-1" )
23+ .localThroughputMeasurement (throughput )
24+ .build ();
25+
26+ // Serialize to JSON
27+ String json = objectMapper .writeValueAsString (region );
28+
29+ // Verify JSON structure
30+ assertTrue (json .contains ("\" region\" :\" us-east-1\" " ));
31+ assertTrue (json .contains ("\" localThroughputMeasurement\" " ));
32+ assertTrue (json .contains ("\" readOperationsPerSecond\" :1500" ));
33+ assertTrue (json .contains ("\" writeOperationsPerSecond\" :1500" ));
34+
35+ // Deserialize from JSON
36+ Region deserializedRegion = objectMapper .readValue (json , Region .class );
37+
38+ // Verify deserialized object
39+ assertEquals ("us-east-1" , deserializedRegion .getRegion ());
40+ assertNotNull (deserializedRegion .getLocalThroughputMeasurement ());
41+ assertEquals (1500 , deserializedRegion .getLocalThroughputMeasurement ().getReadOperationsPerSecond ());
42+ assertEquals (1500 , deserializedRegion .getLocalThroughputMeasurement ().getWriteOperationsPerSecond ());
43+ }
44+
45+ @ Test
46+ void testLocalThroughputMeasurementSerialization () throws Exception {
47+ // Create a LocalThroughputMeasurement object
48+ LocalThroughputMeasurement throughput = LocalThroughputMeasurement .builder ()
49+ .region ("us-west-1" )
50+ .readOperationsPerSecond (2000 )
51+ .writeOperationsPerSecond (1000 )
52+ .build ();
53+
54+ // Serialize to JSON
55+ String json = objectMapper .writeValueAsString (throughput );
56+
57+ // Verify JSON structure
58+ assertTrue (json .contains ("\" region\" :\" us-west-1\" " ));
59+ assertTrue (json .contains ("\" readOperationsPerSecond\" :2000" ));
60+ assertTrue (json .contains ("\" writeOperationsPerSecond\" :1000" ));
61+
62+ // Deserialize from JSON
63+ LocalThroughputMeasurement deserializedThroughput = objectMapper .readValue (json , LocalThroughputMeasurement .class );
64+
65+ // Verify deserialized object
66+ assertEquals ("us-west-1" , deserializedThroughput .getRegion ());
67+ assertEquals (2000 , deserializedThroughput .getReadOperationsPerSecond ());
68+ assertEquals (1000 , deserializedThroughput .getWriteOperationsPerSecond ());
69+ }
70+
71+ @ Test
72+ void testScaleRequestWithRegions () throws Exception {
73+ // Create LocalThroughputMeasurement objects
74+ LocalThroughputMeasurement throughput1 = LocalThroughputMeasurement .builder ()
75+ .readOperationsPerSecond (1500 )
76+ .writeOperationsPerSecond (1500 )
77+ .build ();
78+
79+ LocalThroughputMeasurement throughput2 = LocalThroughputMeasurement .builder ()
80+ .readOperationsPerSecond (1500 )
81+ .writeOperationsPerSecond (1500 )
82+ .build ();
83+
84+ // Create Region objects
85+ Region region1 = Region .builder ()
86+ .region ("us-east-1" )
87+ .localThroughputMeasurement (throughput1 )
88+ .build ();
89+
90+ Region region2 = Region .builder ()
91+ .region ("us-west-1" )
92+ .localThroughputMeasurement (throughput2 )
93+ .build ();
94+
95+ // Create ScaleRequest with regions
96+ ScaleRequest request = ScaleRequest .builder ()
97+ .isCrdb (true )
98+ .regions (new Region []{region1 , region2 })
99+ .build ();
100+
101+ // Serialize to JSON
102+ String json = objectMapper .writeValueAsString (request );
103+
104+ // Verify JSON structure (isCrdb should not be included as it's marked @JsonIgnore)
105+ assertFalse (json .contains ("\" isCrdb\" " ));
106+ assertTrue (json .contains ("\" regions\" " ));
107+ assertTrue (json .contains ("\" region\" :\" us-east-1\" " ));
108+ assertTrue (json .contains ("\" region\" :\" us-west-1\" " ));
109+
110+ // Deserialize from JSON
111+ ScaleRequest deserializedRequest = objectMapper .readValue (json , ScaleRequest .class );
112+
113+ // Verify deserialized object
114+ assertFalse (deserializedRequest .isCrdb ()); // Default value is false
115+ assertNotNull (deserializedRequest .getRegions ());
116+ assertEquals (2 , deserializedRequest .getRegions ().length );
117+ assertEquals ("us-east-1" , deserializedRequest .getRegions ()[0 ].getRegion ());
118+ assertEquals ("us-west-1" , deserializedRequest .getRegions ()[1 ].getRegion ());
119+ }
120+
121+ @ Test
122+ void testRedisCloudDatabaseWithCRDB () {
123+ // Create CRDB instances
124+ RedisCloudDatabase crdb1 = new RedisCloudDatabase ();
125+ crdb1 .setRegion ("us-east-1" );
126+ crdb1 .setPrivateEndpoint ("db-123-east.internal.example.com:12000" );
127+ crdb1 .setReadOperationsPerSecond (1500 );
128+ crdb1 .setWriteOperationsPerSecond (1500 );
129+
130+ RedisCloudDatabase crdb2 = new RedisCloudDatabase ();
131+ crdb2 .setRegion ("us-west-1" );
132+ crdb2 .setPrivateEndpoint ("db-123-west.internal.example.com:12000" );
133+ crdb2 .setReadOperationsPerSecond (1500 );
134+ crdb2 .setWriteOperationsPerSecond (1500 );
135+
136+ // Create main database
137+ RedisCloudDatabase db = new RedisCloudDatabase ();
138+ db .setDatabaseId (123 );
139+ db .setName ("active-active-db" );
140+ db .setActiveActiveRedis (true );
141+ db .setCrdbDatabases (new RedisCloudDatabase []{crdb1 , crdb2 });
142+
143+ // Verify properties
144+ assertTrue (db .isActiveActiveRedis ());
145+ assertNotNull (db .getCrdbDatabases ());
146+ assertEquals (2 , db .getCrdbDatabases ().length );
147+ assertEquals ("us-east-1" , db .getCrdbDatabases ()[0 ].getRegion ());
148+ assertEquals ("us-west-1" , db .getCrdbDatabases ()[1 ].getRegion ());
149+ assertEquals (1500 , db .getCrdbDatabases ()[0 ].getReadOperationsPerSecond ());
150+ assertEquals (1500 , db .getCrdbDatabases ()[0 ].getWriteOperationsPerSecond ());
151+ }
152+ }
0 commit comments