summaryrefslogtreecommitdiff
path: root/gitlab
diff options
context:
space:
mode:
Diffstat (limited to 'gitlab')
-rw-r--r--gitlab/tests/conftest.py12
-rw-r--r--gitlab/tests/objects/test_runners.py277
2 files changed, 289 insertions, 0 deletions
diff --git a/gitlab/tests/conftest.py b/gitlab/tests/conftest.py
new file mode 100644
index 0000000..91752c6
--- /dev/null
+++ b/gitlab/tests/conftest.py
@@ -0,0 +1,12 @@
+import pytest
+import gitlab
+
+
+@pytest.fixture
+def gl():
+ return gitlab.Gitlab(
+ "http://localhost",
+ private_token="private_token",
+ ssl_verify=True,
+ api_version=4,
+ )
diff --git a/gitlab/tests/objects/test_runners.py b/gitlab/tests/objects/test_runners.py
new file mode 100644
index 0000000..2f86bef
--- /dev/null
+++ b/gitlab/tests/objects/test_runners.py
@@ -0,0 +1,277 @@
+import unittest
+import responses
+import gitlab
+import pytest
+import re
+from .mocks import * # noqa
+
+
+runner_detail = {
+ "active": True,
+ "architecture": "amd64",
+ "description": "test-1-20150125",
+ "id": 6,
+ "ip_address": "127.0.0.1",
+ "is_shared": False,
+ "contacted_at": "2016-01-25T16:39:48.066Z",
+ "name": "test-runner",
+ "online": True,
+ "status": "online",
+ "platform": "linux",
+ "projects": [
+ {
+ "id": 1,
+ "name": "GitLab Community Edition",
+ "name_with_namespace": "GitLab.org / GitLab Community Edition",
+ "path": "gitlab-foss",
+ "path_with_namespace": "gitlab-org/gitlab-foss",
+ }
+ ],
+ "revision": "5nj35",
+ "tag_list": ["ruby", "mysql"],
+ "version": "v13.0.0",
+ "access_level": "ref_protected",
+ "maximum_timeout": 3600,
+}
+
+runner_shortinfo = {
+ "active": True,
+ "description": "test-1-20150125",
+ "id": 6,
+ "is_shared": False,
+ "ip_address": "127.0.0.1",
+ "name": "test-name",
+ "online": True,
+ "status": "online",
+}
+
+runner_jobs = [
+ {
+ "id": 6,
+ "ip_address": "127.0.0.1",
+ "status": "running",
+ "stage": "test",
+ "name": "test",
+ "ref": "master",
+ "tag": False,
+ "coverage": "99%",
+ "created_at": "2017-11-16T08:50:29.000Z",
+ "started_at": "2017-11-16T08:51:29.000Z",
+ "finished_at": "2017-11-16T08:53:29.000Z",
+ "duration": 120,
+ "user": {
+ "id": 1,
+ "name": "John Doe2",
+ "username": "user2",
+ "state": "active",
+ "avatar_url": "http://www.gravatar.com/avatar/c922747a93b40d1ea88262bf1aebee62?s=80&d=identicon",
+ "web_url": "http://localhost/user2",
+ "created_at": "2017-11-16T18:38:46.000Z",
+ "bio": None,
+ "location": None,
+ "public_email": "",
+ "skype": "",
+ "linkedin": "",
+ "twitter": "",
+ "website_url": "",
+ "organization": None,
+ },
+ }
+]
+
+
+@pytest.fixture
+def resp_get_runners_jobs():
+ with responses.RequestsMock() as rsps:
+ rsps.add(
+ method=responses.GET,
+ url="http://localhost/api/v4/runners/6/jobs",
+ json=runner_jobs,
+ content_type="application/json",
+ status=200,
+ )
+ yield rsps
+
+
+@pytest.fixture
+def resp_get_runners_list():
+ with responses.RequestsMock() as rsps:
+ rsps.add(
+ method=responses.GET,
+ url=re.compile(r".*?(/runners(/all)?|/(groups|projects)/1/runners)"),
+ json=[runner_shortinfo],
+ content_type="application/json",
+ status=200,
+ )
+ yield rsps
+
+
+@pytest.fixture
+def resp_runner_detail():
+ with responses.RequestsMock() as rsps:
+ pattern = re.compile(r".*?/runners/6")
+ rsps.add(
+ method=responses.GET,
+ url=pattern,
+ json=runner_detail,
+ content_type="application/json",
+ status=200,
+ )
+ rsps.add(
+ method=responses.PUT,
+ url=pattern,
+ json=runner_detail,
+ content_type="application/json",
+ status=200,
+ )
+ yield rsps
+
+
+@pytest.fixture
+def resp_runner_register():
+ with responses.RequestsMock() as rsps:
+ pattern = re.compile(r".*?/runners")
+ rsps.add(
+ method=responses.POST,
+ url=pattern,
+ json={"id": "6", "token": "6337ff461c94fd3fa32ba3b1ff4125"},
+ content_type="application/json",
+ status=200,
+ )
+ yield rsps
+
+
+@pytest.fixture
+def resp_runner_enable():
+ with responses.RequestsMock() as rsps:
+ pattern = re.compile(r".*?(projects|groups)/1/runners")
+ rsps.add(
+ method=responses.POST,
+ url=pattern,
+ json=runner_shortinfo,
+ content_type="application/json",
+ status=200,
+ )
+ yield rsps
+
+
+@pytest.fixture
+def resp_runner_delete():
+ with responses.RequestsMock() as rsps:
+ pattern = re.compile(r".*?/runners/6")
+ rsps.add(
+ method=responses.GET,
+ url=pattern,
+ json=runner_detail,
+ content_type="application/json",
+ status=200,
+ )
+ rsps.add(
+ method=responses.DELETE, url=pattern, status=204,
+ )
+ yield rsps
+
+
+@pytest.fixture
+def resp_runner_disable():
+ with responses.RequestsMock() as rsps:
+ pattern = re.compile(r".*?/(groups|projects)/1/runners/6")
+ rsps.add(
+ method=responses.DELETE, url=pattern, status=204,
+ )
+ yield rsps
+
+
+@pytest.fixture
+def resp_runner_verify():
+ with responses.RequestsMock() as rsps:
+ pattern = re.compile(r".*?/runners/verify")
+ rsps.add(
+ method=responses.POST, url=pattern, status=200,
+ )
+ yield rsps
+
+
+def test_owned_runners_list(gl: gitlab.Gitlab, resp_get_runners_list):
+ runners = gl.runners.list()
+ assert runners[0].active == True
+ assert runners[0].id == 6
+ assert runners[0].name == "test-name"
+ assert len(runners) == 1
+
+
+def test_project_runners_list(gl: gitlab.Gitlab, resp_get_runners_list):
+ runners = gl.projects.get(1, lazy=True).runners.list()
+ assert runners[0].active == True
+ assert runners[0].id == 6
+ assert runners[0].name == "test-name"
+ assert len(runners) == 1
+
+
+def test_group_runners_list(gl: gitlab.Gitlab, resp_get_runners_list):
+ runners = gl.groups.get(1, lazy=True).runners.list()
+ assert runners[0].active == True
+ assert runners[0].id == 6
+ assert runners[0].name == "test-name"
+ assert len(runners) == 1
+
+
+def test_all_runners_list(gl: gitlab.Gitlab, resp_get_runners_list):
+ runners = gl.runners.all()
+ assert runners[0].active == True
+ assert runners[0].id == 6
+ assert runners[0].name == "test-name"
+ assert len(runners) == 1
+
+
+def test_create_runner(gl: gitlab.Gitlab, resp_runner_register):
+ runner = gl.runners.create({"token": "token"})
+ assert runner.id == "6"
+ assert runner.token == "6337ff461c94fd3fa32ba3b1ff4125"
+
+
+def test_get_update_runner(gl: gitlab.Gitlab, resp_runner_detail):
+ runner = gl.runners.get(6)
+ assert runner.active == True
+ runner.tag_list.append("new")
+ runner.save()
+
+
+def test_remove_runner(gl: gitlab.Gitlab, resp_runner_delete):
+ runner = gl.runners.get(6)
+ runner.delete()
+ gl.runners.delete(6)
+
+
+def test_disable_project_runner(gl: gitlab.Gitlab, resp_runner_disable):
+ gl.projects.get(1, lazy=True).runners.delete(6)
+
+
+def test_disable_group_runner(gl: gitlab.Gitlab, resp_runner_disable):
+ gl.groups.get(1, lazy=True).runners.delete(6)
+
+
+def test_enable_project_runner(gl: gitlab.Gitlab, resp_runner_enable):
+ runner = gl.projects.get(1, lazy=True).runners.create({"runner_id": 6})
+ assert runner.active == True
+ assert runner.id == 6
+ assert runner.name == "test-name"
+
+
+def test_enable_group_runner(gl: gitlab.Gitlab, resp_runner_enable):
+ runner = gl.groups.get(1, lazy=True).runners.create({"runner_id": 6})
+ assert runner.active == True
+ assert runner.id == 6
+ assert runner.name == "test-name"
+
+
+def test_verify_runner(gl: gitlab.Gitlab, resp_runner_verify):
+ gl.runners.verify("token")
+
+
+def test_runner_jobs(gl: gitlab.Gitlab, resp_get_runners_jobs):
+ jobs = gl.runners.get(6, lazy=True).jobs.list()
+ assert jobs[0].duration == 120
+ assert jobs[0].name == "test"
+ assert jobs[0].user.get("name") == "John Doe2"
+ assert len(jobs) == 1