package org.openstack.atlas.adapter.stm;
import junit.framework.Assert;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.experimental.runners.Enclosed;
import org.junit.runner.RunWith;
import org.mockito.Matchers;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.mockito.Spy;
import org.openstack.atlas.adapter.LoadBalancerEndpointConfiguration;
import org.openstack.atlas.adapter.helpers.ResourceTranslator;
import org.openstack.atlas.adapter.helpers.StmAdapterImplTestHelper;
import org.openstack.atlas.adapter.helpers.TrafficScriptHelper;
import org.openstack.atlas.adapter.helpers.ZxtmNameBuilder;
import org.openstack.atlas.service.domain.entities.*;
import org.openstack.atlas.service.domain.pojos.ZeusSslTermination;
import org.openstack.atlas.service.domain.util.Constants;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PowerMockIgnore;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import org.rackspace.stingray.client.StingrayRestClient;
import org.rackspace.stingray.client.monitor.Monitor;
import org.rackspace.stingray.client.pool.Pool;
import org.rackspace.stingray.client.pool.PoolBasic;
import org.rackspace.stingray.client.pool.PoolProperties;
import org.rackspace.stingray.client.protection.Protection;
import org.rackspace.stingray.client.ssl.keypair.Keypair;
import org.rackspace.stingray.client.traffic.ip.TrafficIp;
import org.rackspace.stingray.client.virtualserver.VirtualServer;
import org.rackspace.stingray.client.virtualserver.VirtualServerBasic;
import org.rackspace.stingray.client.virtualserver.VirtualServerProperties;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import static org.mockito.Mockito.*;
@RunWith(Enclosed.class)
public class StmAdapterImplTest extends StmAdapterImplTestHelper {
@RunWith(PowerMockRunner.class)
@PowerMockIgnore({"org.bouncycastle.*"})
@PrepareForTest({ResourceTranslator.class})
public static class WhenModifyingLoadbalancerResources {
private String vsName;
private String secureVsName;
private LoadBalancer loadBalancer;
private ResourceTranslator resourceTranslator;
@Mock
private StmAdapterResources resources;
@Mock
private LoadBalancerEndpointConfiguration config;
@Mock
private StingrayRestClient client;
@Spy
private StmAdapterImpl adapterSpy = new StmAdapterImpl();
@Before
public void standUp() throws Exception {
MockitoAnnotations.initMocks(this);
loadBalancer = generateLoadBalancer();
vsName = ZxtmNameBuilder.genVSName(loadBalancer);
secureVsName = ZxtmNameBuilder.genSslVSName(loadBalancer);
resourceTranslator = spy(new ResourceTranslator());
PowerMockito.mockStatic(ResourceTranslator.class);
PowerMockito.when(ResourceTranslator.getNewResourceTranslator()).thenReturn(resourceTranslator);
when(adapterSpy.getResources()).thenReturn(resources);
when(resources.loadSTMRestClient(config)).thenReturn(client);
doNothing().when(adapterSpy).setErrorFile(config, loadBalancer, loadBalancer.getUserPages().getErrorpage());
doNothing().when(adapterSpy).deleteVirtualIps(config, loadBalancer);
}
@After
public void tearDown() {
//TODO figure out if I need to do any actual cleanup
}
@Test
public void testCreateLoadBalancer() throws Exception {
adapterSpy.createLoadBalancer(config, loadBalancer);
verify(resources).loadSTMRestClient(config);
verify(resourceTranslator).translateLoadBalancerResource(config, vsName, loadBalancer, loadBalancer);
verify(resources).createPersistentClasses(config);
//verify(resources).updateHealthMonitor(eq(config), eq(client), eq(vsName), Matchers.any(Monitor.class)); //TODO: this should be passing, but if the LB has SSL it won't
verify(resources).updateProtection(eq(client), eq(vsName), Matchers.any(Protection.class));
verify(resources).updateVirtualIps(eq(client), eq(vsName), anyMapOf(String.class, TrafficIp.class));
verify(resources).updatePool(eq(client), eq(vsName), Matchers.any(Pool.class));
verify(resources).updateVirtualServer(eq(client), eq(vsName), Matchers.any(VirtualServer.class));
verify(client).destroy();
}
@Test
public void testUpdateLoadBalancer() throws Exception {
adapterSpy.updateLoadBalancer(config, loadBalancer, loadBalancer, null);
verify(resources).loadSTMRestClient(config);
verify(resourceTranslator).translateLoadBalancerResource(config, vsName, loadBalancer, loadBalancer);
//verify(resources).updateHealthMonitor(eq(config), eq(client), eq(vsName), Matchers.any(Monitor.class)); //TODO: this should be passing, but if the LB has SSL it won't
verify(resources).updateProtection(eq(client), eq(vsName), Matchers.any(Protection.class));
verify(resources).updateVirtualIps(eq(client), eq(vsName), anyMapOf(String.class, TrafficIp.class));
verify(adapterSpy).setErrorFile(config, loadBalancer, loadBalancer.getUserPages().getErrorpage());
verify(resources).updatePool(eq(client), eq(vsName), Matchers.any(Pool.class));
verify(resources).updateVirtualServer(eq(client), eq(vsName), Matchers.any(VirtualServer.class));
verify(resources).updateVirtualServer(eq(client), eq(secureVsName), Matchers.any(VirtualServer.class));
verify(client).destroy();
}
@Test
public void testDeleteLoadBalancer() throws Exception {
adapterSpy.deleteLoadBalancer(config, loadBalancer);
verify(resources).loadSTMRestClient(config);
verify(resources).deleteRateLimit(config, loadBalancer, vsName);
verify(resources).deleteHealthMonitor(client, vsName);
verify(resources).deleteProtection(client, vsName);
verify(adapterSpy).deleteVirtualIps(config, loadBalancer);
verify(resources).deletePool(client, vsName);
verify(resources).deleteVirtualServer(client, vsName);
verify(resources).deleteVirtualServer(client, secureVsName);
verify(client).destroy();
}
}
@RunWith(PowerMockRunner.class)
@PowerMockIgnore({"org.bouncycastle.*"})
@PrepareForTest(ResourceTranslator.class)
public static class WhenModifyingVirtualIpResources {
private String vsName;
private LoadBalancer loadBalancer;
private ResourceTranslator resourceTranslator;
@Mock
private StmAdapterResources resources;
@Mock
private LoadBalancerEndpointConfiguration config;
@Mock
private StingrayRestClient client;
@Spy
private StmAdapterImpl adapterSpy = new StmAdapterImpl();
@Before
public void standUp() throws Exception {
MockitoAnnotations.initMocks(this);
loadBalancer = generateLoadBalancer();
vsName = ZxtmNameBuilder.genVSName(loadBalancer);
resourceTranslator = spy(new ResourceTranslator());
PowerMockito.mockStatic(ResourceTranslator.class);
PowerMockito.when(ResourceTranslator.getNewResourceTranslator()).thenReturn(resourceTranslator);
PowerMockito.mockStatic(TrafficScriptHelper.class);
when(adapterSpy.getResources()).thenReturn(resources);
when(resources.loadSTMRestClient(config)).thenReturn(client);
}
@After
public void tearDown() {
//TODO figure out if I need to do any actual cleanup
}
@Test
public void testUpdateVirtualIps() throws Exception {
adapterSpy.updateVirtualIps(config, loadBalancer);
verify(resources).loadSTMRestClient(config);
verify(resourceTranslator).translateLoadBalancerResource(config, vsName, loadBalancer, loadBalancer);
verify(resources).updateVirtualIps(eq(client), eq(vsName), anyMapOf(String.class, TrafficIp.class));
verify(resources).updateVirtualServer(eq(client), eq(vsName), any(VirtualServer.class));
verify(client).destroy();
}
@Test
public void testDeleteVirtualIps() throws Exception {
List<Integer> vipsToDelete = new ArrayList<Integer>();
for (LoadBalancerJoinVip vip : loadBalancer.getLoadBalancerJoinVipSet())
vipsToDelete.add(vip.getVirtualIp().getId());
adapterSpy.deleteVirtualIps(config, loadBalancer, vipsToDelete, null);
verify(resources).loadSTMRestClient(config);
verify(resourceTranslator, times(2)).translateLoadBalancerResource(config, vsName, loadBalancer, loadBalancer, false);
verify(loadBalancer.getLoadBalancerJoinVipSet()).removeAll(anySetOf(LoadBalancerJoinVip.class));
verify(loadBalancer.getLoadBalancerJoinVipSet()).addAll(anySetOf(LoadBalancerJoinVip.class));
verify(client).deleteTrafficIp(anyString());
verify(resources).updateVirtualServer(eq(client), eq(vsName), any(VirtualServer.class));
verify(client).destroy();
}
}
@RunWith(PowerMockRunner.class)
@PowerMockIgnore({"org.bouncycastle.*"})
@PrepareForTest(ResourceTranslator.class)
public static class WhenModifyingHealthMonitorResources {
private String vsName;
private LoadBalancer loadBalancer;
private ResourceTranslator resourceTranslator;
@Mock
private StmAdapterResources resources;
@Mock
private LoadBalancerEndpointConfiguration config;
@Mock
private StingrayRestClient client;
@Spy
private StmAdapterImpl adapterSpy = new StmAdapterImpl();
@Before
public void standUp() throws Exception {
MockitoAnnotations.initMocks(this);
loadBalancer = generateLoadBalancer();
vsName = ZxtmNameBuilder.genVSName(loadBalancer);
resourceTranslator = spy(new ResourceTranslator());
PowerMockito.mockStatic(ResourceTranslator.class);
PowerMockito.when(ResourceTranslator.getNewResourceTranslator()).thenReturn(resourceTranslator);
when(adapterSpy.getResources()).thenReturn(resources);
when(resources.loadSTMRestClient(config)).thenReturn(client);
}
@After
public void tearDown() {
//TODO figure out if I need to do any actual cleanup
}
@Test
public void testUpdateHealthMonitor() throws Exception {
adapterSpy.updateHealthMonitor(config, loadBalancer);
verify(resources).loadSTMRestClient(config);
verify(resourceTranslator).translateLoadBalancerResource(config, vsName, loadBalancer, loadBalancer);
verify(resources).updateHealthMonitor(eq(client), eq(vsName), Matchers.any(Monitor.class));
verify(resources).updatePool(eq(client), eq(vsName), Matchers.any(Pool.class));
verify(client).destroy();
}
@Test
public void testDeleteHealthMonitor() throws Exception {
adapterSpy.deleteHealthMonitor(config, loadBalancer);
verify(resources).loadSTMRestClient(config);
verify(resources).deleteHealthMonitor(client, vsName);
verify(client).destroy();
}
}
@RunWith(PowerMockRunner.class)
@PowerMockIgnore({"org.bouncycastle.*"})
@PrepareForTest(ResourceTranslator.class)
public static class WhenModifyingProtectionResources {
private String vsName;
private LoadBalancer loadBalancer;
private ResourceTranslator resourceTranslator;
@Mock
private StmAdapterResources resources;
@Mock
private LoadBalancerEndpointConfiguration config;
@Mock
private StingrayRestClient client;
@Spy
private StmAdapterImpl adapterSpy = new StmAdapterImpl();
@Before
public void standUp() throws Exception {
MockitoAnnotations.initMocks(this);
loadBalancer = generateLoadBalancer();
vsName = ZxtmNameBuilder.genVSName(loadBalancer);
resourceTranslator = spy(new ResourceTranslator());
PowerMockito.mockStatic(ResourceTranslator.class);
PowerMockito.when(ResourceTranslator.getNewResourceTranslator()).thenReturn(resourceTranslator);
when(adapterSpy.getResources()).thenReturn(resources);
when(resources.loadSTMRestClient(config)).thenReturn(client);
}
@After
public void tearDown() {
//TODO figure out if I need to do any actual cleanup
}
@Test
public void testUpdateProtection() throws Exception {
adapterSpy.updateProtection(config, loadBalancer);
verify(resources).loadSTMRestClient(config);
verify(resourceTranslator).translateProtectionResource(loadBalancer);
verify(resources).updateProtection(eq(client), eq(vsName), Matchers.any(Protection.class));
verify(client).destroy();
}
@Test
public void testDeleteProtection() throws Exception {
adapterSpy.deleteProtection(config, loadBalancer);
verify(resources).loadSTMRestClient(config);
verify(resources).deleteProtection(client, vsName);
verify(client).destroy();
}
}
@RunWith(PowerMockRunner.class)
@PowerMockIgnore({"org.bouncycastle.*"})
@PrepareForTest(ResourceTranslator.class)
public static class WhenModifyingBandwidthResources { //Lumping ConnectionThrottle and RateLimit together here, even though they aren't both Bandwidth related...
private String vsName;
private LoadBalancer loadBalancer;
private ResourceTranslator resourceTranslator;
private RateLimit testRateLimit;
@Mock
private StmAdapterResources resources;
@Mock
private LoadBalancerEndpointConfiguration config;
@Mock
private StingrayRestClient client;
@Spy
private StmAdapterImpl adapterSpy = new StmAdapterImpl();
@Before
public void standUp() throws Exception {
MockitoAnnotations.initMocks(this);
loadBalancer = generateLoadBalancer();
vsName = ZxtmNameBuilder.genVSName(loadBalancer);
testRateLimit = new RateLimit();
resourceTranslator = spy(new ResourceTranslator());
PowerMockito.mockStatic(ResourceTranslator.class);
PowerMockito.when(ResourceTranslator.getNewResourceTranslator()).thenReturn(resourceTranslator);
doNothing().when(adapterSpy).updateProtection(config, loadBalancer);
doNothing().when(adapterSpy).deleteProtection(config, loadBalancer);
when(adapterSpy.getResources()).thenReturn(resources);
when(resources.loadSTMRestClient(config)).thenReturn(client);
}
@After
public void tearDown() {
//TODO figure out if I need to do any actual cleanup
}
@Test
public void testUpdateConnectionThrottleWithConnectionLimit() throws Exception {
loadBalancer.setConnectionLimit(new ConnectionLimit());
adapterSpy.updateConnectionThrottle(config, loadBalancer);
verify(adapterSpy).updateProtection(config, loadBalancer);
}
@Test
public void testUpdateConnectionThrottleWithoutConnectionLimit() throws Exception {
loadBalancer.setConnectionLimit(null);
adapterSpy.updateConnectionThrottle(config, loadBalancer);
verify(adapterSpy, never()).updateProtection(config, loadBalancer);
}
@Test
public void testDeleteConnectionThrottleWithValidAccessList() throws Exception {
adapterSpy.deleteConnectionThrottle(config, loadBalancer);
verify(adapterSpy).updateProtection(config, loadBalancer);
}
@Test
public void testDeleteConnectionThrottleWithNoAccessList() throws Exception {
loadBalancer.setAccessLists(null);
adapterSpy.deleteConnectionThrottle(config, loadBalancer);
verify(adapterSpy).deleteProtection(config, loadBalancer);
}
@Test
public void testSetRateLimit() throws Exception {
Assert.assertFalse(loadBalancer.getRateLimit().equals(testRateLimit));
adapterSpy.setRateLimit(config, loadBalancer, testRateLimit);
Assert.assertEquals(testRateLimit, loadBalancer.getRateLimit());
verify(resources).setRateLimit(config, loadBalancer, vsName);
}
@Test
public void testUpdateRateLimit() throws Exception {
Assert.assertFalse(loadBalancer.getRateLimit().equals(testRateLimit));
adapterSpy.updateRateLimit(config, loadBalancer, testRateLimit);
Assert.assertEquals(testRateLimit, loadBalancer.getRateLimit());
verify(resources).updateRateLimit(config, loadBalancer, vsName);
}
@Test
public void testDeleteRateLimit() throws Exception {
adapterSpy.deleteRateLimit(config, loadBalancer);
verify(resources).deleteRateLimit(config, loadBalancer, vsName);
}
}
public static class WhenModifyingFileResources {
private String vsName;
private LoadBalancer loadBalancer;
private String errorContent;
private File errorFile;
@Mock
private StmAdapterResources resources;
@Mock
private LoadBalancerEndpointConfiguration config;
@Mock
private StingrayRestClient client;
@Spy
private StmAdapterImpl adapterSpy = new StmAdapterImpl();
@Before
public void standUp() throws Exception {
MockitoAnnotations.initMocks(this);
loadBalancer = generateLoadBalancer();
vsName = ZxtmNameBuilder.genVSName(loadBalancer);
errorContent = "My Error Content";
errorFile = new StmAdapterResources().getFileWithContent(errorContent);
when(adapterSpy.getResources()).thenReturn(resources);
when(resources.loadSTMRestClient(config)).thenReturn(client);
when(resources.getFileWithContent(errorContent)).thenReturn(errorFile);
}
@After
public void tearDown() {
//TODO figure out if I need to do any actual cleanup
}
@Test
public void testSetErrorFile() throws Exception {
adapterSpy.setErrorFile(config, loadBalancer, errorContent);
verify(resources).loadSTMRestClient(config);
verify(resources).setErrorFile(config, client, loadBalancer, errorContent);
verify(client).destroy();
}
@Test
public void testDeleteErrorFile() throws Exception {
adapterSpy.deleteErrorFile(config, loadBalancer, null);
verify(resources).loadSTMRestClient(config);
verify(resources).deleteErrorFile(config, client, loadBalancer, null);
verify(client).destroy();
}
@Test
public void testUploadDefaultErrorFile() throws Exception {
adapterSpy.uploadDefaultErrorFile(config, errorContent);
verify(resources).loadSTMRestClient(config);
verify(client).createExtraFile(Constants.DEFAULT_ERRORFILE, errorFile);
verify(client).destroy();
}
}
@RunWith(PowerMockRunner.class)
@PowerMockIgnore({"org.bouncycastle.*"})
@PrepareForTest(ResourceTranslator.class)
public static class WhenModifyingPoolResources {
private String vsName;
private LoadBalancer loadBalancer;
private ResourceTranslator resourceTranslator;
private List<Node> doomedNodes;
@Mock
private StmAdapterResources resources;
@Mock
private LoadBalancerEndpointConfiguration config;
@Mock
private StingrayRestClient client;
@Spy
private StmAdapterImpl adapterSpy = new StmAdapterImpl();
@Before
public void standUp() throws Exception {
MockitoAnnotations.initMocks(this);
loadBalancer = generateLoadBalancer();
vsName = ZxtmNameBuilder.genVSName(loadBalancer);
doomedNodes = new ArrayList<Node>();
doomedNodes.add(loadBalancer.getNodes().iterator().next());
resourceTranslator = spy(new ResourceTranslator());
PowerMockito.mockStatic(ResourceTranslator.class);
PowerMockito.when(ResourceTranslator.getNewResourceTranslator()).thenReturn(resourceTranslator);
when(adapterSpy.getResources()).thenReturn(resources);
when(resources.loadSTMRestClient(config)).thenReturn(client);
doNothing().when(resources).updatePool(eq(client), eq(vsName), Matchers.any(Pool.class));
Pool p = new Pool();
PoolProperties pp = new PoolProperties();
PoolBasic pb = new PoolBasic();
pp.setBasic(pb);
p.setProperties(pp);
when(resources.getPool(Matchers.any(StingrayRestClient.class), Matchers.anyString())).thenReturn(p);
}
@After
public void tearDown() {
//TODO figure out if I need to do any actual cleanup
}
@Test
public void testSetNodes() throws Exception {
adapterSpy.setNodes(config, loadBalancer);
verify(resources).loadSTMRestClient(config);
verify(resourceTranslator).translatePoolResource(vsName, loadBalancer, loadBalancer);
verify(resources).updatePool(eq(client), eq(vsName), Matchers.any(Pool.class));
verify(client).destroy();
}
@Test
public void testRemoveNodes() throws Exception {
int numNodes = loadBalancer.getNodes().size();
adapterSpy.removeNodes(config, loadBalancer, doomedNodes);
Assert.assertTrue(loadBalancer.getNodes().size() == numNodes - 1);
Assert.assertFalse(loadBalancer.getNodes().contains(doomedNodes.get(0)));
verify(resources).loadSTMRestClient(config);
verify(resourceTranslator).translatePoolResource(vsName, loadBalancer, loadBalancer);
verify(resources).updatePool(eq(client), eq(vsName), Matchers.any(Pool.class));
verify(client).destroy();
}
}
@RunWith(PowerMockRunner.class)
@PowerMockIgnore({"org.bouncycastle.*"})
@PrepareForTest(ResourceTranslator.class)
public static class WhenSuspendingLoadBalancer {
private String vsName;
private String secureVsName;
private LoadBalancer loadBalancer;
private ResourceTranslator resourceTranslator;
private VirtualServer virtualServer;
private VirtualServer virtualServerSecure;
@Mock
private StmAdapterResources resources;
@Mock
private LoadBalancerEndpointConfiguration config;
@Mock
private StingrayRestClient client;
@Spy
private StmAdapterImpl adapterSpy = new StmAdapterImpl();
@Before
public void standUp() throws Exception {
MockitoAnnotations.initMocks(this);
loadBalancer = generateLoadBalancer();
vsName = ZxtmNameBuilder.genVSName(loadBalancer);
secureVsName = ZxtmNameBuilder.genSslVSName(loadBalancer);
virtualServer = new VirtualServer();
virtualServer.setProperties(new VirtualServerProperties());
virtualServer.getProperties().setBasic(new VirtualServerBasic());
virtualServerSecure = new VirtualServer();
virtualServerSecure.setProperties(new VirtualServerProperties());
virtualServerSecure.getProperties().setBasic(new VirtualServerBasic());
resourceTranslator = spy(new ResourceTranslator());
PowerMockito.mockStatic(ResourceTranslator.class);
PowerMockito.when(ResourceTranslator.getNewResourceTranslator()).thenReturn(resourceTranslator);
when(adapterSpy.getResources()).thenReturn(resources);
when(resources.loadSTMRestClient(config)).thenReturn(client);
when(client.getVirtualServer(vsName)).thenReturn(virtualServer);
when(client.getVirtualServer(secureVsName)).thenReturn(virtualServerSecure);
}
@After
public void tearDown() {
//TODO figure out if I need to do any actual cleanup
}
@Test
public void testAddSuspension() throws Exception {
virtualServer.getProperties().getBasic().setEnabled(true);
virtualServerSecure.getProperties().getBasic().setEnabled(true);
adapterSpy.addSuspension(config, loadBalancer);
verify(resources).loadSTMRestClient(config);
verify(client).getVirtualServer(vsName);
Assert.assertFalse(virtualServer.getProperties().getBasic().getEnabled());
verify(resources).updateVirtualServer(eq(client), eq(vsName), any(VirtualServer.class));
verify(client).getVirtualServer(secureVsName);
Assert.assertFalse(virtualServerSecure.getProperties().getBasic().getEnabled());
verify(resources).updateVirtualServer(eq(client), eq(secureVsName), any(VirtualServer.class));
verify(resourceTranslator).translateTrafficIpGroupsResource(config, loadBalancer, false);
verify(resources).updateVirtualIps(eq(client), eq(secureVsName), anyMapOf(String.class, TrafficIp.class)); //TODO: Are the VIPs using the SecureName or the normal vsName?
verify(client).destroy();
}
@Test
public void testRemoveSuspension() throws Exception {
virtualServer.getProperties().getBasic().setEnabled(false);
virtualServerSecure.getProperties().getBasic().setEnabled(false);
adapterSpy.removeSuspension(config, loadBalancer);
verify(resources).loadSTMRestClient(config);
verify(client).getVirtualServer(vsName);
Assert.assertTrue(virtualServer.getProperties().getBasic().getEnabled());
verify(resources).updateVirtualServer(eq(client), eq(vsName), any(VirtualServer.class));
verify(client).getVirtualServer(secureVsName);
Assert.assertTrue(virtualServerSecure.getProperties().getBasic().getEnabled());
verify(resources).updateVirtualServer(eq(client), eq(secureVsName), any(VirtualServer.class));
verify(resourceTranslator).translateTrafficIpGroupsResource(config, loadBalancer, true);
verify(resources).updateVirtualIps(eq(client), eq(secureVsName), anyMapOf(String.class, TrafficIp.class)); //TODO: Are the VIPs using the SecureName or the normal vsName?
verify(client).destroy();
}
}
@RunWith(PowerMockRunner.class)
@PowerMockIgnore({"org.bouncycastle.*"})
@PrepareForTest({ResourceTranslator.class})
public static class WhenModifyingSSLResources {
private String vsName;
private String secureVsName;
private LoadBalancer loadBalancer;
private ResourceTranslator resourceTranslator;
private ZeusSslTermination sslTermination;
@Mock
private StmAdapterResources resources;
@Mock
private LoadBalancerEndpointConfiguration config;
@Mock
private StingrayRestClient client;
@Spy
private StmAdapterImpl adapterSpy = new StmAdapterImpl();
@Before
public void standUp() throws Exception {
MockitoAnnotations.initMocks(this);
loadBalancer = generateLoadBalancer();
vsName = ZxtmNameBuilder.genVSName(loadBalancer);
secureVsName = ZxtmNameBuilder.genSslVSName(loadBalancer);
sslTermination = new ZeusSslTermination();
resourceTranslator = spy(new ResourceTranslator());
PowerMockito.mockStatic(ResourceTranslator.class);
PowerMockito.when(ResourceTranslator.getNewResourceTranslator()).thenReturn(resourceTranslator);
when(adapterSpy.getResources()).thenReturn(resources);
when(resources.loadSTMRestClient(config)).thenReturn(client);
doNothing().when(resources).updateKeypair(eq(client), eq(vsName), Matchers.any(Keypair.class));
doNothing().when(resources).updateProtection(eq(client), eq(vsName), Matchers.any(Protection.class));
doNothing().when(resources).updateVirtualIps(eq(client), eq(vsName), anyMapOf(String.class, TrafficIp.class));
doNothing().when(resources).updateVirtualServer(eq(client), eq(vsName), Matchers.any(VirtualServer.class));
doNothing().when(resources).deleteKeypair(client, secureVsName);
doNothing().when(resources).deleteVirtualServer(client, secureVsName);
}
@After
public void tearDown() {
//TODO figure out if I need to do any actual cleanup
}
@Test
public void testUpdateSslTermination() throws Exception {
adapterSpy.updateSslTermination(config, loadBalancer, sslTermination, null);
verify(resources).loadSTMRestClient(config);
verify(resourceTranslator).translateVirtualServerResource(config, vsName, loadBalancer);
verify(resourceTranslator, times(3)).translateKeypairResource(loadBalancer, true);
verify(resources).updateKeypair(eq(client), eq(secureVsName), Matchers.any(Keypair.class));
verify(resourceTranslator).translateLoadBalancerResource(config, vsName, loadBalancer, loadBalancer);
verify(resourceTranslator).translateLoadBalancerResource(config, secureVsName, loadBalancer, loadBalancer);
verify(resources).updateProtection(eq(client), eq(vsName), Matchers.any(Protection.class));
verify(resources).updateVirtualIps(eq(client), eq(secureVsName), anyMapOf(String.class, TrafficIp.class));
verify(resources).updateVirtualServer(eq(client), eq(secureVsName), any(VirtualServer.class));
verify(client).destroy();
}
@Test
public void testRemoveSslTermination() throws Exception {
adapterSpy.removeSslTermination(config, loadBalancer);
verify(resources).loadSTMRestClient(config);
verify(resources).deleteKeypair(client, secureVsName);
verify(resources).deleteVirtualServer(client, secureVsName);
verify(client).destroy();
}
}
}