|
10 | 10 | DatabaseConnectionConfig, |
11 | 11 | DatabaseType, |
12 | 12 | DatabricksConnectionConfig, |
| 13 | + DocumentDbConnectionConfig, |
13 | 14 | DynamoConnectionConfig, |
14 | 15 | MongoConnectionConfig, |
15 | 16 | MountedShareConnectionConfig, |
@@ -1201,6 +1202,111 @@ def test_connection_config_dispatch_picks_mongo_subclass(): |
1201 | 1202 | assert isinstance(validate_connection(payload), MongoConnectionConfig) |
1202 | 1203 |
|
1203 | 1204 |
|
| 1205 | +def test_mongo_tls_ca_fields_emitted_when_tls_enabled(): |
| 1206 | + conn = MongoConnectionConfig( |
| 1207 | + name="mongo", |
| 1208 | + host="mongo.example", |
| 1209 | + database="people", |
| 1210 | + tls=True, |
| 1211 | + tls_ca_file="/certs/rds-ca.pem", |
| 1212 | + tls_allow_invalid_certificates=True, |
| 1213 | + ) |
| 1214 | + d = conn.model_dump(exclude_none=True, by_alias=True, mode="json") |
| 1215 | + assert d["tls"] is True |
| 1216 | + assert d["tls_ca_file"] == "/certs/rds-ca.pem" |
| 1217 | + assert d["tls_allow_invalid_certificates"] is True |
| 1218 | + |
| 1219 | + |
| 1220 | +def test_mongo_tls_ca_fields_omitted_when_unset_but_tls_enabled(): |
| 1221 | + conn = MongoConnectionConfig(name="mongo", host="mongo.example", database="people", tls=True) |
| 1222 | + d = conn.model_dump(exclude_none=True, by_alias=True, mode="json") |
| 1223 | + assert d["tls"] is True |
| 1224 | + assert "tls_ca_file" not in d |
| 1225 | + assert "tls_allow_invalid_certificates" not in d |
| 1226 | + |
| 1227 | + |
| 1228 | +def test_mongo_tls_ca_fields_omitted_when_tls_disabled(): |
| 1229 | + """Even when set, the TLS-dependent fields are not sent while TLS is disabled.""" |
| 1230 | + conn = MongoConnectionConfig( |
| 1231 | + name="mongo", |
| 1232 | + host="mongo.example", |
| 1233 | + database="people", |
| 1234 | + tls=False, |
| 1235 | + tls_ca_file="/certs/rds-ca.pem", |
| 1236 | + tls_allow_invalid_certificates=True, |
| 1237 | + ) |
| 1238 | + d = conn.model_dump(exclude_none=True, by_alias=True, mode="json") |
| 1239 | + for absent in ("tls", "tls_ca_file", "tls_allow_invalid_certificates"): |
| 1240 | + assert absent not in d |
| 1241 | + |
| 1242 | + |
| 1243 | +def test_mongo_tls_ca_fields_roundtrip(): |
| 1244 | + payload = { |
| 1245 | + "id": "mongo-tls-1", |
| 1246 | + "name": "mongo", |
| 1247 | + "mask_type": "database", |
| 1248 | + "db_type": "mongodb", |
| 1249 | + "host": "mongo.example", |
| 1250 | + "database": "people", |
| 1251 | + "tls": True, |
| 1252 | + "tls_ca_file": "/certs/rds-ca.pem", |
| 1253 | + "tls_allow_invalid_certificates": True, |
| 1254 | + } |
| 1255 | + conn = MongoConnectionConfig.model_validate(payload) |
| 1256 | + assert conn.tls is True |
| 1257 | + assert conn.tls_ca_file == "/certs/rds-ca.pem" |
| 1258 | + assert conn.tls_allow_invalid_certificates is True |
| 1259 | + |
| 1260 | + |
| 1261 | +def test_mongo_tls_ca_fields_default_when_missing(): |
| 1262 | + payload = { |
| 1263 | + "id": "mongo-tls-2", |
| 1264 | + "name": "mongo", |
| 1265 | + "mask_type": "database", |
| 1266 | + "db_type": "mongodb", |
| 1267 | + "host": "mongo.example", |
| 1268 | + "database": "people", |
| 1269 | + } |
| 1270 | + conn = MongoConnectionConfig.model_validate(payload) |
| 1271 | + assert conn.tls_ca_file == "" |
| 1272 | + assert conn.tls_allow_invalid_certificates is False |
| 1273 | + |
| 1274 | + |
| 1275 | +def test_documentdb_connection_model_dump(): |
| 1276 | + conn = DocumentDbConnectionConfig( |
| 1277 | + name="docdb", |
| 1278 | + host="dtq-documentdb.cluster.example", |
| 1279 | + database="people", |
| 1280 | + user="dmadmin", |
| 1281 | + password="hunter2", |
| 1282 | + tls=True, |
| 1283 | + tls_ca_file="/certs/rds-ca.pem", |
| 1284 | + retry_writes=False, |
| 1285 | + ) |
| 1286 | + d = conn.model_dump(exclude_none=True, by_alias=True, mode="json") |
| 1287 | + assert d["db_type"] == "documentdb" |
| 1288 | + assert d["mask_type"] == "database" |
| 1289 | + assert d["dbpassword"] == "hunter2" |
| 1290 | + assert d["tls"] is True |
| 1291 | + assert d["tls_ca_file"] == "/certs/rds-ca.pem" |
| 1292 | + assert d["retry_writes"] is False |
| 1293 | + assert conn.database_type is DatabaseType.documentdb |
| 1294 | + |
| 1295 | + |
| 1296 | +def test_connection_config_dispatch_picks_documentdb_subclass(): |
| 1297 | + payload = { |
| 1298 | + "id": "docdb-id-1", |
| 1299 | + "name": "docdb", |
| 1300 | + "mask_type": "database", |
| 1301 | + "db_type": "documentdb", |
| 1302 | + "host": "dtq-documentdb.cluster.example", |
| 1303 | + "database": "people", |
| 1304 | + } |
| 1305 | + conn = validate_connection(payload) |
| 1306 | + assert isinstance(conn, DocumentDbConnectionConfig) |
| 1307 | + assert conn.database_type is DatabaseType.documentdb |
| 1308 | + |
| 1309 | + |
1204 | 1310 | def test_database_connection_config_rejects_mongodb_database_type(): |
1205 | 1311 | """`DatabaseConnectionConfig` is for SQL engines; MongoDB users must use `MongoConnectionConfig`.""" |
1206 | 1312 | with pytest.raises(ValueError, match="For MongoDB"): |
|
0 commit comments