Interface SutHandler

All Known Implementing Classes:
EmbeddedSutController, ExternalSutController, SutController

public interface SutHandler
Base interface used to control the System Under Test (SUT) from the generated tests. Needed base functionalities are for example, starting/stopping the SUT, and reset its state.
  • Method Details

    • setupForGeneratedTest

      default void setupForGeneratedTest()
      There might be different settings based on when the SUT is run during the search of EvoMaster, and when it is later started in the generated tests.
    • startSut

      String startSut()

      Start a new instance of the SUT.

      This method must be blocking until the SUT is initialized.

      How this method is implemented depends on the library/framework in which the application is written. For example, in Spring applications you can use something like: SpringApplication.run()

      Returns:
      the base URL of the running SUT, eg "http://localhost:8080"
    • stopSut

      void stopSut()

      Stop the SUT.

      How to implement this method depends on the library/framework in which the application is written. For example, in Spring applications you can save in a variable the ConfigurableApplicationContext returned when starting the application, and then call stop() on it here.

    • resetStateOfSUT

      void resetStateOfSUT()

      Make sure the SUT is in a clean state (eg, reset data in database).

      A possible (likely very inefficient) way to implement this would be to call stopSUT followed by startSUT.

      When dealing with databases, you can look at the utility functions from the class DbCleaner. How to access the database depends on the application. To access a java.sql.Connection, in Spring applications you can use something like: ctx.getBean(JdbcTemplate.class).getDataSource().getConnection().

    • execInsertionsIntoDatabase

      org.evomaster.client.java.controller.api.dto.database.operations.InsertionResultsDto execInsertionsIntoDatabase(List<org.evomaster.client.java.controller.api.dto.database.operations.InsertionDto> insertions, org.evomaster.client.java.controller.api.dto.database.operations.InsertionResultsDto... previous)
      Execute the given data insertions into the database (if any)
      Parameters:
      insertions - DTOs for each insertion to execute
      previous - an array of insertion results which were executed before this execution
      Returns:
      insertion execution results
    • execInsertionsIntoMongoDatabase

      org.evomaster.client.java.controller.api.dto.database.operations.MongoInsertionResultsDto execInsertionsIntoMongoDatabase(List<org.evomaster.client.java.controller.api.dto.database.operations.MongoInsertionDto> insertions)
    • execInsertionsIntoRedisDatabase

      org.evomaster.client.java.controller.api.dto.database.operations.RedisInsertionResultsDto execInsertionsIntoRedisDatabase(List<org.evomaster.client.java.controller.api.dto.database.operations.RedisInsertionDto> insertions)
    • getRPCClient

      default Object getRPCClient(String interfaceName)

      return an instance of a client of an RPC service.

      This method must be blocking until the SUT is initialized.

      This method is only required when the problem is RPC for the moment, otherwise return null

      might change string interfaceName to class interface
      Parameters:
      interfaceName - a full name of an interface
      Returns:
      a client which could send requests to the interface
    • executeRPCEndpoint

      default Object executeRPCEndpoint(String json) throws Exception

      execute an RPC endpoint with evomaster driver

      Parameters:
      json - contains info of an RPC endpoint
      Returns:
      value returned by this execution. it is nullable.
      Throws:
      Exception
    • extractRPCSchema

      default void extractRPCSchema()

      execute an RPC endpoint with evomaster driver

      TODO remove this later if we do not use test generation with driver
    • handleLocalAuthenticationSetup

      default boolean handleLocalAuthenticationSetup(String authenticationInfo)

      authentication setup might be handled locally. then we provide this interface to define it.

      Parameters:
      authenticationInfo - info for the authentication setup
      Returns:
      if the authentication is set up successfully
    • getDbSpecifications

      List<org.evomaster.client.java.sql.DbSpecification> getDbSpecifications()

      If the system under test (SUT) uses a SQL database, we need to have a configured DbSpecification to access/reset it.

      When accessing a Connection object to reset the state of the application, we suggest to save it to field (eg when starting the application), and set such field with DbSpecification.connection. This connection object will be used by EvoMaster to analyze the state of the database to create better test cases.

      To handle db in the context of testing, there might be a need to initialize data into database with a sql script. such info could be specified with DbSpecification.dbType

      With EvoMaster, we also support a smart DB cleaner by removing all data in tables which has been accessed after each test. In order to achieve this, we requires user to set a set of info such as database type with DbSpecification.dbType, schema name with DbSpecification.schemaNames (TODO might remove later). In addition, we also provide an option (default is true) to configure if such cleaner is preferred with DbSpecification.employSmartDbClean.

      Returns:
      null if the SUT does not use any SQL database
    • getMongoConnection

      default Object getMongoConnection()
    • getOpenSearchConnection

      default Object getOpenSearchConnection()
    • getRedisConnection

      default ReflectionBasedRedisClient getRedisConnection()
    • registerOrExecuteInitSqlCommandsIfNeeded

      default void registerOrExecuteInitSqlCommandsIfNeeded()

      register or execute specified SQL script for initializing data in database there is no need to be enabled.

    • resetDatabase

      default void resetDatabase(List<String> tablesToClean)

      reset database if the smart db cleaning is employed

      Parameters:
      tablesToClean - represents a list of table which will be reset based on specified DbSpecification. note that null tablesToClean means all table will be reset.
    • resetCustomizedMethodForMockObject

      default boolean resetCustomizedMethodForMockObject()

      a method to reset mocked external services with customized method

    • mockRPCExternalServicesWithCustomizedHandling

      default boolean mockRPCExternalServicesWithCustomizedHandling(String externalServiceDtos, boolean enabled)

      a method to employ customized mocking of RPC based external services

      Parameters:
      externalServiceDtos - contains info about how to setup responses with json format, note that the json should be able to be converted to a list of MockRPCExternalServiceDto
      enabled - reflect to enable (set it true) or disable (set it false) the specified external service dtos. Note that null [externalServiceDtos] with false [enabled] means that all existing external service setup should be disabled.
      Returns:
      whether the mocked instance starts successfully,
    • mockDatabasesWithCustomizedHandling

      default boolean mockDatabasesWithCustomizedHandling(String mockDatabaseObjectDtos, boolean enabled)

      a method to employ customized mocking for database

      Parameters:
      mockDatabaseObjectDtos - contains info about how to set up mock object for databases with json format, note that the json should be able to be converted to a list of MockDatabaseDto
      enabled - reflect to enable (set it true) or disable (set it false) the specified mock object Note that null [mockDatabaseObjectDtos] with false [enabled] means that all existing mock objects for databases should be disabled.
      Returns:
      whether the mocked instance starts successfully,
    • invokeScheduleTaskWithCustomizedHandling

      default org.evomaster.client.java.controller.api.dto.problem.rpc.ScheduleTaskInvocationResultDto invokeScheduleTaskWithCustomizedHandling(String scheduleTaskDto, boolean enabled)

      a method to employ customized mocking for database

      Parameters:
      scheduleTaskDto - contains info about schedule tasks should be invoked
      enabled - reflect to enable (set it true) or terminate (set it false) the schedule task
      Returns:
      invocation results of schedule task