Browse Source

fix: fix/latest version (#654)

* fix: realm conflict

* test: latest version fix

* chore: update dependencies

* ci: use modern action

* test: generalize for older versions

* test: more cases
pull/655/head v5.5.1
Richard Nemeth 2 weeks ago
committed by GitHub
parent
commit
3f5dc50114
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 2
      .github/workflows/daily.yaml
  2. 2
      .github/workflows/lint.yaml
  3. 912
      poetry.lock
  4. 9
      src/keycloak/keycloak_admin.py
  5. 7
      test_keycloak_init.sh
  6. 24
      tests/test_keycloak_admin.py

2
.github/workflows/daily.yaml

@ -20,7 +20,7 @@ jobs:
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- uses: docker-practice/actions-setup-docker@master
- uses: docker/setup-docker-action@v4
- name: Install dependencies
run: |
python -m pip install --upgrade pip

2
.github/workflows/lint.yaml

@ -68,7 +68,7 @@ jobs:
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- uses: docker-practice/actions-setup-docker@master
- uses: docker/setup-docker-action@v4
- name: Install dependencies
run: |
python -m pip install --upgrade pip

912
poetry.lock
File diff suppressed because it is too large
View File

9
src/keycloak/keycloak_admin.py

@ -36,6 +36,7 @@ from . import urls_patterns
from .exceptions import (
HTTP_ACCEPTED,
HTTP_BAD_REQUEST,
HTTP_CONFLICT,
HTTP_CREATED,
HTTP_NO_CONTENT,
HTTP_NOT_FOUND,
@ -379,8 +380,8 @@ class KeycloakAdmin:
return raise_error_from_response(
data_raw,
KeycloakPostError,
expected_codes=[HTTP_CREATED],
skip_exists=skip_exists,
expected_codes=[HTTP_CREATED]
+ ([HTTP_BAD_REQUEST, HTTP_CONFLICT] if skip_exists else []),
)
def update_realm(self, realm_name: str, payload: dict) -> dict | bytes:
@ -6179,8 +6180,8 @@ class KeycloakAdmin:
return raise_error_from_response(
data_raw,
KeycloakPostError,
expected_codes=[HTTP_CREATED],
skip_exists=skip_exists,
expected_codes=[HTTP_CREATED]
+ ([HTTP_BAD_REQUEST, HTTP_CONFLICT] if skip_exists else []),
)
async def a_update_realm(self, realm_name: str, payload: dict) -> dict:

7
test_keycloak_init.sh

@ -15,7 +15,12 @@ function keycloak_stop() {
function keycloak_start() {
echo "Starting keycloak docker container"
PWD=$(pwd)
docker run -d --name unittest_keycloak -e KEYCLOAK_ADMIN="${KEYCLOAK_ADMIN}" -e KEYCLOAK_ADMIN_PASSWORD="${KEYCLOAK_ADMIN_PASSWORD}" -e KC_FEATURES="token-exchange,admin-fine-grained-authz" -p "${KEYCLOAK_PORT}:8080" -v $PWD/tests/providers:/opt/keycloak/providers "${KEYCLOAK_DOCKER_IMAGE}" start-dev
if [[ "$KEYCLOAK_DOCKER_IMAGE_TAG" == "22.0" || "$KEYCLOAK_DOCKER_IMAGE_TAG" == "23.0" ]]; then
KEYCLOAK_FEATURES="admin-fine-grained-authz,token-exchange"
else
KEYCLOAK_FEATURES="admin-fine-grained-authz:v1,token-exchange:v1"
fi
docker run -d --name unittest_keycloak -e KEYCLOAK_ADMIN="${KEYCLOAK_ADMIN}" -e KEYCLOAK_ADMIN_PASSWORD="${KEYCLOAK_ADMIN_PASSWORD}" -p "${KEYCLOAK_PORT}:8080" -v $PWD/tests/providers:/opt/keycloak/providers "${KEYCLOAK_DOCKER_IMAGE}" start-dev --features="${KEYCLOAK_FEATURES}"
SECONDS=0
until curl --silent --output /dev/null localhost:$KEYCLOAK_PORT; do
sleep 5;

24
tests/test_keycloak_admin.py

@ -169,11 +169,19 @@ def test_realms(admin: KeycloakAdmin) -> None:
# Create the same realm, should fail
with pytest.raises(KeycloakPostError) as err:
res = admin.create_realm(payload={"realm": "test"})
assert err.match('409: b\'{"errorMessage":"Conflict detected. See logs for details"}\'')
assert (
b"Realm test already exists" in err.value.error_message
or b"Conflict detected" in err.value.error_message
)
# Create the same realm, skip_exists true
res = admin.create_realm(payload={"realm": "test"}, skip_exists=True)
assert res == {"msg": "Already exists"}, res
assert res in [
{"errorMessage": "Realm test already exists"},
{"msg": "Already exists"},
{"errorMessage": "Conflict detected. See logs for details"},
], res
# Get a single realm
res = admin.get_realm(realm_name="test")
@ -3623,11 +3631,19 @@ async def test_a_realms(admin: KeycloakAdmin) -> None:
# Create the same realm, should fail
with pytest.raises(KeycloakPostError) as err:
res = await admin.a_create_realm(payload={"realm": "test"})
assert err.match('409: b\'{"errorMessage":"Conflict detected. See logs for details"}\'')
assert (
b"Realm test already exists" in err.value.error_message
or b"Conflict detected" in err.value.error_message
)
# Create the same realm, skip_exists true
res = await admin.a_create_realm(payload={"realm": "test"}, skip_exists=True)
assert res == {"msg": "Already exists"}, res
assert res in [
{"errorMessage": "Realm test already exists"},
{"msg": "Already exists"},
{"errorMessage": "Conflict detected. See logs for details"},
], res
# Get a single realm
res = await admin.a_get_realm(realm_name="test")

Loading…
Cancel
Save