From d92449575a25786f640d610e9fe727840d5f479d Mon Sep 17 00:00:00 2001 From: def Date: Sat, 23 Jul 2022 11:46:52 +0200 Subject: [PATCH] add some bad tests --- tests/test_graphql/test_users.py | 151 ++++++++++++++++++ tests/test_graphql/test_users/no_users.json | 54 +++++++ tests/test_graphql/test_users/one_user.json | 61 +++++++ tests/test_graphql/test_users/some_users.json | 71 ++++++++ tests/test_graphql/test_users/undefined.json | 52 ++++++ 5 files changed, 389 insertions(+) create mode 100644 tests/test_graphql/test_users.py create mode 100644 tests/test_graphql/test_users/no_users.json create mode 100644 tests/test_graphql/test_users/one_user.json create mode 100644 tests/test_graphql/test_users/some_users.json create mode 100644 tests/test_graphql/test_users/undefined.json diff --git a/tests/test_graphql/test_users.py b/tests/test_graphql/test_users.py new file mode 100644 index 0000000..081f994 --- /dev/null +++ b/tests/test_graphql/test_users.py @@ -0,0 +1,151 @@ +# pylint: disable=redefined-outer-name +# pylint: disable=unused-argument +import json +import pytest + +from tests.common import generate_system_query, read_json, write_json + + +def read_json(file_path): + with open(file_path, "r", encoding="utf-8") as file: + return json.load(file) + + +invalid_usernames = [ + "root", + "messagebus", + "postfix", + "polkituser", + "dovecot2", + "dovenull", + "nginx", + "postgres", + "systemd-journal-gateway", + "prosody", + "systemd-network", + "systemd-resolve", + "systemd-timesync", + "opendkim", + "rspamd", + "sshd", + "selfprivacy-api", + "restic", + "redis", + "pleroma", + "ocserv", + "nextcloud", + "memcached", + "knot-resolver", + "gitea", + "bitwarden_rs", + "vaultwarden", + "acme", + "virtualMail", + "nixbld1", + "nixbld2", + "nixbld29", + "nobody", +] + + +## FIXTURES ################################################### + + +@pytest.fixture +def no_users(mocker, datadir): + mocker.patch("selfprivacy_api.utils.USERDATA_FILE", new=datadir / "no_users.json") + assert read_json(datadir / "no_users.json")["users"] == [] + return datadir + + +@pytest.fixture +def one_user(mocker, datadir): + mocker.patch("selfprivacy_api.utils.USERDATA_FILE", new=datadir / "one_user.json") + assert read_json(datadir / "one_user.json")["users"] == [ + { + "username": "user1", + "hashedPassword": "HASHED_PASSWORD_1", + "sshKeys": ["ssh-rsa KEY user1@pc"], + } + ] + return datadir + + +@pytest.fixture +def some_users(mocker, datadir): + mocker.patch("selfprivacy_api.utils.USERDATA_FILE", new=datadir / "some_users.json") + assert read_json(datadir / "some_users.json")["users"] == [ + { + "username": "user1", + "hashedPassword": "HASHED_PASSWORD_1", + "sshKeys": ["ssh-rsa KEY user1@pc"], + }, + {"username": "user2", "hashedPassword": "HASHED_PASSWORD_2", "sshKeys": []}, + {"username": "user3", "hashedPassword": "HASHED_PASSWORD_3"}, + ] + return datadir + + +@pytest.fixture +def undefined_settings(mocker, datadir): + mocker.patch("selfprivacy_api.utils.USERDATA_FILE", new=datadir / "undefined.json") + assert "users" not in read_json(datadir / "undefined.json") + return datadir + + +class ProcessMock: + """Mock subprocess.Popen""" + + def __init__(self, args, **kwargs): + self.args = args + self.kwargs = kwargs + + def communicate(): + return (b"NEW_HASHED", None) + + returncode = 0 + + +@pytest.fixture +def mock_subprocess_popen(mocker): + mock = mocker.patch("subprocess.Popen", autospec=True, return_value=ProcessMock) + return mock + + +## TESTS ###################################################### + +API_USERS_INFO = """ +users { + allUsers { + username + sshKeys + } +} +""" + + +def test_graphql_get_users_unauthorized(client, some_users, mock_subprocess_popen): + """Test wrong auth""" + response = client.get( + "/graphql", + json={ + "query": generate_system_query([API_USERS_INFO]), + }, + ) + assert response.status_code == 200 + assert response.json.get("data") is None + + +def test_graphql_get_some_users(authorized_client, some_users, mock_subprocess_popen): + response = authorized_client.get( + "/graphql", + json={ + "query": generate_system_query([API_USERS_INFO]), + }, + ) + assert response.status_code == 200 + assert response.json.get("data") is not None + # assert response.json == ["user1", "user2", "user3"] + + assert response.json["data"]["users"]["success"] is True + assert response.json["data"]["users"]["code"] == 200 diff --git a/tests/test_graphql/test_users/no_users.json b/tests/test_graphql/test_users/no_users.json new file mode 100644 index 0000000..e5efe86 --- /dev/null +++ b/tests/test_graphql/test_users/no_users.json @@ -0,0 +1,54 @@ +{ + "backblaze": { + "accountId": "ID", + "accountKey": "KEY", + "bucket": "selfprivacy" + }, + "api": { + "token": "TEST_TOKEN", + "enableSwagger": false + }, + "bitwarden": { + "enable": false + }, + "cloudflare": { + "apiKey": "TOKEN" + }, + "databasePassword": "PASSWORD", + "domain": "test.tld", + "hashedMasterPassword": "HASHED_PASSWORD", + "hostname": "test-instance", + "nextcloud": { + "adminPassword": "ADMIN", + "databasePassword": "ADMIN", + "enable": true + }, + "resticPassword": "PASS", + "ssh": { + "enable": true, + "passwordAuthentication": true, + "rootKeys": [ + "ssh-ed25519 KEY test@pc" + ] + }, + "username": "tester", + "gitea": { + "enable": false + }, + "ocserv": { + "enable": true + }, + "pleroma": { + "enable": true + }, + "autoUpgrade": { + "enable": true, + "allowReboot": true + }, + "timezone": "Europe/Moscow", + "sshKeys": [ + "ssh-rsa KEY test@pc" + ], + "users": [ + ] +} \ No newline at end of file diff --git a/tests/test_graphql/test_users/one_user.json b/tests/test_graphql/test_users/one_user.json new file mode 100644 index 0000000..5df2108 --- /dev/null +++ b/tests/test_graphql/test_users/one_user.json @@ -0,0 +1,61 @@ +{ + "backblaze": { + "accountId": "ID", + "accountKey": "KEY", + "bucket": "selfprivacy" + }, + "api": { + "token": "TEST_TOKEN", + "enableSwagger": false + }, + "bitwarden": { + "enable": false + }, + "cloudflare": { + "apiKey": "TOKEN" + }, + "databasePassword": "PASSWORD", + "domain": "test.tld", + "hashedMasterPassword": "HASHED_PASSWORD", + "hostname": "test-instance", + "nextcloud": { + "adminPassword": "ADMIN", + "databasePassword": "ADMIN", + "enable": true + }, + "resticPassword": "PASS", + "ssh": { + "enable": true, + "passwordAuthentication": true, + "rootKeys": [ + "ssh-ed25519 KEY test@pc" + ] + }, + "username": "tester", + "gitea": { + "enable": false + }, + "ocserv": { + "enable": true + }, + "pleroma": { + "enable": true + }, + "autoUpgrade": { + "enable": true, + "allowReboot": true + }, + "timezone": "Europe/Moscow", + "sshKeys": [ + "ssh-rsa KEY test@pc" + ], + "users": [ + { + "username": "user1", + "hashedPassword": "HASHED_PASSWORD_1", + "sshKeys": [ + "ssh-rsa KEY user1@pc" + ] + } + ] +} \ No newline at end of file diff --git a/tests/test_graphql/test_users/some_users.json b/tests/test_graphql/test_users/some_users.json new file mode 100644 index 0000000..569253a --- /dev/null +++ b/tests/test_graphql/test_users/some_users.json @@ -0,0 +1,71 @@ +{ + "backblaze": { + "accountId": "ID", + "accountKey": "KEY", + "bucket": "selfprivacy" + }, + "api": { + "token": "TEST_TOKEN", + "enableSwagger": false + }, + "bitwarden": { + "enable": false + }, + "cloudflare": { + "apiKey": "TOKEN" + }, + "databasePassword": "PASSWORD", + "domain": "test.tld", + "hashedMasterPassword": "HASHED_PASSWORD", + "hostname": "test-instance", + "nextcloud": { + "adminPassword": "ADMIN", + "databasePassword": "ADMIN", + "enable": true + }, + "resticPassword": "PASS", + "ssh": { + "enable": true, + "passwordAuthentication": true, + "rootKeys": [ + "ssh-ed25519 KEY test@pc" + ] + }, + "username": "tester", + "gitea": { + "enable": false + }, + "ocserv": { + "enable": true + }, + "pleroma": { + "enable": true + }, + "autoUpgrade": { + "enable": true, + "allowReboot": true + }, + "timezone": "Europe/Moscow", + "sshKeys": [ + "ssh-rsa KEY test@pc" + ], + "users": [ + { + "username": "user1", + "hashedPassword": "HASHED_PASSWORD_1", + "sshKeys": [ + "ssh-rsa KEY user1@pc" + ] + }, + { + "username": "user2", + "hashedPassword": "HASHED_PASSWORD_2", + "sshKeys": [ + ] + }, + { + "username": "user3", + "hashedPassword": "HASHED_PASSWORD_3" + } + ] +} \ No newline at end of file diff --git a/tests/test_graphql/test_users/undefined.json b/tests/test_graphql/test_users/undefined.json new file mode 100644 index 0000000..7b2cf8b --- /dev/null +++ b/tests/test_graphql/test_users/undefined.json @@ -0,0 +1,52 @@ +{ + "backblaze": { + "accountId": "ID", + "accountKey": "KEY", + "bucket": "selfprivacy" + }, + "api": { + "token": "TEST_TOKEN", + "enableSwagger": false + }, + "bitwarden": { + "enable": false + }, + "cloudflare": { + "apiKey": "TOKEN" + }, + "databasePassword": "PASSWORD", + "domain": "test.tld", + "hashedMasterPassword": "HASHED_PASSWORD", + "hostname": "test-instance", + "nextcloud": { + "adminPassword": "ADMIN", + "databasePassword": "ADMIN", + "enable": true + }, + "resticPassword": "PASS", + "ssh": { + "enable": true, + "passwordAuthentication": true, + "rootKeys": [ + "ssh-ed25519 KEY test@pc" + ] + }, + "username": "tester", + "gitea": { + "enable": false + }, + "ocserv": { + "enable": true + }, + "pleroma": { + "enable": true + }, + "autoUpgrade": { + "enable": true, + "allowReboot": true + }, + "timezone": "Europe/Moscow", + "sshKeys": [ + "ssh-rsa KEY test@pc" + ] +} \ No newline at end of file