package tw.com.unit; import com.amazonaws.services.elasticloadbalancing.model.LoadBalancerDescription; import org.easymock.EasyMock; import org.easymock.EasyMockRunner; import org.easymock.EasyMockSupport; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import tw.com.AwsFacade; import tw.com.EnvironmentSetupForTests; import tw.com.MonitorStackEvents; import tw.com.entity.ProjectAndEnv; import tw.com.exceptions.CfnAssistException; import tw.com.providers.IdentityProvider; import tw.com.providers.NotificationSender; import tw.com.providers.ProvidesCurrentIp; import tw.com.repository.CloudFormRepository; import tw.com.repository.CloudRepository; import tw.com.repository.ELBRepository; import tw.com.repository.VpcRepository; import java.net.Inet4Address; import java.net.InetAddress; import java.net.UnknownHostException; @RunWith(EasyMockRunner.class) public class TestAWSFacadeManageSecGroups extends EasyMockSupport { private AwsFacade aws; private ProjectAndEnv projectAndEnv = EnvironmentSetupForTests.getMainProjectAndEnv(); private ELBRepository elbRepository; private CloudRepository cloudRepository; private ProvidesCurrentIp providesCurrentIp; @Before public void beforeEachTestRuns() { MonitorStackEvents monitor = createMock(MonitorStackEvents.class); CloudFormRepository cfnRepository = createStrictMock(CloudFormRepository.class); VpcRepository vpcRepository = createStrictMock(VpcRepository.class); elbRepository = createStrictMock(ELBRepository.class); cloudRepository = createStrictMock(CloudRepository.class); providesCurrentIp = createStrictMock(ProvidesCurrentIp.class); NotificationSender notificationSender = createStrictMock(NotificationSender.class); IdentityProvider identityProvider = createStrictMock(IdentityProvider.class); String regionName = EnvironmentSetupForTests.getRegion().getName(); aws = new AwsFacade(monitor, cfnRepository, vpcRepository, elbRepository, cloudRepository, notificationSender, identityProvider, regionName); } @Test public void testAddsIpAndPortToELBSecGroup() throws CfnAssistException, UnknownHostException { String type = "elbTypeTag"; LoadBalancerDescription elbDescription = new LoadBalancerDescription(). withLoadBalancerName("elbName"). withDNSName("dNSName").withSecurityGroups("elbSecGroupId"); Integer port = 8080; InetAddress address = Inet4Address.getByName("192.168.0.1"); EasyMock.expect(elbRepository.findELBFor(projectAndEnv, type)).andReturn(elbDescription); cloudRepository.updateAddIpAndPortToSecGroup("elbSecGroupId", address, port); EasyMock.expectLastCall(); EasyMock.expect(providesCurrentIp.getCurrentIp()).andReturn(address); replayAll(); aws.whitelistCurrentIpForPortToElb(projectAndEnv, type, providesCurrentIp, port); verifyAll(); } @Test public void testRemovesIpAndPortToELBSecGroup() throws CfnAssistException, UnknownHostException { String type = "elbTypeTag"; LoadBalancerDescription elbDescription = new LoadBalancerDescription(). withLoadBalancerName("elbName"). withDNSName("dNSName"). withSecurityGroups("elbSecGroupId"); Integer port = 8090; InetAddress address = Inet4Address.getByName("192.168.0.2"); EasyMock.expect(elbRepository.findELBFor(projectAndEnv, type)).andReturn(elbDescription); cloudRepository.updateRemoveIpAndPortFromSecGroup("elbSecGroupId", address, port); EasyMock.expectLastCall(); EasyMock.expect(providesCurrentIp.getCurrentIp()).andReturn(address); replayAll(); aws.blacklistCurrentIpForPortToElb(projectAndEnv, type, providesCurrentIp, port); verifyAll(); } }