')
39 | with pytest.raises(ValueError):
40 | jenkins.system.apply_jcasc('yaml')
41 | assert respx_mock.calls[0].request.url == check_url
42 |
43 |
44 | class TestAsyncSystem:
45 |
46 | @pytest.mark.parametrize('action', ['restart', 'safeRestart', 'quietDown',
47 | 'cancelQuietDown', 'exit', 'safeExit'])
48 | async def test_enable_disable(self, async_jenkins, respx_mock, action):
49 | req_url = f'{async_jenkins.system.url}{action}'
50 | respx_mock.post(req_url)
51 | await getattr(async_jenkins.system, snake(action))()
52 | assert respx_mock.calls[0].request.url == req_url
53 |
54 | async def test_reload_jcasc(self, async_jenkins, respx_mock):
55 | req_url = f'{async_jenkins.system.url}configuration-as-code/reload'
56 | respx_mock.post(req_url)
57 | await async_jenkins.system.reload_jcasc()
58 | assert respx_mock.calls[0].request.url == req_url
59 |
60 | async def test_export_jcasc(self, async_jenkins, respx_mock):
61 | req_url = f'{async_jenkins.system.url}configuration-as-code/export'
62 | respx_mock.post(req_url)
63 | await async_jenkins.system.export_jcasc()
64 | assert respx_mock.calls[0].request.url == req_url
65 |
66 | async def test_apply_jcasc(self, async_jenkins, respx_mock):
67 | check_url = f'{async_jenkins.system.url}configuration-as-code/checkNewSource?newSource=yaml'
68 | respx_mock.post(check_url)
69 | req_url = f'{async_jenkins.system.url}configuration-as-code/replace'
70 | respx_mock.post(req_url)
71 | await async_jenkins.system.apply_jcasc('yaml')
72 | assert respx_mock.calls[0].request.url == check_url
73 | assert respx_mock.calls[1].request.url == req_url
74 |
75 | async def test_apply_jcasc_fail(self, async_jenkins, respx_mock):
76 | check_url = f'{async_jenkins.system.url}configuration-as-code/checkNewSource?newSource=yaml'
77 | respx_mock.post(check_url).respond(text='
')
78 | with pytest.raises(ValueError):
79 | await async_jenkins.system.apply_jcasc('yaml')
80 | assert respx_mock.calls[0].request.url == check_url
81 |
--------------------------------------------------------------------------------
/tests/unit/test_view.py:
--------------------------------------------------------------------------------
1 | # encoding: utf-8
2 | import pytest
3 | from api4jenkins.view import AllView, AsyncAllView
4 |
5 |
6 | class TestViews:
7 |
8 | def test_get(self, jenkins):
9 | view = jenkins.views.get('all')
10 | assert isinstance(view, AllView)
11 | assert view.url == jenkins.url + 'view/all/'
12 | assert jenkins.views.get('not exist') is None
13 |
14 | def test_views(self, jenkins):
15 | assert len(list(jenkins.views)) == 1
16 |
17 |
18 | class TestView:
19 |
20 | def test_get_job(self, view):
21 | job_in_view = view['folder']
22 | job = view.jenkins.get_job('folder')
23 | assert job_in_view == job
24 | assert view['not exist'] is None
25 |
26 | def test_iter(self, view):
27 | assert len(list(view)) == 2
28 |
29 | @pytest.mark.parametrize('action, entry', [('include', 'addJobToView'),
30 | ('exclude', 'removeJobFromView')])
31 | def test_include_exclude(self, view, respx_mock, action, entry):
32 | req_url = f'{view.url}{entry}?name=folder1'
33 | respx_mock.post(req_url).respond(json={'name': 'folder1'})
34 | getattr(view, action)('folder1')
35 | assert respx_mock.calls[0].request.url == req_url
36 |
37 |
38 | class TestAsyncViews:
39 |
40 | async def test_get(self, async_jenkins):
41 | view = await async_jenkins.views['all']
42 | assert isinstance(view, AsyncAllView)
43 | assert view.url == f'{async_jenkins.url}view/all/'
44 | assert await async_jenkins.views['not exist'] is None
45 |
46 | async def test_views(self, async_jenkins):
47 | assert len([view async for view in async_jenkins.views]) == 1
48 |
49 |
50 | class TestAsyncView:
51 |
52 | async def test_get_job(self, async_view, async_folder):
53 | job_in_view = await async_view['folder']
54 | assert job_in_view == async_folder
55 | assert await async_view['not exist'] is None
56 |
57 | async def test_iter(self, async_view):
58 | assert len([job async for job in async_view]) == 2
59 |
60 | @pytest.mark.parametrize('action, entry', [('include', 'addJobToView'),
61 | ('exclude', 'removeJobFromView')])
62 | async def test_include_exclude(self, async_view, respx_mock, action, entry):
63 | req_url = f'{async_view.url}{entry}?name=folder1'
64 | respx_mock.post(req_url).respond(json={'name': 'folder1'})
65 | await getattr(async_view, action)('folder1')
66 | assert respx_mock.calls[0].request.url == req_url
67 |
--------------------------------------------------------------------------------
/tests/unit/tests_data/credential/UserPasswordCredential.xml:
--------------------------------------------------------------------------------
1 |
2 | GLOBAL
3 | user-id
4 | user-name
5 | user-password
6 | user id for testing
7 |
--------------------------------------------------------------------------------
/tests/unit/tests_data/credential/credentials.json:
--------------------------------------------------------------------------------
1 | {
2 | "_class": "com.cloudbees.plugins.credentials.CredentialsStoreAction$DomainWrapper",
3 | "credentials": [
4 | {
5 | "description": "ssh key for connect slave",
6 | "displayName": "root (ssh key for connect slave)",
7 | "fingerprint": null,
8 | "fullName": "system/_/79aa8598-912d-4475-a962-748365cc81d6",
9 | "id": "79aa8598-912d-4475-a962-748365cc81d6",
10 | "typeName": "SSH Username with private key"
11 | },
12 | {
13 | "description": "for testing",
14 | "displayName": "user1/****** (for testing)",
15 | "fingerprint": null,
16 | "fullName": "system/_/test-user",
17 | "id": "test-user",
18 | "typeName": "Username with password"
19 | }
20 | ],
21 | "description": "Credentials that should be available irrespective of domain specification to requirements matching.",
22 | "displayName": "Global credentials (unrestricted)",
23 | "fullDisplayName": "System » Global credentials (unrestricted)",
24 | "fullName": "system/_",
25 | "global": true,
26 | "urlName": "_"
27 | }
--------------------------------------------------------------------------------
/tests/unit/tests_data/credential/domains.json:
--------------------------------------------------------------------------------
1 | {
2 | "_class": "com.cloudbees.hudson.plugins.folder.properties.FolderCredentialsProvider$FolderCredentialsProperty$CredentialsStoreActionImpl",
3 | "domains": {
4 | "_": {
5 | "_class": "com.cloudbees.plugins.credentials.CredentialsStoreAction$DomainWrapper",
6 | "urlName": "_"
7 | },
8 | "production": {
9 | "_class": "com.cloudbees.plugins.credentials.CredentialsStoreAction$DomainWrapper",
10 | "urlName": "production"
11 | },
12 | "testing": {
13 | "_class": "com.cloudbees.plugins.credentials.CredentialsStoreAction$DomainWrapper",
14 | "urlName": "testing"
15 | }
16 | }
17 | }
--------------------------------------------------------------------------------
/tests/unit/tests_data/credential/user_psw.json:
--------------------------------------------------------------------------------
1 | {
2 | "_class": "com.cloudbees.plugins.credentials.CredentialsStoreAction$CredentialsWrapper",
3 | "description": "for testing",
4 | "displayName": "user1/****** (for testing)",
5 | "fingerprint": null,
6 | "fullName": "system/_/test-user",
7 | "id": "test-user",
8 | "typeName": "Username with password"
9 | }
--------------------------------------------------------------------------------
/tests/unit/tests_data/jenkins/crumb.json:
--------------------------------------------------------------------------------
1 | {
2 | "crumbRequestField": "mock-crumb-id",
3 | "crumb": "mock-crumb"
4 | }
--------------------------------------------------------------------------------
/tests/unit/tests_data/jenkins/jenkins.json:
--------------------------------------------------------------------------------
1 | {
2 | "_class": "hudson.model.Hudson",
3 | "assignedLabels": [
4 | {
5 | "name": "master"
6 | }
7 | ],
8 | "mode": "EXCLUSIVE",
9 | "nodeDescription": "the master Jenkins node",
10 | "nodeName": "",
11 | "numExecutors": 1,
12 | "description": "Jenkins configured automatically by Jenkins Configuration as Code Plugin\n\n",
13 | "jobs": [
14 | {
15 | "_class": "com.cloudbees.hudson.plugins.folder.Folder",
16 | "name": "folder",
17 | "url": "http://0.0.0.0:8080/job/folder/",
18 | "jobs": [
19 | {
20 | "_class": "hudson.model.FreeStyleProject",
21 | "name": "freestylejob",
22 | "url": "http://0.0.0.0:8080/job/folder/job/freestylejob/",
23 | "color": "blue"
24 | },
25 | {
26 | "_class": "org.jenkinsci.plugins.workflow.job.WorkflowJob",
27 | "name": "pipeline",
28 | "url": "http://0.0.0.0:8080/job/folder/job/pipeline/",
29 | "color": "red"
30 | },
31 | {
32 | "_class": "hudson.matrix.MatrixProject",
33 | "name": "maxtrixjob",
34 | "url": "http://0.0.0.0:8080/job/folder/job/maxtrixjob/",
35 | "color": "blue"
36 | },
37 | {
38 | "_class": "com.cloudbees.hudson.plugins.folder.Folder",
39 | "name": "folder2",
40 | "url": "http://0.0.0.0:8080/job/folder/job/folder2/"
41 | }
42 | ]
43 | }
44 | ],
45 | "overallLoad": {},
46 | "primaryView": {
47 | "_class": "hudson.model.AllView",
48 | "name": "all",
49 | "url": "http://0.0.0.0:8080/"
50 | },
51 | "quietingDown": false,
52 | "slaveAgentPort": 50000,
53 | "unlabeledLoad": {
54 | "_class": "jenkins.model.UnlabeledLoadStatistics"
55 | },
56 | "useCrumbs": false,
57 | "useSecurity": true,
58 | "views": [
59 | {
60 | "_class": "hudson.model.AllView",
61 | "name": "all",
62 | "url": "http://0.0.0.0:8080/"
63 | }
64 | ]
65 | }
--------------------------------------------------------------------------------
/tests/unit/tests_data/job/folder.json:
--------------------------------------------------------------------------------
1 | {
2 | "_class": "com.cloudbees.hudson.plugins.folder.Folder",
3 | "actions": [
4 | {},
5 | {},
6 | {
7 | "_class": "com.cloudbees.plugins.credentials.ViewCredentialsAction"
8 | }
9 | ],
10 | "description": "",
11 | "displayName": "folder",
12 | "displayNameOrNull": null,
13 | "fullDisplayName": "folder",
14 | "fullName": "folder",
15 | "name": "folder",
16 | "url": "http://0.0.0.0:8080/job/folder/",
17 | "jobs": [
18 | {
19 | "_class": "hudson.model.FreeStyleProject",
20 | "name": "Level2_FreeStyleProject",
21 | "url": "http://0.0.0.0:8080/job/folder/job/Level2_FreeStyleProject/",
22 | "color": "blue"
23 | },
24 | {
25 | "_class": "org.jenkinsci.plugins.workflow.job.WorkflowJob",
26 | "name": "pipeline",
27 | "url": "http://0.0.0.0:8080/job/folder/job/pipeline/",
28 | "color": "red"
29 | },
30 | {
31 | "_class": "hudson.matrix.MatrixProject",
32 | "name": "Level2_MatrixProject",
33 | "url": "http://0.0.0.0:8080/job/folder/job/Level2_MatrixProject/",
34 | "color": "blue"
35 | },
36 | {
37 | "_class": "com.cloudbees.hudson.plugins.folder.Folder",
38 | "name": "folder2",
39 | "url": "http://0.0.0.0:8080/job/folder/job/folder2/"
40 | }
41 | ],
42 | "primaryView": {
43 | "_class": "hudson.model.AllView",
44 | "name": "All",
45 | "url": "http://0.0.0.0:8080/job/folder/"
46 | },
47 | "views": [
48 | {
49 | "_class": "hudson.model.AllView",
50 | "name": "All",
51 | "url": "http://0.0.0.0:8080/job/folder/"
52 | }
53 | ]
54 | }
--------------------------------------------------------------------------------
/tests/unit/tests_data/job/mbranch.json:
--------------------------------------------------------------------------------
1 | {
2 | "_class": "org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject",
3 | "actions": [
4 | {},
5 | {},
6 | {},
7 | {
8 | "_class": "org.jenkinsci.plugins.github_branch_source.GitHubRepoMetadataAction"
9 | },
10 | {
11 | "_class": "jenkins.scm.api.metadata.ObjectMetadataAction"
12 | },
13 | {},
14 | {},
15 | {},
16 | {},
17 | {},
18 | {},
19 | {
20 | "_class": "com.cloudbees.plugins.credentials.ViewCredentialsAction"
21 | }
22 | ],
23 | "description": null,
24 | "displayName": "Level1_multibranchjob",
25 | "displayNameOrNull": null,
26 | "fullDisplayName": "Level1_multibranchjob",
27 | "fullName": "Level1_multibranchjob",
28 | "name": "Level1_multibranchjob",
29 | "url": "http://0.0.0.0:8080/job/Level1_multibranchjob/",
30 | "healthReport": [
31 | {
32 | "description": "Worst health: Level1_multibranchjob » feature/github-commands: Build stability: All recent builds failed.",
33 | "iconClassName": "icon-health-00to19",
34 | "iconUrl": "health-00to19.png",
35 | "score": 0
36 | }
37 | ],
38 | "jobs": [
39 | {
40 | "_class": "org.jenkinsci.plugins.workflow.job.WorkflowJob",
41 | "name": "feature%2Fgithub-commands",
42 | "url": "http://0.0.0.0:8080/job/Level1_multibranchjob/job/branch1/",
43 | "color": "red"
44 | },
45 | {
46 | "_class": "org.jenkinsci.plugins.workflow.job.WorkflowJob",
47 | "name": "master",
48 | "url": "http://0.0.0.0:8080/job/Level1_multibranchjob/job/master/",
49 | "color": "red"
50 | }
51 | ],
52 | "primaryView": {
53 | "_class": "jenkins.branch.MultiBranchProjectViewHolder$ViewImpl",
54 | "name": "default",
55 | "url": "http://0.0.0.0:8080/job/Level1_multibranchjob/"
56 | },
57 | "views": [
58 | {
59 | "_class": "jenkins.branch.MultiBranchProjectViewHolder$ViewImpl",
60 | "name": "change-requests",
61 | "url": "http://0.0.0.0:8080/job/Level1_multibranchjob/view/change-requests/"
62 | },
63 | {
64 | "_class": "jenkins.branch.MultiBranchProjectViewHolder$ViewImpl",
65 | "name": "default",
66 | "url": "http://0.0.0.0:8080/job/Level1_multibranchjob/"
67 | }
68 | ],
69 | "sources": [
70 | {}
71 | ]
72 | }
--------------------------------------------------------------------------------
/tests/unit/tests_data/job/pipeline.json:
--------------------------------------------------------------------------------
1 | {
2 | "_class": "org.jenkinsci.plugins.workflow.job.WorkflowJob",
3 | "actions": [
4 | {},
5 | {},
6 | {},
7 | {},
8 | {},
9 | {},
10 | {
11 | "_class": "hudson.plugins.jobConfigHistory.JobConfigHistoryProjectAction"
12 | },
13 | {},
14 | {},
15 | {},
16 | {},
17 | {},
18 | {
19 | "_class": "org.jenkinsci.plugins.testresultsanalyzer.TestResultsAnalyzerAction"
20 | },
21 | {},
22 | {},
23 | {
24 | "_class": "com.cloudbees.plugins.credentials.ViewCredentialsAction"
25 | }
26 | ],
27 | "description": "",
28 | "displayName": "Level1_WorkflowJob",
29 | "displayNameOrNull": null,
30 | "fullDisplayName": "Level1_WorkflowJob",
31 | "fullName": "Level1_WorkflowJob",
32 | "name": "Level1_WorkflowJob",
33 | "url": "http://0.0.0.0:8080/job/Level1_WorkflowJob/",
34 | "buildable": true,
35 | "builds": [
36 | {
37 | "_class": "org.jenkinsci.plugins.workflow.job.WorkflowRun",
38 | "number": 52,
39 | "displayName": "#52",
40 | "url": "http://0.0.0.0:8080/job/Level1_WorkflowJob/52/",
41 | "building": false
42 | },
43 | {
44 | "_class": "org.jenkinsci.plugins.workflow.job.WorkflowRun",
45 | "number": 51,
46 | "displayName": "#51",
47 | "url": "http://0.0.0.0:8080/job/Level1_WorkflowJob/51/",
48 | "building": false
49 | },
50 | {
51 | "_class": "org.jenkinsci.plugins.workflow.job.WorkflowRun",
52 | "number": 50,
53 | "displayName": "#50",
54 | "url": "http://0.0.0.0:8080/job/Level1_WorkflowJob/50/",
55 | "building": false
56 | },
57 | {
58 | "_class": "org.jenkinsci.plugins.workflow.job.WorkflowRun",
59 | "number": 49,
60 | "displayName": "#49",
61 | "url": "http://0.0.0.0:8080/job/Level1_WorkflowJob/49/",
62 | "building": false
63 | },
64 | {
65 | "_class": "org.jenkinsci.plugins.workflow.job.WorkflowRun",
66 | "number": 48,
67 | "displayName": "#48",
68 | "url": "http://0.0.0.0:8080/job/Level1_WorkflowJob/48/",
69 | "building": false
70 | },
71 | {
72 | "_class": "org.jenkinsci.plugins.workflow.job.WorkflowRun",
73 | "number": 47,
74 | "displayName": "#47",
75 | "url": "http://0.0.0.0:8080/job/Level1_WorkflowJob/47/",
76 | "building": false
77 | },
78 | {
79 | "_class": "org.jenkinsci.plugins.workflow.job.WorkflowRun",
80 | "number": 46,
81 | "displayName": "#46",
82 | "url": "http://0.0.0.0:8080/job/Level1_WorkflowJob/46/",
83 | "building": false
84 | },
85 | {
86 | "_class": "org.jenkinsci.plugins.workflow.job.WorkflowRun",
87 | "number": 45,
88 | "displayName": "#45",
89 | "url": "http://0.0.0.0:8080/job/Level1_WorkflowJob/45/",
90 | "building": false
91 | }
92 | ],
93 | "color": "red",
94 | "firstBuild": {
95 | "_class": "org.jenkinsci.plugins.workflow.job.WorkflowRun",
96 | "number": 45,
97 | "displayName": "#45",
98 | "url": "http://0.0.0.0:8080/job/Level1_WorkflowJob/45/"
99 | },
100 | "healthReport": [
101 | {
102 | "description": "Build stability: 4 out of the last 5 builds failed.",
103 | "iconClassName": "icon-health-00to19",
104 | "iconUrl": "health-00to19.png",
105 | "score": 20
106 | }
107 | ],
108 | "inQueue": false,
109 | "keepDependencies": false,
110 | "lastBuild": {
111 | "_class": "org.jenkinsci.plugins.workflow.job.WorkflowRun",
112 | "number": 52,
113 | "displayName": "#52",
114 | "url": "http://0.0.0.0:8080/job/Level1_WorkflowJob/52/"
115 | },
116 | "lastCompletedBuild": {
117 | "_class": "org.jenkinsci.plugins.workflow.job.WorkflowRun",
118 | "number": 52,
119 | "displayName": "#52",
120 | "url": "http://0.0.0.0:8080/job/Level1_WorkflowJob/52/"
121 | },
122 | "lastFailedBuild": {
123 | "_class": "org.jenkinsci.plugins.workflow.job.WorkflowRun",
124 | "number": 52,
125 | "displayName": "#52",
126 | "url": "http://0.0.0.0:8080/job/Level1_WorkflowJob/52/"
127 | },
128 | "lastStableBuild": {
129 | "_class": "org.jenkinsci.plugins.workflow.job.WorkflowRun",
130 | "number": 49,
131 | "displayName": "#49",
132 | "url": "http://0.0.0.0:8080/job/Level1_WorkflowJob/49/"
133 | },
134 | "lastSuccessfulBuild": {
135 | "_class": "org.jenkinsci.plugins.workflow.job.WorkflowRun",
136 | "number": 49,
137 | "displayName": "#49",
138 | "url": "http://0.0.0.0:8080/job/Level1_WorkflowJob/49/"
139 | },
140 | "lastUnstableBuild": {
141 | "_class": "org.jenkinsci.plugins.workflow.job.WorkflowRun",
142 | "number": 52,
143 | "displayName": "#52",
144 | "url": "http://0.0.0.0:8080/job/Level1_WorkflowJob/52/"
145 | },
146 | "lastUnsuccessfulBuild": {
147 | "_class": "org.jenkinsci.plugins.workflow.job.WorkflowRun",
148 | "number": 52,
149 | "displayName": "#52",
150 | "url": "http://0.0.0.0:8080/job/Level1_WorkflowJob/52/"
151 | },
152 | "nextBuildNumber": 53,
153 | "property": [],
154 | "queueItem": null,
155 | "concurrentBuild": true,
156 | "resumeBlocked": false
157 | }
--------------------------------------------------------------------------------
/tests/unit/tests_data/plugin/installStatus.json:
--------------------------------------------------------------------------------
1 | {
2 | "status": "ok",
3 | "data": {
4 | "jobs": [{
5 | "name": "nant",
6 | "version": "1.4.3",
7 | "title": "NAnt",
8 | "installStatus": "Success",
9 | "requiresRestart": "false"
10 | }, {
11 | "name": "cloudbees-folder",
12 | "version": "6.9",
13 | "title": "Folders",
14 | "installStatus": "SuccessButRequiresRestart",
15 | "requiresRestart": "true"
16 | }, {
17 | "name": "scm-api",
18 | "version": "2.6.3",
19 | "title": "SCM API",
20 | "installStatus": "SuccessButRequiresRestart",
21 | "requiresRestart": "true"
22 | }, {
23 | "name": "structs",
24 | "version": "1.19",
25 | "title": "Structs",
26 | "installStatus": "SuccessButRequiresRestart",
27 | "requiresRestart": "true"
28 | }, {
29 | "name": "script-security",
30 | "version": "1.61",
31 | "title": "Script Security",
32 | "installStatus": "SuccessButRequiresRestart",
33 | "requiresRestart": "true"
34 | }, {
35 | "name": "workflow-step-api",
36 | "version": "2.20",
37 | "title": "Pipeline: Step API",
38 | "installStatus": "SuccessButRequiresRestart",
39 | "requiresRestart": "true"
40 | }, {
41 | "name": "workflow-api",
42 | "version": "2.35",
43 | "title": "Pipeline: API",
44 | "installStatus": "SuccessButRequiresRestart",
45 | "requiresRestart": "true"
46 | }, {
47 | "name": "workflow-support",
48 | "version": "3.3",
49 | "title": "Pipeline: Supporting APIs",
50 | "installStatus": "SuccessButRequiresRestart",
51 | "requiresRestart": "true"
52 | }, {
53 | "name": "workflow-cps",
54 | "version": "2.72",
55 | "title": "Pipeline: Groovy",
56 | "installStatus": "SuccessButRequiresRestart",
57 | "requiresRestart": "true"
58 | }, {
59 | "name": "config-file-provider",
60 | "version": "3.6.2",
61 | "title": "Config File Provider",
62 | "installStatus": "SuccessButRequiresRestart",
63 | "requiresRestart": "true"
64 | }, {
65 | "name": "workflow-job",
66 | "version": "2.33",
67 | "title": "Pipeline: Job",
68 | "installStatus": "SuccessButRequiresRestart",
69 | "requiresRestart": "true"
70 | }, {
71 | "name": "branch-api",
72 | "version": "2.5.3",
73 | "title": "Branch API",
74 | "installStatus": "SuccessButRequiresRestart",
75 | "requiresRestart": "true"
76 | }, {
77 | "name": "workflow-multibranch",
78 | "version": "2.21",
79 | "title": "Pipeline: Multibranch",
80 | "installStatus": "SuccessButRequiresRestart",
81 | "requiresRestart": "true"
82 | }, {
83 | "name": "pipeline-multibranch-defaults",
84 | "version": "2.0",
85 | "title": "Pipeline: Multibranch with defaults",
86 | "installStatus": "Failure",
87 | "requiresRestart": "false"
88 | }, {
89 | "name": "ownership",
90 | "version": "0.12.1",
91 | "title": "Job and Node ownership",
92 | "installStatus": "Success",
93 | "requiresRestart": "false"
94 | }, {
95 | "name": "nomad",
96 | "version": "0.6.5",
97 | "title": "Nomad",
98 | "installStatus": "Success",
99 | "requiresRestart": "false"
100 | }, {
101 | "name": "pipeline-multibranch-defaults",
102 | "version": "2.0",
103 | "title": "Pipeline: Multibranch with defaults",
104 | "installStatus": "Failure",
105 | "requiresRestart": "false"
106 | }, {
107 | "name": "multi-slave-config-plugin",
108 | "version": "1.2.0",
109 | "title": "Multi slave config",
110 | "installStatus": "Success",
111 | "requiresRestart": "false"
112 | }, {
113 | "name": "mock-slave",
114 | "version": "1.13",
115 | "title": "Mock Agent",
116 | "installStatus": "Success",
117 | "requiresRestart": "false"
118 | }, {
119 | "name": "jquery",
120 | "version": "1.12.4-0",
121 | "title": "jQuery",
122 | "installStatus": "Success",
123 | "requiresRestart": "false"
124 | }, {
125 | "name": "nodelabelparameter",
126 | "version": "1.7.2",
127 | "title": "Node and Label parameter",
128 | "installStatus": "Success",
129 | "requiresRestart": "false"
130 | }, {
131 | "name": "cloud-stats",
132 | "version": "0.24",
133 | "title": "Cloud Statistics",
134 | "installStatus": "Success",
135 | "requiresRestart": "false"
136 | }, {
137 | "name": "credentials",
138 | "version": "2.2.0",
139 | "title": "Credentials",
140 | "installStatus": "Pending",
141 | "requiresRestart": "false"
142 | }, {
143 | "name": "ssh-credentials",
144 | "version": "1.17.1",
145 | "title": "SSH Credentials",
146 | "installStatus": "Pending",
147 | "requiresRestart": "false"
148 | }, {
149 | "name": "openstack-cloud",
150 | "version": "2.47",
151 | "title": "OpenStack Cloud",
152 | "installStatus": "Pending",
153 | "requiresRestart": "false"
154 | }
155 | ],
156 | "state": "RESTART"
157 | }
158 | }
159 |
--------------------------------------------------------------------------------
/tests/unit/tests_data/plugin/installStatus_done.json:
--------------------------------------------------------------------------------
1 | {
2 | "status": "ok",
3 | "data": {
4 | "jobs": [{
5 | "name": "nant",
6 | "version": "1.4.3",
7 | "title": "NAnt",
8 | "installStatus": "Success",
9 | "requiresRestart": "false"
10 | }, {
11 | "name": "cloudbees-folder",
12 | "version": "6.9",
13 | "title": "Folders",
14 | "installStatus": "SuccessButRequiresRestart",
15 | "requiresRestart": "true"
16 | }, {
17 | "name": "scm-api",
18 | "version": "2.6.3",
19 | "title": "SCM API",
20 | "installStatus": "SuccessButRequiresRestart",
21 | "requiresRestart": "true"
22 | }, {
23 | "name": "structs",
24 | "version": "1.19",
25 | "title": "Structs",
26 | "installStatus": "SuccessButRequiresRestart",
27 | "requiresRestart": "true"
28 | }, {
29 | "name": "script-security",
30 | "version": "1.61",
31 | "title": "Script Security",
32 | "installStatus": "SuccessButRequiresRestart",
33 | "requiresRestart": "true"
34 | }, {
35 | "name": "workflow-step-api",
36 | "version": "2.20",
37 | "title": "Pipeline: Step API",
38 | "installStatus": "SuccessButRequiresRestart",
39 | "requiresRestart": "true"
40 | }, {
41 | "name": "workflow-api",
42 | "version": "2.35",
43 | "title": "Pipeline: API",
44 | "installStatus": "SuccessButRequiresRestart",
45 | "requiresRestart": "true"
46 | }, {
47 | "name": "workflow-support",
48 | "version": "3.3",
49 | "title": "Pipeline: Supporting APIs",
50 | "installStatus": "SuccessButRequiresRestart",
51 | "requiresRestart": "true"
52 | }, {
53 | "name": "workflow-cps",
54 | "version": "2.72",
55 | "title": "Pipeline: Groovy",
56 | "installStatus": "SuccessButRequiresRestart",
57 | "requiresRestart": "true"
58 | }, {
59 | "name": "config-file-provider",
60 | "version": "3.6.2",
61 | "title": "Config File Provider",
62 | "installStatus": "SuccessButRequiresRestart",
63 | "requiresRestart": "true"
64 | }, {
65 | "name": "workflow-job",
66 | "version": "2.33",
67 | "title": "Pipeline: Job",
68 | "installStatus": "SuccessButRequiresRestart",
69 | "requiresRestart": "true"
70 | }, {
71 | "name": "branch-api",
72 | "version": "2.5.3",
73 | "title": "Branch API",
74 | "installStatus": "SuccessButRequiresRestart",
75 | "requiresRestart": "true"
76 | }, {
77 | "name": "workflow-multibranch",
78 | "version": "2.21",
79 | "title": "Pipeline: Multibranch",
80 | "installStatus": "SuccessButRequiresRestart",
81 | "requiresRestart": "true"
82 | }, {
83 | "name": "pipeline-multibranch-defaults",
84 | "version": "2.0",
85 | "title": "Pipeline: Multibranch with defaults",
86 | "installStatus": "Failure",
87 | "requiresRestart": "false"
88 | }, {
89 | "name": "ownership",
90 | "version": "0.12.1",
91 | "title": "Job and Node ownership",
92 | "installStatus": "Success",
93 | "requiresRestart": "false"
94 | }, {
95 | "name": "nomad",
96 | "version": "0.6.5",
97 | "title": "Nomad",
98 | "installStatus": "Success",
99 | "requiresRestart": "false"
100 | }, {
101 | "name": "pipeline-multibranch-defaults",
102 | "version": "2.0",
103 | "title": "Pipeline: Multibranch with defaults",
104 | "installStatus": "Failure",
105 | "requiresRestart": "false"
106 | }, {
107 | "name": "multi-slave-config-plugin",
108 | "version": "1.2.0",
109 | "title": "Multi slave config",
110 | "installStatus": "Success",
111 | "requiresRestart": "false"
112 | }, {
113 | "name": "mock-slave",
114 | "version": "1.13",
115 | "title": "Mock Agent",
116 | "installStatus": "Success",
117 | "requiresRestart": "false"
118 | }, {
119 | "name": "jquery",
120 | "version": "1.12.4-0",
121 | "title": "jQuery",
122 | "installStatus": "Success",
123 | "requiresRestart": "false"
124 | }, {
125 | "name": "nodelabelparameter",
126 | "version": "1.7.2",
127 | "title": "Node and Label parameter",
128 | "installStatus": "Success",
129 | "requiresRestart": "false"
130 | }, {
131 | "name": "cloud-stats",
132 | "version": "0.24",
133 | "title": "Cloud Statistics",
134 | "installStatus": "Success",
135 | "requiresRestart": "false"
136 | }, {
137 | "name": "credentials",
138 | "version": "2.2.0",
139 | "title": "Credentials",
140 | "installStatus": "SuccessButRequiresRestart",
141 | "requiresRestart": "true"
142 | }, {
143 | "name": "ssh-credentials",
144 | "version": "1.17.1",
145 | "title": "SSH Credentials",
146 | "installStatus": "SuccessButRequiresRestart",
147 | "requiresRestart": "true"
148 | }, {
149 | "name": "openstack-cloud",
150 | "version": "2.47",
151 | "title": "OpenStack Cloud",
152 | "installStatus": "Failure",
153 | "requiresRestart": "false"
154 | }, {
155 | "name": "vs-code-metrics",
156 | "version": "1.7",
157 | "title": "Visual Studio Code Metrics",
158 | "installStatus": "Success",
159 | "requiresRestart": "false"
160 | }, {
161 | "name": "vs-code-metrics",
162 | "version": "1.7",
163 | "title": "Visual Studio Code Metrics",
164 | "installStatus": "Success",
165 | "requiresRestart": "false"
166 | }, {
167 | "name": "vstestrunner",
168 | "version": "1.0.8",
169 | "title": "VSTest Runner",
170 | "installStatus": "Success",
171 | "requiresRestart": "false"
172 | }, {
173 | "name": "mstest",
174 | "version": "1.0.0",
175 | "title": "MSTest",
176 | "installStatus": "Success",
177 | "requiresRestart": "false"
178 | }
179 | ],
180 | "state": "RESTART"
181 | }
182 | }
183 |
--------------------------------------------------------------------------------
/tests/unit/tests_data/plugin/plugin.json:
--------------------------------------------------------------------------------
1 | {
2 | "_class": "hudson.LocalPluginManager",
3 | "plugins": [
4 | {
5 | "shortName": "jquery-detached"
6 | },
7 | {
8 | "shortName": "bouncycastle-api"
9 | },
10 | {
11 | "shortName": "htmlpublisher"
12 | },
13 | {
14 | "shortName": "plain-credentials"
15 | },
16 | {
17 | "shortName": "pam-auth"
18 | },
19 | {
20 | "shortName": "resource-disposer"
21 | },
22 | {
23 | "shortName": "timestamper"
24 | },
25 | {
26 | "shortName": "docker-plugin"
27 | },
28 | {
29 | "shortName": "pipeline-model-extensions"
30 | },
31 | {
32 | "shortName": "cvs"
33 | },
34 | {
35 | "shortName": "pipeline-build-step"
36 | },
37 | {
38 | "shortName": "pipeline-model-api"
39 | },
40 | {
41 | "shortName": "workflow-cps-global-lib"
42 | },
43 | {
44 | "shortName": "workflow-job"
45 | },
46 | {
47 | "shortName": "analysis-core"
48 | },
49 | {
50 | "shortName": "ws-cleanup"
51 | },
52 | {
53 | "shortName": "branch-api"
54 | },
55 | {
56 | "shortName": "maven-plugin"
57 | },
58 | {
59 | "shortName": "matrix-auth"
60 | },
61 | {
62 | "shortName": "git-server"
63 | },
64 | {
65 | "shortName": "github-api"
66 | },
67 | {
68 | "shortName": "antisamy-markup-formatter"
69 | },
70 | {
71 | "shortName": "ownership"
72 | },
73 | {
74 | "shortName": "build-view-column"
75 | },
76 | {
77 | "shortName": "command-launcher"
78 | },
79 | {
80 | "shortName": "handlebars"
81 | },
82 | {
83 | "shortName": "git"
84 | },
85 | {
86 | "shortName": "gradle"
87 | },
88 | {
89 | "shortName": "jsch"
90 | },
91 | {
92 | "shortName": "workflow-scm-step"
93 | },
94 | {
95 | "shortName": "vstestrunner"
96 | },
97 | {
98 | "shortName": "apache-httpcomponents-client-4-api"
99 | },
100 | {
101 | "shortName": "pipeline-input-step"
102 | },
103 | {
104 | "shortName": "pipeline-multibranch-defaults"
105 | },
106 | {
107 | "shortName": "jdk-tool"
108 | },
109 | {
110 | "shortName": "external-monitor-job"
111 | },
112 | {
113 | "shortName": "mailer"
114 | },
115 | {
116 | "shortName": "ant"
117 | },
118 | {
119 | "shortName": "nant"
120 | },
121 | {
122 | "shortName": "workflow-api"
123 | },
124 | {
125 | "shortName": "pipeline-model-declarative-agent"
126 | },
127 | {
128 | "shortName": "github-organization-folder"
129 | },
130 | {
131 | "shortName": "pipeline-github-lib"
132 | },
133 | {
134 | "shortName": "token-macro"
135 | },
136 | {
137 | "shortName": "git-client"
138 | },
139 | {
140 | "shortName": "jackson2-api"
141 | },
142 | {
143 | "shortName": "ssh-credentials"
144 | },
145 | {
146 | "shortName": "cloudbees-folder"
147 | },
148 | {
149 | "shortName": "job-restrictions"
150 | },
151 | {
152 | "shortName": "gerrit-trigger"
153 | },
154 | {
155 | "shortName": "build-timeout"
156 | },
157 | {
158 | "shortName": "email-ext"
159 | },
160 | {
161 | "shortName": "workflow-basic-steps"
162 | },
163 | {
164 | "shortName": "mapdb-api"
165 | },
166 | {
167 | "shortName": "mock-slave"
168 | },
169 | {
170 | "shortName": "matrix-project"
171 | },
172 | {
173 | "shortName": "durable-task"
174 | },
175 | {
176 | "shortName": "subversion"
177 | },
178 | {
179 | "shortName": "mstest"
180 | },
181 | {
182 | "shortName": "javadoc"
183 | },
184 | {
185 | "shortName": "pipeline-stage-step"
186 | },
187 | {
188 | "shortName": "display-url-api"
189 | },
190 | {
191 | "shortName": "junit"
192 | },
193 | {
194 | "shortName": "cloud-stats"
195 | },
196 | {
197 | "shortName": "pipeline-milestone-step"
198 | },
199 | {
200 | "shortName": "synopsys-coverity"
201 | },
202 | {
203 | "shortName": "workflow-aggregator"
204 | },
205 | {
206 | "shortName": "ldap"
207 | },
208 | {
209 | "shortName": "momentjs"
210 | },
211 | {
212 | "shortName": "nodelabelparameter"
213 | },
214 | {
215 | "shortName": "jquery"
216 | },
217 | {
218 | "shortName": "authentication-tokens"
219 | },
220 | {
221 | "shortName": "workflow-multibranch"
222 | },
223 | {
224 | "shortName": "workflow-durable-task-step"
225 | },
226 | {
227 | "shortName": "script-security"
228 | },
229 | {
230 | "shortName": "ace-editor"
231 | },
232 | {
233 | "shortName": "docker-java-api"
234 | },
235 | {
236 | "shortName": "groovy-label-assignment"
237 | },
238 | {
239 | "shortName": "github-branch-source"
240 | },
241 | {
242 | "shortName": "pipeline-stage-tags-metadata"
243 | },
244 | {
245 | "shortName": "workflow-cps"
246 | },
247 | {
248 | "shortName": "config-file-provider"
249 | },
250 | {
251 | "shortName": "pipeline-graph-analysis"
252 | },
253 | {
254 | "shortName": "lockable-resources"
255 | },
256 | {
257 | "shortName": "workflow-support"
258 | },
259 | {
260 | "shortName": "vs-code-metrics"
261 | },
262 | {
263 | "shortName": "pipeline-rest-api"
264 | },
265 | {
266 | "shortName": "docker-commons"
267 | },
268 | {
269 | "shortName": "ssh-slaves"
270 | },
271 | {
272 | "shortName": "pipeline-model-definition"
273 | },
274 | {
275 | "shortName": "github"
276 | },
277 | {
278 | "shortName": "scm-api"
279 | },
280 | {
281 | "shortName": "docker-workflow"
282 | },
283 | {
284 | "shortName": "credentials"
285 | },
286 | {
287 | "shortName": "windows-slaves"
288 | },
289 | {
290 | "shortName": "pipeline-stage-view"
291 | },
292 | {
293 | "shortName": "credentials-binding"
294 | },
295 | {
296 | "shortName": "workflow-step-api"
297 | },
298 | {
299 | "shortName": "structs"
300 | },
301 | {
302 | "shortName": "openstack-cloud"
303 | },
304 | {
305 | "shortName": "multi-slave-config-plugin"
306 | }
307 | ]
308 | }
--------------------------------------------------------------------------------
/tests/unit/tests_data/queue/blockeditem.json:
--------------------------------------------------------------------------------
1 | {
2 | "_class": "hudson.model.Queue$BlockedItem",
3 | "actions": [{
4 | "_class": "hudson.model.CauseAction",
5 | "causes": [{
6 | "_class": "hudson.model.Cause$UserIdCause",
7 | "shortDescription": "Started by user joelee",
8 | "userId": "admin",
9 | "userName": "joelee"
10 | }
11 | ]
12 | }
13 | ],
14 | "blocked": true,
15 | "buildable": false,
16 | "id": 669,
17 | "inQueueSince": 1561364267921,
18 | "params": "",
19 | "stuck": false,
20 | "task": {
21 | "_class": "org.jenkinsci.plugins.workflow.job.WorkflowJob",
22 | "name": "folder/job/pipeline",
23 | "url": "http://0.0.0.0:8080/job/folder/job/pipeline/",
24 | "color": "red_anime"
25 | },
26 | "url": "queue/item/669/",
27 | "why": "Build #168 is already in progress (ETA:N/A)",
28 | "buildableStartMilliseconds": 1561364277513
29 | }
--------------------------------------------------------------------------------
/tests/unit/tests_data/queue/buildableitem.json:
--------------------------------------------------------------------------------
1 | {
2 | "_class": "hudson.model.Queue$BuildableItem",
3 | "actions": [],
4 | "blocked": false,
5 | "buildable": true,
6 | "id": 668,
7 | "inQueueSince": 1561364099799,
8 | "params": "",
9 | "stuck": true,
10 | "task": {
11 | "_class": "org.jenkinsci.plugins.workflow.support.steps.ExecutorStepExecution$PlaceholderTask"
12 | },
13 | "url": "queue/item/668/",
14 | "why": "There are no nodes with the label ‘xxxx’",
15 | "buildableStartMilliseconds": 1561364099799,
16 | "pending": false
17 | }
--------------------------------------------------------------------------------
/tests/unit/tests_data/queue/leftitem.json:
--------------------------------------------------------------------------------
1 | {
2 | "_class": "hudson.model.Queue$LeftItem",
3 | "actions": [{
4 | "_class": "hudson.model.CauseAction",
5 | "causes": [{
6 | "_class": "hudson.model.Cause$UserIdCause",
7 | "shortDescription": "Started by user joelee",
8 | "userId": "admin",
9 | "userName": "joelee"
10 | }
11 | ]
12 | }
13 | ],
14 | "blocked": false,
15 | "buildable": false,
16 | "id": 599,
17 | "inQueueSince": 1559112231788,
18 | "params": "",
19 | "stuck": false,
20 | "task": {
21 | "_class": "org.jenkinsci.plugins.workflow.job.WorkflowJob",
22 | "name": "folder/job/pipeline",
23 | "url": "http://0.0.0.0:8080/job/folder/job/pipeline/",
24 | "color": "aborted_anime"
25 | },
26 | "url": "queue/item/599/",
27 | "why": null,
28 | "cancelled": false,
29 | "executable": {
30 | "_class": "org.jenkinsci.plugins.workflow.job.WorkflowRun",
31 | "number": 54,
32 | "url": "http://0.0.0.0:8080/job/folder/job/pipeline/54/"
33 | }
34 | }
--------------------------------------------------------------------------------
/tests/unit/tests_data/queue/queue.json:
--------------------------------------------------------------------------------
1 | {
2 | "_class": "hudson.model.Queue",
3 | "discoverableItems": [],
4 | "items": [{
5 | "_class": "hudson.model.Queue$BlockedItem",
6 | "actions": [{
7 | "_class": "hudson.model.CauseAction",
8 | "causes": [{
9 | "_class": "hudson.model.Cause$UserIdCause",
10 | "shortDescription": "Started by user joelee",
11 | "userId": "admin",
12 | "userName": "joelee"
13 | }
14 | ]
15 | }
16 | ],
17 | "blocked": true,
18 | "buildable": false,
19 | "id": 669,
20 | "inQueueSince": 1561364267921,
21 | "params": "",
22 | "stuck": false,
23 | "task": {
24 | "_class": "org.jenkinsci.plugins.workflow.job.WorkflowJob",
25 | "name": "folder/job/pipeline",
26 | "url": "http://0.0.0.0:8080/job/folder/job/pipeline/",
27 | "color": "red_anime"
28 | },
29 | "url": "queue/item/669/",
30 | "why": "Build #168 is already in progress (ETA:N/A)",
31 | "buildableStartMilliseconds": 1561364277513
32 | }, {
33 | "_class": "hudson.model.Queue$BuildableItem",
34 | "actions": [],
35 | "blocked": false,
36 | "buildable": true,
37 | "id": 668,
38 | "inQueueSince": 1561364099799,
39 | "params": "",
40 | "stuck": true,
41 | "task": {
42 | "_class": "org.jenkinsci.plugins.workflow.support.steps.ExecutorStepExecution$PlaceholderTask"
43 | },
44 | "url": "queue/item/668/",
45 | "why": "There are no nodes with the label ‘xxxx’",
46 | "buildableStartMilliseconds": 1561364099799,
47 | "pending": false
48 | }
49 | ]
50 | }
--------------------------------------------------------------------------------
/tests/unit/tests_data/queue/waitingitem.json:
--------------------------------------------------------------------------------
1 | {
2 | "_class": "hudson.model.Queue$WaitingItem",
3 | "actions": [
4 | {
5 | "_class": "hudson.model.CauseAction",
6 | "causes": [
7 | {
8 | "_class": "com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.GerritCause",
9 | "shortDescription": "Triggered by"
10 | }
11 | ]
12 | },
13 | {},
14 | {},
15 | {},
16 | {
17 | "_class": "hudson.model.ParametersAction",
18 | "parameters": []
19 | }
20 | ],
21 | "blocked": false,
22 | "buildable": false,
23 | "id": 668,
24 | "inQueueSince": 1566553108796,
25 | "params": "",
26 | "stuck": false,
27 | "task": {
28 | "_class": "org.jenkinsci.plugins.workflow.job.WorkflowJob",
29 | "name": "folder/job/pipeline",
30 | "url": "http://0.0.0.0:8080/job/folder/job/pipeline/",
31 | "color": "red"
32 | },
33 | "url": "queue/item/700/",
34 | "why": "In the quiet period. Expires in 4.6 sec",
35 | "timestamp": 1566553113796
36 | }
--------------------------------------------------------------------------------
/tests/unit/tests_data/report/coverage_report.json:
--------------------------------------------------------------------------------
1 | {
2 | "_class": "hudson.plugins.jacoco.report.CoverageReport",
3 | "branchCoverage": {
4 | "covered": 244,
5 | "missed": 1588,
6 | "percentage": 13,
7 | "percentageFloat": 13.318777,
8 | "total": 1832
9 | },
10 | "classCoverage": {
11 | "covered": 38,
12 | "missed": 21,
13 | "percentage": 64,
14 | "percentageFloat": 64.406784,
15 | "total": 59
16 | },
17 | "complexityScore": {
18 | "covered": 398,
19 | "missed": 1218,
20 | "percentage": 25,
21 | "percentageFloat": 24.628712,
22 | "total": 1616
23 | },
24 | "instructionCoverage": {
25 | "covered": 4205,
26 | "missed": 9220,
27 | "percentage": 31,
28 | "percentageFloat": 31.32216,
29 | "total": 13425
30 | },
31 | "lineCoverage": {
32 | "covered": 712,
33 | "missed": 562,
34 | "percentage": 56,
35 | "percentageFloat": 55.88697,
36 | "total": 1274
37 | },
38 | "methodCoverage": {
39 | "covered": 320,
40 | "missed": 380,
41 | "percentage": 46,
42 | "percentageFloat": 45.714287,
43 | "total": 700
44 | },
45 | "previousResult": {
46 | "_class": "hudson.plugins.jacoco.report.CoverageReport"
47 | }
48 | }
--------------------------------------------------------------------------------
/tests/unit/tests_data/report/coverage_report_trend.json:
--------------------------------------------------------------------------------
1 | {
2 | "_class": "hudson.plugins.jacoco.report.CoverageReport",
3 | "branchCoverage": {
4 | "covered": 244,
5 | "missed": 1588,
6 | "percentage": 13,
7 | "percentageFloat": 13.318777,
8 | "total": 1832
9 | },
10 | "classCoverage": {
11 | "covered": 38,
12 | "missed": 21,
13 | "percentage": 64,
14 | "percentageFloat": 64.406784,
15 | "total": 59
16 | },
17 | "complexityScore": {
18 | "covered": 398,
19 | "missed": 1218,
20 | "percentage": 25,
21 | "percentageFloat": 24.628712,
22 | "total": 1616
23 | },
24 | "instructionCoverage": {
25 | "covered": 4205,
26 | "missed": 9220,
27 | "percentage": 31,
28 | "percentageFloat": 31.32216,
29 | "total": 13425
30 | },
31 | "lineCoverage": {
32 | "covered": 712,
33 | "missed": 562,
34 | "percentage": 56,
35 | "percentageFloat": 55.88697,
36 | "total": 1274
37 | },
38 | "methodCoverage": {
39 | "covered": 320,
40 | "missed": 380,
41 | "percentage": 46,
42 | "percentageFloat": 45.714287,
43 | "total": 700
44 | },
45 | "previousResult": {
46 | "_class": "hudson.plugins.jacoco.report.CoverageReport",
47 | "branchCoverage": {
48 | "covered": 244,
49 | "missed": 1588,
50 | "percentage": 13,
51 | "percentageFloat": 13.318777,
52 | "total": 1832
53 | },
54 | "classCoverage": {
55 | "covered": 38,
56 | "missed": 21,
57 | "percentage": 64,
58 | "percentageFloat": 64.406784,
59 | "total": 59
60 | },
61 | "complexityScore": {
62 | "covered": 398,
63 | "missed": 1218,
64 | "percentage": 25,
65 | "percentageFloat": 24.628712,
66 | "total": 1616
67 | },
68 | "instructionCoverage": {
69 | "covered": 4205,
70 | "missed": 9220,
71 | "percentage": 31,
72 | "percentageFloat": 31.32216,
73 | "total": 13425
74 | },
75 | "lineCoverage": {
76 | "covered": 712,
77 | "missed": 562,
78 | "percentage": 56,
79 | "percentageFloat": 55.88697,
80 | "total": 1274
81 | },
82 | "methodCoverage": {
83 | "covered": 320,
84 | "missed": 380,
85 | "percentage": 46,
86 | "percentageFloat": 45.714287,
87 | "total": 700
88 | },
89 | "previousResult": {
90 | "_class": "hudson.plugins.jacoco.report.CoverageReport",
91 | "branchCoverage": {
92 | "covered": 0,
93 | "missed": 1820,
94 | "percentage": 0,
95 | "percentageFloat": 0,
96 | "total": 1820
97 | },
98 | "classCoverage": {
99 | "covered": 0,
100 | "missed": 59,
101 | "percentage": 0,
102 | "percentageFloat": 0,
103 | "total": 59
104 | },
105 | "complexityScore": {
106 | "covered": 0,
107 | "missed": 1605,
108 | "percentage": 0,
109 | "percentageFloat": 0,
110 | "total": 1605
111 | },
112 | "instructionCoverage": {
113 | "covered": 0,
114 | "missed": 13339,
115 | "percentage": 0,
116 | "percentageFloat": 0,
117 | "total": 13339
118 | },
119 | "lineCoverage": {
120 | "covered": 0,
121 | "missed": 1256,
122 | "percentage": 0,
123 | "percentageFloat": 0,
124 | "total": 1256
125 | },
126 | "methodCoverage": {
127 | "covered": 0,
128 | "missed": 695,
129 | "percentage": 0,
130 | "percentageFloat": 0,
131 | "total": 695
132 | },
133 | "previousResult": null
134 | }
135 | }
136 | }
--------------------------------------------------------------------------------
/tests/unit/tests_data/report/coverage_result.json:
--------------------------------------------------------------------------------
1 | {
2 | "_class": "io.jenkins.plugins.coverage.targets.CoverageResult",
3 | "results": {
4 | "children": [
5 | {}
6 | ],
7 | "elements": [
8 | {
9 | "denominator": 1,
10 | "name": "Report",
11 | "numerator": 1,
12 | "ratio": 100
13 | },
14 | {
15 | "denominator": 1,
16 | "name": "Directory",
17 | "numerator": 1,
18 | "ratio": 100
19 | },
20 | {
21 | "denominator": 19,
22 | "name": "File",
23 | "numerator": 18,
24 | "ratio": 94.73684
25 | },
26 | {
27 | "denominator": 866,
28 | "name": "Line",
29 | "numerator": 726,
30 | "ratio": 83.83372
31 | }
32 | ],
33 | "name": "All reports"
34 | }
35 | }
--------------------------------------------------------------------------------
/tests/unit/tests_data/report/coverage_trends.json:
--------------------------------------------------------------------------------
1 | {
2 | "_class": "io.jenkins.plugins.coverage.targets.CoverageTrendTree",
3 | "children": [
4 | {
5 | "children": [
6 | {}
7 | ],
8 | "name": "istanbul: cov.xml",
9 | "trends": [
10 | {},
11 | {}
12 | ]
13 | }
14 | ],
15 | "name": "All reports",
16 | "trends": [
17 | {
18 | "buildName": "#5",
19 | "elements": [
20 | {
21 | "denominator": 1,
22 | "name": "Report",
23 | "numerator": 1,
24 | "ratio": 100
25 | },
26 | {
27 | "denominator": 1,
28 | "name": "Directory",
29 | "numerator": 1,
30 | "ratio": 100
31 | },
32 | {
33 | "denominator": 19,
34 | "name": "File",
35 | "numerator": 18,
36 | "ratio": 94.73684
37 | },
38 | {
39 | "denominator": 866,
40 | "name": "Line",
41 | "numerator": 726,
42 | "ratio": 83.83372
43 | }
44 | ]
45 | },
46 | {
47 | "buildName": "#3",
48 | "elements": [
49 | {
50 | "denominator": 1,
51 | "name": "Report",
52 | "numerator": 1,
53 | "ratio": 100
54 | },
55 | {
56 | "denominator": 1,
57 | "name": "Directory",
58 | "numerator": 1,
59 | "ratio": 100
60 | },
61 | {
62 | "denominator": 19,
63 | "name": "File",
64 | "numerator": 18,
65 | "ratio": 94.73684
66 | },
67 | {
68 | "denominator": 866,
69 | "name": "Line",
70 | "numerator": 726,
71 | "ratio": 83.83372
72 | }
73 | ]
74 | }
75 | ]
76 | }
--------------------------------------------------------------------------------
/tests/unit/tests_data/report/test_report.json:
--------------------------------------------------------------------------------
1 | {
2 | "_class": "hudson.tasks.junit.TestResult",
3 | "testActions": [],
4 | "duration": 74.678,
5 | "empty": false,
6 | "failCount": 2,
7 | "passCount": 37,
8 | "skipCount": 0,
9 | "suites": [
10 | {
11 | "cases": [
12 | {
13 | "testActions": [],
14 | "age": 0,
15 | "className": "tests.integration.test_jenkins.TestJenkins",
16 | "duration": 0.645,
17 | "errorDetails": null,
18 | "errorStackTrace": null,
19 | "failedSince": 0,
20 | "name": "test_exists",
21 | "skipped": false,
22 | "skippedMessage": null,
23 | "status": "PASSED",
24 | "stderr": null,
25 | "stdout": null
26 | }
27 | ],
28 | "duration": 74.678,
29 | "enclosingBlockNames": [],
30 | "enclosingBlocks": [],
31 | "id": null,
32 | "name": "pytest",
33 | "nodeId": null,
34 | "stderr": null,
35 | "stdout": null,
36 | "timestamp": "2021-02-22T17:33:40.266004"
37 | }
38 | ]
39 | }
--------------------------------------------------------------------------------
/tests/unit/tests_data/run/freestylebuild.json:
--------------------------------------------------------------------------------
1 | {
2 | "_class": "hudson.model.FreeStyleBuild",
3 | "actions": [
4 | {
5 | "_class": "hudson.model.ParametersAction",
6 | "parameters": [
7 | {
8 | "_class": "hudson.model.StringParameterValue",
9 | "name": "arg",
10 | "value": "value1"
11 | }
12 | ]
13 | },
14 | {
15 | "_class": "hudson.model.CauseAction",
16 | "causes": [
17 | {
18 | "_class": "hudson.model.Cause$UserIdCause",
19 | "shortDescription": "Started by user admin",
20 | "userId": "admin",
21 | "userName": "admin"
22 | }
23 | ]
24 | },
25 | {},
26 | {},
27 | {}
28 | ],
29 | "artifacts": [],
30 | "building": false,
31 | "description": null,
32 | "displayName": "#14",
33 | "duration": 599334,
34 | "estimatedDuration": 599335,
35 | "executor": null,
36 | "fullDisplayName": "freestylejob #14",
37 | "id": "14",
38 | "keepLog": false,
39 | "number": 14,
40 | "queueId": 151,
41 | "result": "SUCCESS",
42 | "timestamp": 1619167515987,
43 | "url": "http://0.0.0.0:8080/job/freestylejob/14/",
44 | "builtOn": "",
45 | "changeSet": {
46 | "_class": "hudson.scm.EmptyChangeLogSet",
47 | "items": [],
48 | "kind": null
49 | },
50 | "culprits": []
51 | }
--------------------------------------------------------------------------------
/tests/unit/tests_data/run/workflowrun.json:
--------------------------------------------------------------------------------
1 | {
2 | "_class": "org.jenkinsci.plugins.workflow.job.WorkflowRun",
3 | "actions": [
4 | {
5 | "_class": "hudson.model.CauseAction",
6 | "causes": [
7 | {
8 | "_class": "hudson.model.Cause$UserIdCause",
9 | "shortDescription": "Started by user admin",
10 | "userId": "admin",
11 | "userName": "admin"
12 | },
13 | {
14 | "_class": "org.jenkinsci.plugins.workflow.cps.replay.ReplayCause",
15 | "shortDescription": "Replayed #1"
16 | }
17 | ]
18 | },
19 | {
20 | "_class": "hudson.model.ParametersAction",
21 | "parameters": [
22 | {
23 | "_class": "hudson.model.StringParameterValue",
24 | "name": "parameter1",
25 | "value": "value1"
26 | },
27 | {
28 | "_class": "hudson.model.StringParameterValue",
29 | "name": "parameter2",
30 | "value": "value2"
31 | }
32 | ]
33 | }
34 | ],
35 | "artifacts": [],
36 | "building": false,
37 | "description": null,
38 | "displayName": "#52",
39 | "duration": 324447,
40 | "estimatedDuration": 197743,
41 | "executor": null,
42 | "fullDisplayName": "folder/job/pipeline #52",
43 | "id": "52",
44 | "keepLog": false,
45 | "number": 52,
46 | "queueId": 668,
47 | "result": "FAILURE",
48 | "timestamp": 1559281453240,
49 | "url": "http://0.0.0.0:8080/job/folder/job/pipeline/52/",
50 | "changeSets": [],
51 | "culprits": [],
52 | "nextBuild": null,
53 | "previousBuild": {
54 | "number": 51,
55 | "url": "http://0.0.0.0:8080/job/folder/job/pipeline/51/"
56 | }
57 | }
--------------------------------------------------------------------------------
/tests/unit/tests_data/view/allview.json:
--------------------------------------------------------------------------------
1 | {
2 | "_class": "hudson.model.AllView",
3 | "description": null,
4 | "jobs": [
5 | {
6 | "_class": "org.jenkinsci.plugins.workflow.job.WorkflowJob",
7 | "name": "folder/job/pipeline",
8 | "url": "http://0.0.0.0:8080/job/folder/job/pipeline/",
9 | "color": "red"
10 | },
11 | {
12 | "_class": "com.cloudbees.hudson.plugins.folder.Folder",
13 | "name": "folder",
14 | "url": "http://0.0.0.0:8080/job/folder/"
15 | }
16 | ],
17 | "name": "all",
18 | "property": [],
19 | "url": "http://http://0.0.0.0:8080/"
20 | }
--------------------------------------------------------------------------------
/tox.ini:
--------------------------------------------------------------------------------
1 | [tox]
2 | skip_missing_interpreters = True
3 | envlist = style, pylint, py3
4 |
5 |
6 | [testenv]
7 | deps = respx
8 | pytest-cov
9 | pytest-asyncio
10 | commands =
11 | pytest -v --cov=api4jenkins tests/unit \
12 | -o junit_family=xunit2 \
13 | --asyncio-mode=auto \
14 | --cov-report term \
15 | --cov-report html:tests/unit/htmlcov \
16 | --cov-report xml:tests/unit/coverage.xml
17 |
18 | [testenv:pylint]
19 | deps = pylint
20 | commands =
21 | pylint -E api4jenkins
22 |
23 | [testenv:style]
24 | deps = pycodestyle
25 | commands =
26 | pycodestyle --show-source --show-pep8 \
27 | --ignore=E501,F401,E128,E402,E731,F821 api4jenkins
28 |
29 | [testenv:integration]
30 | deps = pytest-cov
31 | pytest-asyncio
32 | pyyaml
33 | passenv = JENKINS_*
34 | commands =
35 | pytest -v --cov=api4jenkins tests/integration \
36 | --asyncio-mode=auto \
37 | --cov-report term \
38 | --cov-report html:tests/integration/htmlcov \
39 | --cov-report xml:tests/integration/coverage.xml
40 |
--------------------------------------------------------------------------------