diff --git a/pom.xml b/pom.xml index 6ec9575..a1483db 100644 --- a/pom.xml +++ b/pom.xml @@ -114,8 +114,9 @@ ${gatling-maven-plugin.version} - -Xms25600m - -Xmx25600m + -XX:+UseG1GC + -Xms12400m + -Xmx12400m diff --git a/src/test/java/requests/Queries.java b/src/test/java/requests/Queries.java index 0168e75..bbcbf47 100644 --- a/src/test/java/requests/Queries.java +++ b/src/test/java/requests/Queries.java @@ -1,7 +1,6 @@ package requests; import io.gatling.javaapi.core.ChainBuilder; -import javassist.bytecode.ByteArray; import jp.co.soramitsu.iroha2.CryptoUtils; import jp.co.soramitsu.iroha2.ExtensionsKt; import jp.co.soramitsu.iroha2.generated.*; @@ -13,19 +12,18 @@ import static io.gatling.javaapi.core.CoreDsl.*; import static io.gatling.javaapi.http.HttpDsl.http; -import static jp.co.soramitsu.iroha2.client.Iroha2Client.QUERY_ENDPOINT; public class Queries extends Constants { /* - Тяжёлые query + heavy query FindAllAccounts FindAccountsByDomainId FindAllAssets FindAllAssetsDefinitions FindAssetsByDomainId - Лёгкие query + lite query FindAccountById FindAssetById FindAssetDefinitionById @@ -34,6 +32,12 @@ public class Queries extends Constants { FindDomainById */ + private static QueryAndExtractor queryFindAllAsset; + private static BatchedResponse batchedResponse; + private static BatchedResponse.V1 batchedResponseV1; + private static List resultList = new ArrayList<>(); + private static ForwardCursor cursor; + public static ChainBuilder healthCheck = exec(feed(CSV_FEEDER)).exec(feed(PEERS_FEEDER)) .exec(http("health check") .get(session -> { @@ -189,118 +193,6 @@ public class Queries extends Constants { })) ); - /* - отправить запрос гатлингом - проверить есть ли батчи - если батчи есть - отправить дозапросы на эти батчи - */ - - /*private static QueryAndExtractor queryFindAllAsset; - private static BatchedResponse responseDecoded; - private static byte[] response; - - public static ChainBuilder paginatedQueryPostFindAllAssets = exec(feed(CSV_FEEDER)).exec(feed(PEERS_FEEDER)) - .exec(session -> { - ForwardCursor cursor = null; - queryFindAllAsset = QueryBuilder - .findAllAssets() - .account(ExtensionsKt.asAccountId(session.getString("anotherDevAccountIdSender"))) - .buildSigned(CryptoUtils.keyPairFromHex( - session.getString("publicKeySender"), - session.getString("privateKeySender"))); - return session; - } - ) - .exec(http("checkBatchesQuery") - .post(session -> { - return session.getString("peer") + URL_QUERY; - } - ) - .body(ByteArrayBody(session -> { - return SignedQuery.Companion.encode(queryFindAllAsset.getQuery()); - } - ) - //сохранил тело ответа как байт массив - ).check(bodyBytes().saveAs("fullResponse")) // save id - ) - .exec(session -> { - //реализовать работу с результатом предыдущего запроса - //ты знаешь какой будет курсор, а что если пропустить шаг с получением курсора и сразу имплементировать получение батчей - return session; - } - ) - .exec(http("findAllAssets") - .post(session -> { - return session.getString("peer") + URL_QUERY; - } - ) - .body(ByteArrayBody(session -> { - ForwardCursor cursor = null; - QueryAndExtractor queryFindAllAsset = QueryBuilder - .findAllAssets() - .account(ExtensionsKt.asAccountId(session.getString("anotherDevAccountIdSender"))) - .buildSigned(CryptoUtils.keyPairFromHex( - session.getString("publicKeySender"), - session.getString("privateKeySender"))); - - - - var responseDecoded = sendQueryRequest(queryFindAllAsset, cursor); - BatchedResponse.V1 decodedCursor = null; - decodedCursor = (BatchedResponse.V1) responseDecoded.; - if (decodedCursor.getBatchedResponseV1().getCursor() == null) { - var finalResult = queryFindAllAsset.getResultExtractor().extract((responseDecoded); - return finalResult; - } else { - List resultList = getQueryResultWithCursor(queryFindAllAsset, decodedCursor.getBatchedResponseV1().getCursor()); - resultList.add(responseDecoded.getBatch()); - var finalResult = queryFindAllAsset.getResultExtractor().extract(new BatchedResponse.V1( - new BatchedResponseV1(new QueryOutputBox.Vec(resultList), new ForwardCursor()))); - return finalResult; - } - } - ) - ) - ); - - private static BatchedResponse sendQueryRequest(QueryAndExtractor queryAndExtractor, ForwardCursor cursor) { - if (cursor == null) { - return client.post(getApiUrl() + QUERY_ENDPOINT, - request -> request.setBody(SignedQuery.encode(queryAndExtractor.getQuery())) - ).thenApply(response -> { - byte[] responseBody = response; - return BatchedResponse.Companion.decode(responseBody); - }); - } else { - return client.post(getApiUrl() + QUERY_ENDPOINT, - request -> { - request.parameter("query", cursor.getQuery()); - request.parameter("cursor", cursor.getCursor() != null ? cursor.getCursor().getU64() : null); - } - ).thenApply(response -> { - byte[] responseBody = response.body(); - return BatchedResponseV1.Companion.decode(responseBody); - }); - } - } - - private static List getQueryResultWithCursor(QueryAndExtractor queryAndExtractor, ForwardCursor queryCursor) { - if (queryCursor == null) { - queryCursor = new ForwardCursor(); - } - List resultList = new ArrayList<>(); - BatchedResponseV1 responseDecoded = sendQueryRequest(queryAndExtractor, queryCursor); - resultList.add(responseDecoded.getBatch()); - var cursor = responseDecoded.getCursor(); - if (cursor.getCursor() == null) { - return resultList; - } else { - resultList.addAll(getQueryResultWithCursor(queryAndExtractor, cursor)); - return resultList; - } - }*/ - public static ChainBuilder queryPostFindAllAccounts = exec(feed(CSV_FEEDER)).exec(feed(PEERS_FEEDER)) .exec( http("findAllAccounts") @@ -318,7 +210,6 @@ private static List getQueryResultWithCursor(QueryAndExtractor q .getQuery()); })) ); - public static ChainBuilder queryPostFindAllTransactions = exec(feed(CSV_FEEDER)).exec(feed(PEERS_FEEDER)) .exec( http("findAllTransactions") @@ -336,4 +227,75 @@ private static List getQueryResultWithCursor(QueryAndExtractor q .getQuery()); })) ); + + public static ChainBuilder paginatedQueryPostFindAllAssets = exec(feed(CSV_FEEDER)).exec(feed(PEERS_FEEDER)) + .exec(session -> { + queryFindAllAsset = QueryBuilder + .findAllAssets() + .account(ExtensionsKt.asAccountId(session.getString("anotherDevAccountIdSender"))) + .buildSigned(CryptoUtils.keyPairFromHex( + session.getString("publicKeySender"), + session.getString("privateKeySender"))); + return session; + } + ) + .exec(http("checkBatchesQuery") + .post(session -> { + return session.getString("peer") + URL_QUERY; + } + ) + .body(ByteArrayBody(session -> { + var response = SignedQuery.Companion.encode(queryFindAllAsset.getQuery()); + BatchedResponse rawResponse = BatchedResponse.Companion.decode(response); + if (rawResponse instanceof BatchedResponse) { + batchedResponse = (BatchedResponse) rawResponse; + } + cursor = ((BatchedResponse.V1) batchedResponse).getBatchedResponseV1().getCursor(); + session.set("conditionCursor", ((BatchedResponse.V1) batchedResponse).getBatchedResponseV1().getCursor().toString()); + return null; + } + ) + ) + ) + .doWhile(session -> session.get("conditionCursor")) + .on(http("additionQuery") + .post("") + .queryParam("query", cursor.getQuery()) + .queryParam("cursor", cursor.getCursor().getU64()) + .body(ByteArrayBody(session -> { + var response = SignedQuery.Companion.encode(queryFindAllAsset.getQuery()); + BatchedResponse rawResponse = BatchedResponse.Companion.decode(response); + if (rawResponse instanceof BatchedResponse) { + batchedResponse = (BatchedResponse) rawResponse; + } + batchedResponseV1 = (BatchedResponse.V1) batchedResponse; + resultList.addAll( + (List) batchedResponseV1.component1().getBatch() + ); + cursor = ((BatchedResponse.V1) batchedResponse).getBatchedResponseV1().getCursor(); + session.set("conditionCursor", ((BatchedResponse.V1) batchedResponse).getBatchedResponseV1().getCursor().toString()); + return null; + } + ) + ) + ) + /*.exec(session -> { + byte[] responseBodyByte = session.get("fullResponse"); + try { + BatchedResponse rawResponse = BatchedResponse.Companion.decode(responseBodyByte); + if (rawResponse instanceof BatchedResponse) { + batchedResponse = (BatchedResponse) rawResponse; + } + } catch (ClassCastException ex) { + ex.getMessage(); + } + batchedResponseV1 = (BatchedResponse.V1) batchedResponse; + resultList.addAll( + (List) batchedResponseV1.component1().getBatch() + ); + var batch = new BatchedResponse.V1(new BatchedResponseV1(new QueryOutputBox.Vec(resultList), new ForwardCursor())); + queryFindAllAsset.getResultExtractor().extract(batch); + return session; + } + )*/; }