Best EvoMaster code snippet using org.evomaster.client.java.controller.problem.rpc.RPCExceptionHandler
Source:SutController.java  
...13import org.evomaster.client.java.controller.db.SqlScriptRunnerCached;14import org.evomaster.client.java.controller.internal.db.DbSpecification;15import org.evomaster.client.java.controller.api.dto.problem.rpc.RPCType;16import org.evomaster.client.java.controller.problem.rpc.CustomizedNotNullAnnotationForRPCDto;17import org.evomaster.client.java.controller.problem.rpc.RPCExceptionHandler;18import org.evomaster.client.java.controller.api.dto.problem.rpc.SeededRPCTestDto;19import org.evomaster.client.java.controller.problem.rpc.schema.EndpointSchema;20import org.evomaster.client.java.controller.problem.rpc.schema.InterfaceSchema;21import org.evomaster.client.java.controller.api.dto.problem.rpc.RPCActionDto;22import org.evomaster.client.java.controller.problem.rpc.schema.LocalAuthSetupSchema;23import org.evomaster.client.java.controller.problem.rpc.schema.params.*;24import org.evomaster.client.java.controller.api.dto.database.operations.InsertionResultsDto;25import org.evomaster.client.java.controller.db.DbCleaner;26import org.evomaster.client.java.controller.db.SqlScriptRunner;27import org.evomaster.client.java.controller.internal.db.SchemaExtractor;28import org.evomaster.client.java.controller.internal.db.SqlHandler;29import org.evomaster.client.java.controller.problem.ProblemInfo;30import org.evomaster.client.java.controller.problem.RPCProblem;31import org.evomaster.client.java.controller.problem.rpc.RPCEndpointsBuilder;32import org.evomaster.client.java.instrumentation.BootTimeObjectiveInfo;33import org.evomaster.client.java.instrumentation.staticstate.UnitsInfoRecorder;34import org.evomaster.client.java.utils.SimpleLogger;35import org.evomaster.client.java.controller.api.ControllerConstants;36import org.evomaster.client.java.controller.api.dto.database.execution.ExecutionDto;37import org.evomaster.client.java.controller.api.dto.database.operations.InsertionDto;38import org.evomaster.client.java.controller.api.dto.database.schema.DbSchemaDto;39import org.evomaster.client.java.instrumentation.AdditionalInfo;40import org.evomaster.client.java.instrumentation.TargetInfo;41import org.glassfish.jersey.jackson.JacksonFeature;42import org.glassfish.jersey.logging.LoggingFeature;43import org.glassfish.jersey.server.ResourceConfig;44import org.glassfish.jersey.servlet.ServletContainer;45import java.lang.reflect.InvocationTargetException;46import java.lang.reflect.Method;47import java.net.InetSocketAddress;48import java.sql.Connection;49import java.sql.SQLException;50import java.util.*;51import java.util.concurrent.ConcurrentHashMap;52import java.util.concurrent.CopyOnWriteArrayList;53import java.util.stream.Collectors;54/**55 * Abstract class used to connect to the EvoMaster process, and56 * that is responsible to start/stop/restart the tested application,57 * ie the system under test (SUT)58 */59public abstract class SutController implements SutHandler, CustomizationHandler {60    private int controllerPort = ControllerConstants.DEFAULT_CONTROLLER_PORT;61    private String controllerHost = ControllerConstants.DEFAULT_CONTROLLER_HOST;62    private final SqlHandler sqlHandler = new SqlHandler();63    private Server controllerServer;64    /**65     * If using a SQL Database, gather info about its schema66     */67    private DbSchemaDto schemaDto;68    /**69     * For each action in a test, keep track of the extra heuristics, if any70     */71    private final List<ExtraHeuristicsDto> extras = new CopyOnWriteArrayList<>();72    /**73     * track all tables accessed in a test74     */75    private final List<String> accessedTables = new CopyOnWriteArrayList<>();76    /**77     * a map of table to fk target tables78     */79    private final Map<String, List<String>> fkMap = new ConcurrentHashMap<>();80    /**81     * a map of table to a set of commands which are to insert data into the db82     */83    private final Map<String, List<String>> tableInitSqlMap = new ConcurrentHashMap<>();84    /**85     * a map of interface schemas for RPC service under test86     * - key is full name of the interface87     * - value is extracted interface schema88     */89    private final Map<String, InterfaceSchema> rpcInterfaceSchema = new LinkedHashMap <>();90    /**91     * a map of local auth setup schemas for RPC service under test92     * - key is the index of the auth info which is specified in the driver93     * - value is extracted local auth setup schema94     */95    private final Map<Integer, LocalAuthSetupSchema> localAuthSetupSchemaMap = new LinkedHashMap <>();96    /**97     * handle parsing RPCActionDto based on json string.98     * Note that it is only used for RPC99     */100    private ObjectMapper objectMapper;101    private int actionIndex = -1;102    /**103     * Start the controller as a RESTful server.104     * Use the setters of this class to change the default105     * port and host.106     * <br>107     * This method is blocking until the server is initialized.108     *109     * @return true if there was no problem in starting the controller110     */111    public final boolean startTheControllerServer() {112        //Jersey113        ResourceConfig config = new ResourceConfig();114        config.register(JacksonFeature.class);115        config.register(new EMController(this));116        config.register(LoggingFeature.class);117        //Jetty118        controllerServer = new Server(InetSocketAddress.createUnresolved(119                getControllerHost(), getControllerPort()));120        ErrorHandler errorHandler = new ErrorHandler();121        errorHandler.setShowStacks(true);122        controllerServer.setErrorHandler(errorHandler);123        ServletHolder servlet = new ServletHolder(new ServletContainer(config));124        ServletContextHandler context = new ServletContextHandler(controllerServer,125                ControllerConstants.BASE_PATH + "/*");126        context.addServlet(servlet, "/*");127        try {128            controllerServer.start();129        } catch (Exception e) {130            SimpleLogger.error("Failed to start Jetty: " + e.getMessage());131            controllerServer.destroy();132        }133        //just make sure we start from a clean state134        newSearch();135        SimpleLogger.info("Started controller server on: " + controllerServer.getURI());136        return true;137    }138    public final boolean stopTheControllerServer() {139        try {140            controllerServer.stop();141            return true;142        } catch (Exception e) {143            SimpleLogger.error("Failed to stop the controller server: " + e.toString());144            return false;145        }146    }147    /**148     * @return the actual port in use (eg, if it was an ephemeral 0)149     */150    public final int getControllerServerPort() {151        return ((AbstractNetworkConnector) controllerServer.getConnectors()[0]).getLocalPort();152    }153    public final int getControllerPort() {154        return controllerPort;155    }156    public final void setControllerPort(int controllerPort) {157        this.controllerPort = controllerPort;158    }159    public final String getControllerHost() {160        return controllerHost;161    }162    public final void setControllerHost(String controllerHost) {163        this.controllerHost = controllerHost;164    }165    @Override166    public InsertionResultsDto execInsertionsIntoDatabase(List<InsertionDto> insertions, InsertionResultsDto... previous) {167        Connection connection = getConnectionIfExist();168        if (connection == null) {169            throw new IllegalStateException("No connection to database");170        }171        try {172            return SqlScriptRunner.execInsert(connection, insertions, previous);173        } catch (SQLException e) {174            throw new RuntimeException(e);175        }176    }177    public int getActionIndex(){178        return actionIndex;179    }180    /**181     * Calculate heuristics based on intercepted SQL commands182     *183     * @param sql command as a string184     */185    @Deprecated186    public final void handleSql(String sql) {187        Objects.requireNonNull(sql);188        sqlHandler.handle(sql);189    }190    public final void enableComputeSqlHeuristicsOrExtractExecution(boolean enableSqlHeuristics, boolean enableSqlExecution){191        sqlHandler.setCalculateHeuristics(enableSqlHeuristics);192        sqlHandler.setExtractSqlExecution(enableSqlHeuristics || enableSqlExecution);193    }194    /**195     * This is needed only during test generation (not execution),196     * and it is automatically called by the EM controller after197     * the SUT is started.198     */199    public final void initSqlHandler() {200        sqlHandler.setConnection(getConnectionIfExist());201        sqlHandler.setSchema(getSqlDatabaseSchema());202    }203    /**204     * TODO further handle multiple connections205     * @return sql connection if there exists206     */207    public final Connection getConnectionIfExist(){208        return (getDbSpecifications() == null209                || getDbSpecifications().isEmpty())? null: getDbSpecifications().get(0).connection;210    }211    /**212     *213     * @return whether to employ smart db clean214     */215    public final boolean doEmploySmartDbClean(){216        return getDbSpecifications() != null217                && !getDbSpecifications().isEmpty() && getDbSpecifications().get(0).employSmartDbClean;218    }219    public final void resetExtraHeuristics() {220        sqlHandler.reset();221    }222    public final List<ExtraHeuristicsDto> getExtraHeuristics() {223        if (extras.size() == actionIndex) {224            extras.add(computeExtraHeuristics());225        }226        return new ArrayList<>(extras);227    }228    public final ExtraHeuristicsDto computeExtraHeuristics() {229        ExtraHeuristicsDto dto = new ExtraHeuristicsDto();230        if(sqlHandler.isCalculateHeuristics() || sqlHandler.isExtractSqlExecution()){231            /*232                TODO refactor, once we move SQL analysis into Core233             */234            List<AdditionalInfo> list = getAdditionalInfoList();235            if(!list.isEmpty()) {236                AdditionalInfo last = list.get(list.size() - 1);237                last.getSqlInfoData().stream().forEach(it -> {238//                    String sql = it.getCommand();239                    try {240                        sqlHandler.handle(it);241                    } catch (Exception e){242                        SimpleLogger.error("FAILED TO HANDLE SQL COMMAND: " + it.getCommand());243                        assert false; //we should try to handle all cases in our tests244                    }245                });246            }247        }248        if(sqlHandler.isCalculateHeuristics()) {249            sqlHandler.getDistances().stream()250                    .map(p ->251                            new HeuristicEntryDto(252                                    HeuristicEntryDto.Type.SQL,253                                    HeuristicEntryDto.Objective.MINIMIZE_TO_ZERO,254                                    p.sqlCommand,255                                    p.distance256                            ))257                    .forEach(h -> dto.heuristics.add(h));258        }259        if (sqlHandler.isCalculateHeuristics() || sqlHandler.isExtractSqlExecution()){260            ExecutionDto executionDto = sqlHandler.getExecutionDto();261            dto.databaseExecutionDto = executionDto;262            // set accessed table263            if (executionDto != null){264                accessedTables.addAll(executionDto.deletedData);265                accessedTables.addAll(executionDto.insertedData.keySet());266//                accessedTables.addAll(executionDto.queriedData.keySet());267                accessedTables.addAll(executionDto.insertedData.keySet());268                accessedTables.addAll(executionDto.updatedData.keySet());269            }270        }271        return dto;272    }273    /**274     * perform smart db clean by cleaning the data in accessed table275     */276    public final void cleanAccessedTables(){277        if (getDbSpecifications() == null || getDbSpecifications().isEmpty()) return;278        if (getDbSpecifications().size() > 1)279            throw new RuntimeException("Error: DO NOT SUPPORT MULTIPLE SQL CONNECTION YET");280        DbSpecification emDbClean = getDbSpecifications().get(0);281        if (getConnectionIfExist() == null || !emDbClean.employSmartDbClean) return;282        try {283            setExecutingInitSql(true);284            // clean accessed tables285            Set<String> tableDataToInit = null;286            if (!accessedTables.isEmpty()){287                List<String> tablesToClean = new ArrayList<>();288                getTableToClean(accessedTables, tablesToClean);289                if (!tablesToClean.isEmpty()){290                    if (emDbClean.schemaNames != null && !emDbClean.schemaNames.isEmpty()){291                        emDbClean.schemaNames.forEach(sch-> DbCleaner.clearDatabase(getConnectionIfExist(), sch,  null, tablesToClean, emDbClean.dbType));292                    }else293                        DbCleaner.clearDatabase(getConnectionIfExist(), null,  null, tablesToClean, emDbClean.dbType);294                    tableDataToInit = tablesToClean.stream().filter(a-> tableInitSqlMap.keySet().stream().anyMatch(t-> t.equalsIgnoreCase(a))).collect(Collectors.toSet());295                }296            }297            handleInitSql(tableDataToInit, emDbClean);298        }catch (SQLException e) {299            throw new RuntimeException("SQL Init Execution Error: fail to execute "+e);300        }finally {301            setExecutingInitSql(false);302        }303    }304    private void handleInitSql(Collection<String> tableDataToInit, DbSpecification spec) throws SQLException {305        // init db script306        boolean initAll = initSqlScriptAndGetInsertMap(getConnectionIfExist(), spec);307        if (!initAll && tableDataToInit!= null &&!tableDataToInit.isEmpty()){308            tableDataToInit.forEach(a->{309                tableInitSqlMap.keySet().stream().filter(t-> t.equalsIgnoreCase(a)).forEach(t->{310                    tableInitSqlMap.get(t).forEach(c->{311                        try {312                            SqlScriptRunner.execCommand(getConnectionIfExist(), c);313                        } catch (SQLException e) {314                            throw new RuntimeException("SQL Init Execution Error: fail to execute "+ c + " with error "+e);315                        }316                    });317                });318            });319        }320    }321    /**322     * collect info about what table are manipulated by evo in order to generate data directly into it323     * @param tables a list of name of tables324     */325    public void addTableToInserted(List<String> tables){326        accessedTables.addAll(tables);327    }328    private void getTableToClean(List<String> accessedTables, List<String> tablesToClean){329        for (String t: accessedTables){330            if (!findInCollectionIgnoreCase(t, tablesToClean).isPresent()){331                if (findInMapIgnoreCase(t, fkMap).isPresent()){332                    tablesToClean.add(t);333                    List<String> fk = fkMap.entrySet().stream().filter(e->334                            findInCollectionIgnoreCase(t, e.getValue()).isPresent()335                                    && !findInCollectionIgnoreCase(e.getKey(), tablesToClean).isPresent()).map(Map.Entry::getKey).collect(Collectors.toList());336                    if (!fk.isEmpty())337                        getTableToClean(fk, tablesToClean);338                }else {339                    SimpleLogger.uniqueWarn("Cannot find the table "+t+" in ["+String.join(",", fkMap.keySet())+"]");340                }341            }342        }343    }344    private Optional<String> findInCollectionIgnoreCase(String name, Collection<String> list){345        return list.stream().filter(i-> i.equalsIgnoreCase(name)).findFirst();346    }347    private Optional<? extends Map.Entry<String, ?>> findInMapIgnoreCase(String name, Map<String, ?> list){348        return list.entrySet().stream().filter(x-> x.getKey().equalsIgnoreCase(name)).findFirst();349    }350    /**351     *352     * @param dbSpecification contains info of the db connection353     * @return whether the init script is executed354     */355    private boolean initSqlScriptAndGetInsertMap(Connection connection, DbSpecification dbSpecification) throws SQLException {356        if (dbSpecification.initSqlOnResourcePath == null357                && dbSpecification.initSqlScript == null) return false;358        // TODO to handle initSqlMap for multiple connections359        if (tableInitSqlMap.isEmpty()){360            List<String> all = new ArrayList<>();361            if (dbSpecification.initSqlOnResourcePath != null){362               all.addAll(SqlScriptRunnerCached.extractSqlScriptFromResourceFile(dbSpecification.initSqlOnResourcePath));363            }364            if (dbSpecification.initSqlScript != null){365                all.addAll(SqlScriptRunner.extractSql(dbSpecification.initSqlScript));366            }367            if (!all.isEmpty()){368                // collect insert sql commands map, key is table name, and value is a list sql insert commands369                tableInitSqlMap.putAll(SqlScriptRunner.extractSqlTableMap(all));370                // execute all commands371                SqlScriptRunner.runCommands(connection, all);372                return true;373            }374        }375        return false;376    }377    /**378     * Extra information about the SQL Database Schema, if any is present.379     * Note: this is extracted by querying the database itself.380     * So the database must be up and running.381     *382     * @return a DTO with the schema information383     * @see SutHandler#getDbSpecifications384     */385    public final DbSchemaDto getSqlDatabaseSchema() {386        if (schemaDto != null) {387            return schemaDto;388        }389        if (getDbSpecifications() == null || getDbSpecifications().isEmpty()) {390            return null;391        }392        try {393            schemaDto = SchemaExtractor.extract(getConnectionIfExist());394            Objects.requireNonNull(schemaDto);395            schemaDto.employSmartDbClean = doEmploySmartDbClean();396        } catch (Exception e) {397            SimpleLogger.error("Failed to extract the SQL Database Schema: " + e.getMessage());398            return null;399        }400        if (fkMap.isEmpty()){401            schemaDto.tables.forEach(t->{402                fkMap.putIfAbsent(t.name, new ArrayList<>());403                if (t.foreignKeys!=null && !t.foreignKeys.isEmpty()){404                    t.foreignKeys.forEach(f->{405                        fkMap.get(t.name).add(f.targetTable.toUpperCase());406                    });407                }408            });409        }410        return schemaDto;411    }412    /**413     *414     * @return a map from the name of interface to extracted interface415     */416    public final Map<String, InterfaceSchema> getRPCSchema(){417        return rpcInterfaceSchema;418    }419    /**420     *421     * @return a map of auth local method422     */423    public Map<Integer, LocalAuthSetupSchema> getLocalAuthSetupSchemaMap() {424        return localAuthSetupSchemaMap;425    }426    /**427     * extract endpoints info of the RPC interface by reflection based on the specified service interface name428     */429    @Override430    public final void extractRPCSchema(){431        if (objectMapper == null)432            objectMapper = new ObjectMapper();433        if (!rpcInterfaceSchema.isEmpty())434            return;435        if (!(getProblemInfo() instanceof RPCProblem)){436            SimpleLogger.error("Problem ("+getProblemInfo().getClass().getSimpleName()+") is not RPC but request RPC schema.");437            return;438        }439        try {440            RPCEndpointsBuilder.validateCustomizedValueInRequests(getCustomizedValueInRequests());441            RPCEndpointsBuilder.validateCustomizedNotNullAnnotationForRPCDto(specifyCustomizedNotNullAnnotation());442            RPCProblem rpcp = (RPCProblem) getProblemInfo();443            for (String interfaceName: rpcp.getMapOfInterfaceAndClient()){444                InterfaceSchema schema = RPCEndpointsBuilder.build(interfaceName, rpcp.getType(), rpcp.getClient(interfaceName),445                        rpcp.skipEndpointsByName!=null? rpcp.skipEndpointsByName.get(interfaceName):null,446                        rpcp.skipEndpointsByAnnotation!=null?rpcp.skipEndpointsByAnnotation.get(interfaceName):null,447                        rpcp.involveEndpointsByName!=null? rpcp.involveEndpointsByName.get(interfaceName):null,448                        rpcp.involveEndpointsByAnnotation!=null? rpcp.involveEndpointsByAnnotation.get(interfaceName):null,449                        getInfoForAuthentication(),450                        getCustomizedValueInRequests(),451                        specifyCustomizedNotNullAnnotation());452                rpcInterfaceSchema.put(interfaceName, schema);453            }454            localAuthSetupSchemaMap.clear();455            Map<Integer, LocalAuthSetupSchema> local = RPCEndpointsBuilder.buildLocalAuthSetup(getInfoForAuthentication());456            if (local!=null && !local.isEmpty())457                localAuthSetupSchemaMap.putAll(local);458        }catch (Exception e){459//            SimpleLogger.error("Failed to extract the RPC Schema: " + e.getMessage());460            throw new RuntimeException("Failed to extract the RPC Schema: " + e.getMessage());461        }462    }463    /**464     * parse seeded tests for RPC465     * @return a list of tests, and each test is a list of RCPActionDto466     */467    public List<List<RPCActionDto>> handleSeededTests(){468        if (seedRPCTests() == null || seedRPCTests().isEmpty()) return null;469        if (rpcInterfaceSchema.isEmpty())470            throw new IllegalStateException("empty RPC interface: The RPC interface schemas are not extracted yet");471        List<List<RPCActionDto>> results = new ArrayList<>();472        for (SeededRPCTestDto dto: seedRPCTests()){473            if (dto.rpcFunctions != null && !dto.rpcFunctions.isEmpty()){474                List<RPCActionDto> test = new ArrayList<>();475                for (SeededRPCActionDto actionDto : dto.rpcFunctions){476                    InterfaceSchema schema = rpcInterfaceSchema.get(actionDto.interfaceName);477                    if (schema != null){478                        EndpointSchema actionSchema = schema.getOneEndpointWithSeededDto(actionDto);479                        if (actionSchema != null){480                            EndpointSchema copy = actionSchema.copyStructure();481                            for (int i = 0; i < copy.getRequestParams().size(); i++){482                                // TODO need to check if generic type could be handled with jackson483                                NamedTypedValue p = copy.getRequestParams().get(i);484                                try {485                                    String stringValue = actionDto.inputParams.get(i);486//                                    Object value = objectMapper.readValue(stringValue, p.getType().getClazz());487                                    p.setValueBasedOnInstanceOrJson(stringValue);488                                } catch (JsonProcessingException e) {489                                    throw new IllegalStateException(490                                            String.format("Seeded Test Error: cannot parse the seeded test %s at the parameter %d with error msg: %s", actionDto, i, e.getMessage()));491                                }492                            }493                            test.add(copy.getDto());494                        }else {495                            throw new IllegalStateException("Seeded Test Error: cannot find the action "+actionDto.functionName);496                        }497                    } else {498                        throw new IllegalStateException("Seeded Test Error: cannot find the interface "+ actionDto.interfaceName);499                    }500                }501                results.add(test);502            } else {503                SimpleLogger.warn("Seeded Test: empty RPC function calls for the test "+ dto.testName);504            }505        }506        return results;507    }508    /**509     * Either there is no connection, or, if there is, then it must have P6Spy configured.510     * But this might not apply to all kind controllers511     *512     * @return false if the verification failed513     */514    @Deprecated515    public final boolean verifySqlConnection(){516        return true;517//        Connection connection = getConnection();518//        if(connection == null519//                //check does not make sense for External520//                || !(this instanceof EmbeddedSutController)){521//            return true;522//        }523//524//        /*525//            bit hacky/brittle, but seems there is no easy way to check if a connection is526//            using P6Spy.527//            However, the name of driver's package would appear when doing a toString on it528//         */529//        String info = connection.toString();530//531//        return info.contains("p6spy");532    }533    /**534     * Re-initialize all internal data to enable a completely new search phase535     * which should be independent from previous ones536     */537    public abstract void newSearch();538    /**539     * Re-initialize some internal data needed before running a new test540     */541    public final void newTest() {542        actionIndex = -1;543        resetExtraHeuristics();544        extras.clear();545        //clean all accessed table in a test546        accessedTables.clear();547        newTestSpecificHandler();548        // set executingAction state false for newTest549        setExecutingAction(false);550    }551    /**552     * As some heuristics are based on which action (eg HTTP call, or click of button)553     * in the test sequence is executed, and their order, we need to keep track of which554     * action does cover what.555     *556     * @param dto the DTO with the information about the action (eg its index in the test)557     */558    public final void newAction(ActionDto dto) {559        if (dto.index > extras.size()) {560            extras.add(computeExtraHeuristics());561        }562        this.actionIndex = dto.index;563        resetExtraHeuristics();564        newActionSpecificHandler(dto);565    }566    public final void executeHandleLocalAuthenticationSetup(RPCActionDto dto, ActionResponseDto responseDto){567        LocalAuthSetupSchema endpointSchema = new LocalAuthSetupSchema();568        endpointSchema.setValue(dto);569        handleLocalAuthenticationSetup(endpointSchema.getAuthenticationInfo());570        if (dto.responseVariable != null && dto.doGenerateTestScript){571            responseDto.testScript = endpointSchema.newInvocationWithJava(dto.responseVariable, dto.controllerVariable,dto.clientVariable);572        }573    }574    /**575     * execute a RPC request based on the specified dto576     * @param dto is the action DTO to be executed577     */578    public final void executeAction(RPCActionDto dto, ActionResponseDto responseDto) {579        EndpointSchema endpointSchema = getEndpointSchema(dto);580        if (dto.responseVariable != null && dto.doGenerateTestScript){581            try{582                responseDto.testScript = endpointSchema.newInvocationWithJava(dto.responseVariable, dto.controllerVariable,dto.clientVariable);583            }catch (Exception e){584                SimpleLogger.warn("Fail to generate test script"+e.getMessage());585            }586            if (responseDto.testScript ==null)587                SimpleLogger.warn("Null test script for action "+dto.actionName);588        }589        Object response;590        try {591            response = executeRPCEndpoint(dto, false);592        } catch (Exception e) {593            throw new RuntimeException("ERROR: target exception should be caught, but "+ e.getMessage());594        }595        //handle exception596        if (response instanceof Exception){597            try{598                RPCExceptionHandler.handle(response, responseDto, endpointSchema, getRPCType(dto));599                return;600            } catch (Exception e){601                SimpleLogger.error("ERROR: fail to handle exception instance to dto "+ e.getMessage());602                //throw new RuntimeException("ERROR: fail to handle exception instance to dto "+ e.getMessage());603            }604        }605        if (endpointSchema.getResponse() != null){606            if (response != null){607                try{608                    // successful execution609                    NamedTypedValue resSchema = endpointSchema.getResponse().copyStructureWithProperties();610                    resSchema.setValueBasedOnInstance(response);611                    responseDto.rpcResponse = resSchema.getDto();612                    if (dto.doGenerateAssertions && dto.responseVariable != null)...Source:RPCExceptionHandler.java  
...14 * handle RPC exception, for instance15 * - extract possible category eg, application, protocol, if possible16 * - extract exception info, eg, customized exception, message, or status code17 */18public class RPCExceptionHandler {19    private final static String THRIFT_EXCEPTION_ROOT= "org.apache.thrift.TException";20    /**21     *22     * @param e is an exception instance thrown after the endpoint invocation23     * @param dto represents the endpoint which was invoked24     * @param endpointSchema is the schema of the endpoint25     * @param type is the RPC type26     */27    public static void handle(Object e, ActionResponseDto dto, EndpointSchema endpointSchema, RPCType type){28        Object exceptionToHandle = e;29        boolean isCause = false;30        // handle undeclared throwable exception31        if (UndeclaredThrowableException.class.isAssignableFrom(e.getClass())){32            Object cause = getExceptionCause(e);...RPCExceptionHandler
Using AI Code Generation
1import org.evomaster.client.java.controller.problem.rpc.RPCException;2import org.evomaster.client.java.controller.problem.rpc.RPCExceptionType;3import org.evomaster.client.java.controller.problem.rpc.RPCExceptionHandler;4import org.evomaster.client.java.controller.problem.rpc.RPCProblem;5import org.evomaster.client.java.controller.problem.rpc.RPCResult;6public class RPCExceptionExample {7    public static void main(String[] args) {8        RPCExceptionExample rpcExceptionExample = new RPCExceptionExample();9        RPCResult result = rpcExceptionExample.methodToTest();10        RPCException exception = result.getException();11        if (exception != null) {12            System.out.println("Exception occurred: " + exception.getExceptionType());13            System.out.println("Exception message: " + exception.getExceptionMessage());14        } else {15            System.out.println("No exception occurred");16        }17    }18    public RPCResult methodToTest() {19        try {20            throw new RuntimeException("Exception message");21        } catch (Exception e) {22            return RPCExceptionHandler.handle(e);23        }24    }25}26import org.evomaster.client.java.controller.problem.rpc.RPCResult;27public class RPCResultExample {28    public static void main(String[] args) {29        RPCResultExample rpcResultExample = new RPCResultExample();30        RPCResult result = rpcResultExample.methodToTest();31        if (result.isException()) {32            System.out.println("Exception occurred");33        } else {34            System.out.println("No exception occurred");35        }36    }37    public RPCResult methodToTest() {38        return RPCResult.success();39    }40}41import org.evomaster.client.java.controller.problem.rpc.RPCResult;42public class RPCResultExample {43    public static void main(String[] args) {44        RPCResultExample rpcResultExample = new RPCResultExample();45        RPCResult result = rpcResultExample.methodToTest();46        if (result.isException()) {47            System.out.println("Exception occurred");48        } else {49            System.out.println("No exception occurred");50        }51    }52    public RPCResult methodToTest() {RPCExceptionHandler
Using AI Code Generation
1package org.evomaster.client.java.controller.problem.rpc;2import org.evomaster.client.java.controller.api.dto.SutInfoDto;3import org.evomaster.client.java.controller.api.dto.database.operations.DatabaseCommandDto;4import org.evomaster.client.java.controller.api.dto.database.operations.DatabaseCommandDtoTemplate;5import org.evomaster.client.java.controller.api.dto.database.operations.InsertionDto;6import org.evomaster.client.java.controller.api.dto.database.operations.QueryDto;7import org.evomaster.client.java.controller.api.dto.database.schema.DatabaseType;8import org.evomaster.client.java.controller.api.dto.database.schema.TableDto;9import org.evomaster.client.java.controller.api.dto.database.schema.TableIndexDto;10import org.evomaster.client.java.controller.api.dto.database.schema.TableIndexType;11import org.evomaster.client.java.controller.api.dto.database.schema.TableRowDto;12import org.evomaster.client.java.controller.api.dto.database.schema.TableSchemaDto;13import org.evomaster.client.java.controller.api.dto.problem.ProblemDto;14import org.evomaster.client.java.controller.api.dto.problem.RestProblemDto;15import org.evomaster.client.java.controller.api.dto.problem.RestResourceInfoDto;16import org.evomaster.client.java.controller.api.dto.problem.RestResourceSampleDto;17import org.evomaster.client.java.controller.api.dto.problem.RestVerb;18import org.evomaster.client.java.controller.api.dto.problem.TestResultsDto;19import org.evomaster.client.java.controller.api.dto.problem.TestResultsDtoTemplate;20import org.evomaster.client.java.controller.api.dto.problem.TestResultsStatusDto;21import org.evomaster.client.java.controller.internal.db.SqlScriptRunner;22import org.evomaster.client.java.controller.internal.db.SqlScriptRunnerImpl;23import org.evomaster.client.java.controller.internal.db.SqlScriptRunnerTemplate;24import org.evomaster.client.java.controller.internal.db.h2.H2Controller;25import org.evomaster.client.java.controller.internal.db.h2.H2ControllerImpl;26import org.evomaster.client.java.controller.internal.db.h2.H2ControllerTemplate;27import org.evomaster.client.java.controller.internal.db.h2.H2Table;28import org.evomaster.client.java.controller.internal.db.h2.H2TableImpl;29import org.evomaster.client.java.controller.internal.db.h2.H2TableTemplate;30import org.evomaster.client.java.controller.internal.db.schema.SqlSchemaExtractor;31import org.evomaster.client.java.controller.internal.db.schema.SqlSchemaExtractorImpl;32import org.evomaster.client.java.controller.internal.db.schema.SqlSchemaExtractorTemplate;RPCExceptionHandler
Using AI Code Generation
1import org.evomaster.client.java.controller.api.dto.SutInfoDto;2import org.evomaster.client.java.controller.problem.rpc.RPCException;3import org.evomaster.client.java.controller.problem.rpc.RPCExceptionHandling;4import org.evomaster.client.java.controller.problem.rpc.RPCExceptionHandlingType;5import org.evomaster.client.java.controller.problem.rpc.RPCExceptionHandlingType;6import org.evomaster.client.java.controller.problem.rpc.RPCExceptionHandlingType;7import org.evomaster.client.java.controller.problem.rpc.RPCIndividual;8import org.evomaster.client.java.controller.problem.rpc.RPCResult;9import org.evomaster.client.java.controller.problem.rpc.RPCIndividual;10import org.evomaster.client.java.controller.problem.rpc.RPCResult;11import org.evomaster.client.java.controller.problem.rpc.RPCIndividual;12import org.evomaster.client.java.controller.problem.rpc.RPCResult;13import org.evomaster.client.java.controller.problem.rpc.RPCIndividual;14import org.evomaster.client.java.controller.problem.rpc.RPCResult;15import org.evomaster.client.java.controller.problem.rpc.RPCIndividual;16import org.evomaster.client.java.controller.problem.rpc.RPCResult;17import org.evomaster.client.java.controller.problem.rpc.RPCIndividual;18import org.evomaster.client.java.controller.problem.rpc.RPCResult;19import org.evomaster.client.java.controller.problem.rpc.RPCIndividual;20import org.evomaster.client.java.controller.problem.rpc.RPCResult;21import org.evomaster.client.java.controller.problem.rpc.RPCIndividual;22import org.evomaster.client.java.controller.problem.rpc.RPCResult;23import org.evomaster.client.java.controller.problem.rpc.RPCIndividual;24import org.evomaster.client.java.controller.problem.rpc.RPCResult;25import org.evomaster.client.java.controller.problem.rpc.RPCIndividual;26import org.evomaster.client.java.controller.problem.rpc.RPCResult;27import org.evomaster.client.java.controller.problem.rpc.RPCIndividual;28import org.evomaster.client.java.controller.problem.rpc.RPCResult;29import org.evomaster.client.java.controller.problem.rpc.RPCIndividual;30import org.evomaster.client.java.controller.problem.rpc.RPCResult;31import org.evomaster.client.java.controller.problem.rpc.RPCIndividual;32import org.evomaster.client.java.controller.problem.rpc.RPCResult;33import org.evomaster.client.java.controller.problem.rpc.RPCIndividual;34import org.evomaster.client.java.controller.problem.rpc.RPCResult;35import org.evomaster.client.java.controller.problem.rpc.RPCIndividual;RPCExceptionHandler
Using AI Code Generation
1import org.evomaster.client.java.controller.problem.rpc.RPCExceptionHandler;2import org.evomaster.client.java.controller.problem.rpc.RPCExceptionInfo;3import org.evomaster.client.java.controller.problem.rpc.RPCResult;4import org.evomaster.client.java.controller.problem.rpc.RPCResultHandler;5import org.evomaster.client.java.controller.problem.rpc.RPCResults;6import org.evomaster.client.java.controller.problem.rpc.RPCResultsHandler;7import org.evomaster.client.java.controller.problem.rpc.RPCResultsHandlerFactory;8import org.evomaster.client.java.controller.problem.rpc.RPCResultsHandlerFactoryImpl;9import org.evomaster.client.java.controller.problem.rpc.RPCResultsHRPCExceptionHandler
Using AI Code Generation
1package org.evomaster.client.java.controller.problem.rpc;2import org.evomaster.client.java.controller.problem.ProblemInfo;3import org.evomaster.client.java.controller.problem.RestProblem;4public class RPCExceptionHandler {5    public static ProblemInfo handleException(Exception e) {6        if(e instanceof RestProblem){7            return ((RestProblem) e).getProblemInfo();8        }9        return new ProblemInfo(e.getMessage(), e.getClass().getName());10    }11}12package org.evomaster.client.java.controller.problem.rpc;13import org.evomaster.client.java.controller.problem.ProblemInfo;14public class RPCException extends RuntimeException {15    private final ProblemInfo problemInfo;16    public RPCException(ProblemInfo problemInfo) {17        super(problemInfo.getDetails());18        this.problemInfo = problemInfo;19    }20    public ProblemInfo getProblemInfo() {21        return problemInfo;22    }23}24package org.evomaster.client.java.controller.problem.rpc;25import org.evomaster.client.java.controller.problem.ProblemInfo;26public class RPCException extends RuntimeException {27    private final ProblemInfo problemInfo;28    public RPCException(ProblemInfo problemInfo) {29        super(problemInfo.getDetails());30        this.problemInfo = problemInfo;31    }32    public ProblemInfo getProblemInfo() {33        return problemInfo;34    }35}36package org.evomaster.client.java.controller.problem.rpc;37import org.evomaster.client.java.controller.problem.ProblemInfo;38public class RPCException extends RuntimeException {39    private final ProblemInfo problemInfo;40    public RPCException(ProblemInfo problemInfo) {41        super(problemInfo.getDetails());42        this.problemInfo = problemInfo;43    }44    public ProblemInfo getProblemInfo() {45        return problemInfo;46    }47}48package org.evomaster.client.java.controller.problem.rpc;49import org.evomaster.client.java.controller.problem.ProblemInfo;50public class RPCException extends RuntimeException {51    private final ProblemInfo problemInfo;52    public RPCException(ProblemInfo problemInfo) {53        super(problemRPCExceptionHandler
Using AI Code Generation
1import org.evomaster.client.java.controller.problem.rpc.RPCException;2import org.evomaster.client.java.controller.problem.rpc.RPCExceptionHandler;3import org.evomaster.client.java.controller.problem.rpc.RPCExceptionInfo;4import java.util.Optional;5public class RPCExceptionExample {6    public static void main(String[] args) {7        RPCExceptionInfo info = new RPCExceptionInfo("404", "Not Found", "The requested resource was not found");8        RPCExceptionHandler handler = new RPCExceptionHandler();9        Optional<Exception> exception = handler.handle(info);10        if(exception.isPresent()){11            System.out.println("Exception handled successfully");12        } else {13            System.out.println("No exception found");14        }15    }16}17public RPCExceptionInfo(String status, String message, String details)18public Optional<Exception> handle(RPCExceptionInfo info)19public RPCException(String status, String message, String details)20public RPCException(RPCExceptionInfo info)21RPCExceptionInfo info = new RPCExceptionInfo("404", "Not Found", "The requested resource was not found");22RPCException exception = new RPCException(info);23RPCExceptionInfo info = new RPCExceptionInfo("404", "Not Found", "The requested resource was not found");24RPCException exception = new RPCException(info);RPCExceptionHandler
Using AI Code Generation
1package org.evomaster.client.java.controller.problem.rpc;2import org.evomaster.client.java.controller.problem.ProblemInfo;3import java.util.ArrayList;4import java.util.List;5public class RPCExceptionHandler {6    private static List<ProblemInfo> problems = new ArrayList<>();7    public static void addProblem(ProblemInfo problem) {8        problems.add(problem);9    }10    public static List<ProblemInfo> getProblems() {11        return problems;12    }13    public static void clearProblems() {14        problems.clear();15    }16}17package org.evomaster.client.java.controller.problem.rpc;18public class RPCException extends Exception {19    private int httpStatus;20    public RPCException(String message, int httpStatus) {21        super(message);22        this.httpStatus = httpStatus;23    }24    public int getHttpStatus() {25        return httpStatus;26    }27}28package org.evomaster.client.java.controller.problem.rpc;29import com.google.gson.JsonElement;30import com.google.gson.JsonObject;31import org.evomaster.client.java.controller.problem.ProblemInfo;32import java.util.ArrayList;33import java.util.List;34import java.util.Map;35public class RPCRequest {36    private String url;37    private String method;38    private Map<String, String> headers;39    private List<String> body;40    public RPCRequest(String url, String method, Map<String, String> headers, List<String> body) {41        this.url = url;42        this.method = method;43        this.headers = headers;44        this.body = body;45    }46    public String getUrl() {47        return url;48    }49    public String getMethod() {50        return method;51    }52    public Map<String, String> getHeaders() {53        return headers;54    }55    public List<String> getBody() {56        return body;57    }58    public void addProblem(ProblemInfo problem) {59        RPCExceptionHandler.addProblem(problem);60    }61    public List<ProblemInfo> getProblems() {62        return RPCExceptionHandler.getProblems();63    }64    public void clearProblems() {RPCExceptionHandler
Using AI Code Generation
1public class 3 {2    public static void main(String[] args) {3        RPCExceptionHandler rpcExceptionHandler = new RPCExceptionHandler();4        RPCException rpcException = new RPCException();5        rpcExceptionHandler.handle(rpcException);6    }7}RPCExceptionHandler
Using AI Code Generation
1public class 3 {2    public static void main(String args[]) throws Exception {3        Service service = new Service();4        RPCExceptionHandler rpcExceptionHandler = new RPCExceptionHandler();5        RPCCall rpcCall = new RPCCall();6        rpcCall.setRpcCall("get");7        rpcCall.setParameters(new Object[]{});8        rpcCall.setReturnType("java.lang.String");9        rpcCall.setExceptionType("java.lang.Exception");10        rpcCall.setRpcExceptionHandler(rpcExceptionHandler);11        rpcCall.setService(service);12        rpcCall.execute();13    }14}15public class 4 {16    public static void main(String args[]) throws Exception {17        Service service = new Service();18        RPCExceptionHandler rpcExceptionHandler = new RPCExceptionHandler();19        RPCCall rpcCall = new RPCCall();20        rpcCall.setRpcCall("get");21        rpcCall.setParameters(new Object[]{});22        rpcCall.setReturnType("java.lang.String");23        rpcCall.setExceptionType("java.lang.Exception");24        rpcCall.setRpcExceptionHandler(rpcExceptionHandler);25        rpcCall.setService(service);26        rpcCall.execute();27    }28}29public class 5 {30    public static void main(String args[]) throws Exception {31        Service service = new Service();Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!
