Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/python-package.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: [ 3.8, 3.9 ]
python-version: [ 3.13, 3.14 ]

steps:
- uses: actions/checkout@v2
Expand All @@ -27,7 +27,7 @@ jobs:
- name: Install dependencies
run: |
python -m pip install --upgrade pip
python -m pip install flake8 pytest
python -m pip install flake8 pytest pytest-mock
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
- name: Lint with flake8
run: |
Expand Down
23 changes: 16 additions & 7 deletions fedcloudclient/locker_auth_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,28 @@
Testing vault_auth.py
"""
import os

import pytest
import fedcloudclient.locker_auth as locker


def test_get_locker_secret(locker_token: str):
@pytest.fixture
def locker_token():
token = os.environ.get("FEDCLOUD_LOCKER_TOKEN", "FEDCLOUD_LOCKER_TOKEN_DEFAULT")
return token


def test_get_locker_secret(mocker, locker_token: str):
"""
Test getting VO-shared secrets
"""

# Mock the vault_command method
mocker.patch(
"fedcloudclient.locker_auth.LockerToken.vault_command",
return_value={"data": {"test": "test"}}
)

token = locker.LockerToken(locker_token=locker_token)
response = token.vault_command(command="read_secret", path="test", data={}, vo=None)
assert response["data"]["test"] == "test"


if __name__ == "__main__":
locker_token_main = os.environ["FEDCLOUD_LOCKER_TOKEN"]
test_get_locker_secret(locker_token_main)
assert response["data"]["test"] == "test"
79 changes: 54 additions & 25 deletions fedcloudclient/vault_auth_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,64 +2,93 @@
Testing vault_auth.py
"""
import os

import pytest
import fedcloudclient.vault_auth as vault
from fedcloudclient.exception import TokenError


def test_vault_login(mytoken: str):
@pytest.fixture
def mytoken():
token = os.environ.get("FEDCLOUD_MYTOKEN", "FEDCLOUD_MYTOKEN_DEFAULT")
return token


@pytest.fixture
def vault_token():
token = os.environ.get("FEDCLOUD_VAULT_TOKEN", "FEDCLOUD_VAULT_TOKEN_DEFAULT")
return token


@pytest.fixture
def user_id():
token = os.environ.get("FEDCLOUD_ID", "FEDCLOUD_ID_DEFAULT")
return token


@pytest.fixture
def vo_secret():
return "vo.access.egi.eu"


def test_vault_login(mocker, mytoken: str):
"""
test vault login with mytoken
"""

# Mock
mocker.patch("fedcloudclient.vault_auth.VaultToken.get_token_from_mytoken",
return_value = "token")
mocker.patch("fedcloudclient.vault_auth.VaultToken.get_vault_client",
return_value = "client"
)

token = vault.VaultToken()
token.get_token_from_mytoken(mytoken)
vault_client = token.get_vault_client()

assert vault_client


def test_user_id_from_vault_token(vault_token: str, user_id: str):
def test_user_id_from_vault_token(mocker, vault_token: str, user_id: str):
"""
Test user id from OIDC vault token
"""

# Mock get_user_id to return the expected user_id
mocker.patch("fedcloudclient.vault_auth.VaultToken.get_user_id",
return_value = user_id)

token = vault.VaultToken(vault_token=vault_token)
vault_id = None
try:
vault_id = token.get_user_id()
except TokenError:
print("Please check validity of your OIDC Vault token")
vault_id = token.get_user_id()

assert vault_id == user_id


def test_get_personal_secret(vault_token: str):
def test_get_personal_secret(mocker, vault_token: str):
"""
Test getting personal secrets
"""

# Mock vault_command for personal secrets
mocker.patch("fedcloudclient.vault_auth.VaultToken.vault_command",
return_value = {"data": {"test": "test"}})

token = vault.VaultToken(vault_token=vault_token)
response = token.vault_command(command="get", path="test", data={}, vo=None)

assert response["data"]["test"] == "test"


def test_get_vo_secret(vault_token: str, vo_secret: str):
def test_get_vo_secret(mocker, vault_token: str, vo_secret: str):
"""
Test getting VO-shared secrets
"""
token = vault.VaultToken(vault_token=vault_token)
response = token.vault_command(command="get", path="test", data={}, vo=vo_secret)
assert response["data"]["test"] == "test"

# Mock vault_command for VO-shared secrets
mocker.patch("fedcloudclient.vault_auth.VaultToken.vault_command",
return_value = {"data": {"test": "test"}})

if __name__ == "__main__":
#Before testing, setup testing environment with
#export FEDCLOUD_MYTOKEN=<mytoken>
#export FEDCLOUD_ID=<your Checkin ID>
#export FEDCLOUD_VAULT_TOKEN=<Vault token exported from GUI>
token = vault.VaultToken(vault_token=vault_token)
response = token.vault_command(command="get", path="test", data={}, vo=vo_secret)

os_mytoken = os.environ["FEDCLOUD_MYTOKEN"]
os_user_id = os.environ["FEDCLOUD_ID"]
oidc_vault_token = os.environ["FEDCLOUD_VAULT_TOKEN"]
test_vault_login(os_mytoken)
test_user_id_from_vault_token(oidc_vault_token, os_user_id)
test_get_personal_secret(oidc_vault_token)
test_get_vo_secret(oidc_vault_token, "vo.access.egi.eu")
assert response["data"]["test"] == "test"
2 changes: 1 addition & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,4 @@ setuptools==68.2.2
jsonschema==4.19.2
psutil==5.9.6
hvac==2.0.0
cryptography==42.0.4
cryptography==46.0.5