blob: 294283fa0fc1381065db1ad27ec92445229c9b93 [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.olingo.server.core.deserializer.batch;
import static org.junit.Assert.*;
import java.util.ArrayList;
import java.util.List;
import org.apache.olingo.commons.api.http.HttpHeader;
import org.apache.olingo.server.core.deserializer.batch.BatchParserCommon;
import org.apache.olingo.server.core.deserializer.batch.Header;
import org.apache.olingo.server.core.deserializer.batch.Line;
import org.junit.Test;
public class BatchParserCommonTest {
private static final String CRLF = "\r\n";
@Test
public void testMultipleHeader() throws Exception {
String[] messageRaw = new String[] {
"Content-Id: 1" + CRLF,
"Content-Id: 2" + CRLF,
"content-type: Application/http" + CRLF,
"content-transfer-encoding: Binary" + CRLF
};
List<Line> message = toLineList(messageRaw);
final Header header = BatchParserCommon.consumeHeaders(message);
assertNotNull(header);
final List<String> contentIdHeaders = header.getHeaders(BatchParserCommon.HTTP_CONTENT_ID);
assertNotNull(contentIdHeaders);
assertEquals(2, contentIdHeaders.size());
assertEquals("1", contentIdHeaders.get(0));
assertEquals("2", contentIdHeaders.get(1));
}
@Test
public void testMultipleHeaderSameValue() throws Exception {
String[] messageRaw = new String[] {
"Content-Id: 1" + CRLF,
"Content-Id: 1" + CRLF,
"content-type: Application/http" + CRLF,
"content-transfer-encoding: Binary" + CRLF
};
List<Line> message = toLineList(messageRaw);
final Header header = BatchParserCommon.consumeHeaders(message);
assertNotNull(header);
final List<String> contentIdHeaders = header.getHeaders(BatchParserCommon.HTTP_CONTENT_ID);
assertNotNull(contentIdHeaders);
assertEquals(1, contentIdHeaders.size());
assertEquals("1", contentIdHeaders.get(0));
}
@Test
public void testHeaderSperatedByComma() throws Exception {
String[] messageRaw = new String[] {
"Content-Id: 1" + CRLF,
"Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11" + CRLF,
"content-type: Application/http" + CRLF,
"content-transfer-encoding: Binary" + CRLF
};
List<Line> message = toLineList(messageRaw);
final Header header = BatchParserCommon.consumeHeaders(message);
assertNotNull(header);
final List<String> upgradeHeader = header.getHeaders("upgrade");
assertNotNull(upgradeHeader);
assertEquals(4, upgradeHeader.size());
assertEquals("HTTP/2.0", upgradeHeader.get(0));
assertEquals("SHTTP/1.3", upgradeHeader.get(1));
assertEquals("IRC/6.9", upgradeHeader.get(2));
assertEquals("RTA/x11", upgradeHeader.get(3));
}
@Test
public void testMultipleAcceptHeader() throws Exception {
String[] messageRaw = new String[] {
"Accept: application/atomsvc+xml;q=0.8, application/json;odata=verbose;q=0.5, */*;q=0.1" + CRLF,
"Accept: text/plain;q=0.3" + CRLF,
"Accept-Language:en-US,en;q=0.7,en-UK;q=0.9" + CRLF,
"content-type: Application/http" + CRLF,
"content-transfer-encoding: Binary" + CRLF
};
List<Line> message = toLineList(messageRaw);
final Header header = BatchParserCommon.consumeHeaders(message);
assertNotNull(header);
final List<String> acceptHeader = header.getHeaders(HttpHeader.ACCEPT);
assertNotNull(acceptHeader);
assertEquals(4, acceptHeader.size());
}
@Test
public void testMultipleAcceptHeaderSameValue() throws Exception {
String[] messageRaw = new String[] {
"Accept: application/atomsvc+xml;q=0.8, application/json;odata=verbose;q=0.5, */*;q=0.1" + CRLF,
"Accept: application/atomsvc+xml;q=0.8" + CRLF,
"Accept-Language:en-US,en;q=0.7,en-UK;q=0.9" + CRLF,
"content-type: Application/http" + CRLF,
"content-transfer-encoding: Binary" + CRLF
};
List<Line> message = toLineList(messageRaw);
final Header header = BatchParserCommon.consumeHeaders(message);
assertNotNull(header);
final List<String> acceptHeader = header.getHeaders(HttpHeader.ACCEPT);
assertNotNull(acceptHeader);
assertEquals(3, acceptHeader.size());
}
@Test
public void testMultipleAccepLanguagetHeader() throws Exception {
String[] messageRaw = new String[] {
"Accept-Language:en-US,en;q=0.7,en-UK;q=0.9" + CRLF,
"Accept-Language: de-DE;q=0.3" + CRLF,
"content-type: Application/http" + CRLF,
"content-transfer-encoding: Binary" + CRLF
};
List<Line> message = toLineList(messageRaw);
final Header header = BatchParserCommon.consumeHeaders(message);
assertNotNull(header);
final List<String> acceptLanguageHeader = header.getHeaders(HttpHeader.ACCEPT_LANGUAGE);
assertNotNull(acceptLanguageHeader);
assertEquals(4, acceptLanguageHeader.size());
}
@Test
public void testMultipleAccepLanguagetHeaderSameValue() throws Exception {
String[] messageRaw = new String[] {
"Accept-Language:en-US,en;q=0.7,en-UK;q=0.9" + CRLF,
"Accept-Language:en-US,en;q=0.7" + CRLF,
"content-type: Application/http" + CRLF,
"content-transfer-encoding: Binary" + CRLF
};
List<Line> message = toLineList(messageRaw);
final Header header = BatchParserCommon.consumeHeaders(message);
assertNotNull(header);
final List<String> acceptLanguageHeader = header.getHeaders(HttpHeader.ACCEPT_LANGUAGE);
assertNotNull(acceptLanguageHeader);
assertEquals(3, acceptLanguageHeader.size());
}
@Test
public void testRemoveEndingCRLF() {
String line = "Test\r\n";
assertEquals("Test", BatchParserCommon.removeEndingCRLF(new Line(line,1)).toString());
}
@Test
public void testRemoveLastEndingCRLF() {
String line = "Test\r\n\r\n";
assertEquals("Test\r\n", BatchParserCommon.removeEndingCRLF(new Line(line,1)).toString());
}
@Test
public void testRemoveEndingCRLFWithWS() {
String line = "Test\r\n ";
assertEquals("Test", BatchParserCommon.removeEndingCRLF(new Line(line,1)).toString());
}
@Test
public void testRemoveEndingCRLFNothingToRemove() {
String line = "Hallo\r\nBla";
assertEquals("Hallo\r\nBla", BatchParserCommon.removeEndingCRLF(new Line(line,1)).toString());
}
@Test
public void testRemoveEndingCRLFAll() {
String line = "\r\n";
assertEquals("", BatchParserCommon.removeEndingCRLF(new Line(line,1)).toString());
}
@Test
public void testRemoveEndingCRLFSpace() {
String line = "\r\n ";
assertEquals("", BatchParserCommon.removeEndingCRLF(new Line(line,1)).toString());
}
@Test
public void testRemoveLastEndingCRLFWithWS() {
String line = "Test \r\n";
assertEquals("Test ", BatchParserCommon.removeEndingCRLF(new Line(line,1)).toString());
}
@Test
public void testRemoveLastEndingCRLFWithWSLong() {
String line = "Test \r\nTest2 \r\n";
assertEquals("Test \r\nTest2 ", BatchParserCommon.removeEndingCRLF(new Line(line,1)).toString());
}
private List<Line> toLineList(String[] messageRaw) {
final List<Line> lineList = new ArrayList<Line>();
int counter = 1;
for(final String currentLine : messageRaw) {
lineList.add(new Line(currentLine, counter++));
}
return lineList;
}
}