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 18package org.apache.harmony.luni.tests.java.net; 19 20import java.io.ByteArrayInputStream; 21import java.io.ByteArrayOutputStream; 22import java.io.File; 23import java.io.FilePermission; 24import java.io.IOException; 25import java.io.InputStream; 26import java.net.FileNameMap; 27import java.net.HttpURLConnection; 28import java.net.JarURLConnection; 29import java.net.MalformedURLException; 30import java.net.SocketPermission; 31import java.net.URL; 32import java.net.URLConnection; 33import java.net.URLStreamHandler; 34import java.security.Permission; 35import java.util.ArrayList; 36import java.util.Arrays; 37import java.util.Calendar; 38import java.util.GregorianCalendar; 39import java.util.List; 40import java.util.Map; 41import java.util.TimeZone; 42import tests.support.Support_Configuration; 43import tests.support.resource.Support_Resources; 44 45public class URLConnectionTest extends junit.framework.TestCase { 46 47 static class MockURLConnection extends URLConnection { 48 49 public MockURLConnection(URL url) { 50 super(url); 51 } 52 53 @Override 54 public void connect() { 55 connected = true; 56 } 57 } 58 59 static class NewHandler extends URLStreamHandler { 60 protected URLConnection openConnection(URL u) throws IOException { 61 return new HttpURLConnection(u) { 62 @Override 63 public void connect() throws IOException { 64 connected = true; 65 } 66 67 @Override 68 public void disconnect() { 69 // do nothing 70 } 71 72 @Override 73 public boolean usingProxy() { 74 return false; 75 } 76 }; 77 } 78 } 79 80 static String getContentType(String fileName) throws IOException { 81 String resourceName = "org/apache/harmony/luni/tests/" + fileName; 82 URL url = ClassLoader.getSystemClassLoader().getResource(resourceName); 83 assertNotNull("Cannot find test resource " + resourceName, url); 84 return url.openConnection().getContentType(); 85 } 86 87 URL url; 88 URLConnection uc; 89 90 protected void setUp() throws Exception { 91 url = new URL("http://localhost/"); 92 uc = url.openConnection(); 93 } 94 95 protected void tearDown() { 96 ((HttpURLConnection) uc).disconnect(); 97 } 98 99 /** 100 * @tests java.net.URLConnection#addRequestProperty(String, String) 101 */ 102 public void test_addRequestProperty() throws MalformedURLException, 103 IOException { 104 105 MockURLConnection u = new MockURLConnection(new URL( 106 "http://www.apache.org")); 107 try { 108 // Regression for HARMONY-604 109 u.addRequestProperty(null, "someValue"); 110 fail("Expected NullPointerException"); 111 } catch (NullPointerException e) { 112 // expected 113 } 114 115 u.addRequestProperty("key", "value"); 116 u.addRequestProperty("key", "value2"); 117 assertEquals("value2", u.getRequestProperty("key")); 118 ArrayList list = new ArrayList(); 119 list.add("value2"); 120 list.add("value"); 121 122 Map<String, List<String>> propertyMap = u.getRequestProperties(); 123 // Check this map is unmodifiable 124 try { 125 propertyMap.put("test", null); 126 fail("Map returned by URLConnection.getRequestProperties() should be unmodifiable"); 127 } catch (UnsupportedOperationException e) { 128 // Expected 129 } 130 131 List<String> valuesList = propertyMap.get("key"); 132 // Check this list is also unmodifiable 133 try { 134 valuesList.add("test"); 135 fail("List entries in the map returned by URLConnection.getRequestProperties() should be unmodifiable"); 136 } catch (UnsupportedOperationException e) { 137 // Expected 138 } 139 assertEquals(list, valuesList); 140 141 u.connect(); 142 try { 143 // state of connection is checked first 144 // so no NPE in case of null 'field' param 145 u.addRequestProperty(null, "someValue"); 146 fail("Expected IllegalStateException"); 147 } catch (IllegalStateException e) { 148 // expected 149 } 150 } 151 152 /** 153 * @tests java.net.URLConnection#addRequestProperty(java.lang.String, java.lang.String) 154 */ 155 public void test_addRequestPropertyLjava_lang_StringLjava_lang_String() 156 throws IOException { 157 uc.setRequestProperty("prop", "yo"); 158 uc.setRequestProperty("prop", "yo2"); 159 assertEquals("yo2", uc.getRequestProperty("prop")); 160 Map<String, List<String>> map = uc.getRequestProperties(); 161 List<String> props = uc.getRequestProperties().get("prop"); 162 assertEquals(1, props.size()); 163 164 try { 165 // the map should be unmodifiable 166 map.put("hi", Arrays.asList(new String[] { "bye" })); 167 fail("could modify map"); 168 } catch (UnsupportedOperationException e) { 169 // Expected 170 } 171 try { 172 // the list should be unmodifiable 173 props.add("hi"); 174 fail("could modify list"); 175 } catch (UnsupportedOperationException e) { 176 // Expected 177 } 178 179 File resources = Support_Resources.createTempFolder(); 180 Support_Resources.copyFile(resources, null, "hyts_att.jar"); 181 URL fUrl1 = new URL("jar:file:" + resources.getPath() 182 + "/hyts_att.jar!/"); 183 JarURLConnection con1 = (JarURLConnection) fUrl1.openConnection(); 184 map = con1.getRequestProperties(); 185 assertNotNull(map); 186 assertEquals(0, map.size()); 187 try { 188 // the map should be unmodifiable 189 map.put("hi", Arrays.asList(new String[] { "bye" })); 190 fail(); 191 } catch (UnsupportedOperationException e) { 192 // Expected 193 } 194 } 195 196 /** 197 * @tests java.net.URLConnection#getAllowUserInteraction() 198 */ 199 public void test_getAllowUserInteraction() { 200 uc.setAllowUserInteraction(false); 201 assertFalse("getAllowUserInteraction should have returned false", uc 202 .getAllowUserInteraction()); 203 204 uc.setAllowUserInteraction(true); 205 assertTrue("getAllowUserInteraction should have returned true", uc 206 .getAllowUserInteraction()); 207 } 208 209 /** 210 * @tests java.net.URLConnection#getContentEncoding() 211 */ 212 public void test_getContentEncoding() { 213 // should not be known for a file 214 assertNull("getContentEncoding failed: " + uc.getContentEncoding(), uc 215 .getContentEncoding()); 216 } 217 218 /** 219 * @tests java.net.URLConnection#getContentType() 220 */ 221 public void test_getContentType_regression() throws IOException { 222 // Regression for HARMONY-4699 223 assertEquals("application/rtf", getContentType("test.rtf")); 224 assertEquals("text/plain", getContentType("test.java")); 225 // RI would return "content/unknown" 226 assertEquals("application/msword", getContentType("test.doc")); 227 assertEquals("text/html", getContentType("test.htx")); 228 assertEquals("application/xml", getContentType("test.xml")); 229 assertEquals("text/plain", getContentType(".")); 230 } 231 232 /** 233 * @tests java.net.URLConnection#getDate() 234 */ 235 public void test_getDate() { 236 // should be greater than 930000000000L which represents the past 237 if (uc.getDate() == 0) { 238 System.out 239 .println("WARNING: server does not support 'Date', in test_getDate"); 240 } else { 241 assertTrue("getDate gave wrong date: " + uc.getDate(), 242 uc.getDate() > 930000000000L); 243 } 244 } 245 246 /** 247 * @tests java.net.URLConnection#getDefaultAllowUserInteraction() 248 */ 249 public void test_getDefaultAllowUserInteraction() { 250 boolean oldSetting = URLConnection.getDefaultAllowUserInteraction(); 251 252 URLConnection.setDefaultAllowUserInteraction(false); 253 assertFalse( 254 "getDefaultAllowUserInteraction should have returned false", 255 URLConnection.getDefaultAllowUserInteraction()); 256 257 URLConnection.setDefaultAllowUserInteraction(true); 258 assertTrue("getDefaultAllowUserInteraction should have returned true", 259 URLConnection.getDefaultAllowUserInteraction()); 260 261 URLConnection.setDefaultAllowUserInteraction(oldSetting); 262 } 263 264 /** 265 * @tests java.net.URLConnection#getDefaultRequestProperty(java.lang.String) 266 */ 267 @SuppressWarnings("deprecation") 268 public void test_getDefaultRequestPropertyLjava_lang_String() { 269 URLConnection.setDefaultRequestProperty("Shmoo", "Blah"); 270 assertNull("setDefaultRequestProperty should have returned: null", 271 URLConnection.getDefaultRequestProperty("Shmoo")); 272 273 URLConnection.setDefaultRequestProperty("Shmoo", "Boom"); 274 assertNull("setDefaultRequestProperty should have returned: null", 275 URLConnection.getDefaultRequestProperty("Shmoo")); 276 277 assertNull("setDefaultRequestProperty should have returned: null", 278 URLConnection.getDefaultRequestProperty("Kapow")); 279 280 URLConnection.setDefaultRequestProperty("Shmoo", null); 281 } 282 283 /** 284 * @tests java.net.URLConnection#getDefaultUseCaches() 285 */ 286 public void test_getDefaultUseCaches() { 287 boolean oldSetting = uc.getDefaultUseCaches(); 288 289 uc.setDefaultUseCaches(false); 290 assertFalse("getDefaultUseCaches should have returned false", uc 291 .getDefaultUseCaches()); 292 293 uc.setDefaultUseCaches(true); 294 assertTrue("getDefaultUseCaches should have returned true", uc 295 .getDefaultUseCaches()); 296 297 uc.setDefaultUseCaches(oldSetting); 298 } 299 300 /** 301 * @tests java.net.URLConnection#getDoInput() 302 */ 303 public void test_getDoInput() { 304 assertTrue("Should be set to true by default", uc.getDoInput()); 305 306 uc.setDoInput(true); 307 assertTrue("Should have been set to true", uc.getDoInput()); 308 309 uc.setDoInput(false); 310 assertFalse("Should have been set to false", uc.getDoInput()); 311 } 312 313 /** 314 * @tests java.net.URLConnection#getDoOutput() 315 */ 316 public void test_getDoOutput() { 317 assertFalse("Should be set to false by default", uc.getDoOutput()); 318 319 uc.setDoOutput(true); 320 assertTrue("Should have been set to true", uc.getDoOutput()); 321 322 uc.setDoOutput(false); 323 assertFalse("Should have been set to false", uc.getDoOutput()); 324 } 325 326 /** 327 * @tests java.net.URLConnection#getExpiration() 328 */ 329 public void test_getExpiration() { 330 // should be unknown 331 assertEquals("getExpiration returned wrong expiration", 0, uc 332 .getExpiration()); 333 } 334 335 /** 336 * @tests java.net.URLConnection#getFileNameMap() 337 */ 338 public void test_getFileNameMap() { 339 // Tests for the standard MIME types -- users may override these 340 // in their JRE 341 FileNameMap map = URLConnection.getFileNameMap(); 342 343 // These types are defaulted 344 assertEquals("text/html", map.getContentTypeFor(".htm")); 345 assertEquals("text/html", map.getContentTypeFor(".html")); 346 assertEquals("text/plain", map.getContentTypeFor(".text")); 347 assertEquals("text/plain", map.getContentTypeFor(".txt")); 348 349 // These types come from the properties file 350 assertEquals("application/pdf", map.getContentTypeFor(".pdf")); 351 assertEquals("application/zip", map.getContentTypeFor(".zip")); 352 353 URLConnection.setFileNameMap(new FileNameMap() { 354 public String getContentTypeFor(String fileName) { 355 return "Spam!"; 356 } 357 }); 358 try { 359 assertEquals("Incorrect FileNameMap returned", "Spam!", 360 URLConnection.getFileNameMap().getContentTypeFor(null)); 361 } finally { 362 // unset the map so other tests don't fail 363 URLConnection.setFileNameMap(null); 364 } 365 // RI fails since it does not support fileName that does not begin with 366 // '.' 367 assertEquals("image/gif", map.getContentTypeFor("gif")); 368 } 369 370 /** 371 * @tests java.net.URLConnection#getHeaderFieldDate(java.lang.String, long) 372 */ 373 public void test_getHeaderFieldDateLjava_lang_StringJ() { 374 375 if (uc.getHeaderFieldDate("Date", 22L) == 22L) { 376 System.out 377 .println("WARNING: Server does not support 'Date', test_getHeaderFieldDateLjava_lang_StringJ not run"); 378 return; 379 } 380 assertTrue("Wrong value returned: " 381 + uc.getHeaderFieldDate("Date", 22L), uc.getHeaderFieldDate( 382 "Date", 22L) > 930000000000L); 383 384 long time = uc.getHeaderFieldDate("Last-Modified", 0); 385 assertEquals("Wrong date: ", time, 386 Support_Configuration.URLConnectionLastModified); 387 } 388 389 /** 390 * @tests java.net.URLConnection#getHeaderField(java.lang.String) 391 */ 392 public void test_getHeaderFieldLjava_lang_String() { 393 String hf; 394 hf = uc.getHeaderField("Content-Encoding"); 395 if (hf != null) { 396 assertNull( 397 "Wrong value returned for header field 'Content-Encoding': " 398 + hf, hf); 399 } 400 hf = uc.getHeaderField("Content-Length"); 401 if (hf != null) { 402 assertEquals( 403 "Wrong value returned for header field 'Content-Length': ", 404 "25", hf); 405 } 406 hf = uc.getHeaderField("Content-Type"); 407 if (hf != null) { 408 assertTrue("Wrong value returned for header field 'Content-Type': " 409 + hf, hf.contains("text/html")); 410 } 411 hf = uc.getHeaderField("content-type"); 412 if (hf != null) { 413 assertTrue("Wrong value returned for header field 'content-type': " 414 + hf, hf.contains("text/html")); 415 } 416 hf = uc.getHeaderField("Date"); 417 if (hf != null) { 418 assertTrue("Wrong value returned for header field 'Date': " + hf, 419 Integer.parseInt(hf.substring(hf.length() - 17, 420 hf.length() - 13)) >= 1999); 421 } 422 hf = uc.getHeaderField("Expires"); 423 if (hf != null) { 424 assertNull( 425 "Wrong value returned for header field 'Expires': " + hf, 426 hf); 427 } 428 hf = uc.getHeaderField("SERVER"); 429 if (hf != null) { 430 assertTrue("Wrong value returned for header field 'SERVER': " + hf 431 + " (expected " + Support_Configuration.HomeAddressSoftware 432 + ")", hf.equals(Support_Configuration.HomeAddressSoftware)); 433 } 434 hf = uc.getHeaderField("Last-Modified"); 435 if (hf != null) { 436 assertTrue( 437 "Wrong value returned for header field 'Last-Modified': " 438 + hf, 439 hf 440 .equals(Support_Configuration.URLConnectionLastModifiedString)); 441 } 442 hf = uc.getHeaderField("accept-ranges"); 443 if (hf != null) { 444 assertTrue( 445 "Wrong value returned for header field 'accept-ranges': " 446 + hf, hf.equals("bytes")); 447 } 448 hf = uc.getHeaderField("DoesNotExist"); 449 if (hf != null) { 450 assertNull("Wrong value returned for header field 'DoesNotExist': " 451 + hf, hf); 452 } 453 } 454 455 /** 456 * @tests java.net.URLConnection#getIfModifiedSince() 457 */ 458 public void test_getIfModifiedSince() { 459 uc.setIfModifiedSince(200); 460 assertEquals("Returned wrong ifModifiedSince value", 200, uc 461 .getIfModifiedSince()); 462 } 463 464 /** 465 * @tests java.net.URLConnection#getLastModified() 466 */ 467 public void test_getLastModified() { 468 if (uc.getLastModified() == 0) { 469 System.out 470 .println("WARNING: Server does not support 'Last-Modified', test_getLastModified() not run"); 471 return; 472 } 473 assertTrue( 474 "Returned wrong getLastModified value. Wanted: " 475 + Support_Configuration.URLConnectionLastModified 476 + " got: " + uc.getLastModified(), 477 uc.getLastModified() == Support_Configuration.URLConnectionLastModified); 478 } 479 480 /** 481 * @tests java.net.URLConnection#getRequestProperties() 482 */ 483 public void test_getRequestProperties() { 484 uc.setRequestProperty("whatever", "you like"); 485 Map headers = uc.getRequestProperties(); 486 487 // content-length should always appear 488 List header = (List) headers.get("whatever"); 489 assertNotNull(header); 490 491 assertEquals("you like", header.get(0)); 492 493 assertTrue(headers.size() >= 1); 494 495 try { 496 // the map should be unmodifiable 497 headers.put("hi", "bye"); 498 fail(); 499 } catch (UnsupportedOperationException e) { 500 } 501 try { 502 // the list should be unmodifiable 503 header.add("hi"); 504 fail(); 505 } catch (UnsupportedOperationException e) { 506 } 507 508 } 509 510 /** 511 * @tests java.net.URLConnection#getRequestProperties() 512 */ 513 public void test_getRequestProperties_Exception() throws IOException { 514 URL url = new URL("http", "test", 80, "index.html", new NewHandler()); 515 URLConnection urlCon = url.openConnection(); 516 urlCon.connect(); 517 518 try { 519 urlCon.getRequestProperties(); 520 fail("should throw IllegalStateException"); 521 } catch (IllegalStateException e) { 522 // expected 523 } 524 } 525 526 /** 527 * @tests java.net.URLConnection#getRequestProperty(java.lang.String) 528 */ 529 public void test_getRequestProperty_LString_Exception() throws IOException { 530 URL url = new URL("http", "test", 80, "index.html", new NewHandler()); 531 URLConnection urlCon = url.openConnection(); 532 urlCon.setRequestProperty("test", "testProperty"); 533 assertEquals("testProperty", urlCon.getRequestProperty("test")); 534 535 urlCon.connect(); 536 try { 537 urlCon.getRequestProperty("test"); 538 fail("should throw IllegalStateException"); 539 } catch (IllegalStateException e) { 540 // expected 541 } 542 } 543 544 /** 545 * @tests java.net.URLConnection#getRequestProperty(java.lang.String) 546 */ 547 public void test_getRequestPropertyLjava_lang_String() { 548 uc.setRequestProperty("Yo", "yo"); 549 assertTrue("Wrong property returned: " + uc.getRequestProperty("Yo"), 550 uc.getRequestProperty("Yo").equals("yo")); 551 assertNull("Wrong property returned: " + uc.getRequestProperty("No"), 552 uc.getRequestProperty("No")); 553 } 554 555 /** 556 * @tests java.net.URLConnection#getURL() 557 */ 558 public void test_getURL() { 559 assertTrue("Incorrect URL returned", uc.getURL().equals(url)); 560 } 561 562 /** 563 * @tests java.net.URLConnection#getUseCaches() 564 */ 565 public void test_getUseCaches() { 566 uc.setUseCaches(false); 567 assertTrue("getUseCaches should have returned false", !uc 568 .getUseCaches()); 569 uc.setUseCaches(true); 570 assertTrue("getUseCaches should have returned true", uc.getUseCaches()); 571 } 572 573 /** 574 * @tests java.net.URLConnection#guessContentTypeFromStream(java.io.InputStream) 575 */ 576 public void test_guessContentTypeFromStreamLjava_io_InputStream() 577 throws IOException { 578 String[] headers = new String[] { "<html>", "<head>", " <head ", 579 "<body", "<BODY ", "<!DOCTYPE html", "<?xml " }; 580 String[] expected = new String[] { "text/html", "text/html", 581 "text/html", "text/html", "text/html", "text/html", 582 "application/xml" }; 583 584 String[] encodings = new String[] { "ASCII", "UTF-8", "UTF-16BE", 585 "UTF-16LE", "UTF-32BE", "UTF-32LE" }; 586 for (int i = 0; i < headers.length; i++) { 587 for (String enc : encodings) { 588 InputStream is = new ByteArrayInputStream(toBOMBytes( 589 headers[i], enc)); 590 String mime = URLConnection.guessContentTypeFromStream(is); 591 assertEquals("checking " + headers[i] + " with " + enc, 592 expected[i], mime); 593 } 594 } 595 596 // Try simple case 597 try { 598 URLConnection.guessContentTypeFromStream(null); 599 fail("should throw NullPointerException"); 600 } catch (NullPointerException e) { 601 // expected 602 } 603 604 // Test magic bytes 605 byte[][] bytes = new byte[][] { { 'P', 'K' }, { 'G', 'I' } }; 606 expected = new String[] { "application/zip", "image/gif" }; 607 608 for (int i = 0; i < bytes.length; i++) { 609 InputStream is = new ByteArrayInputStream(bytes[i]); 610 assertEquals(expected[i], URLConnection 611 .guessContentTypeFromStream(is)); 612 } 613 614 ByteArrayInputStream bais = new ByteArrayInputStream(new byte[0]); 615 assertNull(URLConnection.guessContentTypeFromStream(bais)); 616 bais.close(); 617 } 618 619 /** 620 * @tests java.net.URLConnection#setAllowUserInteraction(boolean) 621 */ 622 public void test_setAllowUserInteractionZ() throws MalformedURLException { 623 // Regression for HARMONY-72 624 MockURLConnection u = new MockURLConnection(new URL( 625 "http://www.apache.org")); 626 u.connect(); 627 try { 628 u.setAllowUserInteraction(false); 629 fail("Assert 0: expected an IllegalStateException"); 630 } catch (IllegalStateException e) { 631 // expected 632 } 633 634 } 635 636 /** 637 * @tests java.net.URLConnection#setConnectTimeout(int) 638 */ 639 public void test_setConnectTimeoutI() throws Exception { 640 URLConnection uc = new URL("http://localhost").openConnection(); 641 assertEquals(0, uc.getConnectTimeout()); 642 uc.setConnectTimeout(0); 643 assertEquals(0, uc.getConnectTimeout()); 644 try { 645 uc.setConnectTimeout(-100); 646 fail("should throw IllegalArgumentException"); 647 } catch (IllegalArgumentException e) { 648 // correct 649 } 650 assertEquals(0, uc.getConnectTimeout()); 651 uc.setConnectTimeout(100); 652 assertEquals(100, uc.getConnectTimeout()); 653 try { 654 uc.setConnectTimeout(-1); 655 fail("should throw IllegalArgumentException"); 656 } catch (IllegalArgumentException e) { 657 // correct 658 } 659 assertEquals(100, uc.getConnectTimeout()); 660 } 661 662 /** 663 * @tests java.net.URLConnection#setDefaultAllowUserInteraction(boolean) 664 */ 665 public void test_setDefaultAllowUserInteractionZ() { 666 assertTrue("Used to test", true); 667 } 668 669 /** 670 * @tests java.net.URLConnection#setDefaultRequestProperty(java.lang.String, 671 *java.lang.String) 672 */ 673 public void test_setDefaultRequestPropertyLjava_lang_StringLjava_lang_String() { 674 assertTrue("Used to test", true); 675 } 676 677 /** 678 * @tests java.net.URLConnection#setDefaultUseCaches(boolean) 679 */ 680 public void test_setDefaultUseCachesZ() { 681 assertTrue("Used to test", true); 682 } 683 684 /** 685 * @throws IOException 686 * @tests java.net.URLConnection#setFileNameMap(java.net.FileNameMap) 687 */ 688 public void test_setFileNameMapLjava_net_FileNameMap() throws IOException { 689 // nothing happens if set null 690 URLConnection.setFileNameMap(null); 691 // take no effect 692 assertNotNull(URLConnection.getFileNameMap()); 693 } 694 695 /** 696 * @tests java.net.URLConnection#setIfModifiedSince(long) 697 */ 698 public void test_setIfModifiedSinceJ() throws IOException { 699 URL url = new URL("http://localhost:8080/"); 700 URLConnection connection = url.openConnection(); 701 Calendar cal = new GregorianCalendar(TimeZone.getTimeZone("GMT")); 702 cal.clear(); 703 cal.set(2000, Calendar.MARCH, 5); 704 705 long sinceTime = cal.getTime().getTime(); 706 connection.setIfModifiedSince(sinceTime); 707 assertEquals("Wrong date set", sinceTime, connection 708 .getIfModifiedSince()); 709 710 } 711 712 /** 713 * @tests java.net.URLConnection#setReadTimeout(int) 714 */ 715 public void test_setReadTimeoutI() throws Exception { 716 URLConnection uc = new URL("http://localhost").openConnection(); 717 assertEquals(0, uc.getReadTimeout()); 718 uc.setReadTimeout(0); 719 assertEquals(0, uc.getReadTimeout()); 720 try { 721 uc.setReadTimeout(-100); 722 fail("should throw IllegalArgumentException"); 723 } catch (IllegalArgumentException e) { 724 // correct 725 } 726 assertEquals(0, uc.getReadTimeout()); 727 uc.setReadTimeout(100); 728 assertEquals(100, uc.getReadTimeout()); 729 try { 730 uc.setReadTimeout(-1); 731 fail("should throw IllegalArgumentException"); 732 } catch (IllegalArgumentException e) { 733 // correct 734 } 735 assertEquals(100, uc.getReadTimeout()); 736 } 737 738 /** 739 * @tests java.net.URLConnection#setRequestProperty(String, String) 740 */ 741 public void test_setRequestProperty() throws MalformedURLException, 742 IOException { 743 744 MockURLConnection u = new MockURLConnection(new URL( 745 "http://www.apache.org")); 746 try { 747 u.setRequestProperty(null, "someValue"); 748 fail("Expected NullPointerException"); 749 } catch (NullPointerException e) { 750 // expected 751 } 752 753 u.connect(); 754 try { 755 // state of connection is checked first 756 // so no NPE in case of null 'field' param 757 u.setRequestProperty(null, "someValue"); 758 fail("Expected IllegalStateException"); 759 } catch (IllegalStateException e) { 760 // expected 761 } 762 } 763 764 /** 765 * @tests java.net.URLConnection#setRequestProperty(java.lang.String, 766 *java.lang.String) 767 */ 768 public void test_setRequestPropertyLjava_lang_StringLjava_lang_String() 769 throws MalformedURLException { 770 MockURLConnection u = new MockURLConnection(new URL( 771 "http://www.apache.org")); 772 773 u.setRequestProperty("", ""); 774 assertEquals("", u.getRequestProperty("")); 775 776 u.setRequestProperty("key", "value"); 777 assertEquals("value", u.getRequestProperty("key")); 778 } 779 780 /** 781 * @tests java.net.URLConnection#setUseCaches(boolean) 782 */ 783 public void test_setUseCachesZ() throws MalformedURLException { 784 // Regression for HARMONY-71 785 MockURLConnection u = new MockURLConnection(new URL( 786 "http://www.apache.org")); 787 u.connect(); 788 try { 789 u.setUseCaches(true); 790 fail("Assert 0: expected an IllegalStateException"); 791 } catch (IllegalStateException e) { 792 // expected 793 } 794 } 795 796 /** 797 * @tests java.net.URLConnection#toString() 798 */ 799 public void test_toString() { 800 assertTrue("Wrong toString: " + uc.toString(), uc.toString().indexOf( 801 "URLConnection") > 0); 802 } 803 804 private byte[] toBOMBytes(String text, String enc) throws IOException { 805 ByteArrayOutputStream bos = new ByteArrayOutputStream(); 806 807 if (enc.equals("UTF-8")) { 808 bos.write(new byte[] { (byte) 0xEF, (byte) 0xBB, (byte) 0xBF }); 809 } 810 if (enc.equals("UTF-16BE")) { 811 bos.write(new byte[] { (byte) 0xFE, (byte) 0xFF }); 812 } 813 if (enc.equals("UTF-16LE")) { 814 bos.write(new byte[] { (byte) 0xFF, (byte) 0xFE }); 815 } 816 if (enc.equals("UTF-32BE")) { 817 bos.write(new byte[] { (byte) 0x00, (byte) 0x00, (byte) 0xFE, 818 (byte) 0xFF }); 819 } 820 if (enc.equals("UTF-32LE")) { 821 bos.write(new byte[] { (byte) 0xFF, (byte) 0xFE, (byte) 0x00, 822 (byte) 0x00 }); 823 } 824 825 bos.write(text.getBytes(enc)); 826 return bos.toByteArray(); 827 } 828} 829