Search in sources :

Example 1 with Api

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

the class ApiDeployerStatement method loadApi.

private Api loadApi(String apiDescriptorPath) throws Exception {
    URL jsonFile = ApiDeployerStatement.class.getResource(apiDescriptorPath);
    Api api = new GraviteeMapper().readValue(jsonFile, Api.class);
    if (ApiLoaderInterceptor.class.isAssignableFrom(target.getClass())) {
        ApiLoaderInterceptor loader = (ApiLoaderInterceptor) target;
        loader.before(api);
    }
    boolean enhanceHttpPort = target.getClass().getAnnotation(ApiDescriptor.class).enhanceHttpPort();
    if (enhanceHttpPort) {
        List<Endpoint> endpoints = new ArrayList<>(api.getProxy().getEndpoints());
        List<Integer> bindPorts = SocketUtils.getBindPorts();
        for (int i = 0; i < bindPorts.size(); i++) {
            int port = SocketUtils.getBindPorts().get(i);
            if (i < endpoints.size()) {
                Endpoint edpt = endpoints.get(i);
                URL target = new URL(edpt.getTarget());
                URL newTarget = new URL(target.getProtocol(), target.getHost(), port, target.getFile());
                edpt.setTarget(newTarget.toString());
                edpt.setName(UUID.random().toString());
            } else {
                // Use the first defined endpoint as reference
                HttpEndpoint first = (HttpEndpoint) endpoints.get(0);
                URL target = new URL(first.getTarget());
                URL newTarget = new URL(target.getProtocol(), target.getHost(), port, target.getFile());
                HttpEndpoint edpt = new HttpEndpoint(UUID.random().toString(), newTarget.toString());
                edpt.setHttpClientOptions(first.getHttpClientOptions());
                api.getProxy().getEndpoints().add(edpt);
            }
        }
    }
    if (ApiLoaderInterceptor.class.isAssignableFrom(target.getClass())) {
        ApiLoaderInterceptor loader = (ApiLoaderInterceptor) target;
        loader.after(api);
    }
    return api;
}
Also used : ApiLoaderInterceptor(io.gravitee.gateway.standalone.ApiLoaderInterceptor) ApiDescriptor(io.gravitee.gateway.standalone.junit.annotation.ApiDescriptor) ArrayList(java.util.ArrayList) HttpEndpoint(io.gravitee.definition.model.endpoint.HttpEndpoint) URL(java.net.URL) Endpoint(io.gravitee.definition.model.Endpoint) HttpEndpoint(io.gravitee.definition.model.endpoint.HttpEndpoint) Endpoint(io.gravitee.definition.model.Endpoint) HttpEndpoint(io.gravitee.definition.model.endpoint.HttpEndpoint) GraviteeMapper(io.gravitee.definition.jackson.datatype.GraviteeMapper) Api(io.gravitee.gateway.handlers.api.definition.Api)

Example 2 with Api

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

the class ApiDeployerStatement method evaluate.

@Override
public void evaluate() throws Throwable {
    URL home = ApiDeployerStatement.class.getResource("/gravitee-01/");
    System.setProperty("gravitee.home", URLDecoder.decode(home.getPath(), "UTF-8"));
    container = new Container();
    if (target instanceof PolicyRegister) {
        ((PolicyRegister) target).register(container.getApplicationContext().getBean(PolicyPluginManager.class));
    }
    container.start();
    Thread.sleep(1000);
    ApiManager apiManager = container.getApplicationContext().getBean(ApiManager.class);
    Api api = loadApi(target.getClass().getAnnotation(ApiDescriptor.class).value());
    try {
        apiManager.deploy(api);
        base.evaluate();
    } finally {
        apiManager.undeploy(api.getId());
        container.stop();
    }
}
Also used : ApiManager(io.gravitee.gateway.handlers.api.manager.ApiManager) Container(io.gravitee.gateway.standalone.Container) PolicyRegister(io.gravitee.gateway.standalone.policy.PolicyRegister) Api(io.gravitee.gateway.handlers.api.definition.Api) URL(java.net.URL) PolicyPluginManager(io.gravitee.plugin.policy.PolicyPluginManager)

Example 3 with Api

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

the class ApiManagerTest method add_simpleApi_validationError.

@Test
public void add_simpleApi_validationError() {
    Api api = new ApiDefinitionBuilder().name("api-test").proxy(new ProxyDefinitionBuilder().contextPath("/team").target("default", "http://localhost/target").build()).build();
    doThrow(new ValidationException()).when(validator).validate(api);
    apiManager.deploy(api);
    verify(eventManager, never()).publishEvent(ReactorEvent.DEPLOY, api);
}
Also used : ProxyDefinitionBuilder(io.gravitee.gateway.handlers.api.builders.ProxyDefinitionBuilder) ValidationException(io.gravitee.gateway.handlers.api.validator.ValidationException) ApiDefinitionBuilder(io.gravitee.gateway.handlers.api.builders.ApiDefinitionBuilder) Api(io.gravitee.gateway.handlers.api.definition.Api) Test(org.junit.Test)

Example 4 with Api

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

the class ApiManagerTest method add_simpleApi.

@Test
public void add_simpleApi() {
    Api api = new ApiDefinitionBuilder().name("api-test").proxy(new ProxyDefinitionBuilder().contextPath("/team").target("default", "http://localhost/target").build()).build();
    api.setPlans(Collections.singletonList(new Plan()));
    apiManager.deploy(api);
    verify(eventManager, only()).publishEvent(ReactorEvent.DEPLOY, api);
}
Also used : ProxyDefinitionBuilder(io.gravitee.gateway.handlers.api.builders.ProxyDefinitionBuilder) ApiDefinitionBuilder(io.gravitee.gateway.handlers.api.builders.ApiDefinitionBuilder) Api(io.gravitee.gateway.handlers.api.definition.Api) Plan(io.gravitee.gateway.handlers.api.definition.Plan) Test(org.junit.Test)

Example 5 with Api

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

the class ApiValidatorTest method validate_emptyPathDefinition.

@Test(expected = ValidationException.class)
public void validate_emptyPathDefinition() {
    Api definition = new Api();
    definition.setName("api-test");
    definition.setPaths(new HashMap<>());
    new ApiValidator().validate(definition);
}
Also used : 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