24
24
from e2e import service_marker , CRD_GROUP , CRD_VERSION , load_rds_resource
25
25
from e2e .replacement_values import REPLACEMENT_VALUES
26
26
from e2e import db_cluster_parameter_group
27
+ from e2e import db_parameter_group
27
28
from e2e import tag
28
29
from e2e import condition
29
30
@@ -77,6 +78,49 @@ def aurora_mysql57_cluster_param_group():
77
78
db_cluster_parameter_group .wait_until_deleted (resource_name )
78
79
79
80
81
+ @pytest .fixture
82
+ def aurora_mysql80_logging_cluster_param_group ():
83
+ resource_name = random_suffix_name ("aurora-mysql8-logging" , 32 )
84
+
85
+ replacements = REPLACEMENT_VALUES .copy ()
86
+ replacements ["DB_CLUSTER_PARAMETER_GROUP_NAME" ] = resource_name
87
+ replacements ["DB_CLUSTER_PARAMETER_GROUP_DESC" ] = "Test MySQL logging parameters for Aurora MySQL 8.0"
88
+ replacements ["DB_CLUSTER_PARAMETER_GROUP_FAMILY" ] = "aurora-mysql8.0"
89
+ replacements ["PARAM_SLOW_QUERY_LOG_VALUE" ] = "1"
90
+ replacements ["PARAM_LONG_QUERY_TIME_VALUE" ] = "10"
91
+ replacements ["PARAM_LOG_QUERIES_NOT_USING_INDEXES_VALUE" ] = "1"
92
+
93
+ resource_data = load_rds_resource (
94
+ "db_cluster_parameter_group_aurora_mysql8.0_logging" ,
95
+ additional_replacements = replacements ,
96
+ )
97
+ logging .debug (resource_data )
98
+
99
+ # Create the k8s resource
100
+ ref = k8s .CustomResourceReference (
101
+ CRD_GROUP , CRD_VERSION , RESOURCE_PLURAL ,
102
+ resource_name , namespace = "default" ,
103
+ )
104
+ k8s .create_custom_resource (ref , resource_data )
105
+ cr = k8s .wait_resource_consumed_by_controller (ref )
106
+ time .sleep (CREATE_WAIT_AFTER_SECONDS )
107
+
108
+ assert cr is not None
109
+ assert k8s .get_resource_exists (ref )
110
+
111
+ yield ref , cr , resource_name
112
+
113
+ # Try to delete, if doesn't already exist
114
+ try :
115
+ _ , deleted = k8s .delete_custom_resource (ref , 3 , 10 )
116
+ assert deleted
117
+ time .sleep (DELETE_WAIT_AFTER_SECONDS )
118
+ except :
119
+ pass
120
+
121
+ db_cluster_parameter_group .wait_until_deleted (resource_name )
122
+
123
+
80
124
@service_marker
81
125
@pytest .mark .canary
82
126
class TestDBClusterParameterGroup :
@@ -95,7 +139,7 @@ def test_crud_aurora_mysql5_7(self, aurora_mysql57_cluster_param_group):
95
139
latest_tags = tag .clean (db_cluster_parameter_group .get_tags (arn ))
96
140
assert expect_tags == latest_tags
97
141
98
- latest_params = db_cluster_parameter_group .get_parameters (resource_name )
142
+ latest_params = db_cluster_parameter_group .get_user_defined_parameters (resource_name )
99
143
test_params = list (filter (lambda x : x ["ParameterName" ] in [
100
144
"aurora_read_replica_read_committed" ,
101
145
"aurora_binlog_read_buffer_size" ,
@@ -142,7 +186,7 @@ def test_crud_aurora_mysql5_7(self, aurora_mysql57_cluster_param_group):
142
186
}
143
187
]
144
188
assert latest_tags == after_update_expected_tags
145
- params = db_cluster_parameter_group .get_parameters (resource_name )
189
+ params = db_cluster_parameter_group .get_user_defined_parameters (resource_name )
146
190
test_params = list (filter (lambda x : x ["ParameterName" ] in [
147
191
"aurora_read_replica_read_committed" ,
148
192
"aurora_binlog_read_buffer_size"
@@ -161,3 +205,70 @@ def test_crud_aurora_mysql5_7(self, aurora_mysql57_cluster_param_group):
161
205
assert "ParameterValue" in tp , f"No ParameterValue in parameter of name 'aurora_read_replica_read_committed': { tp } "
162
206
assert tp ["ParameterValue" ] == "ON" , f"Wrong value for parameter of name 'aurora_read_replica_read_committed': { tp } "
163
207
assert found == 2 , f"Did not find parameters with names 'aurora_binlog_read_buffer_size' and 'aurora_read_replica_read_committed': { test_params } "
208
+
209
+ def test_mysql_logging_parameters (self , aurora_mysql80_logging_cluster_param_group ):
210
+ ref , cr , resource_name = aurora_mysql80_logging_cluster_param_group
211
+
212
+ latest = db_cluster_parameter_group .get (resource_name )
213
+ assert latest is not None
214
+
215
+ instance_defaults = db_parameter_group .get_engine_default_parameters ("mysql8.0" )
216
+ assert instance_defaults is not None , "Failed to get instance-level engine defaults"
217
+
218
+ fallback_params = list (filter (lambda x : x ["ParameterName" ] in [
219
+ "slow_query_log" ,
220
+ "long_query_time" ,
221
+ "log_queries_not_using_indexes" ,
222
+ ], instance_defaults ))
223
+
224
+ # Log debug info about found parameters
225
+ found_param_names = [p ['ParameterName' ] for p in fallback_params ]
226
+ logging .debug (f"Found fallback parameters: { found_param_names } " )
227
+
228
+ assert len (fallback_params ) == 3 , f"Expected 3 MySQL logging parameters in instance defaults, found { len (fallback_params )} : { found_param_names } "
229
+
230
+ for param in fallback_params :
231
+ assert "ParameterName" in param , f"Missing ParameterName in fallback parameter: { param } "
232
+ assert "IsModifiable" in param , f"Missing IsModifiable in fallback parameter: { param } "
233
+ assert "ApplyType" in param , f"Missing ApplyType in fallback parameter: { param } "
234
+
235
+ assert 'status' in cr
236
+ assert 'parameterOverrideStatuses' in cr ['status' ]
237
+
238
+ # Verify the parameter statuses show our MySQL logging parameters
239
+ status_params = cr ['status' ]['parameterOverrideStatuses' ]
240
+ param_names = [p ['parameterName' ] for p in status_params ]
241
+
242
+ assert "slow_query_log" in param_names , f"slow_query_log parameter missing from status: { param_names } "
243
+ assert "long_query_time" in param_names , f"long_query_time parameter missing from status: { param_names } "
244
+ assert "log_queries_not_using_indexes" in param_names , f"log_queries_not_using_indexes parameter missing from status: { param_names } "
245
+
246
+ # Additional wait for AWS RDS parameter propagation
247
+ # RDS parameter changes can take 5-10 minutes to be fully visible via API
248
+ logging .debug ("Waiting additional time for AWS RDS parameter propagation..." )
249
+ time .sleep (MODIFY_WAIT_AFTER_SECONDS )
250
+
251
+ latest_params = db_cluster_parameter_group .get_user_defined_parameters (resource_name )
252
+ assert latest_params is not None , "Failed to get user-defined cluster parameters"
253
+
254
+ test_params = list (filter (lambda x : x ["ParameterName" ] in [
255
+ "slow_query_log" ,
256
+ "long_query_time" ,
257
+ "log_queries_not_using_indexes" ,
258
+ ], latest_params ))
259
+
260
+ # Check initial parameter values
261
+ expected_initial_values = {
262
+ "slow_query_log" : "1" ,
263
+ "long_query_time" : "10" ,
264
+ "log_queries_not_using_indexes" : "1"
265
+ }
266
+
267
+ for tp in test_params :
268
+ param_name = tp ["ParameterName" ]
269
+ assert param_name in expected_initial_values , f"Unexpected parameter: { param_name } "
270
+ assert tp ["ParameterValue" ] == expected_initial_values [param_name ], \
271
+ f"Wrong value for { param_name } : expected { expected_initial_values [param_name ]} , got { tp ['ParameterValue' ]} "
272
+
273
+ assert len (test_params ) == len (expected_initial_values ), \
274
+ f"Expected { len (expected_initial_values )} parameters, found { len (test_params )} : { test_params } "
0 commit comments