|
| 1 | +#!/usr/bin/env python3 |
| 2 | +from hive_metastore_client import HiveMetastoreClient |
| 3 | +from hive_metastore_client.builders import ( |
| 4 | + DatabaseBuilder, |
| 5 | + ColumnBuilder, |
| 6 | + SerDeInfoBuilder, |
| 7 | + StorageDescriptorBuilder, |
| 8 | + TableBuilder, |
| 9 | +) |
| 10 | +import argparse |
| 11 | + |
| 12 | + |
| 13 | +def table(db_name, table_name, location): |
| 14 | + columns = [ColumnBuilder("id", "string", "col comment").build()] |
| 15 | + |
| 16 | + serde_info = SerDeInfoBuilder( |
| 17 | + serialization_lib="org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe" |
| 18 | + ).build() |
| 19 | + |
| 20 | + storage_descriptor = StorageDescriptorBuilder( |
| 21 | + columns=columns, |
| 22 | + location=location, |
| 23 | + input_format="org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat", |
| 24 | + output_format="org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat", |
| 25 | + serde_info=serde_info, |
| 26 | + compressed=True, |
| 27 | + ).build() |
| 28 | + |
| 29 | + test_table = TableBuilder( |
| 30 | + db_name=db_name, |
| 31 | + table_name=table_name, |
| 32 | + storage_descriptor=storage_descriptor, |
| 33 | + ).build() |
| 34 | + |
| 35 | + return test_table |
| 36 | + |
| 37 | + |
| 38 | +if __name__ == "__main__": |
| 39 | + all_args = argparse.ArgumentParser(description="Test hive-metastore-opa-authorizer and rego rules.") |
| 40 | + all_args.add_argument("-p", "--port", help="Metastore server port", default="9083") |
| 41 | + all_args.add_argument( |
| 42 | + "-d", "--database", help="Test DB name", default="db_not_allowed" |
| 43 | + ) |
| 44 | + all_args.add_argument( |
| 45 | + "-m", "--metastore", help="The host or service to connect to", required=True |
| 46 | + ) |
| 47 | + args = vars(all_args.parse_args()) |
| 48 | + |
| 49 | + database_name = args["database"] |
| 50 | + port = args["port"] |
| 51 | + host = args["metastore"] |
| 52 | + |
| 53 | + # Creating database object using builder |
| 54 | + database = DatabaseBuilder(database_name).build() |
| 55 | + |
| 56 | + print(f"[INFO] Trying to access '{database_name}' which is expected to fail due to 'database_allow' authorization policy...!") |
| 57 | + |
| 58 | + with HiveMetastoreClient(host, port) as hive_client: |
| 59 | + try: |
| 60 | + hive_client.create_database_if_not_exists(database) |
| 61 | + except Exception as e: |
| 62 | + print(f"[DENIED] {e}") |
| 63 | + print(f"[SUCCESS] Test hive-metastore-opa-authorizer succeeded. Could not access database '{database_name}'!") |
| 64 | + exit(0) |
| 65 | + |
| 66 | + print(f"[ERROR] Test hive-metastore-opa-authorizer failed. Could access database '{database_name}'!") |
| 67 | + exit(-1) |
0 commit comments