package core.framework.test.module; import core.framework.api.async.Executor; import core.framework.api.redis.Redis; import core.framework.impl.kafka.Kafka; import core.framework.impl.module.MockFactory; import core.framework.impl.mongo.MongoImpl; import core.framework.impl.queue.RabbitMQ; import core.framework.impl.search.ElasticSearchImpl; import core.framework.test.async.MockExecutor; import core.framework.test.kafka.MockKafka; import core.framework.test.mongo.MockMongo; import core.framework.test.queue.MockRabbitMQ; import core.framework.test.redis.MockRedis; import core.framework.test.search.ESLoggerConfigFactory; import core.framework.test.search.MockElasticSearch; import org.mockito.Mockito; import java.nio.file.Path; /** * @author neo */ public final class MockFactoryImpl implements MockFactory { @SuppressWarnings("unchecked") @Override public <T> T create(Class<T> instanceClass, Object... params) { if (Redis.class.equals(instanceClass)) return (T) new MockRedis(); if (RabbitMQ.class.equals(instanceClass)) return (T) new MockRabbitMQ(); if (MongoImpl.class.equals(instanceClass)) return (T) new MockMongo(); if (Kafka.class.equals(instanceClass)) return (T) new MockKafka(); if (ElasticSearchImpl.class.equals(instanceClass)) { bindESLogger(); return (T) new MockElasticSearch((Path) params[0]); } if (Executor.class.equals(instanceClass)) return (T) new MockExecutor(); return Mockito.mock(instanceClass); } // es refers to log4j core directly in org.elasticsearch.common.logging.Loggers, this is to bridge es log to coreng logger // log4j-to-slf4j works if only transport client is used, but our integration test uses Node. private void bindESLogger() { if (System.getProperty("log4j.configurationFactory") != null) return; System.setProperty("log4j.configurationFactory", ESLoggerConfigFactory.class.getName()); System.setProperty("log4j2.disable.jmx", "true"); ESLoggerConfigFactory.bindLogger(); } }