mirror of
https://github.com/rustfs/rustfs.git
synced 2026-08-27 15:37:02 +00:00
feat(table-catalog): add vendor compatibility profiles (#3624)
This commit is contained in:
@@ -74,6 +74,56 @@ class PyIcebergSmokeConfigTest(unittest.TestCase):
|
||||
self.assertEqual(profiles["minio-aistor"]["rest_signing_name"], "s3tables")
|
||||
self.assertEqual(profiles["cloudflare-r2-data-catalog"]["credential_mode"], "catalog-vended")
|
||||
|
||||
def test_vendor_profiles_publish_migration_boundaries(self) -> None:
|
||||
profiles = pyiceberg_smoke.vendor_profiles()
|
||||
|
||||
aws = profiles["aws-s3tables"]
|
||||
self.assertEqual(aws["compatibility_stage"], "reference-only")
|
||||
self.assertEqual(aws["warehouse_shape"], "arn:aws:s3tables:{region}:{account_id}:bucket/{table_bucket}")
|
||||
self.assertEqual(aws["namespace_model"], "single-level")
|
||||
self.assertEqual(aws["pagination_model"], "vendor-specific")
|
||||
self.assertIn("full AWS S3 Tables API parity", aws["not_claimed"])
|
||||
|
||||
cloudflare = profiles["cloudflare-r2-data-catalog"]
|
||||
self.assertEqual(cloudflare["catalog_uri_shape"], "{catalog_uri}")
|
||||
self.assertEqual(cloudflare["credential_mode"], "catalog-vended")
|
||||
self.assertIn("live RustFS interoperability", cloudflare["not_claimed"])
|
||||
|
||||
def test_aws_reference_profile_formats_s3tables_warehouse_arn(self) -> None:
|
||||
args = self.parse_with_args([
|
||||
"--profile",
|
||||
"aws-s3tables",
|
||||
"--endpoint",
|
||||
"https://s3tables.us-east-1.amazonaws.com",
|
||||
"--region",
|
||||
"us-east-1",
|
||||
"--account-id",
|
||||
"123456789012",
|
||||
"--table-bucket",
|
||||
"analytics",
|
||||
])
|
||||
|
||||
properties = pyiceberg_smoke.catalog_properties(args)
|
||||
|
||||
self.assertEqual(properties["uri"], "https://s3tables.us-east-1.amazonaws.com/iceberg")
|
||||
self.assertEqual(properties["warehouse"], "arn:aws:s3tables:us-east-1:123456789012:bucket/analytics")
|
||||
self.assertEqual(properties["rest.signing-name"], "s3tables")
|
||||
|
||||
def test_cloudflare_reference_profile_uses_catalog_uri_and_warehouse_name(self) -> None:
|
||||
args = self.parse_with_args([
|
||||
"--profile",
|
||||
"cloudflare-r2-data-catalog",
|
||||
"--catalog-uri",
|
||||
"https://catalog.example.com/iceberg",
|
||||
"--warehouse-name",
|
||||
"analytics",
|
||||
])
|
||||
|
||||
properties = pyiceberg_smoke.catalog_properties(args)
|
||||
|
||||
self.assertEqual(properties["uri"], "https://catalog.example.com/iceberg")
|
||||
self.assertEqual(properties["warehouse"], "analytics")
|
||||
|
||||
def test_vended_profile_requires_catalog_credentials_and_keeps_canonical_path(self) -> None:
|
||||
args = self.parse_with_args([
|
||||
"--profile",
|
||||
@@ -793,6 +843,51 @@ class PyIcebergSmokeConfigTest(unittest.TestCase):
|
||||
self.assertIn("commit-cas-conflict", cases)
|
||||
self.assertIn("post-cas-finalization-gap", cases)
|
||||
|
||||
def test_print_vendor_profiles_outputs_migration_boundaries(self) -> None:
|
||||
args = self.parse_with_args(["--print-vendor-profiles"])
|
||||
|
||||
stdout = StringIO()
|
||||
with redirect_stdout(stdout):
|
||||
self.assertTrue(pyiceberg_smoke.printed_metadata(args))
|
||||
|
||||
document = json.loads(stdout.getvalue())
|
||||
self.assertIn("vendor_profiles", document)
|
||||
aws = document["vendor_profiles"]["aws-s3tables"]
|
||||
self.assertEqual(aws["rest_signing_name"], "s3tables")
|
||||
self.assertEqual(aws["compatibility_stage"], "reference-only")
|
||||
self.assertIn("full AWS S3 Tables API parity", aws["not_claimed"])
|
||||
|
||||
selected = document["selected_vendor_profile"]
|
||||
self.assertEqual(selected["name"], "rustfs")
|
||||
self.assertEqual(selected["catalog_uri"], "http://127.0.0.1:9000/iceberg")
|
||||
self.assertEqual(selected["warehouse"], "rustfs-s3table-smoke")
|
||||
|
||||
def test_print_vendor_profiles_renders_selected_aws_profile(self) -> None:
|
||||
args = self.parse_with_args(
|
||||
[
|
||||
"--profile",
|
||||
"aws-s3tables",
|
||||
"--region",
|
||||
"us-east-1",
|
||||
"--account-id",
|
||||
"123456789012",
|
||||
"--table-bucket",
|
||||
"analytics",
|
||||
"--print-vendor-profiles",
|
||||
]
|
||||
)
|
||||
|
||||
stdout = StringIO()
|
||||
with redirect_stdout(stdout):
|
||||
self.assertTrue(pyiceberg_smoke.printed_metadata(args))
|
||||
|
||||
document = json.loads(stdout.getvalue())
|
||||
selected = document["selected_vendor_profile"]
|
||||
self.assertEqual(selected["name"], "aws-s3tables")
|
||||
self.assertEqual(selected["catalog_uri"], "https://s3tables.us-east-1.amazonaws.com/iceberg")
|
||||
self.assertEqual(selected["warehouse"], "arn:aws:s3tables:us-east-1:123456789012:bucket/analytics")
|
||||
self.assertEqual(selected["rest_signing_name"], "s3tables")
|
||||
|
||||
def test_published_table_catalog_docs_do_not_use_internal_roadmap_labels(self) -> None:
|
||||
readme = (SCRIPT_DIR / "README.md").read_text(encoding="utf-8")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user