blob: 0c56a97853705ba67aa654b156a763efe9713567 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.servicecomb.foundation.common.http;
import java.net.URISyntaxException;
import javax.ws.rs.core.MediaType;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
public class TestHttpUtils {
@Test
public void parseParamFromHeaderValue_normal() {
Assertions.assertEquals("v", HttpUtils.parseParamFromHeaderValue("xx;k=v", "k"));
}
@Test
public void parseParamFromHeaderValue_normal_ignoreCase() {
Assertions.assertEquals("v", HttpUtils.parseParamFromHeaderValue("xx;K=v", "k"));
}
@Test
public void parseParamFromHeaderValue_null() {
Assertions.assertNull(HttpUtils.parseParamFromHeaderValue(null, "k"));
}
@Test
public void parseParamFromHeaderValue_noKv() {
Assertions.assertNull(HttpUtils.parseParamFromHeaderValue("xx", "k"));
}
@Test
public void parseParamFromHeaderValue_noV() {
Assertions.assertEquals("", HttpUtils.parseParamFromHeaderValue("xx;k=", "k"));
}
@Test
public void parseParamFromHeaderValue_keyNotFound() {
Assertions.assertNull(HttpUtils.parseParamFromHeaderValue("xx;k=", "kk"));
}
@Test
public void uriEncode_null() {
Assertions.assertEquals("", HttpUtils.uriEncodePath(null));
}
@Test
public void uriDecode_null() {
Assertions.assertNull(HttpUtils.uriDecodePath(null));
}
@Test
public void uriEncode_chineseAndSpace() {
String encoded = HttpUtils.uriEncodePath("测 试");
Assertions.assertEquals("%E6%B5%8B%20%E8%AF%95", encoded);
Assertions.assertEquals("测 试", HttpUtils.uriDecodePath(encoded));
}
@Test
public void uriEncode_failed() {
IllegalArgumentException illegalArgumentException = Assertions.assertThrows(IllegalArgumentException.class,
() -> HttpUtils.uriEncodePath(":"));
Assertions.assertEquals("uriEncode failed, path=\":\".", illegalArgumentException.getMessage());
Assertions.assertTrue(illegalArgumentException.getCause() instanceof URISyntaxException);
}
@Test
public void uriEncode_plus() {
String encoded = HttpUtils.uriEncodePath("a+b");
Assertions.assertEquals("a+b", encoded);
Assertions.assertEquals("a+b", HttpUtils.uriDecodePath(encoded));
}
@Test
public void uriEncode_encodeEntirePath() {
String encoded = HttpUtils.uriEncodePath("a%%'+b/def");
Assertions.assertEquals("a%25%25'+b/def", encoded);
}
@Test
public void pathParamEncode() {
Assertions.assertEquals("a+b", HttpUtils.encodePathParam("a+b"));
Assertions.assertEquals("a%25b", HttpUtils.encodePathParam("a%b"));
Assertions.assertEquals("a%25%25b", HttpUtils.encodePathParam("a%%b"));
Assertions.assertEquals("%3C%20%3E'%22%EF%BC%88)&%2F%20%20", HttpUtils.encodePathParam("< >'\"()&/ "));
Assertions.assertEquals("%E6%B5%8B%20%E8%AF%95", HttpUtils.encodePathParam("测 试"));
}
/**
* SafeChar: the characters that are not encoded.
* This test is to show those safe chars excepting 0..9, a..z and A..Z
*/
@Test
public void pathParamEncode_SafeChar() {
Assertions.assertEquals("-._~!$'()*,;&=@:+", HttpUtils.encodePathParam("-._~!$'()*,;&=@:+"));
}
@Test
public void uriDecode_failed() {
IllegalArgumentException illegalArgumentException = Assertions.assertThrows(IllegalArgumentException.class,
() -> HttpUtils.uriDecodePath(":"));
Assertions.assertEquals("uriDecode failed, path=\":\".", illegalArgumentException.getMessage());
Assertions.assertTrue(illegalArgumentException.getCause() instanceof URISyntaxException);
}
@Test
public void parseFileNameFromHeaderValue() {
String fileName = "测 试.txt";
String encoded = HttpUtils.uriEncodePath(fileName);
Assertions.assertEquals(fileName, HttpUtils.parseFileNameFromHeaderValue("xx;filename=" + encoded));
}
@Test
public void parseFileNameFromHeaderValue_defaultName() {
Assertions.assertEquals("default", HttpUtils.parseFileNameFromHeaderValue("xx"));
}
@Test
public void parseFileNameFromHeaderValue_ignorePath() {
Assertions.assertEquals("a.txt", HttpUtils.parseFileNameFromHeaderValue("xx;filename=../../a.txt"));
}
@Test
public void getCharsetFromContentType_noContentType() {
String character = HttpUtils.getCharsetFromContentType(null);
Assertions.assertNull(character);
}
@Test
public void getCharsetFromContentType_noCharset() {
String character = HttpUtils.getCharsetFromContentType(MediaType.APPLICATION_JSON);
Assertions.assertNull(character);
}
@Test
public void getCharsetFromContentType_noSemicolonEnd() {
String character = HttpUtils.getCharsetFromContentType(MediaType.APPLICATION_JSON + ";charset=utf-8");
Assertions.assertEquals("utf-8", character);
}
@Test
public void getCharsetFromContentType_semicolonEnd() {
String character = HttpUtils.getCharsetFromContentType(MediaType.APPLICATION_JSON + ";charset=utf-8;");
Assertions.assertEquals("utf-8", character);
}
@Test
public void getCharsetFromContentType_needTrim() {
String character = HttpUtils.getCharsetFromContentType(MediaType.APPLICATION_JSON + ";charset= utf-8 ;");
Assertions.assertEquals("utf-8", character);
}
@Test
public void getCharsetFromContentType_quotationMarks() {
String character = HttpUtils.getCharsetFromContentType(MediaType.APPLICATION_JSON + ";charset=\"utf-8\";");
Assertions.assertEquals("utf-8", character);
}
@Test
public void getCharsetFromContentType_quotationMarks_needTrim() {
String character = HttpUtils.getCharsetFromContentType(MediaType.APPLICATION_JSON + ";charset=\" utf-8 \";");
Assertions.assertEquals("utf-8", character);
}
}