@@ -29,7 +29,10 @@ def test_config_creation(self):
2929 self .assertEqual (config .environment_suffix , "dev" )
3030 self .assertEqual (config .master_username , "postgres" )
3131 self .assertEqual (config .postgres_cluster_name , "vectordb-cluster" )
32- self .assertEqual (config .az_count , 3 ) # Default value
32+ self .assertEqual (config .az_count , 3 )
33+ self .assertEqual (config .instance_count , 2 )
34+ self .assertEqual (config .instance_class , "db.serverless" )
35+ self .assertTrue (config .publicly_accessible ) # Default value
3336 self .assertEqual (config .engine_version , "16.1" ) # Default value
3437
3538
@@ -304,6 +307,100 @@ def test_create_aurora_cluster(self):
304307
305308 # Connection details have been removed as they are not required
306309
310+ def test_create_aurora_instances (self ):
311+ """Test Aurora cluster instances creation."""
312+ # Given: Configuration
313+ config = fn .VectorDBConfig (
314+ claim_name = "test-claim" ,
315+ vpc_cidr = "10.10.0.0/16" ,
316+ region = "us-west-2" ,
317+ environment_suffix = "dev" ,
318+ master_username = "postgres" ,
319+ postgres_cluster_name = "vectordb-cluster" ,
320+ instance_count = 2 ,
321+ instance_class = "db.serverless" ,
322+ publicly_accessible = True ,
323+ )
324+ runner = fn .VectorDBFunctionRunner ()
325+
326+ # When: Creating Aurora instances
327+ aurora_instance_resources = runner ._create_aurora_instances (config )
328+
329+ # Then: Should create the correct number of instances
330+ self .assertEqual (len (aurora_instance_resources ), 2 )
331+
332+ # Check first instance
333+ instance1 = aurora_instance_resources [0 ]
334+ self .assertEqual (instance1 ["apiVersion" ], "rds.aws.upbound.io/v1beta1" )
335+ self .assertEqual (instance1 ["kind" ], "ClusterInstance" )
336+ self .assertEqual (instance1 ["metadata" ]["name" ], "vectordb-cluster-instance-1" )
337+ self .assertEqual (instance1 ["spec" ]["forProvider" ]["engine" ], "aurora-postgresql" )
338+ self .assertEqual (instance1 ["spec" ]["forProvider" ]["engineVersion" ], "16.1" )
339+ self .assertEqual (instance1 ["spec" ]["forProvider" ]["instanceClass" ], "db.serverless" )
340+ self .assertTrue (instance1 ["spec" ]["forProvider" ]["publiclyAccessible" ])
341+ self .assertEqual (instance1 ["spec" ]["forProvider" ]["promotionTier" ], 0 )
342+ self .assertEqual (
343+ instance1 ["spec" ]["forProvider" ]["clusterIdentifierRef" ]["name" ], "vectordb-cluster"
344+ )
345+ self .assertEqual (
346+ instance1 ["spec" ]["forProvider" ]["dbSubnetGroupNameRef" ]["name" ],
347+ "test-claim-subnet-group-dev" ,
348+ )
349+ self .assertTrue (instance1 ["spec" ]["forProvider" ]["performanceInsightsEnabled" ])
350+ self .assertEqual (instance1 ["spec" ]["forProvider" ]["performanceInsightsRetentionPeriod" ], 7 )
351+ self .assertEqual (
352+ instance1 ["spec" ]["forProvider" ]["dbParameterGroupName" ], "default.aurora-postgresql16"
353+ )
354+ self .assertTrue (instance1 ["spec" ]["forProvider" ]["autoMinorVersionUpgrade" ])
355+ self .assertEqual (instance1 ["spec" ]["forProvider" ]["monitoringInterval" ], 60 )
356+
357+ # Check second instance
358+ instance2 = aurora_instance_resources [1 ]
359+ self .assertEqual (instance2 ["metadata" ]["name" ], "vectordb-cluster-instance-2" )
360+ self .assertEqual (instance2 ["spec" ]["forProvider" ]["promotionTier" ], 1 )
361+ self .assertEqual (
362+ instance2 ["spec" ]["forProvider" ]["clusterIdentifierRef" ]["name" ], "vectordb-cluster"
363+ )
364+
365+ # Check metadata and dependencies
366+ for instance in aurora_instance_resources :
367+ self .assertEqual (instance ["metadata" ]["labels" ]["app" ], "test-claim" )
368+ self .assertEqual (instance ["metadata" ]["labels" ]["environment" ], "dev" )
369+ self .assertIn ("crossplane.io/depends-on" , instance ["metadata" ]["annotations" ])
370+ self .assertIn (
371+ "aurora_cluster" ,
372+ instance ["metadata" ]["annotations" ]["crossplane.io/depends-on" ],
373+ )
374+
375+ def test_create_aurora_instances_custom_config (self ):
376+ """Test Aurora cluster instances creation with custom configuration."""
377+ # Given: Configuration with custom instance settings
378+ config = fn .VectorDBConfig (
379+ claim_name = "test-claim" ,
380+ vpc_cidr = "10.10.0.0/16" ,
381+ region = "us-west-2" ,
382+ environment_suffix = "prod" ,
383+ master_username = "postgres" ,
384+ postgres_cluster_name = "vectordb-cluster" ,
385+ instance_count = 3 ,
386+ instance_class = "db.r6g.large" ,
387+ publicly_accessible = False ,
388+ )
389+ runner = fn .VectorDBFunctionRunner ()
390+
391+ # When: Creating Aurora instances
392+ aurora_instance_resources = runner ._create_aurora_instances (config )
393+
394+ # Then: Should create the correct number of instances with custom settings
395+ self .assertEqual (len (aurora_instance_resources ), 3 )
396+
397+ # Check custom settings are applied
398+ for i , instance in enumerate (aurora_instance_resources ):
399+ self .assertEqual (instance ["spec" ]["forProvider" ]["instanceClass" ], "db.r6g.large" )
400+ self .assertFalse (instance ["spec" ]["forProvider" ]["publiclyAccessible" ])
401+ self .assertEqual (instance ["spec" ]["forProvider" ]["promotionTier" ], i )
402+ self .assertEqual (instance ["metadata" ]["name" ], f"vectordb-cluster-instance-{ i + 1 } " )
403+
307404 def test_extract_config (self ):
308405 """Test configuration extraction from request."""
309406 # Given: Request with configuration
0 commit comments