ttomcat-1778514358873.zip-extract/apache-tomcat-11.0.18-src/test/org/apache/coyote/http2/TestStandardSessionIntegrationHttp2.java

Path
ttomcat-1778514358873.zip-extract/apache-tomcat-11.0.18-src/test/org/apache/coyote/http2/TestStandardSessionIntegrationHttp2.java
Status
scanned
Type
file
Name
TestStandardSessionIntegrationHttp2.java
Extension
.java
Programming language
Java
Mime type
text/plain
File type
ASCII text, with CRLF line terminators
Tag

      
    
Rootfs path

      
    
Size
6552 (6.4 KB)
MD5
d26e4c69142261e60ffa3699fe55ebbe
SHA1
6da268fe6bbcccb02ffb98b4279197114a96fb50
SHA256
7d58def85e28337a0e013825c0c985b41b3a08675cc1fdf7e456c72f2f726707
SHA512

      
    
SHA1_git
6a79c91649e310eb3bd3f9b583fa11a3f2c9d105
Is binary

      
    
Is text
True
Is archive

      
    
Is media

      
    
Is legal

      
    
Is manifest

      
    
Is readme

      
    
Is top level

      
    
Is key file

      
    
TestStandardSessionIntegrationHttp2.java | 6.4 KB |

/* * 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.coyote.http2; import java.io.IOException; import java.io.PrintWriter; import java.nio.ByteBuffer; import java.nio.charset.StandardCharsets; import java.util.concurrent.CountDownLatch; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpSession; import org.junit.Assert; import org.junit.Test; import org.apache.catalina.Context; import org.apache.catalina.startup.Tomcat; import org.apache.tomcat.util.http.Method; import org.apache.tomcat.util.http.MimeHeaders; public class TestStandardSessionIntegrationHttp2 extends Http2TestBase { @Test public void testSessionIsNew() throws Exception { enableHttp2(); Tomcat tomcat = getTomcatInstance(); Context ctxt = getProgrammaticRootContext(); // Need simple servlet for the HTTP upgrade Tomcat.addServlet(ctxt, "simple", new SimpleServlet()); ctxt.addServletMappingDecoded("/simple", "simple"); // Servlet for this test Tomcat.addServlet(ctxt, "session", new SessionServlet()); ctxt.addServletMappingDecoded("/session", "session"); tomcat.start(); openClientConnection(); doHttpUpgrade(); sendClientPreface(); validateHttp2InitialResponse(); output.setTraceBody(true); // Make first request // Generate headers byte[] headersFrameHeader = new byte[9]; ByteBuffer headersPayload = ByteBuffer.allocate(128); MimeHeaders headers = new MimeHeaders(); headers.addValue(":method").setString(Method.GET); headers.addValue(":scheme").setString("http"); headers.addValue(":path").setString("/session"); headers.addValue(":authority").setString("localhost:" + getPort()); hpackEncoder.encode(headers, headersPayload); headersPayload.flip(); ByteUtil.setThreeBytes(headersFrameHeader, 0, headersPayload.limit()); headersFrameHeader[3] = FrameType.HEADERS.getIdByte(); // Flags. end of headers (0x04). end of stream (0x01) headersFrameHeader[4] = 0x05; // Stream id ByteUtil.set31Bits(headersFrameHeader, 5, 3); writeFrame(headersFrameHeader, headersPayload); // Read headers from first request parser.readFrame(); // extract the session ID String trace = output.getTrace(); int index = trace.indexOf("JSESSIONID="); String sessionID = trace.substring(index + 11, index + 11 + 32); output.clearTrace(); // Make second request - can just 'update' first request headersPayload.clear(); headers.addValue("cookie").setString("JSESSIONID=" + sessionID); hpackEncoder.encode(headers, headersPayload); headersPayload.flip(); ByteUtil.setThreeBytes(headersFrameHeader, 0, headersPayload.limit()); // Stream id ByteUtil.set31Bits(headersFrameHeader, 5, 5); writeFrame(headersFrameHeader, headersPayload); // Request 2 headers parser.readFrame(); // body (request 1 or 2) parser.readFrame(); // body (request 1 or 2) parser.readFrame(); trace = output.getTrace(); Assert.assertTrue(trace, trace.contains("3-Body-OK")); Assert.assertTrue(trace, trace.contains("5-Body-OK")); } private static class SessionServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("text/plain"); resp.setCharacterEncoding(StandardCharsets.UTF_8); PrintWriter pw = resp.getWriter(); boolean pass = true; HttpSession s = req.getSession(false); CountDownLatch latch; if (s == null) { s = req.getSession(true); if (!s.isNew()) { // This is first request so session must be new. pass = false; } latch = new CountDownLatch(1); s.setAttribute("latch", latch); // Return the session ID to the client resp.flushBuffer(); // Wait for the second request to this session while (latch.getCount() > 0) { try { latch.await(); } catch (InterruptedException e) { // Ignore. Only proceed one the latch has counted down. } } // Second request has accessed session. Client has joined the session. if (s.isNew()) { // Session should not be new once client has joined it. pass = false; } } else { if (s.isNew()) { // This is second (or later) request. Client has joined the session. Sessions should not be new. pass = false; } // Release the first request if it is still waiting. latch = (CountDownLatch) s.getAttribute("latch"); latch.countDown(); } if (pass) { pw.print("OK"); } else { pw.print("FAIL"); } } } }
Detected license expression
apache-2.0
Detected license expression (SPDX)
Apache-2.0
Percentage of license text
19.04
Copyrights

      
    
Holders

      
    
Authors

      
    
License detections License expression License expression SPDX
apache_2_0-4bde3f57-78aa-4201-96bf-531cba09e7de apache-2.0 Apache-2.0
URL Start line End line
http://www.apache.org/licenses/LICENSE-2.0 9 9