/*******************************************************************************
* Copyright (c) 2012 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.orion.server.tests.core;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import java.io.ByteArrayInputStream;
import java.util.Map;
import org.eclipse.orion.server.core.IOUtilities;
import org.junit.Test;
public class IOUtilitiesTest {
@Test
public void testParseMultiPartWithURL() throws Exception {
StringBuilder sb = new StringBuilder();
sb.append("--24464570528145").append("\n");
sb.append("Content-Disposition: form-data; name=\"radio\"").append("\n");
sb.append("").append("\n");
sb.append("urlRadio").append("\n");
sb.append("--24464570528145").append("\n");
sb.append("Content-Disposition: form-data; name=\"url\"").append("\n");
sb.append("").append("\n");
sb.append("http://localhost:8080/gitapi/diff/Default/file/r6/?parts=diff&Path=file.txt").append("\n");
sb.append("--24464570528145").append("\n");
sb.append("Content-Disposition: form-data; name=\"uploadedfile\"; filename=\"\"").append("\n");
sb.append("Content-Type: application/octet-stream").append("\n");
sb.append("").append("\r\n");
sb.append("").append("\n");
sb.append("--24464570528145--").append("\n");
ByteArrayInputStream is = new ByteArrayInputStream(sb.toString().getBytes());
Map<String, String> parts = IOUtilities.parseMultiPart(is, "24464570528145");
assertNotNull(parts);
assertEquals("urlRadio", parts.get("radio"));
assertEquals("http://localhost:8080/gitapi/diff/Default/file/r6/?parts=diff&Path=file.txt", parts.get("url"));
assertEquals("", parts.get("uploadedfile"));
}
@Test
public void testParseMultiPartWithPatch() throws Exception {
StringBuilder patch = new StringBuilder();
patch.append("diff --git a/test.txt b/test.txt").append("\n");
patch.append("index 30d74d2..8013df8 100644").append("\n");
patch.append("--- a/test.txt").append("\n");
patch.append("+++ b/test.txt").append("\n");
patch.append("@@ -1 +1 @@").append("\n");
patch.append("-test").append("\n");
patch.append("\\ No newline at end of file").append("\n");
patch.append("+patched").append("\n");
patch.append("\\ No newline at end of file");
StringBuilder sb = new StringBuilder();
sb.append("--24464570528145").append("\n");
sb.append("Content-Disposition: form-data; name=\"radio\"").append("\n");
sb.append("").append("\n");
sb.append("fileRadio").append("\n");
sb.append("--24464570528145").append("\n");
sb.append("Content-Disposition: form-data; name=\"uploadedfile\"; filename=\"\"").append("\n");
sb.append("Content-Type: application/octet-stream").append("\n");
sb.append("asd").append("\n");
sb.append(patch.toString()).append("\n");
sb.append("--24464570528145--");
ByteArrayInputStream is = new ByteArrayInputStream(sb.toString().getBytes());
Map<String, String> parts = IOUtilities.parseMultiPart(is, "24464570528145");
assertNotNull(parts);
assertEquals("fileRadio", parts.get("radio"));
assertNull(parts.get("url"));
assertEquals(patch.toString(), parts.get("uploadedfile"));
}
@Test
public void testGetQueryParameter() throws Exception {
QueryHavingRequest req = new QueryHavingRequest("foo=bar");
assertEquals("bar", IOUtilities.getQueryParameter(req, "foo"));
req = new QueryHavingRequest("foo=");
assertEquals("Empty value", "", IOUtilities.getQueryParameter(req, "foo"));
req = new QueryHavingRequest("foo");
assertEquals("Empty value #2", "", IOUtilities.getQueryParameter(req, "foo"));
req = new QueryHavingRequest("foo&bar=1&baz");
assertEquals("1", IOUtilities.getQueryParameter(req, "bar"));
assertEquals("", IOUtilities.getQueryParameter(req, "baz"));
req = new QueryHavingRequest("");
assertEquals("Empty query", null, IOUtilities.getQueryParameter(req, "fizz"));
req = new QueryHavingRequest(null);
assertEquals("No query", null, IOUtilities.getQueryParameter(req, "fizz"));
// https://bugs.eclipse.org/bugs/show_bug.cgi?id=478227
req = new QueryHavingRequest("foosball=1&foo=2");
assertEquals("Requested param appears as a prefix of an earlier param", "2", IOUtilities.getQueryParameter(req, "foo"));
req = new QueryHavingRequest("a=1&b=2&a=3&b=4");
assertEquals("Should return the first value if param appears multiple times", "2", IOUtilities.getQueryParameter(req, "b"));
}
}