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.common.utils.*;
21  import org.apache.juneau.encoders.*;
22  import org.apache.juneau.http.annotation.*;
23  import org.apache.juneau.http.header.*;
24  import org.apache.juneau.rest.mock.*;
25  import org.junit.jupiter.api.*;
26  
27  class Rest_Encoders_Test extends TestBase {
28  
29  	//------------------------------------------------------------------------------------------------------------------
30  	// Setup classes
31  	//------------------------------------------------------------------------------------------------------------------
32  
33  	public static class MyEncoder extends GzipEncoder {
34  		@Override /* ConfigEncoder */
35  		public String[] getCodings() {
36  			return new String[]{"mycoding"};
37  		}
38  	}
39  
40  	//------------------------------------------------------------------------------------------------------------------
41  	// Test with no compression enabled.
42  	//------------------------------------------------------------------------------------------------------------------
43  
44  	@Rest
45  	public static class A {
46  		@RestOp
47  		public String put(@Content String in) {
48  			return in;
49  		}
50  	}
51  
52  	@Test void a01_noCompression() throws Exception {
53  		var a = MockRestClient.buildLax(A.class);
54  		a.put("/", "foo").run().assertContent("foo");
55  		a.put("/", "foo").header(ContentEncoding.of("")).run().assertContent("foo");
56  		a.put("/", "foo").header(ContentEncoding.of("identity")).run().assertContent("foo");
57  		a.put("?noTrace=true", StringUtils.compress("foo")).header(ContentEncoding.of("mycoding")).run()
58  			.assertStatus(415)
59  			.assertContent().isContains(
60  				"Unsupported encoding in request header 'Content-Encoding': 'mycoding'",
61  				"Supported codings: ['identity']"
62  			);
63  	}
64  
65  	//------------------------------------------------------------------------------------------------------------------
66  	// Test with compression enabled.
67  	//------------------------------------------------------------------------------------------------------------------
68  
69  	@Rest(encoders=MyEncoder.class)
70  	public static class B {
71  		@RestOp
72  		public String put(@Content String in) {
73  			return in;
74  		}
75  	}
76  
77  	@Test void b01_withCompression() throws Exception {
78  		var b = MockRestClient.build(B.class);
79  		b.put("/", "foo")
80  			.run()
81  			.assertContent("foo");
82  		b.put("/", "foo")
83  			.header(ContentEncoding.of(""))
84  			.run()
85  			.assertContent("foo");
86  		b.put("/", "foo")
87  			.header(ContentEncoding.of("identity"))
88  			.run()
89  			.assertContent("foo");
90  	}
91  }