< prev index next >

test/java/net/CookieHandler/CookieManagerTest.java

Print this page




   8  *
   9  * This code is distributed in the hope that it will be useful, but WITHOUT
  10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  */
  23 
  24 /*
  25  * @test
  26  * @summary Unit test for java.net.CookieManager
  27  * @bug 6244040 7150552 7051862

  28  * @run main/othervm -ea CookieManagerTest
  29  * @author Edward Wang
  30  */
  31 
  32 import com.sun.net.httpserver.*;
  33 import java.io.IOException;
  34 import java.net.*;

  35 
  36 public class CookieManagerTest {
  37 
  38     static CookieTransactionHandler httpTrans;
  39     static HttpServer server;
  40 


















  41     public static void main(String[] args) throws Exception {
  42         startHttpServer();
  43         makeHttpCall();
  44 
  45         if (httpTrans.badRequest) {
  46             throw new RuntimeException("Test failed : bad cookie header");
  47         }
  48         checkCookiePolicy();
  49     }
  50 
  51    public static void startHttpServer() throws IOException {
  52         httpTrans = new CookieTransactionHandler();
  53         server = HttpServer.create(new InetSocketAddress(0), 0);
  54         server.createContext("/", httpTrans);
  55         server.start();
  56     }
  57 
  58     /*
  59      * Checks if CookiePolicy.ACCEPT_ORIGINAL_SERVER#shouldAccept()
  60      * returns false for null arguments
  61      */
  62     private static void checkCookiePolicy() throws Exception {
  63         CookiePolicy cp = CookiePolicy.ACCEPT_ORIGINAL_SERVER;
  64         boolean retVal;
  65         retVal = cp.shouldAccept(null, null);
  66         checkValue(retVal);
  67         retVal = cp.shouldAccept(null, new HttpCookie("CookieName", "CookieVal"));
  68         checkValue(retVal);
  69         retVal = cp.shouldAccept((new URL("http", "localhost", 2345, "/")).toURI(),
  70                                   null);
  71         checkValue(retVal);
  72     }
  73 
  74     private static void checkValue(boolean val) {
  75         if (val)
  76             throw new RuntimeException("Return value is not false!");
  77     }
  78 
  79     public static void makeHttpCall() throws IOException {
  80         try {
  81             System.out.println("http server listenining on: "
  82                     + server.getAddress().getPort());
  83 
  84             // install CookieManager to use
  85             CookieHandler.setDefault(new CookieManager());
  86 
  87             for (int i = 0; i < CookieTransactionHandler.testCount; i++) {
  88                 System.out.println("====== CookieManager test " + (i+1)
  89                                     + " ======");
  90                 ((CookieManager)CookieHandler.getDefault())
  91                     .setCookiePolicy(CookieTransactionHandler.testPolicies[i]);
  92                 ((CookieManager)CookieHandler.getDefault())
  93                     .getCookieStore().removeAll();
  94                 URL url = new URL("http" ,
  95                                   InetAddress.getLocalHost().getHostAddress(),
  96                                   server.getAddress().getPort(),
  97                                   CookieTransactionHandler.testCases[i][0]
  98                                                           .serverPath);
  99                 HttpURLConnection uc = (HttpURLConnection)url.openConnection();

 100                 uc.getResponseCode();
 101                 uc.disconnect();
 102             }
 103         } finally {
 104             server.stop(0);
 105         }
 106     }
 107 }
 108 
 109 class CookieTransactionHandler implements HttpHandler {
 110 
 111     private int testcaseDone = 0;
 112     private int testDone = 0;
 113 
 114     public static boolean badRequest = false;
 115     // the main test control logic will also loop exactly this number
 116     // to send http request
 117     public static final int testCount = 6;
 118 
 119     private String localHostAddr = "127.0.0.1";
 120 
 121     @Override
 122     public void handle(HttpExchange exchange) throws IOException {
 123         if (testDone < testCases[testcaseDone].length) {
 124             // still have other tests to run,
 125             // check the Cookie header and then redirect it
 126             if (testDone > 0) checkRequest(exchange.getRequestHeaders());
 127             exchange.getResponseHeaders().add("Location",
 128                     testCases[testcaseDone][testDone].serverPath);
 129             exchange.getResponseHeaders()
 130                     .add(testCases[testcaseDone][testDone].headerToken,
 131                          testCases[testcaseDone][testDone].cookieToSend);
 132             exchange.sendResponseHeaders(302, -1);
 133             testDone++;
 134         } else {
 135             // the last test of this test case
 136             if (testDone > 0) checkRequest(exchange.getRequestHeaders());
 137             testcaseDone++;
 138             testDone = 0;
 139             exchange.sendResponseHeaders(200, -1);
 140         }


 171             cookieToSend = cts;
 172             cookieToRecv = ctr;
 173             serverPath = sp;
 174         }
 175     };
 176 
 177     /*
 178      * these two must match each other,
 179      * i.e. testCases.length == testPolicies.length
 180      */
 181 
 182     // the test cases to run; each test case may contain multiple roundtrips
 183     public static CookieTestCase[][] testCases = null;
 184     // indicates what CookiePolicy to use with each test cases
 185     public static CookiePolicy[] testPolicies = null;
 186 
 187     CookieTransactionHandler() {
 188         testCases = new CookieTestCase[testCount][];
 189         testPolicies = new CookiePolicy[testCount];
 190 
 191         try {
 192             localHostAddr = InetAddress.getLocalHost().getHostAddress();
 193         } catch (Exception ignored) {
 194         };
 195         int count = 0;
 196 
 197         // an http session with Netscape cookies exchanged
 198         testPolicies[count] = CookiePolicy.ACCEPT_ORIGINAL_SERVER;
 199         testCases[count++] = new CookieTestCase[]{
 200                 new CookieTestCase("Set-Cookie",
 201                 "CUSTOMER=WILE:BOB; " +
 202                 "path=/; expires=Sat, 09-Nov-2030 23:12:40 GMT;" + "domain=." +
 203                 localHostAddr,
 204                 "CUSTOMER=WILE:BOB",
 205                 "/"
 206                 ),
 207                 new CookieTestCase("Set-Cookie",
 208                 "PART_NUMBER=ROCKET_LAUNCHER_0001; path=/;" + "domain=." + localHostAddr,
 209                 "CUSTOMER=WILE:BOB; PART_NUMBER=ROCKET_LAUNCHER_0001",
 210                 "/"
 211                 ),
 212                 new CookieTestCase("Set-Cookie",
 213                 "SHIPPING=FEDEX; path=/foo;" + "domain=." + localHostAddr,
 214                 "CUSTOMER=WILE:BOB; PART_NUMBER=ROCKET_LAUNCHER_0001",




   8  *
   9  * This code is distributed in the hope that it will be useful, but WITHOUT
  10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  */
  23 
  24 /*
  25  * @test
  26  * @summary Unit test for java.net.CookieManager
  27  * @bug 6244040 7150552 7051862
  28  * @modules jdk.httpserver
  29  * @run main/othervm -ea CookieManagerTest
  30  * @author Edward Wang
  31  */
  32 
  33 import com.sun.net.httpserver.*;
  34 import java.io.IOException;
  35 import java.net.*;
  36 import static java.net.Proxy.NO_PROXY;
  37 
  38 public class CookieManagerTest {
  39 
  40     static CookieTransactionHandler httpTrans;
  41     static HttpServer server;
  42 
  43     static final String hostAddress = getAddr();
  44 
  45     /** Returns an IP literal suitable for use by the test. */
  46     static String getAddr() {
  47         try {
  48             InetAddress lh = InetAddress.getLocalHost();
  49             System.out.println("Trying: " + lh);
  50             if (lh.isReachable(5_000)) {
  51                 System.out.println("Using: " + lh);
  52                 return lh.getHostAddress();
  53             }
  54         } catch (IOException x) {
  55             System.out.println("Debug: caught:" + x);
  56         }
  57         System.out.println("Using: \"127.0.0.1\"");
  58         return "127.0.0.1";
  59     }
  60 
  61     public static void main(String[] args) throws Exception {
  62         startHttpServer();
  63         makeHttpCall();
  64 
  65         if (httpTrans.badRequest) {
  66             throw new RuntimeException("Test failed : bad cookie header");
  67         }
  68         checkCookiePolicy();
  69     }
  70 
  71    public static void startHttpServer() throws IOException {
  72         httpTrans = new CookieTransactionHandler();
  73         server = HttpServer.create(new InetSocketAddress(0), 0);
  74         server.createContext("/", httpTrans);
  75         server.start();
  76     }
  77 
  78     /*
  79      * Checks if CookiePolicy.ACCEPT_ORIGINAL_SERVER#shouldAccept()
  80      * returns false for null arguments
  81      */
  82     private static void checkCookiePolicy() throws Exception {
  83         CookiePolicy cp = CookiePolicy.ACCEPT_ORIGINAL_SERVER;
  84         boolean retVal;
  85         retVal = cp.shouldAccept(null, null);
  86         checkValue(retVal);
  87         retVal = cp.shouldAccept(null, new HttpCookie("CookieName", "CookieVal"));
  88         checkValue(retVal);
  89         retVal = cp.shouldAccept((new URL("http", "localhost", 2345, "/")).toURI(),
  90                                   null);
  91         checkValue(retVal);
  92     }
  93 
  94     private static void checkValue(boolean val) {
  95         if (val)
  96             throw new RuntimeException("Return value is not false!");
  97     }
  98 
  99     public static void makeHttpCall() throws IOException {
 100         try {
 101             int port = server.getAddress().getPort();
 102             System.out.println("http server listenining on: " + port);
 103 
 104             // install CookieManager to use
 105             CookieHandler.setDefault(new CookieManager());
 106 
 107             for (int i = 0; i < CookieTransactionHandler.testCount; i++) {
 108                 System.out.println("====== CookieManager test " + (i+1)
 109                                     + " ======");
 110                 ((CookieManager)CookieHandler.getDefault())
 111                     .setCookiePolicy(CookieTransactionHandler.testPolicies[i]);
 112                 ((CookieManager)CookieHandler.getDefault())
 113                     .getCookieStore().removeAll();
 114                 URL url = new URL("http" ,
 115                                   hostAddress,
 116                                   server.getAddress().getPort(),
 117                                   CookieTransactionHandler.testCases[i][0]
 118                                                           .serverPath);
 119                 System.out.println("Requesting " + url);
 120                 HttpURLConnection uc = (HttpURLConnection)url.openConnection(NO_PROXY);
 121                 uc.getResponseCode();
 122                 uc.disconnect();
 123             }
 124         } finally {
 125             server.stop(0);
 126         }
 127     }
 128 }
 129 
 130 class CookieTransactionHandler implements HttpHandler {
 131 
 132     private int testcaseDone = 0;
 133     private int testDone = 0;
 134 
 135     public static boolean badRequest = false;
 136     // the main test control logic will also loop exactly this number
 137     // to send http request
 138     public static final int testCount = 6;
 139 


 140     @Override
 141     public void handle(HttpExchange exchange) throws IOException {
 142         if (testDone < testCases[testcaseDone].length) {
 143             // still have other tests to run,
 144             // check the Cookie header and then redirect it
 145             if (testDone > 0) checkRequest(exchange.getRequestHeaders());
 146             exchange.getResponseHeaders().add("Location",
 147                     testCases[testcaseDone][testDone].serverPath);
 148             exchange.getResponseHeaders()
 149                     .add(testCases[testcaseDone][testDone].headerToken,
 150                          testCases[testcaseDone][testDone].cookieToSend);
 151             exchange.sendResponseHeaders(302, -1);
 152             testDone++;
 153         } else {
 154             // the last test of this test case
 155             if (testDone > 0) checkRequest(exchange.getRequestHeaders());
 156             testcaseDone++;
 157             testDone = 0;
 158             exchange.sendResponseHeaders(200, -1);
 159         }


 190             cookieToSend = cts;
 191             cookieToRecv = ctr;
 192             serverPath = sp;
 193         }
 194     };
 195 
 196     /*
 197      * these two must match each other,
 198      * i.e. testCases.length == testPolicies.length
 199      */
 200 
 201     // the test cases to run; each test case may contain multiple roundtrips
 202     public static CookieTestCase[][] testCases = null;
 203     // indicates what CookiePolicy to use with each test cases
 204     public static CookiePolicy[] testPolicies = null;
 205 
 206     CookieTransactionHandler() {
 207         testCases = new CookieTestCase[testCount][];
 208         testPolicies = new CookiePolicy[testCount];
 209 
 210         String localHostAddr = CookieManagerTest.hostAddress;
 211 


 212         int count = 0;
 213 
 214         // an http session with Netscape cookies exchanged
 215         testPolicies[count] = CookiePolicy.ACCEPT_ORIGINAL_SERVER;
 216         testCases[count++] = new CookieTestCase[]{
 217                 new CookieTestCase("Set-Cookie",
 218                 "CUSTOMER=WILE:BOB; " +
 219                 "path=/; expires=Sat, 09-Nov-2030 23:12:40 GMT;" + "domain=." +
 220                 localHostAddr,
 221                 "CUSTOMER=WILE:BOB",
 222                 "/"
 223                 ),
 224                 new CookieTestCase("Set-Cookie",
 225                 "PART_NUMBER=ROCKET_LAUNCHER_0001; path=/;" + "domain=." + localHostAddr,
 226                 "CUSTOMER=WILE:BOB; PART_NUMBER=ROCKET_LAUNCHER_0001",
 227                 "/"
 228                 ),
 229                 new CookieTestCase("Set-Cookie",
 230                 "SHIPPING=FEDEX; path=/foo;" + "domain=." + localHostAddr,
 231                 "CUSTOMER=WILE:BOB; PART_NUMBER=ROCKET_LAUNCHER_0001",


< prev index next >