115a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root/* 215a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * Copyright (C) 2008 The Android Open Source Project 315a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * 415a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * Licensed under the Apache License, Version 2.0 (the "License"); 515a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * you may not use this file except in compliance with the License. 615a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * You may obtain a copy of the License at 715a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * 815a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * http://www.apache.org/licenses/LICENSE-2.0 915a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * 1015a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * Unless required by applicable law or agreed to in writing, software 1115a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * distributed under the License is distributed on an "AS IS" BASIS, 1215a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1315a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * See the License for the specific language governing permissions and 1415a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * limitations under the License. 1515a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root */ 1615a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage com.android.internal.http.multipart; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport junit.framework.TestCase; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport org.apache.http.Header; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport org.apache.http.util.EncodingUtils; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.BufferedWriter; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.ByteArrayOutputStream; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.File; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.FileWriter; 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class MultipartTest extends TestCase { 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void testParts() throws Exception { 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project StringBuffer filebuffer = new StringBuffer(); 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String filepartStr = "this is file part"; 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project filebuffer.append(filepartStr); 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project File upload = File.createTempFile("Multipart", "test"); 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project FileWriter outFile = new FileWriter(upload); 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project BufferedWriter out = new BufferedWriter(outFile); 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.write(filebuffer.toString()); 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.flush(); 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } finally { 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.close(); 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Part[] parts = new Part[3]; 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project parts[0] = new StringPart("stringpart", "PART1!!"); 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project parts[1] = new FilePart(upload.getName(), upload); 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project parts[2] = new StringPart("stringpart", "PART2!!"); 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MultipartEntity me = new MultipartEntity(parts); 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ByteArrayOutputStream os = new ByteArrayOutputStream(); 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project me.writeTo(os); 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Header h = me.getContentType(); 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String boundry = EncodingUtils.getAsciiString(me.getMultipartBoundary()); 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project StringBuffer contentType = new StringBuffer("multipart/form-data"); 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project contentType.append("; boundary="); 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project contentType.append(boundry); 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("Multipart content type error", contentType.toString(), h.getValue()); 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final String CRLF = "\r\n"; 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project StringBuffer output = new StringBuffer(); 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project output.append("--"); 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project output.append(boundry); 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project output.append(CRLF); 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project output.append("Content-Disposition: form-data; name=\"stringpart\""); 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project output.append(CRLF); 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project output.append("Content-Type: text/plain; charset=US-ASCII"); 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project output.append(CRLF); 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project output.append("Content-Transfer-Encoding: 8bit"); 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project output.append(CRLF); 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project output.append(CRLF); 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project output.append("PART1!!"); 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project output.append(CRLF); 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project output.append("--"); 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project output.append(boundry); 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project output.append(CRLF); 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project output.append("Content-Disposition: form-data; name=\""); 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project output.append(upload.getName()); 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project output.append("\"; filename=\""); 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project output.append(upload.getName()); 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project output.append("\""); 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project output.append(CRLF); 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project output.append("Content-Type: application/octet-stream; charset=ISO-8859-1"); 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project output.append(CRLF); 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project output.append("Content-Transfer-Encoding: binary"); 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project output.append(CRLF); 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project output.append(CRLF); 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project output.append(filepartStr); 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project output.append(CRLF); 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project output.append("--"); 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project output.append(boundry); 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project output.append(CRLF); 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project output.append("Content-Disposition: form-data; name=\"stringpart\""); 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project output.append(CRLF); 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project output.append("Content-Type: text/plain; charset=US-ASCII"); 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project output.append(CRLF); 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project output.append("Content-Transfer-Encoding: 8bit"); 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project output.append(CRLF); 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project output.append(CRLF); 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project output.append("PART2!!"); 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project output.append(CRLF); 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project output.append("--"); 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project output.append(boundry); 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project output.append("--"); 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project output.append(CRLF); 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // System.out.print(output.toString()); 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("Multipart content error", output.toString(), os.toString()); 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // System.out.print(os.toString()); 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 119