Browse Source

Updated API and unit test for java

master
Artyom Beilis 6 years ago
parent
commit
39ae64180a
7 changed files with 204 additions and 2 deletions
  1. +12
    -0
      contrib/integration/session/java/build.sh
  2. +2
    -2
      contrib/integration/session/java/com/cppcms/session/Session.java
  3. +5
    -0
      contrib/integration/session/java/config.sh
  4. +149
    -0
      contrib/integration/session/java/test/UnitTest.java
  5. +24
    -0
      contrib/integration/session/java/test/build_test.sh
  6. +11
    -0
      contrib/integration/session/java/test/web.xml
  7. +1
    -0
      contrib/integration/session/wwwtest/index.html

+ 12
- 0
contrib/integration/session/java/build.sh View File

@@ -0,0 +1,12 @@
#!/bin/bash

source config.sh

rm -f com/cppcms/session/*.class cppcms.jar

if ! javac -cp $SERVLET:$JNA com/cppcms/session/*.java
then
exit 1
fi
jar cvf cppcms.jar com/cppcms/session/*.class


+ 2
- 2
contrib/integration/session/java/com/cppcms/session/Session.java View File

@@ -152,7 +152,7 @@ public class Session extends SessionBase{
check();
return r;
}
public void save()
protected void save()
{
API.api.cppcms_capi_session_save(d);
check();
@@ -220,7 +220,7 @@ public class Session extends SessionBase{
String cookieName = getSessionCookieName();
Cookie[] cookies = request.getCookies();
String sessionCookie = "";
for(int i=0;i<cookies.length;i++) {
for(int i=0;cookies != null && i<cookies.length;i++) {
if(cookies[i].getName().equals(cookieName)) {
sessionCookie = cookies[i].getValue();
}


+ 5
- 0
contrib/integration/session/java/config.sh View File

@@ -0,0 +1,5 @@
#!/bin/bash

export SERVLET=/home/artik/Packages/jetty/jetty-distribution-9.4.6.v20170531/lib/servlet-api-3.1.jar
export JNA=/usr/share/java/jna.jar


+ 149
- 0
contrib/integration/session/java/test/UnitTest.java View File

@@ -0,0 +1,149 @@
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import com.cppcms.session.*;

public class UnitTest extends HttpServlet {
static SessionPool pool;
public void init() throws ServletException
{
ServletContext context = getServletContext();
String configPath = context.getRealPath("/WEB-INF/config.js");
pool = SessionPool.openFromConfig(configPath);
}

public static String toHex(byte[] data)
{
StringBuilder bld = new StringBuilder();
for(int i=0;i<data.length;i++) {
int v=data[i] & 0xFF;
bld.append(String.format("%02x",v));
}
return bld.toString();
}
static int c2v(char c)
{
if('0' <=c && c<='9')
return (int)c-'0';
if('a' <=c && c<='f')
return (int)(c)-(int)('a')+10;
if('A' <=c && c<='F')
return (int)(c)-(int)('A')+10;
return 0;
}
public static byte[] fromHex(String value)
{
byte[] values = new byte[value.length() / 2];
for(int i=0;i<values.length;i++) {
int v = c2v(value.charAt(2*i)) * 16 + c2v(value.charAt(2*i+1));
values[i] = (byte)(v & 0xFF);
}
return values;
}

public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{
Session session = null;
try {
session = pool.getSession();
session.load(request);
StringBuilder final_result = new StringBuilder();
for(int i=1;;i++) {
String id = "_" + Integer.toString(i);
String op = request.getParameter("op" + id);
if(op == null)
break;
String key = request.getParameter("key" + id);
String value = request.getParameter("value" + id);
String result = "ok";

switch(op) {
case "is_set":
result = session.isSet(key) ? "yes" : "no";
break;
case "erase":
session.erase(key);
break;
case "clear":
session.clear();
break;
case "is_exposed":
result = session.getExposed(key) ? "yes" : "no";
break;
case "expose":
session.setExposed(key,Integer.parseInt(value)!=0);
break;
case "get":
result = session.get(key);
break;
case "set":
session.set(key,value);
break;
case "get_binary":
result = toHex(session.getBinary(key));
break;
case "set_binary":
session.setBinary(key,fromHex(value));
break;
case "get_age":
result = Integer.toString(session.getAge());
break;
case "set_age":
session.setAge(Integer.parseInt(value));
break;
case "default_age":
session.setDefaultAge();
break;
case "get_expiration":
result = Integer.toString(session.getExpiration());
break;
case "set_expiration":
session.setExpiration(Integer.parseInt(value));
break;
case "default_expiration":
session.setDefaultExpiration();
break;
case "get_on_server":
result = session.getOnServer() ? "yes" : "no";
break;
case "set_on_server":
session.setOnServer(Integer.parseInt(value) != 0);
break;
case "reset_session":
session.resetSession();
break;
case "csrf_token":
result = "t=" + session.getCSRFToken();
break;
case "keys":
result = "";
String[] keys = session.getKeys();
for(int j=0;j<keys.length;j++) {
if(!result.isEmpty())
result += ",";
result += "[" + keys[j] + "]";
}
break;
default:
result = "invalid op=" + op;
}
final_result.append(Integer.toString(i) + ":" + result + ";");
}

session.save(response);

PrintWriter out = response.getWriter();
out.write(final_result.toString());
}
finally {
if(session != null)
session.close();
}
// Use "out" to send content to browser
}
}


+ 24
- 0
contrib/integration/session/java/test/build_test.sh View File

@@ -0,0 +1,24 @@
#!/bin/bash
rm *.class
source ../config.sh

if ! javac -cp $SERVLET:$JNA:../cppcms.jar UnitTest.java
then
exit 1
fi


rm -fr jct

mkdir jct
mkdir jct/WEB-INF
mkdir jct/WEB-INF/classes
mkdir jct/WEB-INF/lib

cp web.xml jct/WEB-INF/
cp *.class jct/WEB-INF/classes/
cp ../cppcms.jar jct/WEB-INF/lib/
cp $JNA jct/WEB-INF/lib/
cp ../../wwwtest/*.html jct/
cp ../../wwwtest/*.js jct/
cp ../../reference/config.js jct/WEB-INF/

+ 11
- 0
contrib/integration/session/java/test/web.xml View File

@@ -0,0 +1,11 @@
<web-app>
<servlet>
<servlet-name>UnitTest</servlet-name>
<servlet-class>UnitTest</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>UnitTest</servlet-name>
<url-pattern>/test</url-pattern>
</servlet-mapping>
</web-app>

+ 1
- 0
contrib/integration/session/wwwtest/index.html View File

@@ -13,6 +13,7 @@ function get_url()
<select id="url">
<option value="/test" selected="selected">CppCMS Reference</option>
<option value="/unit_test.php">PHP</option>
<option value="/jct/test" >Java</option>
</select>
<button onclick="tester(get_url())">Run Test</button><span id="wait" style="color:green"></span>
<table border='1' width='80%'>


Loading…
Cancel
Save