Search in sources :

Example 11 with Api

use of io.gravitee.gateway.handlers.api.definition.Api in project gravitee-gateway by gravitee-io.

the class SyncManagerTest method test_shouldUndeployIfLastEventIsUnpublishAPI.

@Test
public void test_shouldUndeployIfLastEventIsUnpublishAPI() throws Exception {
    io.gravitee.repository.management.model.Api api = new RepositoryApiBuilder().id("api-test").updatedAt(new Date()).definition("test").build();
    final Api mockApi = mockApi(api);
    final Event mockEvent = mockEvent(api, EventType.PUBLISH_API);
    final Event mockEvent2 = mockEvent(api, EventType.UNPUBLISH_API);
    when(eventRepository.search(any(EventCriteria.class), any(Pageable.class))).thenReturn(new Page<>(Collections.singletonList(mockEvent), 0, 0, 1), new Page<>(Collections.singletonList(mockEvent2), 0, 0, 1));
    when(apiRepository.findAll()).thenReturn(Collections.singleton(api));
    syncManager.refresh();
    when(apiManager.apis()).thenReturn(Collections.singleton(mockApi));
    when(apiRepository.findAll()).thenReturn(Collections.singleton(api));
    syncManager.refresh();
    verify(apiManager).deploy(mockApi);
    verify(apiManager, never()).update(any(Api.class));
    verify(apiManager).undeploy(mockApi.getId());
}
Also used : Pageable(io.gravitee.repository.management.api.search.Pageable) Event(io.gravitee.repository.management.model.Event) RepositoryApiBuilder(io.gravitee.gateway.services.sync.builder.RepositoryApiBuilder) Api(io.gravitee.gateway.handlers.api.definition.Api) EventCriteria(io.gravitee.repository.management.api.search.EventCriteria) Test(org.junit.Test)

Example 12 with Api

use of io.gravitee.gateway.handlers.api.definition.Api in project gravitee-gateway by gravitee-io.

the class EndpointDiscoveryConsulVerticle method startWatch.

private void startWatch(Api api) {
    EndpointDiscoveryService discoveryService = api.getServices().get(EndpointDiscoveryService.class);
    if (api.isEnabled() && discoveryService != null && discoveryService.getProvider() == EndpointDiscoveryProvider.CONSUL) {
        LOGGER.info("Add Consul.io support for API id[{}] name[{}]", api.getId(), api.getName());
        ConsulEndpointDiscoveryConfiguration providerConfiguration = (ConsulEndpointDiscoveryConfiguration) discoveryService.getConfiguration();
        URI consulUri = URI.create(providerConfiguration.getUrl());
        ConsulClientOptions options = new ConsulClientOptions().setHost(consulUri.getHost()).setPort((consulUri.getPort() != -1) ? consulUri.getPort() : CONSUL_DEFAULT_PORT).setDc(providerConfiguration.getDc()).setAclToken(providerConfiguration.getAcl());
        if (HTTPS_SCHEME.equalsIgnoreCase(consulUri.getScheme())) {
            // SSL is not configured but the endpoint scheme is HTTPS so let's enable the SSL on Vert.x HTTP client
            // automatically
            options.setSsl(true).setTrustAll(true);
        }
        LOGGER.info("Consul.io configuration: endpoint[{}] dc[{}] acl[{}]", consulUri.toString(), options.getDc(), options.getAclToken());
        Watch<ServiceEntryList> watch = Watch.service(providerConfiguration.getService(), vertx, options);
        watch.setHandler(event -> {
            if (event.succeeded()) {
                LOGGER.debug("Receiving a Consul.io watch event for service: name[{}]", providerConfiguration.getService());
                List<ServiceEntry> entries = event.nextResult().getList();
                // Handle new services or updated services
                for (ServiceEntry service : event.nextResult().getList()) {
                    Service service1 = service.getService();
                    service1.setNodeAddress(service.getNode().getAddress());
                    handleRegisterService(api, service1);
                }
                // Handle de-registered services
                if (event.prevResult() != null) {
                    List<ServiceEntry> oldEntries = event.prevResult().getList();
                    if (oldEntries.size() > entries.size()) {
                        // Select only de-registered services
                        oldEntries.removeAll(entries);
                        for (ServiceEntry oldEntry : oldEntries) {
                            handleDeregisterService(api, oldEntry.getService());
                        }
                    }
                }
            } else {
                LOGGER.info("Unexpected error while watching services catalog", event.cause());
            }
        }).start();
        this.watches.put(api.getId(), watch);
    }
}
Also used : ConsulEndpointDiscoveryConfiguration(io.gravitee.definition.model.services.discovery.consul.ConsulEndpointDiscoveryConfiguration) EventListener(io.gravitee.common.event.EventListener) HttpClientOptions(io.gravitee.definition.model.HttpClientOptions) Logger(org.slf4j.Logger) EndpointDiscoveryService(io.gravitee.definition.model.services.discovery.EndpointDiscoveryService) EndpointDiscoveryProvider(io.gravitee.definition.model.services.discovery.EndpointDiscoveryProvider) LoggerFactory(org.slf4j.LoggerFactory) Event(io.gravitee.common.event.Event) Autowired(org.springframework.beans.factory.annotation.Autowired) Set(java.util.Set) ConsulEndpointDiscoveryConfiguration(io.gravitee.definition.model.services.discovery.consul.ConsulEndpointDiscoveryConfiguration) HashMap(java.util.HashMap) DiscoveredEndpoint(io.gravitee.gateway.services.endpoint.discovery.consul.endpoint.DiscoveredEndpoint) Future(io.vertx.core.Future) io.vertx.ext.consul(io.vertx.ext.consul) Endpoint(io.gravitee.definition.model.Endpoint) List(java.util.List) Reactable(io.gravitee.gateway.reactor.Reactable) EventManager(io.gravitee.common.event.EventManager) AbstractVerticle(io.vertx.core.AbstractVerticle) Map(java.util.Map) Api(io.gravitee.gateway.handlers.api.definition.Api) URI(java.net.URI) ReactorEvent(io.gravitee.gateway.reactor.ReactorEvent) EndpointDiscoveryService(io.gravitee.definition.model.services.discovery.EndpointDiscoveryService) EndpointDiscoveryService(io.gravitee.definition.model.services.discovery.EndpointDiscoveryService) List(java.util.List) URI(java.net.URI)

Example 13 with Api

use of io.gravitee.gateway.handlers.api.definition.Api in project gravitee-gateway by gravitee-io.

the class SyncManagerTest method test_shouldUpdateIfLastEventIsStopAPI.

@Test
public void test_shouldUpdateIfLastEventIsStopAPI() throws Exception {
    io.gravitee.repository.management.model.Api api = new RepositoryApiBuilder().id("api-test").updatedAt(new Date()).definition("test").lifecycleState(LifecycleState.STARTED).build();
    Instant updateDateInst = api.getUpdatedAt().toInstant().plus(Duration.ofHours(1));
    io.gravitee.repository.management.model.Api api2 = new RepositoryApiBuilder().id("api-test").updatedAt(Date.from(updateDateInst)).definition("test").lifecycleState(LifecycleState.STOPPED).build();
    final Api mockApi = mockApi(api);
    mockApi(api2);
    final Event mockEvent = mockEvent(api, EventType.PUBLISH_API);
    final Event mockEvent2 = mockEvent(api2, EventType.STOP_API);
    List<Event> events = new ArrayList<Event>();
    events.add(mockEvent);
    events.add(mockEvent2);
    when(eventRepository.search(any(EventCriteria.class), any(Pageable.class))).thenReturn(new Page<>(Collections.singletonList(mockEvent), 0, 0, 1));
    when(apiRepository.findAll()).thenReturn(Collections.singleton(api));
    when(apiManager.apis()).thenReturn(Collections.singleton(mockApi));
    syncManager.refresh();
    when(eventRepository.search(any(EventCriteria.class), any(Pageable.class))).thenReturn(new Page<>(events, 0, 0, 2));
    when(apiRepository.findAll()).thenReturn(Collections.singleton(api2));
    when(apiManager.get(api.getId())).thenReturn(mockApi);
    syncManager.refresh();
    verify(apiManager).deploy(mockApi);
    verify(apiManager).update(mockApi);
    verify(apiManager, never()).undeploy(any(String.class));
}
Also used : Instant(java.time.Instant) RepositoryApiBuilder(io.gravitee.gateway.services.sync.builder.RepositoryApiBuilder) EventCriteria(io.gravitee.repository.management.api.search.EventCriteria) Pageable(io.gravitee.repository.management.api.search.Pageable) Event(io.gravitee.repository.management.model.Event) Api(io.gravitee.gateway.handlers.api.definition.Api) Test(org.junit.Test)

Example 14 with Api

use of io.gravitee.gateway.handlers.api.definition.Api in project gravitee-gateway by gravitee-io.

the class SyncManagerTest method test_shouldUpdateIfLastEventIsStartAPI.

@Test
public void test_shouldUpdateIfLastEventIsStartAPI() throws Exception {
    io.gravitee.repository.management.model.Api api = new RepositoryApiBuilder().id("api-test").updatedAt(new Date()).definition("test").lifecycleState(LifecycleState.STOPPED).build();
    Instant updateDateInst = api.getUpdatedAt().toInstant().plus(Duration.ofHours(1));
    io.gravitee.repository.management.model.Api api2 = new RepositoryApiBuilder().id("api-test").updatedAt(Date.from(updateDateInst)).definition("test").lifecycleState(LifecycleState.STARTED).build();
    final Api mockApi = mockApi(api);
    mockApi(api2);
    final Event mockEvent = mockEvent(api, EventType.PUBLISH_API);
    final Event mockEvent2 = mockEvent(api2, EventType.START_API);
    List<Event> events = new ArrayList<Event>();
    events.add(mockEvent);
    events.add(mockEvent2);
    when(eventRepository.search(any(EventCriteria.class), any(Pageable.class))).thenReturn(new Page<>(Collections.singletonList(mockEvent), 0, 0, 1));
    when(apiRepository.findAll()).thenReturn(Collections.singleton(api));
    syncManager.refresh();
    when(eventRepository.search(any(EventCriteria.class), any(Pageable.class))).thenReturn(new Page<>(events, 0, 0, 2));
    when(apiRepository.findAll()).thenReturn(Collections.singleton(api2));
    when(apiManager.get(api.getId())).thenReturn(mockApi);
    syncManager.refresh();
    verify(apiManager).deploy(mockApi);
    verify(apiManager).update(mockApi);
    verify(apiManager, never()).undeploy(any(String.class));
}
Also used : Instant(java.time.Instant) RepositoryApiBuilder(io.gravitee.gateway.services.sync.builder.RepositoryApiBuilder) EventCriteria(io.gravitee.repository.management.api.search.EventCriteria) Pageable(io.gravitee.repository.management.api.search.Pageable) Event(io.gravitee.repository.management.model.Event) Api(io.gravitee.gateway.handlers.api.definition.Api) Test(org.junit.Test)

Example 15 with Api

use of io.gravitee.gateway.handlers.api.definition.Api in project gravitee-gateway by gravitee-io.

the class SyncManagerTest method test_twiceWithTwoApis_apiToUpdate.

@Test
public void test_twiceWithTwoApis_apiToUpdate() throws Exception {
    io.gravitee.repository.management.model.Api api = new RepositoryApiBuilder().id("api-test").updatedAt(new Date()).definition("test").build();
    Instant updateDateInst = api.getUpdatedAt().toInstant().plus(Duration.ofHours(1));
    io.gravitee.repository.management.model.Api api2 = new RepositoryApiBuilder().id("api-test").updatedAt(Date.from(updateDateInst)).definition("test2").build();
    final Api mockApi = mockApi(api);
    mockApi(api2);
    final Event mockEvent = mockEvent(api, EventType.PUBLISH_API);
    final Event mockEvent2 = mockEvent(api2, EventType.PUBLISH_API);
    List<Event> events = new ArrayList<Event>();
    events.add(mockEvent);
    events.add(mockEvent2);
    when(eventRepository.search(any(EventCriteria.class), any(Pageable.class))).thenReturn(new Page<>(events, 0, 0, 1));
    when(apiRepository.findAll()).thenReturn(Collections.singleton(api));
    syncManager.refresh();
    when(apiRepository.findAll()).thenReturn(Collections.singleton(api2));
    when(apiManager.get(api.getId())).thenReturn(mockApi);
    syncManager.refresh();
    verify(apiManager).deploy(mockApi);
    verify(apiManager).update(mockApi);
    verify(apiManager, never()).undeploy(any(String.class));
}
Also used : Instant(java.time.Instant) RepositoryApiBuilder(io.gravitee.gateway.services.sync.builder.RepositoryApiBuilder) EventCriteria(io.gravitee.repository.management.api.search.EventCriteria) Pageable(io.gravitee.repository.management.api.search.Pageable) Event(io.gravitee.repository.management.model.Event) Api(io.gravitee.gateway.handlers.api.definition.Api) Test(org.junit.Test)

Aggregations

Api (io.gravitee.gateway.handlers.api.definition.Api)40 Test (org.junit.Test)23 EventCriteria (io.gravitee.repository.management.api.search.EventCriteria)18 Event (io.gravitee.repository.management.model.Event)17 RepositoryApiBuilder (io.gravitee.gateway.services.sync.builder.RepositoryApiBuilder)16 Pageable (io.gravitee.repository.management.api.search.Pageable)15 Instant (java.time.Instant)5 Autowired (org.springframework.beans.factory.annotation.Autowired)5 Plan (io.gravitee.gateway.handlers.api.definition.Plan)4 ApiManager (io.gravitee.gateway.handlers.api.manager.ApiManager)4 IOException (java.io.IOException)4 Logger (org.slf4j.Logger)4 LoggerFactory (org.slf4j.LoggerFactory)4 GraviteeMapper (io.gravitee.definition.jackson.datatype.GraviteeMapper)3 Path (io.gravitee.definition.model.Path)3 Map (java.util.Map)3 Collectors (java.util.stream.Collectors)3 TypeReference (com.fasterxml.jackson.core.type.TypeReference)2 ObjectMapper (com.fasterxml.jackson.databind.ObjectMapper)2 Endpoint (io.gravitee.definition.model.Endpoint)2