11package io .jenkins .plugins .casc ;
22
3- import static org .junit .Assert .assertEquals ;
4- import static org .junit .Assert .assertTrue ;
3+ import static org .hamcrest .MatcherAssert .assertThat ;
4+ import static org .hamcrest .Matchers .containsString ;
5+ import static org .hamcrest .Matchers .is ;
56
67import java .net .URL ;
78import jenkins .model .Jenkins ;
1112import org .junit .Rule ;
1213import org .junit .Test ;
1314import org .jvnet .hudson .test .JenkinsRule ;
14- import org .jvnet .hudson .test .JenkinsRule .WebClient ;
1515import org .jvnet .hudson .test .MockAuthorizationStrategy ;
1616
1717public class ConfigurationAsCodeApiTest {
1818
1919 @ Rule
2020 public JenkinsRule j = new JenkinsRule ();
2121
22- @ Test
23- public void testDoConfigure_RequiresPost () throws Exception {
24- WebClient wc = j .createWebClient ();
25- wc .setThrowExceptionOnFailingStatusCode (false );
26-
27- WebRequest request = new WebRequest (new URL (j .getURL (), "configuration-as-code/configure" ), HttpMethod .GET );
28- WebResponse response = wc .getPage (request ).getWebResponse ();
22+ private static final String ENDPOINT = "configuration-as-code/configure" ;
23+ private static final String YAML_CONTENT_TYPE = "application/yaml" ;
24+ private static final String ADMIN = "admin" ;
2925
30- assertTrue (response .getStatusCode () == 404 || response .getStatusCode () == 405 );
26+ private WebRequest webRequest (HttpMethod method ) throws Exception {
27+ return new WebRequest (new URL (j .getURL (), ENDPOINT ), method );
3128 }
3229
33- @ Test
34- public void testDoConfigure_Success () throws Exception {
35- WebClient wc = j .createWebClient ();
36- wc .setThrowExceptionOnFailingStatusCode (false );
30+ private WebRequest yamlPost (String requestBody ) throws Exception {
31+ WebRequest request = webRequest (HttpMethod .POST );
32+ request .setAdditionalHeader ("Content-Type" , YAML_CONTENT_TYPE );
33+ if (requestBody != null ) {
34+ request .setRequestBody (requestBody );
35+ }
36+ return request ;
37+ }
3738
39+ private void configureAdminSecurity () {
3840 j .jenkins .setSecurityRealm (j .createDummySecurityRealm ());
3941 j .jenkins .setAuthorizationStrategy (new MockAuthorizationStrategy ()
4042 .grant (Jenkins .ADMINISTER )
4143 .everywhere ()
42- .to ("admin" ));
43-
44- WebRequest request = new WebRequest (new URL (j .getURL (), "configuration-as-code/configure" ), HttpMethod .POST );
45- request .setAdditionalHeader ("Content-Type" , "application/yaml" );
46- request .setRequestBody ("jenkins:\n systemMessage: 'Webhook Success'" );
47-
48- wc .withBasicApiToken ("admin" );
44+ .to (ADMIN ));
45+ }
4946
50- WebResponse response = wc .getPage (request ).getWebResponse ();
47+ @ Test
48+ public void testDoConfigure_RequiresPost () throws Exception {
49+ try (JenkinsRule .WebClient wc = j .createWebClient ()) {
50+ wc .setThrowExceptionOnFailingStatusCode (false );
5151
52- assertEquals (200 , response .getStatusCode ());
53- assertEquals ("Webhook Success" , j .jenkins .getSystemMessage ());
52+ WebResponse response = wc .getPage (webRequest (HttpMethod .GET )).getWebResponse ();
53+ assertThat (response .getStatusCode (), is (405 ));
54+ }
5455 }
5556
5657 @ Test
57- public void testDoConfigure_InvalidYaml () throws Exception {
58- WebClient wc = j .createWebClient ();
59- wc .setThrowExceptionOnFailingStatusCode (false );
58+ public void testDoConfigure_Success () throws Exception {
59+ configureAdminSecurity ();
6060
61- j .jenkins .setSecurityRealm (j .createDummySecurityRealm ());
62- j .jenkins .setAuthorizationStrategy (new MockAuthorizationStrategy ()
63- .grant (Jenkins .ADMINISTER )
64- .everywhere ()
65- .to ("admin" ));
61+ try (JenkinsRule .WebClient wc = j .createWebClient ().withBasicApiToken (ADMIN )) {
62+ wc .setThrowExceptionOnFailingStatusCode (false );
6663
67- WebRequest request = new WebRequest (new URL (j .getURL (), "configuration-as-code/configure" ), HttpMethod .POST );
64+ WebResponse response = wc .getPage (yamlPost ("jenkins:\n systemMessage: 'Webhook Success'" ))
65+ .getWebResponse ();
6866
69- request .setAdditionalHeader ("Content-Type" , "application/yaml" );
70- request .setRequestBody ("jenkins:\n systemMessage: [invalid" );
67+ assertThat (response .getStatusCode (), is (200 ));
68+ assertThat (j .jenkins .getSystemMessage (), is ("Webhook Success" ));
69+ }
70+ }
7171
72- wc .withBasicApiToken ("admin" );
72+ @ Test
73+ public void testDoConfigure_InvalidYaml () throws Exception {
74+ configureAdminSecurity ();
75+
76+ try (JenkinsRule .WebClient wc = j .createWebClient ().withBasicApiToken (ADMIN )) {
77+ wc .setThrowExceptionOnFailingStatusCode (false );
7378
74- WebResponse response = wc .getPage (request ).getWebResponse ();
79+ WebResponse response =
80+ wc .getPage (yamlPost ("jenkins:\n systemMessage: [invalid" )).getWebResponse ();
7581
76- assertEquals (400 , response .getStatusCode ());
77- assertTrue (response .getContentAsString ().contains ("message" ));
82+ assertThat (response .getStatusCode (), is (400 ));
83+ assertThat (response .getContentAsString (), containsString ("message" ));
84+ }
7885 }
7986
8087 @ Test
8188 public void testDoConfigure_NonAdminForbidden () throws Exception {
82- WebClient wc = j .createWebClient ();
83- wc .setThrowExceptionOnFailingStatusCode (false );
84-
85- WebRequest request = new WebRequest (new URL (j .getURL (), "configuration-as-code/configure" ), HttpMethod .POST );
86- request .setRequestBody ("jenkins:\n systemMessage: 'fail'" );
87-
88- wc .withBasicApiToken ("user" );
89+ try (JenkinsRule .WebClient wc = j .createWebClient ().withBasicApiToken ("user" )) {
90+ wc .setThrowExceptionOnFailingStatusCode (false );
8991
90- WebResponse response = wc .getPage (request ).getWebResponse ();
92+ WebRequest request = webRequest (HttpMethod .POST );
93+ request .setRequestBody ("jenkins:\n systemMessage: 'fail'" );
9194
92- assertEquals (403 , response .getStatusCode ());
95+ WebResponse response = wc .getPage (request ).getWebResponse ();
96+ assertThat (response .getStatusCode (), is (403 ));
97+ }
9398 }
9499
95100 @ Test
@@ -98,89 +103,62 @@ public void testDoConfigure_Unauthenticated() throws Exception {
98103 j .jenkins .setAuthorizationStrategy (
99104 new MockAuthorizationStrategy ().grant (Jenkins .READ ).everywhere ().toEveryone ());
100105
101- WebClient wc = j .createWebClient ();
102- wc .setThrowExceptionOnFailingStatusCode (false );
106+ try ( JenkinsRule . WebClient wc = j .createWebClient ()) {
107+ wc .setThrowExceptionOnFailingStatusCode (false );
103108
104- WebRequest request = new WebRequest (new URL (j .getURL (), "configuration-as-code/configure" ), HttpMethod .POST );
109+ WebRequest request = webRequest (HttpMethod .POST );
110+ request .setRequestBody ("jenkins:\n systemMessage: 'anonymous bypass attempt'" );
105111
106- request .setRequestBody ("jenkins:\n systemMessage: 'anonymous bypass attempt'" );
107-
108- WebResponse response = wc .getPage (request ).getWebResponse ();
109-
110- assertEquals (403 , response .getStatusCode ());
112+ WebResponse response = wc .getPage (request ).getWebResponse ();
113+ assertThat (response .getStatusCode (), is (403 ));
114+ }
111115 }
112116
113117 @ Test
114118 public void testDoConfigure_EmptyBody () throws Exception {
115- j .jenkins .setSecurityRealm (j .createDummySecurityRealm ());
116- j .jenkins .setAuthorizationStrategy (new MockAuthorizationStrategy ()
117- .grant (Jenkins .ADMINISTER )
118- .everywhere ()
119- .to ("admin" ));
119+ configureAdminSecurity ();
120120
121- WebClient wc = j .createWebClient ();
121+ try (JenkinsRule .WebClient wc = j .createWebClient ().withBasicApiToken (ADMIN )) {
122+ wc .setThrowExceptionOnFailingStatusCode (false );
122123
123- wc .setThrowExceptionOnFailingStatusCode ( false );
124+ WebResponse response = wc .getPage ( yamlPost ( null )). getWebResponse ( );
124125
125- WebRequest request = new WebRequest (new URL (j .getURL (), "configuration-as-code/configure" ), HttpMethod .POST );
126- request .setAdditionalHeader ("Content-Type" , "application/yaml" );
127-
128- wc .withBasicApiToken ("admin" );
129-
130- WebResponse response = wc .getPage (request ).getWebResponse ();
131-
132- assertEquals (400 , response .getStatusCode ());
133- assertTrue (response .getContentAsString ().contains ("message" ));
126+ assertThat (response .getStatusCode (), is (400 ));
127+ assertThat (response .getContentAsString (), containsString ("message" ));
128+ }
134129 }
135130
136131 @ Test
137132 public void testDoConfigure_MalformedStructure () throws Exception {
138- WebClient wc = j .createWebClient ();
139- wc .setThrowExceptionOnFailingStatusCode (false );
140-
141- j .jenkins .setSecurityRealm (j .createDummySecurityRealm ());
142- j .jenkins .setAuthorizationStrategy (new MockAuthorizationStrategy ()
143- .grant (Jenkins .ADMINISTER )
144- .everywhere ()
145- .to ("admin" ));
133+ configureAdminSecurity ();
146134
147- WebRequest request = new WebRequest (new URL (j .getURL (), "configuration-as-code/configure" ), HttpMethod .POST );
148- request .setAdditionalHeader ("Content-Type" , "application/yaml" );
149- request .setRequestBody ("jenkins:\n invalidRoot:\n foo: bar" );
135+ try (JenkinsRule .WebClient wc = j .createWebClient ().withBasicApiToken (ADMIN )) {
136+ wc .setThrowExceptionOnFailingStatusCode (false );
150137
151- wc .withBasicApiToken ("admin" );
138+ WebResponse response = wc .getPage (yamlPost ("jenkins:\n invalidRoot:\n foo: bar" ))
139+ .getWebResponse ();
152140
153- WebResponse response = wc .getPage (request ).getWebResponse ();
154-
155- assertEquals (400 , response .getStatusCode ());
156- assertTrue (response .getContentAsString ().contains ("message" ));
141+ assertThat (response .getStatusCode (), is (400 ));
142+ assertThat (response .getContentAsString (), containsString ("message" ));
143+ }
157144 }
158145
159146 @ Test
160147 public void testDoConfigure_ValidYaml_NoChanges () throws Exception {
161- j .jenkins .setSecurityRealm (j .createDummySecurityRealm ());
162- j .jenkins .setAuthorizationStrategy (new MockAuthorizationStrategy ()
163- .grant (Jenkins .ADMINISTER )
164- .everywhere ()
165- .to ("admin" ));
166- WebClient wc = j .createWebClient ();
167- wc .withBasicApiToken ("admin" );
168- wc .setThrowExceptionOnFailingStatusCode (false );
169-
170- WebRequest request1 = new WebRequest (new URL (j .getURL (), "configuration-as-code/configure" ), HttpMethod .POST );
171- request1 .setAdditionalHeader ("Content-Type" , "application/yaml" );
172- request1 .setRequestBody ("jenkins:\n systemMessage: 'Idempotency Test'" );
173-
174- WebResponse response1 = wc .getPage (request1 ).getWebResponse ();
175- assertEquals (200 , response1 .getStatusCode ());
176- assertEquals ("Idempotency Test" , j .jenkins .getSystemMessage ());
177-
178- WebRequest request2 = new WebRequest (new URL (j .getURL (), "configuration-as-code/configure" ), HttpMethod .POST );
179- request2 .setAdditionalHeader ("Content-Type" , "application/yaml" );
180- request2 .setRequestBody ("jenkins:\n systemMessage: 'Idempotency Test'" );
181-
182- WebResponse response2 = wc .getPage (request2 ).getWebResponse ();
183- assertEquals (200 , response2 .getStatusCode ());
184- assertEquals ("Idempotency Test" , j .jenkins .getSystemMessage ());
148+ configureAdminSecurity ();
149+
150+ try (JenkinsRule .WebClient wc = j .createWebClient ().withBasicApiToken (ADMIN )) {
151+ wc .setThrowExceptionOnFailingStatusCode (false );
152+
153+ WebResponse response1 = wc .getPage (yamlPost ("jenkins:\n systemMessage: 'Idempotency Test'" ))
154+ .getWebResponse ();
155+ assertThat (response1 .getStatusCode (), is (200 ));
156+ assertThat (j .jenkins .getSystemMessage (), is ("Idempotency Test" ));
157+
158+ WebResponse response2 = wc .getPage (yamlPost ("jenkins:\n systemMessage: 'Idempotency Test'" ))
159+ .getWebResponse ();
160+ assertThat (response2 .getStatusCode (), is (200 ));
161+ assertThat (j .jenkins .getSystemMessage (), is ("Idempotency Test" ));
162+ }
185163 }
186164}
0 commit comments