package org.openstack.atlas.service.domain.helpers; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.experimental.runners.Enclosed; import org.junit.runner.RunWith; import org.openstack.atlas.docs.loadbalancers.api.v1.SslTermination; import org.openstack.atlas.service.domain.entities.LoadBalancer; import org.openstack.atlas.service.domain.entities.LoadBalancerJoinVip; import org.openstack.atlas.service.domain.entities.LoadBalancerProtocol; import org.openstack.atlas.service.domain.entities.VirtualIp; import org.openstack.atlas.service.domain.exceptions.BadRequestException; import org.openstack.atlas.service.domain.exceptions.EntityNotFoundException; import org.openstack.atlas.service.domain.repository.LoadBalancerRepository; import org.openstack.atlas.service.domain.repository.SslTerminationRepository; import org.openstack.atlas.service.domain.services.helpers.SslTerminationHelper; import java.util.HashSet; import java.util.Set; import static org.mockito.Mockito.mock; @RunWith(Enclosed.class) public class SslTerminationHelperTest { public static class sslTerminationOperations { Integer accountId = 1234; LoadBalancerRepository lbRepository; SslTerminationRepository sslTerminationRepository; LoadBalancer lb; LoadBalancer lb2; LoadBalancerJoinVip lbjv; Set<LoadBalancerJoinVip> lbjvs; VirtualIp vip; SslTermination ssl1; SslTermination ssl2; @Before public void standUp() { lbRepository = mock(LoadBalancerRepository.class); sslTerminationRepository = mock(SslTerminationRepository.class); } @Before public void standUpObjects() { lb = new LoadBalancer(); lb2 = new LoadBalancer(); lbjv = new LoadBalancerJoinVip(); lbjvs = new HashSet<LoadBalancerJoinVip>(); vip = new VirtualIp(); ssl1 = new SslTermination(); ssl2 = new SslTermination(); ssl1.setCertificate("aCert"); ssl1.setPrivatekey("aKey"); ssl1.setEnabled(true); ssl1.setSecurePort(443); ssl1.setSecureTrafficOnly(false); ssl2.setEnabled(true); ssl2.setSecurePort(446); ssl2.setSecureTrafficOnly(false); // lb.setSslTermination(ssl1); // lb2.setSslTermination(ssl2); vip.setIpAddress("192.3.3.3"); lbjv.setVirtualIp(vip); lbjvs.add(lbjv); lb.setLoadBalancerJoinVipSet(lbjvs); } @Test public void shouldReturnFailIfSecureProtocol() throws EntityNotFoundException, BadRequestException { lb.setProtocol(LoadBalancerProtocol.HTTPS); } @Test public void shouldReturnTrueIfNotSecureProtocol() throws EntityNotFoundException, BadRequestException { lb.setProtocol(LoadBalancerProtocol.HTTP); Assert.assertTrue(SslTerminationHelper.isProtocolSecure(lb)); } @Test public void shouldPassIfSslTermToUpdate() throws EntityNotFoundException, BadRequestException { org.openstack.atlas.service.domain.entities.SslTermination sslTermination = new org.openstack.atlas.service.domain.entities.SslTermination(); sslTermination.setEnabled(true); lb2.setSslTermination(sslTermination); Assert.assertTrue(SslTerminationHelper.modificationStatus(ssl2, lb2)); } @Test public void shouldFailIfNoSslTermToUpdate() throws EntityNotFoundException, BadRequestException { Assert.assertFalse(SslTerminationHelper.modificationStatus(ssl1, lb)); } @Test(expected = BadRequestException.class) public void shouldFailIfProtocolNotValidDNSUDP() throws EntityNotFoundException, BadRequestException { lb.setProtocol(LoadBalancerProtocol.DNS_UDP); Assert.assertFalse(SslTerminationHelper.isProtocolSecure(lb)); } @Test(expected = BadRequestException.class) public void shouldFailIfProtocolNotValidUDP() throws EntityNotFoundException, BadRequestException { lb.setProtocol(LoadBalancerProtocol.UDP); Assert.assertFalse(SslTerminationHelper.isProtocolSecure(lb)); } @Test(expected = BadRequestException.class) public void shouldFailIfProtocolNotValidUDPSTREAM() throws EntityNotFoundException, BadRequestException { lb.setProtocol(LoadBalancerProtocol.UDP_STREAM); Assert.assertFalse(SslTerminationHelper.isProtocolSecure(lb)); } @Test public void shouldPassWithDNSTCPProtocol() throws EntityNotFoundException, BadRequestException { lb.setProtocol(LoadBalancerProtocol.DNS_TCP); Assert.assertTrue(SslTerminationHelper.isProtocolSecure(lb)); } @Test public void shouldMapUpdatedAttributes() throws EntityNotFoundException, BadRequestException { org.openstack.atlas.service.domain.entities.SslTermination sslTermination = new org.openstack.atlas.service.domain.entities.SslTermination(); sslTermination.setEnabled(true); sslTermination.setSecureTrafficOnly(true); Assert.assertEquals(ssl1.isSecureTrafficOnly(), SslTerminationHelper.verifyAttributes(ssl1, sslTermination).isSecureTrafficOnly()); Assert.assertEquals(ssl1.isEnabled(), SslTerminationHelper.verifyAttributes(ssl1, sslTermination).isEnabled()); Assert.assertEquals((Object) ssl1.getSecurePort(), SslTerminationHelper.verifyAttributes(ssl1, sslTermination).getSecurePort()); } @Test public void shouldCleanGarbageFromCertKey() throws EntityNotFoundException, BadRequestException { org.openstack.atlas.service.domain.entities.SslTermination sslTermination = new org.openstack.atlas.service.domain.entities.SslTermination(); String cleanSTring = "-----BEGIN CERTIFICATE-----\n" + "MIIERzCCAy+gAwIBAgIBAjANBgkqhkiG9w0BAQUFADB5MQswCQYDVQQGEwJVUzEO\n" + "MAwGA1UECBMFVGV4YXMxDjAMBgNVBAcTBVRleGFzMRowGAYDVQQKExFSYWNrU3Bh\n" + "dZsGmy48UFF4pBHdhnE8bCAt8KgK3BJb0XqNrUxxI6Jc/Hcl9AfppFIEGw==\n" + "-----END CERTIFICATE-----"; sslTermination.setCertificate("\n" + "-----BEGIN CERTIFICATE-----\n" + "MIIERzCCAy+gAwIBAgIBAjANBgkqhkiG9w0BAQUFADB5MQswCQYDVQQGEwJVUzEO\n" + "MAwGA1UECBMFVGV4YXMxDjAMBgNVBAcTBVRleGFzMRowGAYDVQQKExFSYWNrU3Bh\n" + "dZsGmy48UFF4pBHdhnE8bCAt8KgK3BJb0XqNrUxxI6Jc/Hcl9AfppFIEGw==\n" + "-----END CERTIFICATE-----\n" + "\n"); sslTermination.setPrivatekey("\n " + "\n\n \n\n " + "-----BEGIN CERTIFICATE-----\n" + "MIIERzCCAy+gAwIBAgIBAjANBgkqhkiG9w0BAQUFADB5MQswCQYDVQQGEwJVUzEO\n" + "MAwGA1UECBMFVGV4YXMxDjAMBgNVBAcTBVRleGFzMRowGAYDVQQKExFSYWNrU3Bh\n" + "dZsGmy48UFF4pBHdhnE8bCAt8KgK3BJb0XqNrUxxI6Jc/Hcl9AfppFIEGw==\n" + "-----END CERTIFICATE-----\n\n\n\n " + " \n \n "); sslTermination.setIntermediateCertificate("\n\n-----BEGIN CERTIFICATE-----\n" + "MIIERzCCAy+gAwIBAgIBAjANBgkqhkiG9w0BAQUFADB5MQswCQYDVQQGEwJVUzEO\n" + "MAwGA1UECBMFVGV4YXMxDjAMBgNVBAcTBVRleGFzMRowGAYDVQQKExFSYWNrU3Bh\n" + "dZsGmy48UFF4pBHdhnE8bCAt8KgK3BJb0XqNrUxxI6Jc/Hcl9AfppFIEGw==\n" + "-----END CERTIFICATE-----\n \n"); SslTerminationHelper.sanitizeSslCertKeyEntries(sslTermination); Assert.assertEquals(cleanSTring, sslTermination.getCertificate()); Assert.assertEquals(cleanSTring, sslTermination.getIntermediateCertificate()); Assert.assertEquals(cleanSTring, sslTermination.getPrivatekey()); } } }