use of io.gravitee.repository.management.model.Event 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));
}
use of io.gravitee.repository.management.model.Event 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));
}
use of io.gravitee.repository.management.model.Event in project gravitee-gateway by gravitee-io.
the class SyncManagerTest method test_twiceWithTwoApis.
@Test
public void test_twiceWithTwoApis() 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);
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();
io.gravitee.repository.management.model.Api api2 = new RepositoryApiBuilder().id("api-test-2").updatedAt(new Date()).definition("test2").build();
final Api mockApi2 = mockApi(api2);
final Event mockEvent2 = mockEvent(api2, EventType.PUBLISH_API);
Set<io.gravitee.repository.management.model.Api> apis = new HashSet<>();
apis.add(api);
apis.add(api2);
List<Event> events = new ArrayList<>();
events.add(mockEvent);
events.add(mockEvent2);
when(eventRepository.search(any(EventCriteria.class), any(Pageable.class))).thenReturn(new Page<>(events, 0, 0, 1), new Page<>(Collections.emptyList(), 0, 0, 1));
when(apiRepository.findAll()).thenReturn(apis);
syncManager.refresh();
verify(apiManager, times(2)).deploy(argThat(new ArgumentMatcher<Api>() {
@Override
public boolean matches(Object argument) {
final Api api = (Api) argument;
return api.getId().equals(mockApi.getId()) || api2.getId().equals(mockApi2.getId());
}
}));
verify(apiManager, never()).update(any(Api.class));
verify(apiManager, never()).undeploy(any(String.class));
}
use of io.gravitee.repository.management.model.Event in project gravitee-gateway by gravitee-io.
the class SyncManagerTest method test_not_deployApiWithTagExclusion.
@Test
public void test_not_deployApiWithTagExclusion() 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);
mockApi.setTags(new HashSet<>(Arrays.asList(new String[] { "test" })));
when(gatewayConfiguration.shardingTags()).thenReturn(Optional.of(Collections.singletonList("!test")));
when(apiRepository.findAll()).thenReturn(Collections.singleton(api));
final Event mockEvent = mockEvent(api, EventType.PUBLISH_API);
when(eventRepository.search(any(EventCriteria.class), any(Pageable.class))).thenReturn(new Page<>(Collections.singletonList(mockEvent), 0, 0, 1));
syncManager.refresh();
verify(apiManager, never()).deploy(mockApi);
verify(apiManager, never()).update(any(Api.class));
}
use of io.gravitee.repository.management.model.Event in project gravitee-management-rest-api by gravitee-io.
the class SyncManager method refresh.
public void refresh() {
logger.debug("Refreshing state...");
try {
// Extract all registered APIs
Map<String, io.gravitee.repository.management.model.Api> apis = apiRepository.findAll().stream().collect(Collectors.toMap(io.gravitee.repository.management.model.Api::getId, api -> api));
// Get last event for each API
Map<String, Event> events = new HashMap<>();
apis.keySet().forEach(api -> {
Event event = getLastEvent(api);
events.put(api, event);
});
// Determine API which must be stopped and stop them
events.entrySet().stream().filter(apiEvent -> {
Event event = apiEvent.getValue();
return event != null && (event.getType() == EventType.STOP_API || event.getType() == EventType.UNPUBLISH_API);
}).forEach(apiEvent -> apiManager.undeploy(apiEvent.getKey()));
// Determine API which must be deployed
events.entrySet().stream().filter(apiEvent -> {
Event event = apiEvent.getValue();
return event != null && (event.getType() == EventType.START_API || event.getType() == EventType.PUBLISH_API);
}).forEach(apiEvent -> {
try {
// Read API definition from event
io.gravitee.repository.management.model.Api payloadApi = objectMapper.readValue(apiEvent.getValue().getPayload(), io.gravitee.repository.management.model.Api.class);
// API to deploy
ApiEntity apiToDeploy = convert(payloadApi);
if (apiToDeploy != null) {
// Get deployed API
ApiEntity deployedApi = apiManager.get(apiToDeploy.getId());
// API is not yet deployed, so let's do it !
if (deployedApi == null) {
apiManager.deploy(apiToDeploy);
} else {
if (deployedApi.getDeployedAt().before(apiToDeploy.getDeployedAt())) {
apiManager.update(apiToDeploy);
}
}
}
} catch (IOException ioe) {
logger.error("Error while determining deployed APIs store into events payload", ioe);
}
});
lastRefreshAt = System.currentTimeMillis();
} catch (TechnicalException te) {
logger.error("Unable to sync instance", te);
}
}
Aggregations