package org.cloudfoundry.community.servicebroker.brooklyn.controller;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.io.IOException;
import java.io.InputStream;
import java.util.Map;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import org.apache.commons.io.IOUtils;
import org.cloudfoundry.community.servicebroker.brooklyn.model.BrooklynServiceInstance;
import org.cloudfoundry.community.servicebroker.brooklyn.repository.BrooklynServiceInstanceRepository;
import org.cloudfoundry.community.servicebroker.brooklyn.service.BrooklynRestAdmin;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import com.google.common.collect.ImmutableMap;
public class BrooklynControllerTest {
@Mock
private BrooklynServiceInstanceRepository instanceRepository;
@Mock
private BrooklynRestAdmin admin;
@Mock
private Future<Map<String, Object>> futureMap;
@Mock
private Future<Boolean> futureBoolean;
private BrooklynController brooklynController;
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
brooklynController = new BrooklynController(admin, instanceRepository);
}
@Test
public void testCreate() throws IOException {
final String source = "Hello world";
final InputStream inputStream = IOUtils.toInputStream(source, "UTF-8");
brooklynController.create(inputStream);
verify(admin).postBlueprint(source);
}
@Test
public void testDeleteDoesNotThrowsException() throws Exception {
final String name = "foo";
final String version = "1.0.0";
Mockito.doThrow(new Exception()).when(admin).deleteCatalogEntry(any(String.class), any(String.class));
brooklynController.delete(name, version);
}
@Test
public void testDelete() throws Exception {
final String name = "foo";
final String version = "1.0.0";
brooklynController.delete(name, version);
verify(admin).deleteCatalogEntry(name, version);
}
@Test
public void testInvokeReturnsObjectIfNoInstance() {
final String application = "foo";
final String entity = "bar";
final String effector = "zoo";
final Map<String, Object> params = ImmutableMap.of();
when(instanceRepository.findOne(any(String.class))).thenReturn(null);
final Object response = brooklynController.invoke(application, entity, effector, params);
assertTrue(response instanceof Object);
}
@Test
public void testInvokeReturnsObjectIfInstance() {
final String appId = "hello";
final String serviceId = "world";
final String application = "foo";
final String entity = "bar";
final String effector = "zoo";
final Map<String, Object> params = ImmutableMap.of();
when(instanceRepository.findOne(any(String.class))).thenReturn(new BrooklynServiceInstance(appId, serviceId));
brooklynController.invoke(application, entity, effector, params);
verify(admin).invokeEffector(serviceId, entity, effector, params);
}
@Test
public void testEffectorsReturnsEmptyCollectionIfNoInstance() {
final String application = "foo";
when(instanceRepository.findOne(any(String.class))).thenReturn(null);
final Map<String, Object> effectors = brooklynController.effectors(application);
assertTrue(effectors.isEmpty());
}
@Test
public void testEffectorsReturnsCollectionIfInstance() throws ExecutionException, InterruptedException {
final String appId = "hello";
final String serviceId = "world";
final String application = "foo";
final ImmutableMap<String, Object> effectorsObject = ImmutableMap.of("foo", "bar", "hello", "world");
when(instanceRepository.findOne(any(String.class))).thenReturn(new BrooklynServiceInstance(appId, serviceId));
when(futureMap.get()).thenReturn(effectorsObject);
when(admin.getApplicationEffectors(any(String.class))).thenReturn(futureMap);
final Map<String, Object> effectors = brooklynController.effectors(application);
assertFalse(effectors.isEmpty());
assertEquals(effectors, effectorsObject);
}
@Test
public void testSensorsReturnsEmptyCollectionIfNoInstance() {
final String application = "foo";
when(instanceRepository.findOne(any(String.class))).thenReturn(null);
final Map<String, Object> effectors = brooklynController.sensors(application);
assertTrue(effectors.isEmpty());
}
@Test
public void testSensorsReturnsCollectionIfInstance() throws ExecutionException, InterruptedException {
final String appId = "hello";
final String serviceId = "world";
final String application = "foo";
final ImmutableMap<String, Object> effectorsObject = ImmutableMap.of("foo", "bar", "hello", "world");
when(instanceRepository.findOne(any(String.class))).thenReturn(new BrooklynServiceInstance(appId, serviceId));
when(futureMap.get()).thenReturn(effectorsObject);
when(admin.getApplicationSensors(any(String.class))).thenReturn(futureMap);
final Map<String, Object> effectors = brooklynController.sensors(application);
assertFalse(effectors.isEmpty());
assertEquals(effectors, effectorsObject);
}
@Test
public void testIsRunningReturnsFalseIfNoInstance() {
final String application = "foo";
when(instanceRepository.findOne(any(String.class))).thenReturn(null);
final Boolean isRunning = brooklynController.isRunning(application);
assertFalse(isRunning);
}
@Test
public void testSensorsReturnsSensorValueIfInstance() throws ExecutionException, InterruptedException {
final String appId = "hello";
final String serviceId = "world";
final String application = "foo";
final Boolean isRunningObject = true;
final ImmutableMap<String, Object> effectorsObject = ImmutableMap.of("foo", "bar", "hello", "world");
when(instanceRepository.findOne(any(String.class))).thenReturn(new BrooklynServiceInstance(appId, serviceId));
when(futureBoolean.get()).thenReturn(isRunningObject);
when(admin.isApplicationRunning(any(String.class))).thenReturn(futureBoolean);
final Boolean isRunning = brooklynController.isRunning(application);
assertEquals(isRunning, isRunningObject);
}
}