package com.orange.cepheus.cep.tenant; import com.orange.cepheus.cep.ComplexEventProcessor; import com.orange.cepheus.cep.EventMapper; import com.orange.cepheus.cep.SubscriptionManager; import com.orange.cepheus.cep.exception.ConfigurationException; import com.orange.cepheus.cep.exception.PersistenceException; import com.orange.cepheus.cep.persistence.Persistence; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InOrder; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.mockito.runners.MockitoJUnitRunner; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import java.util.Collection; import java.util.LinkedList; import static org.mockito.Mockito.*; /** * Test class for TenantInit. */ @RunWith(MockitoJUnitRunner.class) public class TenantInitTest { @Mock ApplicationContext applicationContext; @Mock EventMapper eventMapper; @Mock ComplexEventProcessor complexEventProcessor; @Mock SubscriptionManager subscriptionManager; @Mock Persistence persistence; @Mock TenantFilter tenantFilter; @Autowired @InjectMocks public TenantInit tenantInit; @Before public void setUp() { MockitoAnnotations.initMocks(this); } @Test public void checkNoTenantConfigurationLoaded() throws PersistenceException { when(persistence.listConfigurations()).thenReturn(new LinkedList<>()); tenantInit.loadConfigurationOnStartup(); verify(tenantFilter, never()).forceTenantScope(any()); verify(persistence, never()).loadConfiguration(any()); } @Test public void checkOkTenantConfigurationLoaded() throws PersistenceException, ConfigurationException { Collection<String> configurations = new LinkedList<>(); configurations.add("smartcity/team1"); when(persistence.listConfigurations()).thenReturn(configurations); when(applicationContext.getBean("eventMapper")).thenReturn(eventMapper); when(applicationContext.getBean("complexEventProcessor")).thenReturn(complexEventProcessor); when(applicationContext.getBean("subscriptionManager")).thenReturn(subscriptionManager); InOrder inOrder = inOrder( tenantFilter ); tenantInit.loadConfigurationOnStartup(); verify(tenantFilter, atLeastOnce()).forceTenantScope("smartcity/team1"); verify(tenantFilter, atLeastOnce()).forceTenantScope(null); inOrder.verify(tenantFilter).forceTenantScope("smartcity/team1"); inOrder.verify(tenantFilter).forceTenantScope(null); verify(persistence, atLeastOnce()).loadConfiguration("smartcity/team1"); verify(eventMapper, atLeastOnce()).setConfiguration(any()); verify(complexEventProcessor, atLeastOnce()).setConfiguration(any()); verify(subscriptionManager, atLeastOnce()).setConfiguration(any()); } @Test public void checkKoTenantConfigurationLoaded() throws PersistenceException, ConfigurationException { Collection<String> configurations = new LinkedList<>(); configurations.add("smartcity/team1"); doThrow(PersistenceException.class).when(persistence).loadConfiguration("smartcity/team1"); when(persistence.listConfigurations()).thenReturn(configurations); when(applicationContext.getBean("eventMapper")).thenReturn(eventMapper); when(applicationContext.getBean("complexEventProcessor")).thenReturn(complexEventProcessor); when(applicationContext.getBean("subscriptionManager")).thenReturn(subscriptionManager); InOrder inOrder = inOrder( tenantFilter ); tenantInit.loadConfigurationOnStartup(); verify(tenantFilter, atLeastOnce()).forceTenantScope("smartcity/team1"); verify(tenantFilter, atLeastOnce()).forceTenantScope(null); inOrder.verify(tenantFilter).forceTenantScope("smartcity/team1"); inOrder.verify(tenantFilter).forceTenantScope(null); verify(persistence, atLeastOnce()).loadConfiguration("smartcity/team1"); verify(eventMapper, never()).setConfiguration(any()); verify(complexEventProcessor, never()).setConfiguration(any()); verify(subscriptionManager, never()).setConfiguration(any()); } @After public void resetMock() { reset(eventMapper); reset(complexEventProcessor); reset(subscriptionManager); reset(applicationContext); reset(persistence); reset(tenantFilter); } }