View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *      http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  package org.apache.juneau.rest.annotation;
18  
19  import org.apache.juneau.*;
20  import org.apache.juneau.http.header.*;
21  import org.apache.juneau.rest.httppart.*;
22  import org.apache.juneau.rest.mock.*;
23  import org.junit.jupiter.api.*;
24  
25  class Rest_AllowedHeaderParams_Test extends TestBase {
26  
27  	//------------------------------------------------------------------------------------------------------------------
28  	// @Rest(allowedHeaderParams)
29  	//------------------------------------------------------------------------------------------------------------------
30  
31  	public static class A {
32  		@RestOp
33  		public String put(RequestHeaders h) {
34  			var accept = h.get("Accept").as(Accept.class).orElse(Accept.NULL);
35  			var contentType = h.get("Content-Type").as(ContentType.class).orElse(ContentType.NULL);
36  			return "Accept="+(accept.isPresent() ? accept.get() : null)+"; Content-Type=" + (contentType.isPresent() ? contentType.get() : null) + "; Custom=" + h.get("Custom").orElse(null);
37  		}
38  	}
39  
40  	@Rest() /* Default is allowedHeaderParams="Accept, Content-Type" */
41  	public static class A1 extends A {}
42  
43  	@Rest(allowedHeaderParams="Accept, Content-Type")
44  	public static class A2 extends A {}
45  
46  	@Rest(allowedHeaderParams="ACCEPT, CONTENT-TYPE")
47  	public static class A3 extends A {}
48  
49  	@Rest(allowedHeaderParams="Custom")
50  	public static class A4 extends A {}
51  
52  	@Rest(allowedHeaderParams="*")
53  	public static class A5 extends A {}
54  
55  	@Rest(allowedHeaderParams="NONE")
56  	public static class A6 extends A {}
57  
58  	@Rest(allowedHeaderParams="None")
59  	public static class A7 extends A {}
60  
61  	@Rest(allowedHeaderParams="None")
62  	public static class A8 extends A5 {}
63  
64  	@Test void a01_basic() throws Exception {
65  		var a1 = MockRestClient.build(A1.class);
66  		a1.put("/", "").accept("text/plain+foo1").contentType("text/plain+foo2").header("Custom", "foo3").run().assertContent("Accept=text/plain+foo1; Content-Type=text/plain+foo2; Custom=foo3");
67  		a1.put("/?Accept=text/plain%2Bbar1&Content-Type=text/plain%2Bbar2&Custom=bar3", "").accept("text/plain+foo1").contentType("text/plain+foo2").header("Custom", "foo3").run().assertContent("Accept=text/plain+foo1, text/plain+bar1; Content-Type=text/plain+foo2, text/plain+bar2; Custom=foo3");
68  		a1.put("/?ACCEPT=text/plain%2Bbar1&CONTENT-TYPE=text/plain%2Bbar2&CUSTOM=bar3", "").accept("text/plain+foo1").contentType("text/plain+foo2").header("Custom", "foo3").run().assertContent("Accept=text/plain+foo1, text/plain+bar1; Content-Type=text/plain+foo2, text/plain+bar2; Custom=foo3");
69  
70  		var a2 = MockRestClient.build(A2.class);
71  		a2.put("/", "").accept("text/plain+foo1").contentType("text/plain+foo2").header("Custom", "foo3").run().assertContent("Accept=text/plain+foo1; Content-Type=text/plain+foo2; Custom=foo3");
72  		a2.put("/?Accept=text/plain%2Bbar1&Content-Type=text/plain%2Bbar2&Custom=bar3", "").accept("text/plain+foo1").contentType("text/plain+foo2").header("Custom", "foo3").run().assertContent("Accept=text/plain+foo1, text/plain+bar1; Content-Type=text/plain+foo2, text/plain+bar2; Custom=foo3");
73  		a2.put("/?ACCEPT=text/plain%2Bbar1&CONTENT-TYPE=text/plain%2Bbar2&CUSTOM=bar3", "").accept("text/plain+foo1").contentType("text/plain+foo2").header("Custom", "foo3").run().assertContent("Accept=text/plain+foo1, text/plain+bar1; Content-Type=text/plain+foo2, text/plain+bar2; Custom=foo3");
74  
75  		var a3 = MockRestClient.build(A3.class);
76  		a3.put("/", "").accept("text/plain+foo1").contentType("text/plain+foo2").header("Custom", "foo3").run().assertContent("Accept=text/plain+foo1; Content-Type=text/plain+foo2; Custom=foo3");
77  		a3.put("/?Accept=text/plain%2Bbar1&Content-Type=text/plain%2Bbar2&Custom=bar3", "").accept("text/plain+foo1").contentType("text/plain+foo2").header("Custom", "foo3").run().assertContent("Accept=text/plain+foo1, text/plain+bar1; Content-Type=text/plain+foo2, text/plain+bar2; Custom=foo3");
78  		a3.put("/?ACCEPT=text/plain%2Bbar1&CONTENT-TYPE=text/plain%2Bbar2&CUSTOM=bar3", "").accept("text/plain+foo1").contentType("text/plain+foo2").header("Custom", "foo3").run().assertContent("Accept=text/plain+foo1, text/plain+bar1; Content-Type=text/plain+foo2, text/plain+bar2; Custom=foo3");
79  
80  		var a4 = MockRestClient.build(A4.class);
81  		a4.put("/", "").accept("text/plain+foo1").contentType("text/plain+foo2").header("Custom", "foo3").run().assertContent("Accept=text/plain+foo1; Content-Type=text/plain+foo2; Custom=foo3");
82  		a4.put("/?Accept=text/plain%2Bbar1&Content-Type=text/plain%2Bbar2&Custom=bar3", "").accept("text/plain+foo1").contentType("text/plain+foo2").header("Custom", "foo3").run().assertContent("Accept=text/plain+foo1; Content-Type=text/plain+foo2; Custom=foo3, bar3");
83  		a4.put("/?ACCEPT=text/plain%2Bbar1&CONTENT-TYPE=text/plain%2Bbar2&CUSTOM=bar3", "").accept("text/plain+foo1").contentType("text/plain+foo2").header("Custom", "foo3").run().assertContent("Accept=text/plain+foo1; Content-Type=text/plain+foo2; Custom=foo3, bar3");
84  
85  		var a5 = MockRestClient.build(A5.class);
86  		a5.put("/", "").accept("text/plain+foo1").contentType("text/plain+foo2").header("Custom", "foo3").run().assertContent("Accept=text/plain+foo1; Content-Type=text/plain+foo2; Custom=foo3");
87  		a5.put("/?Accept=text/plain%2Bbar1&Content-Type=text/plain%2Bbar2&Custom=bar3", "").accept("text/plain+foo1").contentType("text/plain+foo2").header("Custom", "foo3").run().assertContent("Accept=text/plain+foo1, text/plain+bar1; Content-Type=text/plain+foo2, text/plain+bar2; Custom=foo3, bar3");
88  		a5.put("/?ACCEPT=text/plain%2Bbar1&CONTENT-TYPE=text/plain%2Bbar2&CUSTOM=bar3", "").accept("text/plain+foo1").contentType("text/plain+foo2").header("Custom", "foo3").run().assertContent("Accept=text/plain+foo1, text/plain+bar1; Content-Type=text/plain+foo2, text/plain+bar2; Custom=foo3, bar3");
89  
90  		var a6 = MockRestClient.build(A6.class);
91  		a6.put("/", "").accept("text/plain+foo1").contentType("text/plain+foo2").header("Custom", "foo3").run().assertContent("Accept=text/plain+foo1; Content-Type=text/plain+foo2; Custom=foo3");
92  		a6.put("/?Accept=text/plain%2Bbar1&Content-Type=text/plain%2Bbar2&Custom=bar3", "").accept("text/plain+foo1").contentType("text/plain+foo2").header("Custom", "foo3").run().assertContent("Accept=text/plain+foo1; Content-Type=text/plain+foo2; Custom=foo3");
93  		a6.put("/?ACCEPT=text/plain%2Bbar1&CONTENT-TYPE=text/plain%2Bbar2&CUSTOM=bar3", "").accept("text/plain+foo1").contentType("text/plain+foo2").header("Custom", "foo3").run().assertContent("Accept=text/plain+foo1; Content-Type=text/plain+foo2; Custom=foo3");
94  
95  		var a7 = MockRestClient.build(A7.class);
96  		a7.put("/", "").accept("text/plain+foo1").contentType("text/plain+foo2").header("Custom", "foo3").run().assertContent("Accept=text/plain+foo1; Content-Type=text/plain+foo2; Custom=foo3");
97  		a7.put("/?Accept=text/plain%2Bbar1&Content-Type=text/plain%2Bbar2&Custom=bar3", "").accept("text/plain+foo1").contentType("text/plain+foo2").header("Custom", "foo3").run().assertContent("Accept=text/plain+foo1; Content-Type=text/plain+foo2; Custom=foo3");
98  		a7.put("/?ACCEPT=text/plain%2Bbar1&CONTENT-TYPE=text/plain%2Bbar2&CUSTOM=bar3", "").accept("text/plain+foo1").contentType("text/plain+foo2").header("Custom", "foo3").run().assertContent("Accept=text/plain+foo1; Content-Type=text/plain+foo2; Custom=foo3");
99  
100 		var a8 = MockRestClient.build(A8.class);
101 		a8.put("/", "").accept("text/plain+foo1").contentType("text/plain+foo2").header("Custom", "foo3").run().assertContent("Accept=text/plain+foo1; Content-Type=text/plain+foo2; Custom=foo3");
102 		a8.put("/?Accept=text/plain%2Bbar1&Content-Type=text/plain%2Bbar2&Custom=bar3", "").accept("text/plain+foo1").contentType("text/plain+foo2").header("Custom", "foo3").run().assertContent("Accept=text/plain+foo1; Content-Type=text/plain+foo2; Custom=foo3");
103 		a8.put("/?ACCEPT=text/plain%2Bbar1&CONTENT-TYPE=text/plain%2Bbar2&CUSTOM=bar3", "").accept("text/plain+foo1").contentType("text/plain+foo2").header("Custom", "foo3").run().assertContent("Accept=text/plain+foo1; Content-Type=text/plain+foo2; Custom=foo3");
104 	}
105 }