blob: 8cabb4481c4c2a7b98601e4c9c6f7d0ce745c429 [file]
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import requests
import pytest
import time
from kms.utils import (
fetch_logs, krb_requests,
ensure_keyadmin_keytab, ensure_ticket,
BASE_URL, PARAMS, ensure_test_user_exists, ensure_keyadmin_ticket, ensure_testuser_ticket, delete_test_user, ensure_testuser_keytab
)
RANGER_AUTH = ('keyadmin', 'rangerR0cks!')
BASE_URL_RANGER = "http://localhost:6080/service/public/v2/api/policy"
KMS_SERVICE_NAME = "dev_kms"
TEST_USER = "keyadmin"
HEADERS = {"Content-Type": "application/json"}
@pytest.fixture(scope="session", autouse=True)
def setup_kerberos_ticket():
"""Ensure keyadmin has a valid Kerberos ticket before any test runs."""
ensure_keyadmin_ticket()
@pytest.fixture(scope="session")
def headers():
return HEADERS
@pytest.fixture(scope="class")
def create_test_key(headers):
data = {
"name": "key1",
"cipher": "AES/CTR/NoPadding",
"length": 128,
"description": "Test key"
}
key_creation_response = krb_requests.post(
f"{BASE_URL}/keys", headers=headers, json=data, params=PARAMS
)
if key_creation_response.status_code != 201:
error_logs = fetch_logs()
pytest.fail(
f"Key creation failed. API Response: {key_creation_response.text}\nLogs:\n{error_logs}"
)
yield data
krb_requests.delete(f"{BASE_URL}/key/key1", params=PARAMS)
@pytest.fixture(scope="module")
def user1():
return TEST_USER
@pytest.fixture(scope="module")
def kms_policy(user1):
policy_data = {
"policyName": "blacklist-policy",
"service": KMS_SERVICE_NAME,
"resources": {
"keyname": {
"values": ["blacklist-*"],
"isExcludes": False,
"isRecursive": False
}
},
"policyItems": [{
"accesses": [
{"type": "CREATE", "isAllowed": True},
{"type": "ROLLOVER", "isAllowed": True},
{"type": "DELETE", "isAllowed": True}
],
"users": [user1]
}]
}
response = requests.post(BASE_URL_RANGER, auth=RANGER_AUTH, json=policy_data)
#time.sleep(30)
time.sleep(5) # Wait for Ranger to process the policy creation
if response.status_code not in [200, 201]:
raise Exception(f"Failed to create policy: {response.text}")
policy_id = response.json()["id"]
yield policy_id
requests.delete(f"{BASE_URL_RANGER}/{policy_id}", auth=RANGER_AUTH)