public void start() {
        testEnvironmentContainer.start();
        // TODO: Support checking the running state of local services
        if (getElasticsearchTestEnvironmentType().equals(ServiceTestEnvironmentType.CONTAINER)
                && !isElasticsearchRunning()) {
            throw new IllegalStateException("The Elasticsearch container is not running");
        }
        if (getMinioTestEnvironmentType().equals(ServiceTestEnvironmentType.CONTAINER)
                && !isMongoRunning()) {
            throw new IllegalStateException("The MinIO container is not running");
        }
        if (getMongoTestEnvironmentType().equals(ServiceTestEnvironmentType.CONTAINER)
                && !isMongoRunning()) {
            throw new IllegalStateException("The MongoDB container is not running");
        }
        if (getRedisTestEnvironmentType().equals(ServiceTestEnvironmentType.CONTAINER)
                && !isRedisRunning()) {
            throw new IllegalStateException("The Redis container is not running");
        }
        log.info("Elasticsearch server URI: \"{}\"", getElasticsearchUri());
        log.info("MinIO server URI: \"{}\"", getMinioUri());
        log.info("MongoDB server URI: \"{}\"", getMongoUri());
        log.info("Redis server URI: \"{}\"", getRedisUri());
    }
@author James Chen
@implNote Our properties design supports mixing local services with container services, but our
          implementation does NOT fully support just because we don't have these test cases.
turms-server-test-common/src/main/java/im/turms/server/common/testing/environment/TestEnvironmentManager.java