package se.kth.karamel.backend.launcher.nova;
import com.google.common.base.Optional;
import org.jclouds.ContextBuilder;
import org.jclouds.compute.ComputeServiceContext;
import org.jclouds.openstack.nova.v2_0.NovaApi;
import org.jclouds.openstack.nova.v2_0.compute.NovaComputeService;
import org.jclouds.openstack.nova.v2_0.extensions.KeyPairApi;
import org.jclouds.openstack.nova.v2_0.extensions.SecurityGroupApi;
import org.junit.Before;
import org.junit.Test;
import se.kth.karamel.common.util.NovaCredentials;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class NovaContextTest {
private NovaCredentials credentials;
private ContextBuilder builder;
private ComputeServiceContext serviceContext;
private NovaComputeService novaComputeService;
private NovaApi novaApi;
private SecurityGroupApi securityGroupApi;
private KeyPairApi keyPairApi;
@Before
public void setup() {
credentials = mock(NovaCredentials.class);
builder = mock(ContextBuilder.class);
serviceContext = mock(ComputeServiceContext.class);
novaComputeService = mock(NovaComputeService.class);
securityGroupApi = mock(SecurityGroupApi.class);
novaApi = mock(NovaApi.class);
keyPairApi = mock(KeyPairApi.class);
ComputeServiceContext context = mock(ComputeServiceContext.class);
Optional<SecurityGroupApi> securityGroupApiOptional = mock(Optional.class);
Optional<KeyPairApi> keyPairApiOptional = mock(Optional.class);
when(credentials.getAccountName()).thenReturn("pepe");
when(credentials.getAccountPass()).thenReturn("1234");
when(credentials.getEndpoint()).thenReturn("nova endpoint");
when(credentials.getRegion()).thenReturn("region");
when(builder.credentials(credentials.getAccountName(), credentials.getAccountPass())).thenReturn(builder);
when(builder.endpoint(credentials.getEndpoint())).thenReturn(builder);
when(builder.buildView(ComputeServiceContext.class)).thenReturn(serviceContext);
when(serviceContext.getComputeService()).thenReturn(novaComputeService);
when(novaComputeService.getContext()).thenReturn(context);
when(context.unwrapApi(NovaApi.class)).thenReturn(novaApi);
when(novaApi.getSecurityGroupApi(credentials.getRegion())).thenReturn(securityGroupApiOptional);
when(securityGroupApiOptional.get()).thenReturn(securityGroupApi);
when(novaApi.getKeyPairApi(credentials.getRegion())).thenReturn(keyPairApiOptional);
when(keyPairApiOptional.get()).thenReturn(keyPairApi);
}
@Test
public void generateContextBuilder() {
ContextBuilder contextBuilder = NovaContext.buildContext(credentials);
assertNotNull(contextBuilder);
}
@Test
public void sanityCheck() {
NovaContext novaContext = new NovaContext(credentials,builder);
assertNotNull(novaContext.getComputeService());
assertNotNull(novaContext.getNovaApi());
assertNotNull(novaContext.getNovaCredentials());
assertNotNull(novaContext.getKeyPairApi());
assertNotNull(novaContext.getSecurityGroupApi());
assertEquals("pepe",credentials.getAccountName());
assertEquals("1234",credentials.getAccountPass());
assertEquals("nova endpoint", credentials.getEndpoint());
}
}