Search in sources :

Example 1 with Router

use of org.swisspush.gateleen.routing.Router in project gateleen by swisspush.

the class AbstractTest method setupBeforeClass.

/**
 * Starts redis before the test classes are instantiated.
 */
@BeforeClass
public static void setupBeforeClass(TestContext context) {
    Async async = context.async();
    vertx = Vertx.vertx();
    jedis = new Jedis("localhost", REDIS_PORT, 10000);
    jedis.flushAll();
    final JsonObject info = new JsonObject();
    final LocalHttpClient selfClient = new LocalHttpClient(vertx);
    props.putAll(RunConfig.buildRedisProps("localhost", REDIS_PORT));
    String redisHost = (String) props.get("redis.host");
    Integer redisPort = (Integer) props.get("redis.port");
    props.put(ExpansionHandler.MAX_EXPANSION_LEVEL_HARD_PROPERTY, "100");
    props.put(ExpansionHandler.MAX_EXPANSION_LEVEL_SOFT_PROPERTY, "4");
    RunConfig.deployModules(vertx, AbstractTest.class, props, success -> {
        if (success) {
            RedisClient redisClient = new RedisClient(vertx, new RedisOptions().setConnectionString("redis://" + redisHost + ":" + redisPort));
            RedisAPI redisAPI = RedisAPI.api(redisClient);
            ResourceStorage storage = new EventBusResourceStorage(vertx.eventBus(), Address.storageAddress() + "-main");
            MonitoringHandler monitoringHandler = new MonitoringHandler(vertx, storage, PREFIX);
            ConfigurationResourceManager configurationResourceManager = new ConfigurationResourceManager(vertx, storage);
            String eventBusConfigurationResource = SERVER_ROOT + "/admin/v1/hookconfig";
            EventBusHandler eventBusHandler = new EventBusHandler(vertx, SERVER_ROOT + "/event/v1/", SERVER_ROOT + "/event/v1/sock/", "event-", "channels/([^/]+).*", configurationResourceManager, eventBusConfigurationResource);
            eventBusHandler.setEventbusBridgePingInterval(RunConfig.EVENTBUS_BRIDGE_PING_INTERVAL);
            LoggingResourceManager loggingResourceManager = new LoggingResourceManager(vertx, storage, SERVER_ROOT + "/admin/v1/logging");
            UserProfileHandler userProfileHandler = new UserProfileHandler(vertx, storage, RunConfig.buildUserProfileConfiguration());
            RoleProfileHandler roleProfileHandler = new RoleProfileHandler(vertx, storage, SERVER_ROOT + "/roles/v1/([^/]+)/profile");
            qosHandler = new QoSHandler(vertx, storage, SERVER_ROOT + "/admin/v1/qos", props, PREFIX);
            Lock lock = new RedisBasedLock(redisClient);
            QueueClient queueClient = new QueueClient(vertx, monitoringHandler);
            ReducedPropagationManager reducedPropagationManager = new ReducedPropagationManager(vertx, new RedisReducedPropagationStorage(redisAPI), queueClient, lock);
            reducedPropagationManager.startExpiredQueueProcessing(1000);
            hookHandler = new HookHandler(vertx, selfClient, storage, loggingResourceManager, monitoringHandler, SERVER_ROOT + "/users/v1/%s/profile", ROOT + "/server/hooks/v1/", queueClient, false, reducedPropagationManager);
            propertyHandler = new PropertyHandler(ROOT, props);
            schedulerResourceManager = new SchedulerResourceManager(vertx, redisAPI, storage, monitoringHandler, SERVER_ROOT + "/admin/v1/schedulers");
            ResetMetricsController resetMetricsController = new ResetMetricsController(vertx);
            resetMetricsController.registerResetMetricsControlMBean(JMX_DOMAIN, PREFIX);
            LogController logController = new LogController();
            logController.registerLogConfiguratorMBean(JMX_DOMAIN);
            ZipExtractHandler zipExtractHandler = new ZipExtractHandler(selfClient);
            DelegateHandler delegateHandler = new DelegateHandler(vertx, selfClient, storage, monitoringHandler, DELEGATE_ROOT, props, null);
            MergeHandler mergeHandler = new MergeHandler(selfClient);
            cacheHandler = new CacheHandler(new DefaultCacheDataFetcher(new ClientRequestCreator(selfClient)), new RedisCacheStorage(vertx, lock, redisAPI, 60000), SERVER_ROOT + "/cache");
            customHttpResponseHandler = new CustomHttpResponseHandler(RETURN_HTTP_STATUS_ROOT);
            // ------
            RuleProvider ruleProvider = new RuleProvider(vertx, RULES_ROOT, storage, props);
            QueueCircuitBreakerRulePatternToCircuitMapping rulePatternToCircuitMapping = new QueueCircuitBreakerRulePatternToCircuitMapping();
            QueueCircuitBreakerConfigurationResourceManager queueCircuitBreakerConfigurationResourceManager = new QueueCircuitBreakerConfigurationResourceManager(vertx, storage, SERVER_ROOT + "/admin/v1/circuitbreaker");
            QueueCircuitBreakerStorage queueCircuitBreakerStorage = new RedisQueueCircuitBreakerStorage(redisAPI);
            QueueCircuitBreakerHttpRequestHandler requestHandler = new QueueCircuitBreakerHttpRequestHandler(vertx, queueCircuitBreakerStorage, SERVER_ROOT + "/queuecircuitbreaker/circuit");
            QueueCircuitBreaker queueCircuitBreaker = new QueueCircuitBreakerImpl(vertx, lock, Address.redisquesAddress(), queueCircuitBreakerStorage, ruleProvider, rulePatternToCircuitMapping, queueCircuitBreakerConfigurationResourceManager, requestHandler, CIRCUIT_BREAKER_REST_API_PORT);
            new QueueProcessor(vertx, selfClient, monitoringHandler, queueCircuitBreaker);
            final QueueBrowser queueBrowser = new QueueBrowser(vertx, SERVER_ROOT + "/queuing", Address.redisquesAddress(), monitoringHandler);
            new CustomRedisMonitor(vertx, redisAPI, "main", "rest-storage", 10).start();
            Router router = new Router(vertx, storage, props, loggingResourceManager, monitoringHandler, selfClient, SERVER_ROOT, SERVER_ROOT + "/admin/v1/routing/rules", SERVER_ROOT + "/users/v1/%s/profile", info, STORAGE_PORT, (Handler<Void>) aVoid -> {
                System.out.println("Router initialized!");
                hookHandler.init();
                delegateHandler.init();
            });
            router.enableRoutingConfiguration(configurationResourceManager, SERVER_ROOT + "/admin/v1/routing/config");
            System.setProperty("org.swisspush.gateleen.addcorsheaders", "true");
            RunConfig runConfig = RunConfig.with().cacheHandler(cacheHandler).corsHandler(new CORSHandler()).deltaHandler(new DeltaHandler(redisAPI, selfClient, ruleProvider)).expansionHandler(new ExpansionHandler(vertx, storage, selfClient, props, ROOT, RULES_ROOT)).hookHandler(hookHandler).qosHandler(qosHandler).copyResourceHandler(new CopyResourceHandler(selfClient, SERVER_ROOT + "/v1/copy")).eventBusHandler(eventBusHandler).roleProfileHandler(roleProfileHandler).userProfileHandler(userProfileHandler).loggingResourceManager(loggingResourceManager).configurationResourceManager(configurationResourceManager).queueCircuitBreakerConfigurationResourceManager(queueCircuitBreakerConfigurationResourceManager).schedulerResourceManager(schedulerResourceManager).propertyHandler(propertyHandler).zipExtractHandler(zipExtractHandler).delegateHandler(delegateHandler).mergeHandler(mergeHandler).customHttpResponseHandler(customHttpResponseHandler).build(vertx, redisAPI, AbstractTest.class, router, monitoringHandler, queueBrowser);
            Handler<RoutingContext> routingContextHandlerrNew = runConfig.buildRoutingContextHandler();
            selfClient.setRoutingContexttHandler(routingContextHandlerrNew);
            mainServer = vertx.createHttpServer();
            io.vertx.ext.web.Router vertxRouter = io.vertx.ext.web.Router.router(vertx);
            eventBusHandler.install(vertxRouter);
            vertxRouter.route().handler(routingContextHandlerrNew);
            mainServer.requestHandler(vertxRouter);
            mainServer.listen(MAIN_PORT, event -> {
                if (event.succeeded()) {
                    async.complete();
                } else {
                    context.fail("Server not listening on port " + MAIN_PORT);
                }
            });
        }
    });
    async.awaitSuccess();
}
Also used : ZipExtractHandler(org.swisspush.gateleen.expansion.ZipExtractHandler) TestContext(io.vertx.ext.unit.TestContext) RequestSpecBuilder(io.restassured.builder.RequestSpecBuilder) QueueClient(org.swisspush.gateleen.queue.queuing.QueueClient) EventBusHandler(org.swisspush.gateleen.core.event.EventBusHandler) HttpServer(io.vertx.core.http.HttpServer) RoutingContext(io.vertx.ext.web.RoutingContext) Parser(io.restassured.parsing.Parser) RunConfig(org.swisspush.gateleen.runconfig.RunConfig) RedisBasedLock(org.swisspush.gateleen.core.lock.impl.RedisBasedLock) RequestSpecification(io.restassured.specification.RequestSpecification) LoggingResourceManager(org.swisspush.gateleen.logging.LoggingResourceManager) After(org.junit.After) Map(java.util.Map) JsonObject(io.vertx.core.json.JsonObject) AfterClass(org.junit.AfterClass) Lock(org.swisspush.gateleen.core.lock.Lock) CopyResourceHandler(org.swisspush.gateleen.core.resource.CopyResourceHandler) QueueCircuitBreakerImpl(org.swisspush.gateleen.queue.queuing.circuitbreaker.impl.QueueCircuitBreakerImpl) UserProfileHandler(org.swisspush.gateleen.user.UserProfileHandler) RedisReducedPropagationStorage(org.swisspush.gateleen.hook.reducedpropagation.impl.RedisReducedPropagationStorage) ZipExtractHandler(org.swisspush.gateleen.expansion.ZipExtractHandler) RedisQueueCircuitBreakerStorage(org.swisspush.gateleen.queue.queuing.circuitbreaker.impl.RedisQueueCircuitBreakerStorage) Address(org.swisspush.gateleen.core.util.Address) Router(org.swisspush.gateleen.routing.Router) LocalHttpClient(org.swisspush.gateleen.core.http.LocalHttpClient) Set(java.util.Set) RedisAPI(io.vertx.redis.client.RedisAPI) QueueProcessor(org.swisspush.gateleen.queue.queuing.QueueProcessor) CacheHandler(org.swisspush.gateleen.cache.CacheHandler) DelegateHandler(org.swisspush.gateleen.delegate.DelegateHandler) ResourceStorage(org.swisspush.gateleen.core.storage.ResourceStorage) CustomHttpResponseHandler(org.swisspush.gateleen.routing.CustomHttpResponseHandler) SchedulerResourceManager(org.swisspush.gateleen.scheduler.SchedulerResourceManager) RestAssured(io.restassured.RestAssured) CORSHandler(org.swisspush.gateleen.core.cors.CORSHandler) Async(io.vertx.ext.unit.Async) BeforeClass(org.junit.BeforeClass) RunWith(org.junit.runner.RunWith) HookHandler(org.swisspush.gateleen.hook.HookHandler) ClientRequestCreator(org.swisspush.gateleen.core.http.ClientRequestCreator) QueueCircuitBreakerHttpRequestHandler(org.swisspush.gateleen.queue.queuing.circuitbreaker.api.QueueCircuitBreakerHttpRequestHandler) HashMap(java.util.HashMap) MonitoringHandler(org.swisspush.gateleen.monitoring.MonitoringHandler) QueueCircuitBreakerConfigurationResourceManager(org.swisspush.gateleen.queue.queuing.circuitbreaker.configuration.QueueCircuitBreakerConfigurationResourceManager) EventBusResourceStorage(org.swisspush.gateleen.core.storage.EventBusResourceStorage) QueueCircuitBreakerRulePatternToCircuitMapping(org.swisspush.gateleen.queue.queuing.circuitbreaker.util.QueueCircuitBreakerRulePatternToCircuitMapping) ConfigurationResourceManager(org.swisspush.gateleen.core.configuration.ConfigurationResourceManager) CustomRedisMonitor(org.swisspush.gateleen.monitoring.CustomRedisMonitor) QoSHandler(org.swisspush.gateleen.qos.QoSHandler) RoleProfileHandler(org.swisspush.gateleen.user.RoleProfileHandler) LogController(org.swisspush.gateleen.logging.LogController) DeltaHandler(org.swisspush.gateleen.delta.DeltaHandler) RuleProvider(org.swisspush.gateleen.routing.RuleProvider) ManagementFactory(java.lang.management.ManagementFactory) QueueCircuitBreakerStorage(org.swisspush.gateleen.queue.queuing.circuitbreaker.QueueCircuitBreakerStorage) Before(org.junit.Before) DefaultCacheDataFetcher(org.swisspush.gateleen.cache.fetch.DefaultCacheDataFetcher) ResetMetricsController(org.swisspush.gateleen.monitoring.ResetMetricsController) ReducedPropagationManager(org.swisspush.gateleen.hook.reducedpropagation.ReducedPropagationManager) javax.management(javax.management) Vertx(io.vertx.core.Vertx) RedisClient(io.vertx.redis.client.impl.RedisClient) PropertyHandler(org.swisspush.gateleen.core.property.PropertyHandler) VertxUnitRunner(io.vertx.ext.unit.junit.VertxUnitRunner) RedisOptions(io.vertx.redis.client.RedisOptions) QueueBrowser(org.swisspush.gateleen.queue.queuing.QueueBrowser) RedisCacheStorage(org.swisspush.gateleen.cache.storage.RedisCacheStorage) ExpansionHandler(org.swisspush.gateleen.expansion.ExpansionHandler) Jedis(redis.clients.jedis.Jedis) MergeHandler(org.swisspush.gateleen.merge.MergeHandler) Handler(io.vertx.core.Handler) QueueCircuitBreaker(org.swisspush.gateleen.queue.queuing.circuitbreaker.QueueCircuitBreaker) SchedulerResourceManager(org.swisspush.gateleen.scheduler.SchedulerResourceManager) JsonObject(io.vertx.core.json.JsonObject) RedisOptions(io.vertx.redis.client.RedisOptions) UserProfileHandler(org.swisspush.gateleen.user.UserProfileHandler) RedisCacheStorage(org.swisspush.gateleen.cache.storage.RedisCacheStorage) Jedis(redis.clients.jedis.Jedis) RoutingContext(io.vertx.ext.web.RoutingContext) Async(io.vertx.ext.unit.Async) LogController(org.swisspush.gateleen.logging.LogController) CustomHttpResponseHandler(org.swisspush.gateleen.routing.CustomHttpResponseHandler) EventBusHandler(org.swisspush.gateleen.core.event.EventBusHandler) ReducedPropagationManager(org.swisspush.gateleen.hook.reducedpropagation.ReducedPropagationManager) RedisAPI(io.vertx.redis.client.RedisAPI) CORSHandler(org.swisspush.gateleen.core.cors.CORSHandler) Router(org.swisspush.gateleen.routing.Router) DeltaHandler(org.swisspush.gateleen.delta.DeltaHandler) RedisBasedLock(org.swisspush.gateleen.core.lock.impl.RedisBasedLock) RedisClient(io.vertx.redis.client.impl.RedisClient) MonitoringHandler(org.swisspush.gateleen.monitoring.MonitoringHandler) RoleProfileHandler(org.swisspush.gateleen.user.RoleProfileHandler) LocalHttpClient(org.swisspush.gateleen.core.http.LocalHttpClient) CustomRedisMonitor(org.swisspush.gateleen.monitoring.CustomRedisMonitor) CacheHandler(org.swisspush.gateleen.cache.CacheHandler) QueueCircuitBreakerConfigurationResourceManager(org.swisspush.gateleen.queue.queuing.circuitbreaker.configuration.QueueCircuitBreakerConfigurationResourceManager) ConfigurationResourceManager(org.swisspush.gateleen.core.configuration.ConfigurationResourceManager) QueueClient(org.swisspush.gateleen.queue.queuing.QueueClient) DelegateHandler(org.swisspush.gateleen.delegate.DelegateHandler) QueueCircuitBreakerImpl(org.swisspush.gateleen.queue.queuing.circuitbreaker.impl.QueueCircuitBreakerImpl) ClientRequestCreator(org.swisspush.gateleen.core.http.ClientRequestCreator) RedisQueueCircuitBreakerStorage(org.swisspush.gateleen.queue.queuing.circuitbreaker.impl.RedisQueueCircuitBreakerStorage) RuleProvider(org.swisspush.gateleen.routing.RuleProvider) RedisReducedPropagationStorage(org.swisspush.gateleen.hook.reducedpropagation.impl.RedisReducedPropagationStorage) QueueCircuitBreakerHttpRequestHandler(org.swisspush.gateleen.queue.queuing.circuitbreaker.api.QueueCircuitBreakerHttpRequestHandler) QueueCircuitBreakerConfigurationResourceManager(org.swisspush.gateleen.queue.queuing.circuitbreaker.configuration.QueueCircuitBreakerConfigurationResourceManager) ExpansionHandler(org.swisspush.gateleen.expansion.ExpansionHandler) MergeHandler(org.swisspush.gateleen.merge.MergeHandler) PropertyHandler(org.swisspush.gateleen.core.property.PropertyHandler) CopyResourceHandler(org.swisspush.gateleen.core.resource.CopyResourceHandler) ResetMetricsController(org.swisspush.gateleen.monitoring.ResetMetricsController) RedisQueueCircuitBreakerStorage(org.swisspush.gateleen.queue.queuing.circuitbreaker.impl.RedisQueueCircuitBreakerStorage) QueueCircuitBreakerStorage(org.swisspush.gateleen.queue.queuing.circuitbreaker.QueueCircuitBreakerStorage) QoSHandler(org.swisspush.gateleen.qos.QoSHandler) QueueCircuitBreaker(org.swisspush.gateleen.queue.queuing.circuitbreaker.QueueCircuitBreaker) QueueCircuitBreakerRulePatternToCircuitMapping(org.swisspush.gateleen.queue.queuing.circuitbreaker.util.QueueCircuitBreakerRulePatternToCircuitMapping) LoggingResourceManager(org.swisspush.gateleen.logging.LoggingResourceManager) RunConfig(org.swisspush.gateleen.runconfig.RunConfig) RedisBasedLock(org.swisspush.gateleen.core.lock.impl.RedisBasedLock) Lock(org.swisspush.gateleen.core.lock.Lock) QueueProcessor(org.swisspush.gateleen.queue.queuing.QueueProcessor) ResourceStorage(org.swisspush.gateleen.core.storage.ResourceStorage) EventBusResourceStorage(org.swisspush.gateleen.core.storage.EventBusResourceStorage) EventBusResourceStorage(org.swisspush.gateleen.core.storage.EventBusResourceStorage) DefaultCacheDataFetcher(org.swisspush.gateleen.cache.fetch.DefaultCacheDataFetcher) QueueBrowser(org.swisspush.gateleen.queue.queuing.QueueBrowser) HookHandler(org.swisspush.gateleen.hook.HookHandler) BeforeClass(org.junit.BeforeClass)

Aggregations

RestAssured (io.restassured.RestAssured)1 RequestSpecBuilder (io.restassured.builder.RequestSpecBuilder)1 Parser (io.restassured.parsing.Parser)1 RequestSpecification (io.restassured.specification.RequestSpecification)1 Handler (io.vertx.core.Handler)1 Vertx (io.vertx.core.Vertx)1 HttpServer (io.vertx.core.http.HttpServer)1 JsonObject (io.vertx.core.json.JsonObject)1 Async (io.vertx.ext.unit.Async)1 TestContext (io.vertx.ext.unit.TestContext)1 VertxUnitRunner (io.vertx.ext.unit.junit.VertxUnitRunner)1 RoutingContext (io.vertx.ext.web.RoutingContext)1 RedisAPI (io.vertx.redis.client.RedisAPI)1 RedisOptions (io.vertx.redis.client.RedisOptions)1 RedisClient (io.vertx.redis.client.impl.RedisClient)1 ManagementFactory (java.lang.management.ManagementFactory)1 HashMap (java.util.HashMap)1 Map (java.util.Map)1 Set (java.util.Set)1 javax.management (javax.management)1