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 }