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