Example #1
0
    def test_execute(self):
        actor = elb_actor.SetCert('Unit Test', {
            'name': 'unit-test',
            'region': 'us-east-1',
            'cert_name': 'unit-cert'
        })
        elb = mock.Mock()
        elb.listeners = [(443, 443, 'HTTPS', 'HTTPS',
                          'arn:aws:iam::12345:server-certificate/nextdoor.com')
                         ]
        actor._find_elb = helper.mock_tornado(elb)
        actor._get_cert_arn = helper.mock_tornado('arn')
        actor._check_access = helper.mock_tornado()
        actor._use_cert = helper.mock_tornado()

        yield actor._execute()

        self.assertEquals(actor._check_access._call_count, 0)
        self.assertEquals(actor._use_cert._call_count, 1)

        # Check quick exit if the cert is already in use
        actor._get_cert_arn = helper.mock_tornado(elb.listeners[0][4])
        yield actor._execute()

        # Function calls should remain unchanged
        self.assertEquals(actor._check_access._call_count, 0)
        self.assertEquals(actor._use_cert._call_count, 1)
Example #2
0
    def test_get_cert_arn(self):
        cert = {
            'get_server_certificate_response': {
                'get_server_certificate_result': {
                    'server_certificate': {
                        'server_certificate_metadata': {
                            'arn': 'unit-test-arn-value'
                        }
                    }
                }
            }
        }

        actor = elb_actor.SetCert('Unit Test', {
            'name': 'unit-test',
            'region': 'us-east-1',
            'cert_name': 'unit-cert'
        })
        actor.iam_conn = mock.Mock()
        actor.iam_conn.get_server_certificate = mock.Mock(return_value=cert)

        arn = yield actor._get_cert_arn('test')

        self.assertEquals(actor.iam_conn.get_server_certificate.call_count, 1)
        self.assertEquals(arn, 'unit-test-arn-value')

        yield actor._get_cert_arn('test-new')
        # New name supplied, call count should be 2
        self.assertEquals(actor.iam_conn.get_server_certificate.call_count, 2)
Example #3
0
    def test_get_cert_arn_fail(self):
        actor = elb_actor.SetCert('Unit Test', {
            'name': 'unit-test',
            'region': 'us-east-1',
            'cert_name': 'unit-cert'
        })

        actor.iam_conn = mock.Mock()
        error = BotoServerError(400, 'test')
        actor.iam_conn.get_server_certificate.side_effect = error

        with self.assertRaises(elb_actor.CertNotFound):
            yield actor._get_cert_arn('test')
Example #4
0
    def test_use_cert(self):
        actor = elb_actor.SetCert('Unit Test', {
            'name': 'unit-test',
            'region': 'us-east-1',
            'cert_name': 'unit-cert'
        })
        elb = mock.Mock()

        yield actor._use_cert(elb, 'test')
        self.assertEquals(elb.set_listener_SSL_certificate.call_count, 1)

        error = BotoServerError(400, 'test')
        elb.set_listener_SSL_certificate.side_effect = error
        with self.assertRaises(exceptions.RecoverableActorFailure):
            yield actor._use_cert(elb, 'test')
Example #5
0
    def test_check_access(self):
        elb = mock.Mock()
        botoerror = BotoServerError('Fail', 'Unit test')
        botoerror.error_code = 'AccessDenied'
        elb.set_listener_SSL_certificate = mock.Mock(side_effect=botoerror)

        actor = elb_actor.SetCert('Unit Test', {
            'name': 'unit-test',
            'region': 'us-east-1',
            'cert_name': 'unit-cert'
        })

        # AccessDenied means check has failed.
        with self.assertRaises(exceptions.UnrecoverableActorFailure):
            yield actor._check_access(elb)

        # Anything else means the check has passed.
        botoerror.error_code = 'Cert Not Found'
        yield actor._check_access(elb)
Example #6
0
    def test_execute_dry(self):
        actor = elb_actor.SetCert('Unit Test', {
            'name': 'unit-test',
            'region': 'us-east-1',
            'cert_name': 'unit-cert'
        },
                                  dry=True)

        elb = mock.Mock()
        elb.listeners = [(443, 443, 'HTTPS', 'HTTPS',
                          'arn:aws:iam::12345:server-certificate/nextdoor.com')
                         ]

        actor._find_elb = helper.mock_tornado(elb)
        actor._get_cert_arn = helper.mock_tornado('arn')
        actor._check_access = helper.mock_tornado()

        yield actor._execute()

        self.assertEqual(actor._check_access._call_count, 1)