package Script

import okhttp3.FormBody
import okhttp3.MediaType
import okhttp3.OkHttpClient
import okhttp3.Request
import okhttp3.Response
import org.slf4j.Logger
import sun.misc.BASE64Encoder
import javax.crypto.BadPaddingException
import javax.crypto.Cipher
import javax.crypto.IllegalBlockSizeException
import javax.crypto.NoSuchPaddingException
import javax.crypto.spec.IvParameterSpec
import javax.crypto.spec.SecretKeySpec
import java.security.InvalidAlgorithmParameterException
import java.security.InvalidKeyException
import java.security.NoSuchAlgorithmException
import java.util.concurrent.TimeUnit
import java.util.concurrent.atomic.AtomicInteger

@TestSuite
class live {

    public final Logger logger = TestUtils.LOGGER;
    public static AtomicInteger incrKey = new AtomicInteger(1);
    public final OkHttpClient client;
    public final Request.Builder builder;
    public static String transname  = ""
    public static String iv = ""
    public final MediaType MEDIA_TYPE = MediaType.parse("application/json; charset=utf-8");

    live() {
        client = new OkHttpClient().newBuilder()
                .connectTimeout(6, TimeUnit.SECONDS)
                .readTimeout(6, TimeUnit.SECONDS)
                .writeTimeout(6, TimeUnit.SECONDS)
                .followRedirects(false)
                .build();
        builder = new Request.Builder();
        logger.info("TestRunner init...");
    }

    public static String encrypt(String sSrc,String sKey){
        Cipher cipher = null;
        try {
            cipher = Cipher.getInstance("");
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (NoSuchPaddingException e) {
            e.printStackTrace();
        }
        byte[] raw = sKey.getBytes();
        SecretKeySpec skeySpec = new SecretKeySpec(raw, "");
        IvParameterSpec iv = new IvParameterSpec(iv.getBytes());//使用CBC模式,需要一个向量iv,可增加加密算法的强度
        try {
            cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
        } catch (InvalidKeyException e) {
            e.printStackTrace();
        } catch (InvalidAlgorithmParameterException e) {
            e.printStackTrace();
        }
        byte[] encrypted = new byte[0];
        try {
            encrypted = cipher.doFinal(sSrc.getBytes("utf-8"));
        } catch (IllegalBlockSizeException e) {
            e.printStackTrace();
        } catch (BadPaddingException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return new BASE64Encoder().encode(encrypted);//此处使用BASE64做转码。
    }

    static int increment() {
        return incrKey.getAndIncrement();
    }

    @TestCase(record = false)
    void test() {
        int resultCode
        String s = String.format("{\"random\":\"123456\",\"clientType\":\"ios\",\"secretKey\":\"\",\"pin\":\"\",\"appId\":\"\",\"groupId\":\"\",\"timestamp\":%d}",increment().toString(),System.currentTimeMillis())
        logger.info("加密前content传参--------{}",s)
        String content = encrypt(s,"").replaceAll("[\\s*\t\n\r]", "");
        String json = String.format("{\"appId\":\"\",\"content\":\"%s\"}",content)
        logger.info("json--------{}",json)

        FormBody requestBodyPost = new FormBody.Builder()
                .add("body",json)
                .build();
        Request requesturl = builder
                .url("")
                .post(requestBodyPost)
                .build()
        TestUtils.transactionBegin(transname)
        try {
            Response response = client.newCall(requesturl).execute();
            String result;
            resultCode =response.code();
            result=response.body().string()
            response.close();
            if ((resultCode==200) & (result.contains("鉴权成功"))){
                logger.info("response ==============:[ "+result +" ]")
                TestUtils.transactionSuccess(transname)
            }
            else if ((resultCode==302)||(resultCode==301 || resultCode==500)){
                logger.error("加密前content传参--------{}",s)
                logger.error("result code error ===============:[ " + resultCode + " ]")
                logger.error("request.url========"+ requesturl)
                logger.error("response ERROR==========:[ "+result +" ]")
                TestUtils.transactionFailure(transname)
            }
            else {
                logger.error("加密前content传参--------{}",s)
                logger.error("result code error ===============:[ " + resultCode + " ]")
                logger.error("url ERROR ===============:[ "+requesturl +" ]")
                logger.error("response ERROR==========:[ "+result +" ]")
                TestUtils.transactionFailure(transname)
            }
        }catch (Exception e) {
            e.properties;
            logger.error("加密前content传参--------{}",s)
            logger.error("errorException---:{}",e.getMessage())
            TestUtils.transactionFailure(transname)
        }
    }
}
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐