Spring Boot 在Netty上开发WebSocket和HTTP应用之三 -- HTTP(S)和WEBSOCKET/WSS单元测试篇

首先介绍HTTPS(含HTTP)的测试工具类,共有4个,代码如下:

public class HttpsRequestRunnable implements Runnable {
    
    private static Logger logger = LoggerFactory.getLogger(HttpsRequestRunnable.class); 
    private static final LongAdder counter = new LongAdder();
    private String server_url ;
    private String strReqJson ;
    private String userId ;
    private String token ;
    public HttpsRequestRunnable(String server_url, String userId, String token,String strReqJson) {
        this.server_url = server_url ;
        this.strReqJson = strReqJson ;
        this.userId = userId ;
        this.token = token ;
    }
    public void run() {
        String respStr = HttpsRequestUtil.getFromHttps(server_url, userId, token, strReqJson);
        logger.info("respStr:{}",respStr);
        counter.increment();
        if(counter.intValue()%10==1) {
            logger.error("{} resContent {} ", counter.intValue(),respStr);
        }
    }   
}


public class HttpsRequestUtil {
    
    private static Logger logger = LoggerFactory.getLogger(HttpsRequestUtil.class); 
    private static HttpURLConnection getConn(String server_url) throws Exception {
      URL url = new URL(server_url);
      if(server_url.toLowerCase().startsWith("https")) {
          HttpsURLConnection.setDefaultHostnameVerifier(new NullHostNameVerifier());
          HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
          TrustManager[] tm = { new MyX509TrustManager() };
          SSLContext sslContext = SSLContext.getInstance("TLS");
          sslContext.init(null, tm, /*new java.security.SecureRandom()*/null);
          SSLSocketFactory ssf = sslContext.getSocketFactory();          
          conn.setSSLSocketFactory(ssf);
          return conn ;
      }
      return  (HttpURLConnection) url.openConnection();
    }

    public static String getFromHttps(String server_url,String userId,String token,String strReqJson) {
        String CONTENT_TYPE = "application/json";
        StringBuilder sb2 = new StringBuilder();
        try {           
          HttpURLConnection conn = getConn(server_url);
            conn.setConnectTimeout(45 * 1000);
            conn.setReadTimeout(45 * 1000);
            conn.setDoInput(true);// 允许输入
            conn.setDoOutput(true);// 允许输出
            conn.setUseCaches(false); // 不允许使用缓存
            conn.setRequestMethod("POST");
            conn.setRequestProperty("connection", "keep-alive");
            conn.setRequestProperty("charset", "UTF-8");
            conn.setRequestProperty("Content-Type", CONTENT_TYPE);
            conn.setRequestProperty("userId", userId);
            conn.setRequestProperty("token", token);            
            DataOutputStream outStream = new DataOutputStream(conn.getOutputStream());          
            if(StringUtil.isNotEmpty(strReqJson)) {
                outStream.write(strReqJson.getBytes());
            }
            outStream.flush();
            outStream.close();
            conn.connect();         
            InputStream in = null;
            int resCode = conn.getResponseCode();
            logger.debug("resCode {} ", resCode);
            if (resCode == 200) {
                in = conn.getInputStream();
                int ch;
                while ((ch = in.read()) != -1) {
                    sb2.append((char) ch);
                }
            }
            conn.disconnect();      
        } catch (Exception e) {
            e.printStackTrace();
        }
        return sb2.toString();
    }
}


public class MyX509TrustManager implements X509TrustManager {
      
    public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {} 
    public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {} 
    public X509Certificate[] getAcceptedIssuers() {
        return null;
    }   
}

class NullHostNameVerifier implements HostnameVerifier {
    @Override
    public boolean verify(String arg0, SSLSession arg1) {
        return true;
    }
}

然后是HTTP/HTTPS单元测试类(其实完全可以将testLocalHttpLogin的内容放入一个普通类的main方法中运行):

@SpringBootTest
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class HttpLocalFunctionTest {
   
  private static Logger logger = LoggerFactory.getLogger(HttpLocalFunctionTest.class);
  @Test
  public void testLocalHttpLogin() throws Exception {
    logger.info("begin2test_testLogin");
    //可以支持http和https
    String SERVER_URL = "http://127.0.0.1:8888/login" ; 
    String SERVER_URL = "https://127.0.0.1:8888/login" ; 
    String reqJson = "{\"name\":\"张三\",\"id\":0}";
    String userId = StringUtil.getRandomCode(5);
    String token  = StringUtil.getRandomCode(15);
    Thread t = new Thread(new HttpsRequestRunnable(SERVER_URL, userId,token, reqJson));
    t.start();
    t.join();
  }
}

接下来是WebSocket的模拟客户端。
需要引入 java_websocket.jar,pom.xml 如下:

    <dependency>
        <groupId>org.java-websocket</groupId>
        <artifactId>J
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值