Beispiel #1
0
 def test_pool_update_unsupported_alpn(self, mock_cast):
     old_provider_pool = driver_dm.Pool(pool_id=self.sample_data.pool1_id)
     provider_pool = driver_dm.Pool(listener_id=self.sample_data.pool1_id,
                                    alpn_protocols=['http/1.1', 'eureka'])
     self.assertRaises(exceptions.UnsupportedOptionError,
                       self.amp_driver.pool_update, old_provider_pool,
                       provider_pool)
Beispiel #2
0
 def test_pool_update(self, mock_cast):
     old_provider_pool = driver_dm.Pool(pool_id=self.sample_data.pool1_id)
     provider_pool = driver_dm.Pool(
         pool_id=self.sample_data.pool1_id,
         admin_state_up=True,
         ca_tls_container_data='CA DATA',
         ca_tls_container_ref='CA REF',
         crl_container_data='CRL DATA',
         crl_container_ref='CRL REF',
         description='TEST DESCRIPTION',
         name='TEST NAME',
         lb_algorithm=consts.LB_ALGORITHM_SOURCE_IP,
         session_persistence='FAKE SP',
         tls_container_data='TLS DATA',
         tls_container_ref='TLS REF',
         tls_enabled=False)
     pool_dict = {
         'description': 'TEST DESCRIPTION',
         'lb_algorithm': 'SOURCE_IP',
         'name': 'TEST NAME',
         'session_persistence': 'FAKE SP',
         'tls_enabled': False,
         'enabled': True,
         'tls_certificate_id': 'TLS REF',
         'ca_tls_certificate_id': 'CA REF',
         'crl_container_id': 'CRL REF'
     }
     self.amp_driver.pool_update(old_provider_pool, provider_pool)
     payload = {
         consts.ORIGINAL_POOL: old_provider_pool.to_dict(),
         consts.POOL_UPDATES: pool_dict
     }
     mock_cast.assert_called_with({}, 'update_pool', **payload)
Beispiel #3
0
 def test_pool_update_unsupported_algorithm(self, mock_cast):
     old_provider_pool = driver_dm.Pool(pool_id=self.sample_data.pool1_id)
     provider_pool = driver_dm.Pool(pool_id=self.sample_data.pool1_id)
     provider_pool.lb_algorithm = 'foo'
     self.assertRaises(exceptions.UnsupportedOptionError,
                       self.amp_driver.pool_update, old_provider_pool,
                       provider_pool)
     mock_cast.assert_not_called()
Beispiel #4
0
 def test_pool_update(self, mock_cast):
     old_provider_pool = driver_dm.Pool(pool_id=self.sample_data.pool1_id)
     provider_pool = driver_dm.Pool(pool_id=self.sample_data.pool1_id,
                                    admin_state_up=True)
     self.amp_driver.pool_update(old_provider_pool, provider_pool)
     payload = {
         consts.POOL_ID: self.sample_data.pool1_id,
         consts.POOL_UPDATES: {}
     }
     mock_cast.assert_called_with({}, 'update_pool', **payload)
Beispiel #5
0
 def test_pool_update(self, mock_cast):
     old_provider_pool = driver_dm.Pool(
         pool_id=self.sample_data.pool1_id)
     provider_pool = driver_dm.Pool(
         pool_id=self.sample_data.pool1_id, admin_state_up=True)
     pool_dict = {'enabled': True}
     self.amp_driver.pool_update(old_provider_pool, provider_pool)
     payload = {consts.ORIGINAL_POOL: old_provider_pool.to_dict(),
                consts.POOL_UPDATES: pool_dict}
     mock_cast.assert_called_with({}, 'update_pool', **payload)
 def test_pool_update_name(self, mock_cast):
     old_provider_pool = driver_dm.Pool(
         pool_id=self.sample_data.pool1_id)
     provider_pool = driver_dm.Pool(
         pool_id=self.sample_data.pool1_id, name='Great pool',
         admin_state_up=True, tls_enabled=True)
     pool_dict = {'name': 'Great pool',
                  'enabled': True,
                  'tls_enabled': True}
     self.amp_driver.pool_update(old_provider_pool, provider_pool)
     payload = {consts.POOL_ID: self.sample_data.pool1_id,
                consts.POOL_UPDATES: pool_dict}
     mock_cast.assert_called_with({}, 'update_pool', **payload)
Beispiel #7
0
 def test_pool_create(self, mock_cast):
     provider_pool = driver_dm.Pool(
         pool_id=self.sample_data.pool1_id,
         lb_algorithm=consts.LB_ALGORITHM_ROUND_ROBIN)
     self.amp_driver.pool_create(provider_pool)
     payload = {consts.POOL: provider_pool.to_dict()}
     mock_cast.assert_called_with({}, 'create_pool', **payload)
Beispiel #8
0
 def test_pool_create(self, mock_cast):
     provider_pool = driver_dm.Pool(
         pool_id=self.sample_data.pool1_id,
         lb_algorithm=consts.LB_ALGORITHM_ROUND_ROBIN,
         alpn_protocols=consts.AMPHORA_SUPPORTED_ALPN_PROTOCOLS)
     self.amp_driver.pool_create(provider_pool)
     payload = {consts.POOL: provider_pool.to_dict(recurse=True)}
     mock_cast.assert_called_with({}, 'create_pool', **payload)
Beispiel #9
0
 def test_pool_create_unsupported_alpn(self, mock_cast):
     provider_pool = driver_dm.Pool(pool_id=self.sample_data.pool1_id)
     provider_pool.alpn_protocols = ['http/1.1', 'eureka']
     self.assertRaises(
         exceptions.UnsupportedOptionError,
         self.amp_driver.pool_create,
         provider_pool)
     mock_cast.assert_not_called()
Beispiel #10
0
 def _create_pool_model(
         self, loadbalancer_id, pool_name,
         protocol=o_constants.PROTOCOL_TCP,
         lb_algorithm=o_constants.LB_ALGORITHM_SOURCE_IP_PORT,
         admin_state_up=True, listener_id=None):
     m_pool = octavia_data_model.Pool()
     if protocol:
         m_pool.protocol = protocol
     else:
         m_pool.protocol = o_constants.PROTOCOL_TCP
     m_pool.name = pool_name
     m_pool.pool_id = uuidutils.generate_uuid()
     m_pool.loadbalancer_id = loadbalancer_id
     m_pool.members = []
     m_pool.admin_state_up = admin_state_up
     m_pool.lb_algorithm = lb_algorithm
     if listener_id:
         m_pool.listener_id = listener_id
     return m_pool
Beispiel #11
0
 def test_pool_delete(self, mock_cast):
     provider_pool = driver_dm.Pool(pool_id=self.sample_data.pool1_id)
     self.amp_driver.pool_delete(provider_pool)
     payload = {consts.POOL: provider_pool.to_dict()}
     mock_cast.assert_called_with({}, 'delete_pool', **payload)
 def test_pool_create(self, mock_cast):
     provider_pool = driver_dm.Pool(pool_id=self.sample_data.pool1_id)
     self.amp_driver.pool_create(provider_pool)
     payload = {consts.POOL_ID: self.sample_data.pool1_id}
     mock_cast.assert_called_with({}, 'create_pool', **payload)
Beispiel #13
0
    def setUp(self):
        super().setUp()
        self.driver = driver.NoopProviderDriver()

        self.loadbalancer_id = uuidutils.generate_uuid()
        self.vip_address = '192.0.2.10'
        self.vip_network_id = uuidutils.generate_uuid()
        self.vip_port_id = uuidutils.generate_uuid()
        self.vip_subnet_id = uuidutils.generate_uuid()
        self.listener_id = uuidutils.generate_uuid()
        self.pool_id = uuidutils.generate_uuid()
        self.member_id = uuidutils.generate_uuid()
        self.member_subnet_id = uuidutils.generate_uuid()
        self.healthmonitor_id = uuidutils.generate_uuid()
        self.l7policy_id = uuidutils.generate_uuid()
        self.l7rule_id = uuidutils.generate_uuid()
        self.project_id = uuidutils.generate_uuid()
        self.default_tls_container_ref = uuidutils.generate_uuid()
        self.sni_container_ref_1 = uuidutils.generate_uuid()
        self.sni_container_ref_2 = uuidutils.generate_uuid()

        self.ref_vip = data_models.VIP(vip_address=self.vip_address,
                                       vip_network_id=self.vip_network_id,
                                       vip_port_id=self.vip_port_id,
                                       vip_subnet_id=self.vip_subnet_id)

        self.ref_member = data_models.Member(address='198.51.100.4',
                                             admin_state_up=True,
                                             member_id=self.member_id,
                                             monitor_address='203.0.113.2',
                                             monitor_port=66,
                                             name='jacket',
                                             pool_id=self.pool_id,
                                             protocol_port=99,
                                             subnet_id=self.member_subnet_id,
                                             weight=55)

        self.ref_healthmonitor = data_models.HealthMonitor(
            admin_state_up=False,
            delay=2,
            expected_codes="500",
            healthmonitor_id=self.healthmonitor_id,
            http_method='TRACE',
            max_retries=1,
            max_retries_down=0,
            name='doc',
            pool_id=self.pool_id,
            timeout=3,
            type='PHD',
            url_path='/index.html')

        self.ref_pool = data_models.Pool(admin_state_up=True,
                                         description='Olympic swimming pool',
                                         healthmonitor=self.ref_healthmonitor,
                                         lb_algorithm='A_Fast_One',
                                         loadbalancer_id=self.loadbalancer_id,
                                         listener_id=self.listener_id,
                                         members=[self.ref_member],
                                         name='Osborn',
                                         pool_id=self.pool_id,
                                         protocol='avian',
                                         session_persistence={'type': 'glue'})

        self.ref_l7rule = data_models.L7Rule(admin_state_up=True,
                                             compare_type='store_brand',
                                             invert=True,
                                             key='board',
                                             l7policy_id=self.l7policy_id,
                                             l7rule_id=self.l7rule_id,
                                             type='strict',
                                             value='gold')

        self.ref_l7policy = data_models.L7Policy(
            action='packed',
            admin_state_up=False,
            description='Corporate policy',
            l7policy_id=self.l7policy_id,
            listener_id=self.listener_id,
            name='more_policy',
            position=1,
            redirect_pool_id=self.pool_id,
            redirect_url='/hr',
            rules=[self.ref_l7rule])

        self.ref_listener = data_models.Listener(
            admin_state_up=False,
            connection_limit=5,
            default_pool=self.ref_pool,
            default_pool_id=self.pool_id,
            default_tls_container_data='default_cert_data',
            default_tls_container_ref=self.default_tls_container_ref,
            description='The listener',
            insert_headers={'X-Forwarded-For': 'true'},
            l7policies=[self.ref_l7policy],
            listener_id=self.listener_id,
            loadbalancer_id=self.loadbalancer_id,
            name='super_listener',
            protocol='avian',
            protocol_port=42,
            sni_container_data=['sni_cert_data_1', 'sni_cert_data_2'],
            sni_container_refs=[
                self.sni_container_ref_1, self.sni_container_ref_2
            ])

        self.ref_lb = data_models.LoadBalancer(
            admin_state_up=False,
            description='One great load balancer',
            flavor={'cake': 'chocolate'},
            listeners=[self.ref_listener],
            loadbalancer_id=self.loadbalancer_id,
            name='favorite_lb',
            project_id=self.project_id,
            vip_address=self.vip_address,
            vip_network_id=self.vip_network_id,
            vip_port_id=self.vip_port_id,
            vip_subnet_id=self.vip_subnet_id)

        self.ref_flavor_metadata = {
            "amp_image_tag":
            "The glance image tag "
            "to use for this load balancer."
        }
        self.ref_availability_zone_metadata = {
            "compute_zone":
            "The compute availability zone to use for this "
            "loadbalancer."
        }
Beispiel #14
0
    def __init__(self):
        self.project_id = uuidutils.generate_uuid()
        self.lb_id = uuidutils.generate_uuid()
        self.ip_address = '192.0.2.30'
        self.port_id = uuidutils.generate_uuid()
        self.network_id = uuidutils.generate_uuid()
        self.subnet_id = uuidutils.generate_uuid()
        self.qos_policy_id = uuidutils.generate_uuid()
        self.lb_name = uuidutils.generate_uuid()
        self.lb_description = uuidutils.generate_uuid()
        self.flavor_id = uuidutils.generate_uuid()
        self.flavor_profile_id = uuidutils.generate_uuid()

        self.listener1_id = uuidutils.generate_uuid()
        self.listener2_id = uuidutils.generate_uuid()
        self.default_tls_container_ref = uuidutils.generate_uuid()
        self.sni_container_ref_1 = uuidutils.generate_uuid()
        self.sni_container_ref_2 = uuidutils.generate_uuid()
        self.client_ca_tls_certificate_ref = uuidutils.generate_uuid()
        self.client_crl_container_ref = uuidutils.generate_uuid()
        self.pool_sni_container_ref = uuidutils.generate_uuid()
        self.pool_ca_container_ref = uuidutils.generate_uuid()
        self.pool_crl_container_ref = uuidutils.generate_uuid()

        self.pool1_id = uuidutils.generate_uuid()
        self.pool2_id = uuidutils.generate_uuid()

        self.hm1_id = uuidutils.generate_uuid()
        self.hm2_id = uuidutils.generate_uuid()

        self.member1_id = uuidutils.generate_uuid()
        self.member2_id = uuidutils.generate_uuid()
        self.member3_id = uuidutils.generate_uuid()
        self.member4_id = uuidutils.generate_uuid()

        self.l7policy1_id = uuidutils.generate_uuid()
        self.l7policy2_id = uuidutils.generate_uuid()

        self.l7rule1_id = uuidutils.generate_uuid()
        self.l7rule2_id = uuidutils.generate_uuid()

        self.created_at = datetime.datetime.now()
        self.updated_at = (datetime.datetime.now() +
                           datetime.timedelta(minutes=1))

        self._common_test_dict = {
            lib_consts.PROVISIONING_STATUS: constants.ACTIVE,
            lib_consts.OPERATING_STATUS: constants.ONLINE,
            lib_consts.PROJECT_ID: self.project_id,
            constants.CREATED_AT: self.created_at,
            constants.UPDATED_AT: self.updated_at,
            constants.ENABLED: True
        }

        # Setup Health Monitors
        self.test_hm1_dict = {
            lib_consts.ID: self.hm1_id,
            lib_consts.TYPE: constants.HEALTH_MONITOR_PING,
            lib_consts.DELAY: 1,
            lib_consts.TIMEOUT: 3,
            lib_consts.FALL_THRESHOLD: 1,
            lib_consts.RISE_THRESHOLD: 2,
            lib_consts.HTTP_METHOD: lib_consts.HEALTH_MONITOR_HTTP_METHOD_GET,
            lib_consts.URL_PATH: '/',
            lib_consts.EXPECTED_CODES: '200',
            lib_consts.NAME: 'hm1',
            lib_consts.POOL_ID: self.pool1_id,
            lib_consts.HTTP_VERSION: 1.0,
            lib_consts.DOMAIN_NAME: None,
            lib_consts.PROJECT_ID: self.project_id
        }

        self.test_hm1_dict.update(self._common_test_dict)

        self.test_hm2_dict = copy.deepcopy(self.test_hm1_dict)
        self.test_hm2_dict[lib_consts.ID] = self.hm2_id
        self.test_hm2_dict[lib_consts.NAME] = 'hm2'
        self.test_hm2_dict.update({
            lib_consts.HTTP_VERSION: 1.1,
            lib_consts.DOMAIN_NAME: 'testdomainname.com'
        })

        self.db_hm1 = data_models.HealthMonitor(**self.test_hm1_dict)
        self.db_hm2 = data_models.HealthMonitor(**self.test_hm2_dict)

        self.provider_hm1_dict = {
            lib_consts.ADMIN_STATE_UP: True,
            lib_consts.DELAY: 1,
            lib_consts.EXPECTED_CODES: '200',
            lib_consts.HEALTHMONITOR_ID: self.hm1_id,
            lib_consts.HTTP_METHOD: lib_consts.HEALTH_MONITOR_HTTP_METHOD_GET,
            lib_consts.MAX_RETRIES: 2,
            lib_consts.MAX_RETRIES_DOWN: 1,
            lib_consts.NAME: 'hm1',
            lib_consts.POOL_ID: self.pool1_id,
            lib_consts.PROJECT_ID: self.project_id,
            lib_consts.TIMEOUT: 3,
            lib_consts.TYPE: constants.HEALTH_MONITOR_PING,
            lib_consts.URL_PATH: '/',
            lib_consts.HTTP_VERSION: 1.0,
            lib_consts.DOMAIN_NAME: None
        }

        self.provider_hm2_dict = copy.deepcopy(self.provider_hm1_dict)
        self.provider_hm2_dict[lib_consts.HEALTHMONITOR_ID] = self.hm2_id
        self.provider_hm2_dict[lib_consts.NAME] = 'hm2'
        self.provider_hm2_dict.update({
            lib_consts.HTTP_VERSION:
            1.1,
            lib_consts.DOMAIN_NAME:
            'testdomainname.com'
        })

        self.provider_hm1 = driver_dm.HealthMonitor(**self.provider_hm1_dict)
        self.provider_hm2 = driver_dm.HealthMonitor(**self.provider_hm2_dict)

        # Setup Members
        self.test_member1_dict = {
            lib_consts.ID: self.member1_id,
            lib_consts.POOL_ID: self.pool1_id,
            constants.IP_ADDRESS: '192.0.2.16',
            lib_consts.PROTOCOL_PORT: 80,
            lib_consts.WEIGHT: 0,
            lib_consts.BACKUP: False,
            lib_consts.SUBNET_ID: self.subnet_id,
            lib_consts.PROJECT_ID: self.project_id,
            lib_consts.NAME: 'member1',
            lib_consts.OPERATING_STATUS: lib_consts.ONLINE,
            lib_consts.PROVISIONING_STATUS: lib_consts.ACTIVE,
            constants.ENABLED: True,
            constants.CREATED_AT: self.created_at,
            constants.UPDATED_AT: self.updated_at,
            lib_consts.MONITOR_ADDRESS: '192.0.2.26',
            lib_consts.MONITOR_PORT: 81
        }

        self.test_member1_dict.update(self._common_test_dict)

        self.test_member2_dict = copy.deepcopy(self.test_member1_dict)
        self.test_member2_dict[lib_consts.ID] = self.member2_id
        self.test_member2_dict[constants.IP_ADDRESS] = '192.0.2.17'
        self.test_member2_dict[lib_consts.MONITOR_ADDRESS] = '192.0.2.27'
        self.test_member2_dict[lib_consts.NAME] = 'member2'

        self.test_member3_dict = copy.deepcopy(self.test_member1_dict)
        self.test_member3_dict[lib_consts.ID] = self.member3_id
        self.test_member3_dict[constants.IP_ADDRESS] = '192.0.2.18'
        self.test_member3_dict[lib_consts.MONITOR_ADDRESS] = '192.0.2.28'
        self.test_member3_dict[lib_consts.NAME] = 'member3'
        self.test_member3_dict[lib_consts.POOL_ID] = self.pool2_id

        self.test_member4_dict = copy.deepcopy(self.test_member1_dict)
        self.test_member4_dict[lib_consts.ID] = self.member4_id
        self.test_member4_dict[constants.IP_ADDRESS] = '192.0.2.19'
        self.test_member4_dict[lib_consts.MONITOR_ADDRESS] = '192.0.2.29'
        self.test_member4_dict[lib_consts.NAME] = 'member4'
        self.test_member4_dict[lib_consts.POOL_ID] = self.pool2_id

        self.test_pool1_members_dict = [
            self.test_member1_dict, self.test_member2_dict
        ]
        self.test_pool2_members_dict = [
            self.test_member3_dict, self.test_member4_dict
        ]

        self.db_member1 = data_models.Member(**self.test_member1_dict)
        self.db_member2 = data_models.Member(**self.test_member2_dict)
        self.db_member3 = data_models.Member(**self.test_member3_dict)
        self.db_member4 = data_models.Member(**self.test_member4_dict)

        self.db_pool1_members = [self.db_member1, self.db_member2]
        self.db_pool2_members = [self.db_member3, self.db_member4]

        self.provider_member1_dict = {
            lib_consts.ADDRESS: '192.0.2.16',
            lib_consts.ADMIN_STATE_UP: True,
            lib_consts.MEMBER_ID: self.member1_id,
            lib_consts.MONITOR_ADDRESS: '192.0.2.26',
            lib_consts.MONITOR_PORT: 81,
            lib_consts.NAME: 'member1',
            lib_consts.POOL_ID: self.pool1_id,
            lib_consts.PROJECT_ID: self.project_id,
            lib_consts.PROTOCOL_PORT: 80,
            lib_consts.SUBNET_ID: self.subnet_id,
            lib_consts.WEIGHT: 0,
            lib_consts.BACKUP: False
        }

        self.provider_member2_dict = copy.deepcopy(self.provider_member1_dict)
        self.provider_member2_dict[lib_consts.MEMBER_ID] = self.member2_id
        self.provider_member2_dict[lib_consts.ADDRESS] = '192.0.2.17'
        self.provider_member2_dict[lib_consts.MONITOR_ADDRESS] = '192.0.2.27'
        self.provider_member2_dict[lib_consts.NAME] = 'member2'

        self.provider_member3_dict = copy.deepcopy(self.provider_member1_dict)
        self.provider_member3_dict[lib_consts.MEMBER_ID] = self.member3_id
        self.provider_member3_dict[lib_consts.ADDRESS] = '192.0.2.18'
        self.provider_member3_dict[lib_consts.MONITOR_ADDRESS] = '192.0.2.28'
        self.provider_member3_dict[lib_consts.NAME] = 'member3'
        self.provider_member3_dict[lib_consts.POOL_ID] = self.pool2_id

        self.provider_member4_dict = copy.deepcopy(self.provider_member1_dict)
        self.provider_member4_dict[lib_consts.MEMBER_ID] = self.member4_id
        self.provider_member4_dict[lib_consts.ADDRESS] = '192.0.2.19'
        self.provider_member4_dict[lib_consts.MONITOR_ADDRESS] = '192.0.2.29'
        self.provider_member4_dict[lib_consts.NAME] = 'member4'
        self.provider_member4_dict[lib_consts.POOL_ID] = self.pool2_id

        self.provider_pool1_members_dict = [
            self.provider_member1_dict, self.provider_member2_dict
        ]

        self.provider_pool2_members_dict = [
            self.provider_member3_dict, self.provider_member4_dict
        ]

        self.provider_member1 = driver_dm.Member(**self.provider_member1_dict)
        self.provider_member2 = driver_dm.Member(**self.provider_member2_dict)
        self.provider_member3 = driver_dm.Member(**self.provider_member3_dict)
        self.provider_member4 = driver_dm.Member(**self.provider_member4_dict)

        self.provider_pool1_members = [
            self.provider_member1, self.provider_member2
        ]
        self.provider_pool2_members = [
            self.provider_member3, self.provider_member4
        ]

        # Setup test pools
        self.test_pool1_dict = {
            lib_consts.ID: self.pool1_id,
            lib_consts.NAME: 'pool1',
            lib_consts.DESCRIPTION: 'Pool 1',
            constants.LOAD_BALANCER_ID: self.lb_id,
            lib_consts.PROJECT_ID: self.project_id,
            lib_consts.PROTOCOL: lib_consts.PROTOCOL_TCP,
            lib_consts.LB_ALGORITHM: lib_consts.LB_ALGORITHM_ROUND_ROBIN,
            lib_consts.MEMBERS: self.test_pool1_members_dict,
            constants.HEALTH_MONITOR: self.test_hm1_dict,
            lib_consts.SESSION_PERSISTENCE: {
                lib_consts.TYPE: lib_consts.LB_ALGORITHM_SOURCE_IP
            },
            lib_consts.LISTENERS: [],
            lib_consts.L7POLICIES: [],
            constants.TLS_CERTIFICATE_ID: self.pool_sni_container_ref,
            constants.CA_TLS_CERTIFICATE_ID: self.pool_ca_container_ref,
            constants.CRL_CONTAINER_ID: self.pool_crl_container_ref,
            lib_consts.TLS_ENABLED: True,
            lib_consts.TLS_CIPHERS: None,
            lib_consts.TLS_VERSIONS: None
        }

        self.test_pool1_dict.update(self._common_test_dict)

        self.test_pool2_dict = copy.deepcopy(self.test_pool1_dict)
        self.test_pool2_dict[lib_consts.ID] = self.pool2_id
        self.test_pool2_dict[lib_consts.NAME] = 'pool2'
        self.test_pool2_dict[lib_consts.DESCRIPTION] = 'Pool 2'
        self.test_pool2_dict[lib_consts.MEMBERS] = self.test_pool2_members_dict
        del self.test_pool2_dict[constants.TLS_CERTIFICATE_ID]
        del self.test_pool2_dict[constants.CA_TLS_CERTIFICATE_ID]
        del self.test_pool2_dict[constants.CRL_CONTAINER_ID]

        self.test_pools = [self.test_pool1_dict, self.test_pool2_dict]

        self.db_pool1 = data_models.Pool(**self.test_pool1_dict)
        self.db_pool1.health_monitor = self.db_hm1
        self.db_pool1.members = self.db_pool1_members
        self.db_pool2 = data_models.Pool(**self.test_pool2_dict)
        self.db_pool2.health_monitor = self.db_hm2
        self.db_pool2.members = self.db_pool2_members

        self.test_db_pools = [self.db_pool1, self.db_pool2]
        pool_cert = data_models.TLSContainer(certificate='pool cert')
        pool_ca_file_content = 'X509 POOL CA CERT FILE'
        pool_crl_file_content = 'X509 POOL CRL FILE'

        self.provider_pool1_dict = {
            lib_consts.ADMIN_STATE_UP: True,
            lib_consts.DESCRIPTION: 'Pool 1',
            lib_consts.HEALTHMONITOR: self.provider_hm1_dict,
            lib_consts.LB_ALGORITHM: lib_consts.LB_ALGORITHM_ROUND_ROBIN,
            lib_consts.LOADBALANCER_ID: self.lb_id,
            lib_consts.MEMBERS: self.provider_pool1_members_dict,
            lib_consts.NAME: 'pool1',
            lib_consts.POOL_ID: self.pool1_id,
            lib_consts.PROJECT_ID: self.project_id,
            lib_consts.PROTOCOL: lib_consts.PROTOCOL_TCP,
            lib_consts.SESSION_PERSISTENCE: {
                lib_consts.TYPE: lib_consts.LB_ALGORITHM_SOURCE_IP
            },
            lib_consts.TLS_CONTAINER_REF: self.pool_sni_container_ref,
            lib_consts.TLS_CONTAINER_DATA: pool_cert.to_dict(),
            lib_consts.CA_TLS_CONTAINER_REF: self.pool_ca_container_ref,
            lib_consts.CA_TLS_CONTAINER_DATA: pool_ca_file_content,
            lib_consts.CRL_CONTAINER_REF: self.pool_crl_container_ref,
            lib_consts.CRL_CONTAINER_DATA: pool_crl_file_content,
            lib_consts.TLS_ENABLED: True,
            lib_consts.TLS_CIPHERS: None,
            lib_consts.TLS_VERSIONS: None,
        }

        self.provider_pool2_dict = copy.deepcopy(self.provider_pool1_dict)
        self.provider_pool2_dict[lib_consts.POOL_ID] = self.pool2_id
        self.provider_pool2_dict[lib_consts.NAME] = 'pool2'
        self.provider_pool2_dict[lib_consts.DESCRIPTION] = 'Pool 2'
        self.provider_pool2_dict[
            lib_consts.MEMBERS] = self.provider_pool2_members_dict
        self.provider_pool2_dict[
            lib_consts.HEALTHMONITOR] = self.provider_hm2_dict
        self.provider_pool2_dict[lib_consts.TLS_CONTAINER_REF] = None
        del self.provider_pool2_dict[lib_consts.TLS_CONTAINER_DATA]
        self.provider_pool2_dict[lib_consts.CA_TLS_CONTAINER_REF] = None
        del self.provider_pool2_dict[lib_consts.CA_TLS_CONTAINER_DATA]
        self.provider_pool2_dict[lib_consts.CRL_CONTAINER_REF] = None
        del self.provider_pool2_dict[lib_consts.CRL_CONTAINER_DATA]

        self.provider_pool1 = driver_dm.Pool(**self.provider_pool1_dict)
        self.provider_pool1.members = self.provider_pool1_members
        self.provider_pool1.healthmonitor = self.provider_hm1
        self.provider_pool2 = driver_dm.Pool(**self.provider_pool2_dict)
        self.provider_pool2.members = self.provider_pool2_members
        self.provider_pool2.healthmonitor = self.provider_hm2

        self.provider_pools = [self.provider_pool1, self.provider_pool2]

        # Setup L7Rules
        self.test_l7rule1_dict = {
            lib_consts.ID: self.l7rule1_id,
            lib_consts.L7POLICY_ID: self.l7policy1_id,
            lib_consts.TYPE: lib_consts.L7RULE_TYPE_PATH,
            lib_consts.COMPARE_TYPE: lib_consts.L7RULE_COMPARE_TYPE_EQUAL_TO,
            lib_consts.KEY: 'fake_key',
            lib_consts.VALUE: 'fake_value',
            lib_consts.PROJECT_ID: self.project_id,
            constants.L7POLICY: None,
            lib_consts.INVERT: False
        }

        self.test_l7rule1_dict.update(self._common_test_dict)

        self.test_l7rule2_dict = copy.deepcopy(self.test_l7rule1_dict)
        self.test_l7rule2_dict[lib_consts.ID] = self.l7rule2_id

        self.test_l7rules = [self.test_l7rule1_dict, self.test_l7rule2_dict]

        self.db_l7Rule1 = data_models.L7Rule(**self.test_l7rule1_dict)
        self.db_l7Rule2 = data_models.L7Rule(**self.test_l7rule2_dict)

        self.db_l7Rules = [self.db_l7Rule1, self.db_l7Rule2]

        self.provider_l7rule1_dict = {
            lib_consts.ADMIN_STATE_UP: True,
            lib_consts.COMPARE_TYPE: lib_consts.L7RULE_COMPARE_TYPE_EQUAL_TO,
            lib_consts.INVERT: False,
            lib_consts.KEY: 'fake_key',
            lib_consts.L7POLICY_ID: self.l7policy1_id,
            lib_consts.L7RULE_ID: self.l7rule1_id,
            lib_consts.TYPE: lib_consts.L7RULE_TYPE_PATH,
            lib_consts.PROJECT_ID: self.project_id,
            lib_consts.VALUE: 'fake_value'
        }

        self.provider_l7rule2_dict = copy.deepcopy(self.provider_l7rule1_dict)
        self.provider_l7rule2_dict[lib_consts.L7RULE_ID] = self.l7rule2_id
        self.provider_l7rules_dicts = [
            self.provider_l7rule1_dict, self.provider_l7rule2_dict
        ]

        self.provider_l7rule1 = driver_dm.L7Rule(**self.provider_l7rule1_dict)
        self.provider_l7rule2 = driver_dm.L7Rule(**self.provider_l7rule2_dict)

        self.provider_rules = [self.provider_l7rule1, self.provider_l7rule2]

        # Setup L7Policies
        self.test_l7policy1_dict = {
            lib_consts.ID: self.l7policy1_id,
            lib_consts.NAME: 'l7policy_1',
            lib_consts.DESCRIPTION: 'L7policy 1',
            lib_consts.LISTENER_ID: self.listener1_id,
            lib_consts.ACTION: lib_consts.L7POLICY_ACTION_REDIRECT_TO_URL,
            lib_consts.REDIRECT_POOL_ID: None,
            lib_consts.REDIRECT_URL: 'http://example.com/index.html',
            lib_consts.REDIRECT_PREFIX: None,
            lib_consts.PROJECT_ID: self.project_id,
            lib_consts.POSITION: 1,
            constants.LISTENER: None,
            constants.REDIRECT_POOL: None,
            lib_consts.L7RULES: self.test_l7rules,
            lib_consts.REDIRECT_HTTP_CODE: 302
        }

        self.test_l7policy1_dict.update(self._common_test_dict)

        self.test_l7policy2_dict = copy.deepcopy(self.test_l7policy1_dict)
        self.test_l7policy2_dict[lib_consts.ID] = self.l7policy2_id
        self.test_l7policy2_dict[lib_consts.NAME] = 'l7policy_2'
        self.test_l7policy2_dict[lib_consts.DESCRIPTION] = 'L7policy 2'

        self.test_l7policies = [
            self.test_l7policy1_dict, self.test_l7policy2_dict
        ]

        self.db_l7policy1 = data_models.L7Policy(**self.test_l7policy1_dict)
        self.db_l7policy2 = data_models.L7Policy(**self.test_l7policy2_dict)
        self.db_l7policy1.l7rules = self.db_l7Rules
        self.db_l7policy2.l7rules = self.db_l7Rules

        self.db_l7policies = [self.db_l7policy1, self.db_l7policy2]

        self.provider_l7policy1_dict = {
            lib_consts.ACTION: lib_consts.L7POLICY_ACTION_REDIRECT_TO_URL,
            lib_consts.ADMIN_STATE_UP: True,
            lib_consts.DESCRIPTION: 'L7policy 1',
            lib_consts.L7POLICY_ID: self.l7policy1_id,
            lib_consts.LISTENER_ID: self.listener1_id,
            lib_consts.NAME: 'l7policy_1',
            lib_consts.POSITION: 1,
            lib_consts.PROJECT_ID: self.project_id,
            lib_consts.REDIRECT_POOL_ID: None,
            lib_consts.REDIRECT_URL: 'http://example.com/index.html',
            lib_consts.REDIRECT_PREFIX: None,
            lib_consts.RULES: self.provider_l7rules_dicts,
            lib_consts.REDIRECT_HTTP_CODE: 302
        }

        self.provider_l7policy2_dict = copy.deepcopy(
            self.provider_l7policy1_dict)
        self.provider_l7policy2_dict[
            lib_consts.L7POLICY_ID] = self.l7policy2_id
        self.provider_l7policy2_dict[lib_consts.NAME] = 'l7policy_2'
        self.provider_l7policy2_dict[lib_consts.DESCRIPTION] = 'L7policy 2'

        self.provider_l7policies_dict = [
            self.provider_l7policy1_dict, self.provider_l7policy2_dict
        ]

        self.provider_l7policy1 = driver_dm.L7Policy(
            **self.provider_l7policy1_dict)
        self.provider_l7policy1.rules = self.provider_rules
        self.provider_l7policy2 = driver_dm.L7Policy(
            **self.provider_l7policy2_dict)
        self.provider_l7policy2.rules = self.provider_rules

        self.provider_l7policies = [
            self.provider_l7policy1, self.provider_l7policy2
        ]

        # Setup Listeners
        self.test_listener1_dict = {
            lib_consts.ID:
            self.listener1_id,
            lib_consts.NAME:
            'listener_1',
            lib_consts.DESCRIPTION:
            'Listener 1',
            lib_consts.DEFAULT_POOL_ID:
            self.pool1_id,
            constants.LOAD_BALANCER_ID:
            self.lb_id,
            lib_consts.PROJECT_ID:
            self.project_id,
            lib_consts.PROTOCOL:
            lib_consts.PROTOCOL_TCP,
            lib_consts.PROTOCOL_PORT:
            90,
            lib_consts.CONNECTION_LIMIT:
            10000,
            constants.TLS_CERTIFICATE_ID:
            self.default_tls_container_ref,
            lib_consts.DEFAULT_POOL:
            self.test_pool1_dict,
            constants.SNI_CONTAINERS: [{
                constants.TLS_CONTAINER_ID:
                self.sni_container_ref_1
            }, {
                constants.TLS_CONTAINER_ID:
                self.sni_container_ref_2
            }],
            constants.PEER_PORT:
            55,
            lib_consts.L7POLICIES:
            self.test_l7policies,
            lib_consts.INSERT_HEADERS: {},
            lib_consts.TIMEOUT_CLIENT_DATA:
            1000,
            lib_consts.TIMEOUT_MEMBER_CONNECT:
            2000,
            lib_consts.TIMEOUT_MEMBER_DATA:
            3000,
            lib_consts.TIMEOUT_TCP_INSPECT:
            4000,
            constants.CLIENT_CA_TLS_CERTIFICATE_ID:
            self.client_ca_tls_certificate_ref,
            lib_consts.CLIENT_AUTHENTICATION:
            constants.CLIENT_AUTH_NONE,
            constants.CLIENT_CRL_CONTAINER_ID:
            self.client_crl_container_ref,
            lib_consts.ALLOWED_CIDRS: ['192.0.2.0/24', '198.51.100.0/24'],
            lib_consts.TLS_CIPHERS:
            constants.CIPHERS_OWASP_SUITE_B,
            lib_consts.TLS_VERSIONS:
            constants.TLS_VERSIONS_OWASP_SUITE_B
        }

        self.test_listener1_dict.update(self._common_test_dict)

        self.test_listener2_dict = copy.deepcopy(self.test_listener1_dict)
        self.test_listener2_dict[lib_consts.ID] = self.listener2_id
        self.test_listener2_dict[lib_consts.NAME] = 'listener_2'
        self.test_listener2_dict[lib_consts.DESCRIPTION] = 'Listener 1'
        self.test_listener2_dict[lib_consts.DEFAULT_POOL_ID] = self.pool2_id
        self.test_listener2_dict[
            lib_consts.DEFAULT_POOL] = self.test_pool2_dict
        del self.test_listener2_dict[lib_consts.L7POLICIES]
        del self.test_listener2_dict[constants.SNI_CONTAINERS]
        del self.test_listener2_dict[constants.CLIENT_CA_TLS_CERTIFICATE_ID]
        del self.test_listener2_dict[constants.CLIENT_CRL_CONTAINER_ID]

        self.test_listeners = [
            self.test_listener1_dict, self.test_listener2_dict
        ]

        self.db_listener1 = data_models.Listener(**self.test_listener1_dict)
        self.db_listener2 = data_models.Listener(**self.test_listener2_dict)
        self.db_listener1.default_pool = self.db_pool1
        self.db_listener2.default_pool = self.db_pool2
        self.db_listener1.l7policies = self.db_l7policies
        self.db_listener1.sni_containers = [
            data_models.SNI(tls_container_id='2'),
            data_models.SNI(tls_container_id='3')
        ]

        self.test_db_listeners = [self.db_listener1, self.db_listener2]

        cert1 = data_models.TLSContainer(certificate='cert 1')
        cert2 = data_models.TLSContainer(certificate='cert 2')
        cert3 = data_models.TLSContainer(certificate='cert 3')
        ca_cert = 'ca cert'
        crl_file_content = 'X509 CRL FILE'

        self.provider_listener1_dict = {
            lib_consts.ADMIN_STATE_UP:
            True,
            lib_consts.ALLOWED_CIDRS: ['192.0.2.0/24', '198.51.100.0/24'],
            lib_consts.CONNECTION_LIMIT:
            10000,
            lib_consts.DEFAULT_POOL:
            self.provider_pool1_dict,
            lib_consts.DEFAULT_POOL_ID:
            self.pool1_id,
            lib_consts.DEFAULT_TLS_CONTAINER_DATA:
            cert1.to_dict(),
            lib_consts.DEFAULT_TLS_CONTAINER_REF:
            self.default_tls_container_ref,
            lib_consts.DESCRIPTION:
            'Listener 1',
            lib_consts.INSERT_HEADERS: {},
            lib_consts.L7POLICIES:
            self.provider_l7policies_dict,
            lib_consts.LISTENER_ID:
            self.listener1_id,
            lib_consts.LOADBALANCER_ID:
            self.lb_id,
            lib_consts.NAME:
            'listener_1',
            lib_consts.PROJECT_ID:
            self.project_id,
            lib_consts.PROTOCOL:
            lib_consts.PROTOCOL_TCP,
            lib_consts.PROTOCOL_PORT:
            90,
            lib_consts.SNI_CONTAINER_DATA: [cert2.to_dict(),
                                            cert3.to_dict()],
            lib_consts.SNI_CONTAINER_REFS:
            [self.sni_container_ref_1, self.sni_container_ref_2],
            lib_consts.TIMEOUT_CLIENT_DATA:
            1000,
            lib_consts.TIMEOUT_MEMBER_CONNECT:
            2000,
            lib_consts.TIMEOUT_MEMBER_DATA:
            3000,
            lib_consts.TIMEOUT_TCP_INSPECT:
            4000,
            lib_consts.CLIENT_CA_TLS_CONTAINER_REF:
            self.client_ca_tls_certificate_ref,
            lib_consts.CLIENT_CA_TLS_CONTAINER_DATA:
            ca_cert,
            lib_consts.CLIENT_AUTHENTICATION:
            constants.CLIENT_AUTH_NONE,
            lib_consts.CLIENT_CRL_CONTAINER_REF:
            self.client_crl_container_ref,
            lib_consts.CLIENT_CRL_CONTAINER_DATA:
            crl_file_content,
            lib_consts.TLS_CIPHERS:
            constants.CIPHERS_OWASP_SUITE_B,
            lib_consts.TLS_VERSIONS:
            constants.TLS_VERSIONS_OWASP_SUITE_B
        }

        self.provider_listener2_dict = copy.deepcopy(
            self.provider_listener1_dict)
        self.provider_listener2_dict[
            lib_consts.LISTENER_ID] = self.listener2_id
        self.provider_listener2_dict[lib_consts.NAME] = 'listener_2'
        self.provider_listener2_dict[lib_consts.DESCRIPTION] = 'Listener 1'
        self.provider_listener2_dict[
            lib_consts.DEFAULT_POOL_ID] = self.pool2_id
        self.provider_listener2_dict[
            lib_consts.DEFAULT_POOL] = self.provider_pool2_dict
        del self.provider_listener2_dict[lib_consts.L7POLICIES]
        self.provider_listener2_dict[
            lib_consts.CLIENT_CA_TLS_CONTAINER_REF] = None
        del self.provider_listener2_dict[
            lib_consts.CLIENT_CA_TLS_CONTAINER_DATA]
        self.provider_listener2_dict[lib_consts.CLIENT_AUTHENTICATION] = (
            constants.CLIENT_AUTH_NONE)
        self.provider_listener2_dict[
            lib_consts.CLIENT_CRL_CONTAINER_REF] = None
        del self.provider_listener2_dict[lib_consts.CLIENT_CRL_CONTAINER_DATA]

        self.provider_listener1 = driver_dm.Listener(
            **self.provider_listener1_dict)
        self.provider_listener2 = driver_dm.Listener(
            **self.provider_listener2_dict)
        self.provider_listener1.default_pool = self.provider_pool1
        self.provider_listener2.default_pool = self.provider_pool2
        self.provider_listener1.l7policies = self.provider_l7policies

        self.provider_listeners = [
            self.provider_listener1, self.provider_listener2
        ]

        self.test_vip_dict = {
            constants.IP_ADDRESS: self.ip_address,
            constants.NETWORK_ID: self.network_id,
            constants.PORT_ID: self.port_id,
            lib_consts.SUBNET_ID: self.subnet_id,
            constants.QOS_POLICY_ID: self.qos_policy_id,
            constants.OCTAVIA_OWNED: None
        }

        self.provider_vip_dict = {
            lib_consts.VIP_ADDRESS: self.ip_address,
            lib_consts.VIP_NETWORK_ID: self.network_id,
            lib_consts.VIP_PORT_ID: self.port_id,
            lib_consts.VIP_SUBNET_ID: self.subnet_id,
            lib_consts.VIP_QOS_POLICY_ID: self.qos_policy_id,
            constants.OCTAVIA_OWNED: None
        }

        self.db_vip = data_models.Vip(ip_address=self.ip_address,
                                      network_id=self.network_id,
                                      port_id=self.port_id,
                                      subnet_id=self.subnet_id,
                                      qos_policy_id=self.qos_policy_id)

        self.test_loadbalancer1_dict = {
            lib_consts.NAME: self.lb_name,
            lib_consts.DESCRIPTION: self.lb_description,
            constants.ENABLED: True,
            lib_consts.PROVISIONING_STATUS: lib_consts.PENDING_UPDATE,
            lib_consts.OPERATING_STATUS: lib_consts.OFFLINE,
            constants.TOPOLOGY: constants.TOPOLOGY_ACTIVE_STANDBY,
            constants.VRRP_GROUP: None,
            constants.PROVIDER: constants.AMPHORA,
            constants.SERVER_GROUP_ID: uuidutils.generate_uuid(),
            lib_consts.PROJECT_ID: self.project_id,
            lib_consts.ID: self.lb_id,
            constants.FLAVOR_ID: self.flavor_id,
            constants.TAGS: ['test_tag']
        }

        self.provider_loadbalancer_dict = {
            lib_consts.ADDITIONAL_VIPS: None,
            lib_consts.ADMIN_STATE_UP: True,
            lib_consts.DESCRIPTION: self.lb_description,
            lib_consts.FLAVOR: {
                "something": "else"
            },
            lib_consts.LISTENERS: None,
            lib_consts.LOADBALANCER_ID: self.lb_id,
            lib_consts.NAME: self.lb_name,
            lib_consts.POOLS: None,
            lib_consts.PROJECT_ID: self.project_id,
            lib_consts.VIP_ADDRESS: self.ip_address,
            lib_consts.VIP_NETWORK_ID: self.network_id,
            lib_consts.VIP_PORT_ID: self.port_id,
            lib_consts.VIP_QOS_POLICY_ID: self.qos_policy_id,
            lib_consts.VIP_SUBNET_ID: self.subnet_id
        }

        self.provider_loadbalancer_tree_dict = {
            lib_consts.ADDITIONAL_VIPS: None,
            lib_consts.ADMIN_STATE_UP: True,
            lib_consts.AVAILABILITY_ZONE: None,
            lib_consts.DESCRIPTION: self.lb_description,
            lib_consts.FLAVOR: {
                "something": "else"
            },
            lib_consts.LISTENERS: None,
            lib_consts.LOADBALANCER_ID: self.lb_id,
            lib_consts.NAME: self.lb_name,
            lib_consts.POOLS: None,
            lib_consts.PROJECT_ID: self.project_id,
            lib_consts.VIP_ADDRESS: self.ip_address,
            lib_consts.VIP_NETWORK_ID: self.network_id,
            lib_consts.VIP_PORT_ID: self.port_id,
            lib_consts.VIP_QOS_POLICY_ID: self.qos_policy_id,
            lib_consts.VIP_SUBNET_ID: self.subnet_id
        }
Beispiel #15
0
    def setUp(self):
        super(TestNsxProviderDriver, self).setUp()
        global code_ok
        if not code_ok:
            return
        # init the NSX driver without the RPC & certificate
        with mock.patch(DRIVER + '._init_rpc_messaging'), \
            mock.patch(DRIVER + '._init_rpc_listener'), \
            mock.patch(DRIVER + '._init_cert_manager'):
            self.driver = driver.NSXOctaviaDriver()
            self.driver.client = mock.Mock()

        self.loadbalancer_id = uuidutils.generate_uuid()
        self.vip_address = '192.0.2.10'
        self.vip_network_id = uuidutils.generate_uuid()
        self.vip_port_id = uuidutils.generate_uuid()
        self.vip_subnet_id = uuidutils.generate_uuid()
        self.listener_id = uuidutils.generate_uuid()
        self.pool_id = uuidutils.generate_uuid()
        self.member_id = uuidutils.generate_uuid()
        self.member_subnet_id = uuidutils.generate_uuid()
        self.healthmonitor_id = uuidutils.generate_uuid()
        self.l7policy_id = uuidutils.generate_uuid()
        self.l7rule_id = uuidutils.generate_uuid()
        self.project_id = uuidutils.generate_uuid()
        self.default_tls_container_ref = uuidutils.generate_uuid()
        self.sni_container_ref_1 = uuidutils.generate_uuid()
        self.sni_container_ref_2 = uuidutils.generate_uuid()

        self.ref_member = data_models.Member(
            address='198.51.100.4',
            admin_state_up=True,
            member_id=self.member_id,
            monitor_address='203.0.113.2',
            monitor_port=66,
            name='jacket',
            pool_id=self.pool_id,
            protocol_port=99,
            subnet_id=self.member_subnet_id,
            weight=55)

        self.ref_healthmonitor = data_models.HealthMonitor(
            admin_state_up=False,
            delay=2,
            expected_codes="500",
            healthmonitor_id=self.healthmonitor_id,
            http_method='TRACE',
            max_retries=1,
            max_retries_down=0,
            name='doc',
            pool_id=self.pool_id,
            timeout=3,
            type='PHD',
            url_path='/index.html')

        self.ref_pool = data_models.Pool(
            admin_state_up=True,
            description='Olympic swimming pool',
            healthmonitor=self.ref_healthmonitor,
            lb_algorithm='A_Fast_One',
            loadbalancer_id=self.loadbalancer_id,
            members=[self.ref_member],
            name='Osborn',
            pool_id=self.pool_id,
            protocol='avian',
            session_persistence={'type': 'glue'})

        self.ref_l7rule = data_models.L7Rule(
            admin_state_up=True,
            compare_type='store_brand',
            invert=True,
            key='board',
            l7policy_id=self.l7policy_id,
            l7rule_id=self.l7rule_id,
            type='strict',
            value='gold')

        self.ref_l7policy = data_models.L7Policy(
            action='packed',
            admin_state_up=False,
            description='Corporate policy',
            l7policy_id=self.l7policy_id,
            listener_id=self.listener_id,
            name='more_policy',
            position=1,
            redirect_pool_id=self.pool_id,
            redirect_url='/hr',
            rules=[self.ref_l7rule])

        self.ref_listener = data_models.Listener(
            admin_state_up=False,
            connection_limit=5,
            default_pool=self.ref_pool,
            default_pool_id=self.pool_id,
            default_tls_container_data='default_cert_data',
            default_tls_container_ref=self.default_tls_container_ref,
            description='The listener',
            insert_headers={'X-Forwarded-For': 'true'},
            l7policies=[self.ref_l7policy],
            listener_id=self.listener_id,
            loadbalancer_id=self.loadbalancer_id,
            name='super_listener',
            protocol='avian',
            protocol_port=42,
            sni_container_data=['sni_cert_data_1', 'sni_cert_data_2'],
            sni_container_refs=[self.sni_container_ref_1,
                                self.sni_container_ref_2])

        self.ref_lb = data_models.LoadBalancer(
            admin_state_up=False,
            description='One great load balancer',
            flavor={'cake': 'chocolate'},
            listeners=[self.ref_listener],
            loadbalancer_id=self.loadbalancer_id,
            name='favorite_lb',
            project_id=self.project_id,
            vip_address=self.vip_address,
            vip_network_id=self.vip_network_id,
            vip_port_id=self.vip_port_id,
            vip_subnet_id=self.vip_subnet_id)

        # start DB mocks
        mock.patch('octavia.db.api.get_session').start()
        mock.patch("octavia.api.drivers.utils.db_pool_to_provider_pool",
                   return_value=self.ref_pool).start()
Beispiel #16
0
    def __init__(self):
        self.project_id = uuidutils.generate_uuid()
        self.lb_id = uuidutils.generate_uuid()
        self.ip_address = '192.0.2.30'
        self.port_id = uuidutils.generate_uuid()
        self.network_id = uuidutils.generate_uuid()
        self.subnet_id = uuidutils.generate_uuid()
        self.qos_policy_id = uuidutils.generate_uuid()
        self.lb_name = uuidutils.generate_uuid()
        self.lb_description = uuidutils.generate_uuid()
        self.flavor_id = uuidutils.generate_uuid()
        self.flavor_profile_id = uuidutils.generate_uuid()

        self.listener1_id = uuidutils.generate_uuid()
        self.listener2_id = uuidutils.generate_uuid()
        self.default_tls_container_ref = uuidutils.generate_uuid()
        self.sni_container_ref_1 = uuidutils.generate_uuid()
        self.sni_container_ref_2 = uuidutils.generate_uuid()
        self.client_ca_tls_certificate_ref = uuidutils.generate_uuid()
        self.client_crl_container_ref = uuidutils.generate_uuid()
        self.pool_sni_container_ref = uuidutils.generate_uuid()
        self.pool_ca_container_ref = uuidutils.generate_uuid()
        self.pool_crl_container_ref = uuidutils.generate_uuid()

        self.pool1_id = uuidutils.generate_uuid()
        self.pool2_id = uuidutils.generate_uuid()

        self.hm1_id = uuidutils.generate_uuid()
        self.hm2_id = uuidutils.generate_uuid()

        self.member1_id = uuidutils.generate_uuid()
        self.member2_id = uuidutils.generate_uuid()
        self.member3_id = uuidutils.generate_uuid()
        self.member4_id = uuidutils.generate_uuid()

        self.l7policy1_id = uuidutils.generate_uuid()
        self.l7policy2_id = uuidutils.generate_uuid()

        self.l7rule1_id = uuidutils.generate_uuid()
        self.l7rule2_id = uuidutils.generate_uuid()

        self.created_at = datetime.datetime.now()
        self.updated_at = (datetime.datetime.now() +
                           datetime.timedelta(minutes=1))

        self._common_test_dict = {
            'provisioning_status': constants.ACTIVE,
            'operating_status': constants.ONLINE,
            'project_id': self.project_id,
            'created_at': self.created_at,
            'updated_at': self.updated_at,
            'enabled': True
        }

        # Setup Health Monitors
        self.test_hm1_dict = {
            'id': self.hm1_id,
            'type': constants.HEALTH_MONITOR_PING,
            'delay': 1,
            'timeout': 3,
            'fall_threshold': 1,
            'rise_threshold': 2,
            'http_method': 'GET',
            'url_path': '/',
            'expected_codes': '200',
            'name': 'hm1',
            'pool_id': self.pool1_id,
            'http_version': 1.0,
            'domain_name': None,
            'project_id': self.project_id
        }

        self.test_hm1_dict.update(self._common_test_dict)

        self.test_hm2_dict = copy.deepcopy(self.test_hm1_dict)
        self.test_hm2_dict['id'] = self.hm2_id
        self.test_hm2_dict['name'] = 'hm2'
        self.test_hm2_dict.update({
            'http_version': 1.1,
            'domain_name': 'testdomainname.com'
        })

        self.db_hm1 = data_models.HealthMonitor(**self.test_hm1_dict)
        self.db_hm2 = data_models.HealthMonitor(**self.test_hm2_dict)

        self.provider_hm1_dict = {
            'admin_state_up': True,
            'delay': 1,
            'expected_codes': '200',
            'healthmonitor_id': self.hm1_id,
            'http_method': 'GET',
            'max_retries': 2,
            'max_retries_down': 1,
            'name': 'hm1',
            'pool_id': self.pool1_id,
            'project_id': self.project_id,
            'timeout': 3,
            'type': constants.HEALTH_MONITOR_PING,
            'url_path': '/',
            'http_version': 1.0,
            'domain_name': None
        }

        self.provider_hm2_dict = copy.deepcopy(self.provider_hm1_dict)
        self.provider_hm2_dict['healthmonitor_id'] = self.hm2_id
        self.provider_hm2_dict['name'] = 'hm2'
        self.provider_hm2_dict.update({
            'http_version': 1.1,
            'domain_name': 'testdomainname.com'
        })

        self.provider_hm1 = driver_dm.HealthMonitor(**self.provider_hm1_dict)
        self.provider_hm2 = driver_dm.HealthMonitor(**self.provider_hm2_dict)

        # Setup Members
        self.test_member1_dict = {
            'id': self.member1_id,
            'pool_id': self.pool1_id,
            'ip_address': '192.0.2.16',
            'protocol_port': 80,
            'weight': 0,
            'backup': False,
            'subnet_id': self.subnet_id,
            'project_id': self.project_id,
            'name': 'member1',
            'operating_status': lib_consts.ONLINE,
            'provisioning_status': lib_consts.ACTIVE,
            'enabled': True,
            'created_at': self.created_at,
            'updated_at': self.updated_at,
            'monitor_address': '192.0.2.26',
            'monitor_port': 81
        }

        self.test_member1_dict.update(self._common_test_dict)

        self.test_member2_dict = copy.deepcopy(self.test_member1_dict)
        self.test_member2_dict['id'] = self.member2_id
        self.test_member2_dict['ip_address'] = '192.0.2.17'
        self.test_member2_dict['monitor_address'] = '192.0.2.27'
        self.test_member2_dict['name'] = 'member2'

        self.test_member3_dict = copy.deepcopy(self.test_member1_dict)
        self.test_member3_dict['id'] = self.member3_id
        self.test_member3_dict['ip_address'] = '192.0.2.18'
        self.test_member3_dict['monitor_address'] = '192.0.2.28'
        self.test_member3_dict['name'] = 'member3'
        self.test_member3_dict['pool_id'] = self.pool2_id

        self.test_member4_dict = copy.deepcopy(self.test_member1_dict)
        self.test_member4_dict['id'] = self.member4_id
        self.test_member4_dict['ip_address'] = '192.0.2.19'
        self.test_member4_dict['monitor_address'] = '192.0.2.29'
        self.test_member4_dict['name'] = 'member4'
        self.test_member4_dict['pool_id'] = self.pool2_id

        self.test_pool1_members_dict = [
            self.test_member1_dict, self.test_member2_dict
        ]
        self.test_pool2_members_dict = [
            self.test_member3_dict, self.test_member4_dict
        ]

        self.db_member1 = data_models.Member(**self.test_member1_dict)
        self.db_member2 = data_models.Member(**self.test_member2_dict)
        self.db_member3 = data_models.Member(**self.test_member3_dict)
        self.db_member4 = data_models.Member(**self.test_member4_dict)

        self.db_pool1_members = [self.db_member1, self.db_member2]
        self.db_pool2_members = [self.db_member3, self.db_member4]

        self.provider_member1_dict = {
            'address': '192.0.2.16',
            'admin_state_up': True,
            'member_id': self.member1_id,
            'monitor_address': '192.0.2.26',
            'monitor_port': 81,
            'name': 'member1',
            'pool_id': self.pool1_id,
            'project_id': self.project_id,
            'protocol_port': 80,
            'subnet_id': self.subnet_id,
            'weight': 0,
            'backup': False
        }

        self.provider_member2_dict = copy.deepcopy(self.provider_member1_dict)
        self.provider_member2_dict['member_id'] = self.member2_id
        self.provider_member2_dict['address'] = '192.0.2.17'
        self.provider_member2_dict['monitor_address'] = '192.0.2.27'
        self.provider_member2_dict['name'] = 'member2'

        self.provider_member3_dict = copy.deepcopy(self.provider_member1_dict)
        self.provider_member3_dict['member_id'] = self.member3_id
        self.provider_member3_dict['address'] = '192.0.2.18'
        self.provider_member3_dict['monitor_address'] = '192.0.2.28'
        self.provider_member3_dict['name'] = 'member3'
        self.provider_member3_dict['pool_id'] = self.pool2_id

        self.provider_member4_dict = copy.deepcopy(self.provider_member1_dict)
        self.provider_member4_dict['member_id'] = self.member4_id
        self.provider_member4_dict['address'] = '192.0.2.19'
        self.provider_member4_dict['monitor_address'] = '192.0.2.29'
        self.provider_member4_dict['name'] = 'member4'
        self.provider_member4_dict['pool_id'] = self.pool2_id

        self.provider_pool1_members_dict = [
            self.provider_member1_dict, self.provider_member2_dict
        ]

        self.provider_pool2_members_dict = [
            self.provider_member3_dict, self.provider_member4_dict
        ]

        self.provider_member1 = driver_dm.Member(**self.provider_member1_dict)
        self.provider_member2 = driver_dm.Member(**self.provider_member2_dict)
        self.provider_member3 = driver_dm.Member(**self.provider_member3_dict)
        self.provider_member4 = driver_dm.Member(**self.provider_member4_dict)

        self.provider_pool1_members = [
            self.provider_member1, self.provider_member2
        ]
        self.provider_pool2_members = [
            self.provider_member3, self.provider_member4
        ]

        # Setup test pools
        self.test_pool1_dict = {
            'id': self.pool1_id,
            'name': 'pool1',
            'description': 'Pool 1',
            'load_balancer_id': self.lb_id,
            'project_id': self.project_id,
            'protocol': 'TCP',
            'lb_algorithm': 'ROUND_ROBIN',
            'members': self.test_pool1_members_dict,
            'health_monitor': self.test_hm1_dict,
            'session_persistence': {
                'type': 'SOURCE_IP'
            },
            'listeners': [],
            'l7policies': [],
            'tls_certificate_id': self.pool_sni_container_ref,
            'ca_tls_certificate_id': self.pool_ca_container_ref,
            'crl_container_id': self.pool_crl_container_ref,
            'tls_enabled': True
        }

        self.test_pool1_dict.update(self._common_test_dict)

        self.test_pool2_dict = copy.deepcopy(self.test_pool1_dict)
        self.test_pool2_dict['id'] = self.pool2_id
        self.test_pool2_dict['name'] = 'pool2'
        self.test_pool2_dict['description'] = 'Pool 2'
        self.test_pool2_dict['members'] = self.test_pool2_members_dict
        del self.test_pool2_dict['tls_certificate_id']
        del self.test_pool2_dict['ca_tls_certificate_id']
        del self.test_pool2_dict['crl_container_id']

        self.test_pools = [self.test_pool1_dict, self.test_pool2_dict]

        self.db_pool1 = data_models.Pool(**self.test_pool1_dict)
        self.db_pool1.health_monitor = self.db_hm1
        self.db_pool1.members = self.db_pool1_members
        self.db_pool2 = data_models.Pool(**self.test_pool2_dict)
        self.db_pool2.health_monitor = self.db_hm2
        self.db_pool2.members = self.db_pool2_members

        self.test_db_pools = [self.db_pool1, self.db_pool2]
        pool_cert = data_models.TLSContainer(certificate='pool cert')
        pool_ca_file_content = 'X509 POOL CA CERT FILE'
        pool_crl_file_content = 'X509 POOL CRL FILE'

        self.provider_pool1_dict = {
            'admin_state_up': True,
            'description': 'Pool 1',
            'healthmonitor': self.provider_hm1_dict,
            'lb_algorithm': 'ROUND_ROBIN',
            'loadbalancer_id': self.lb_id,
            'members': self.provider_pool1_members_dict,
            'name': 'pool1',
            'pool_id': self.pool1_id,
            'project_id': self.project_id,
            'protocol': 'TCP',
            'session_persistence': {
                'type': 'SOURCE_IP'
            },
            'tls_container_ref': self.pool_sni_container_ref,
            'tls_container_data': pool_cert.to_dict(),
            'ca_tls_container_ref': self.pool_ca_container_ref,
            'ca_tls_container_data': pool_ca_file_content,
            'crl_container_ref': self.pool_crl_container_ref,
            'crl_container_data': pool_crl_file_content,
            'tls_enabled': True
        }

        self.provider_pool2_dict = copy.deepcopy(self.provider_pool1_dict)
        self.provider_pool2_dict['pool_id'] = self.pool2_id
        self.provider_pool2_dict['name'] = 'pool2'
        self.provider_pool2_dict['description'] = 'Pool 2'
        self.provider_pool2_dict['members'] = self.provider_pool2_members_dict
        self.provider_pool2_dict['healthmonitor'] = self.provider_hm2_dict
        self.provider_pool2_dict['tls_container_ref'] = None
        del self.provider_pool2_dict['tls_container_data']
        self.provider_pool2_dict['ca_tls_container_ref'] = None
        del self.provider_pool2_dict['ca_tls_container_data']
        self.provider_pool2_dict['crl_container_ref'] = None
        del self.provider_pool2_dict['crl_container_data']

        self.provider_pool1 = driver_dm.Pool(**self.provider_pool1_dict)
        self.provider_pool1.members = self.provider_pool1_members
        self.provider_pool1.healthmonitor = self.provider_hm1
        self.provider_pool2 = driver_dm.Pool(**self.provider_pool2_dict)
        self.provider_pool2.members = self.provider_pool2_members
        self.provider_pool2.healthmonitor = self.provider_hm2

        self.provider_pools = [self.provider_pool1, self.provider_pool2]

        # Setup L7Rules
        self.test_l7rule1_dict = {
            'id': self.l7rule1_id,
            'l7policy_id': self.l7policy1_id,
            'type': lib_consts.L7RULE_TYPE_PATH,
            'compare_type': lib_consts.L7RULE_COMPARE_TYPE_EQUAL_TO,
            'key': 'fake_key',
            'value': 'fake_value',
            'project_id': self.project_id,
            'l7policy': None,
            'invert': False
        }

        self.test_l7rule1_dict.update(self._common_test_dict)

        self.test_l7rule2_dict = copy.deepcopy(self.test_l7rule1_dict)
        self.test_l7rule2_dict['id'] = self.l7rule2_id

        self.test_l7rules = [self.test_l7rule1_dict, self.test_l7rule2_dict]

        self.db_l7Rule1 = data_models.L7Rule(**self.test_l7rule1_dict)
        self.db_l7Rule2 = data_models.L7Rule(**self.test_l7rule2_dict)

        self.db_l7Rules = [self.db_l7Rule1, self.db_l7Rule2]

        self.provider_l7rule1_dict = {
            'admin_state_up': True,
            'compare_type': lib_consts.L7RULE_COMPARE_TYPE_EQUAL_TO,
            'invert': False,
            'key': 'fake_key',
            'l7policy_id': self.l7policy1_id,
            'l7rule_id': self.l7rule1_id,
            'type': lib_consts.L7RULE_TYPE_PATH,
            'project_id': self.project_id,
            'value': 'fake_value'
        }

        self.provider_l7rule2_dict = copy.deepcopy(self.provider_l7rule1_dict)
        self.provider_l7rule2_dict['l7rule_id'] = self.l7rule2_id
        self.provider_l7rules_dicts = [
            self.provider_l7rule1_dict, self.provider_l7rule2_dict
        ]

        self.provider_l7rule1 = driver_dm.L7Rule(**self.provider_l7rule1_dict)
        self.provider_l7rule2 = driver_dm.L7Rule(**self.provider_l7rule2_dict)

        self.provider_rules = [self.provider_l7rule1, self.provider_l7rule2]

        # Setup L7Policies
        self.test_l7policy1_dict = {
            'id': self.l7policy1_id,
            'name': 'l7policy_1',
            'description': 'L7policy 1',
            'listener_id': self.listener1_id,
            'action': lib_consts.L7POLICY_ACTION_REDIRECT_TO_URL,
            'redirect_pool_id': None,
            'redirect_url': 'http://example.com/index.html',
            'redirect_prefix': None,
            'project_id': self.project_id,
            'position': 1,
            'listener': None,
            'redirect_pool': None,
            'l7rules': self.test_l7rules,
            'redirect_http_code': 302
        }

        self.test_l7policy1_dict.update(self._common_test_dict)

        self.test_l7policy2_dict = copy.deepcopy(self.test_l7policy1_dict)
        self.test_l7policy2_dict['id'] = self.l7policy2_id
        self.test_l7policy2_dict['name'] = 'l7policy_2'
        self.test_l7policy2_dict['description'] = 'L7policy 2'

        self.test_l7policies = [
            self.test_l7policy1_dict, self.test_l7policy2_dict
        ]

        self.db_l7policy1 = data_models.L7Policy(**self.test_l7policy1_dict)
        self.db_l7policy2 = data_models.L7Policy(**self.test_l7policy2_dict)
        self.db_l7policy1.l7rules = self.db_l7Rules
        self.db_l7policy2.l7rules = self.db_l7Rules

        self.db_l7policies = [self.db_l7policy1, self.db_l7policy2]

        self.provider_l7policy1_dict = {
            'action': lib_consts.L7POLICY_ACTION_REDIRECT_TO_URL,
            'admin_state_up': True,
            'description': 'L7policy 1',
            'l7policy_id': self.l7policy1_id,
            'listener_id': self.listener1_id,
            'name': 'l7policy_1',
            'position': 1,
            'project_id': self.project_id,
            'redirect_pool_id': None,
            'redirect_url': 'http://example.com/index.html',
            'redirect_prefix': None,
            'rules': self.provider_l7rules_dicts,
            'redirect_http_code': 302
        }

        self.provider_l7policy2_dict = copy.deepcopy(
            self.provider_l7policy1_dict)
        self.provider_l7policy2_dict['l7policy_id'] = self.l7policy2_id
        self.provider_l7policy2_dict['name'] = 'l7policy_2'
        self.provider_l7policy2_dict['description'] = 'L7policy 2'

        self.provider_l7policies_dict = [
            self.provider_l7policy1_dict, self.provider_l7policy2_dict
        ]

        self.provider_l7policy1 = driver_dm.L7Policy(
            **self.provider_l7policy1_dict)
        self.provider_l7policy1.rules = self.provider_rules
        self.provider_l7policy2 = driver_dm.L7Policy(
            **self.provider_l7policy2_dict)
        self.provider_l7policy2.rules = self.provider_rules

        self.provider_l7policies = [
            self.provider_l7policy1, self.provider_l7policy2
        ]

        # Setup Listeners
        self.test_listener1_dict = {
            'id':
            self.listener1_id,
            'name':
            'listener_1',
            'description':
            'Listener 1',
            'default_pool_id':
            self.pool1_id,
            'load_balancer_id':
            self.lb_id,
            'project_id':
            self.project_id,
            'protocol':
            'TCP',
            'protocol_port':
            90,
            'connection_limit':
            10000,
            'tls_certificate_id':
            self.default_tls_container_ref,
            'default_pool':
            self.test_pool1_dict,
            'sni_containers': [{
                'tls_container_id': self.sni_container_ref_1
            }, {
                'tls_container_id': self.sni_container_ref_2
            }],
            'peer_port':
            55,
            'l7policies':
            self.test_l7policies,
            'insert_headers': {},
            'timeout_client_data':
            1000,
            'timeout_member_connect':
            2000,
            'timeout_member_data':
            3000,
            'timeout_tcp_inspect':
            4000,
            'client_ca_tls_certificate_id':
            self.client_ca_tls_certificate_ref,
            'client_authentication':
            constants.CLIENT_AUTH_NONE,
            'client_crl_container_id':
            self.client_crl_container_ref
        }

        self.test_listener1_dict.update(self._common_test_dict)

        self.test_listener2_dict = copy.deepcopy(self.test_listener1_dict)
        self.test_listener2_dict['id'] = self.listener2_id
        self.test_listener2_dict['name'] = 'listener_2'
        self.test_listener2_dict['description'] = 'Listener 1'
        self.test_listener2_dict['default_pool_id'] = self.pool2_id
        self.test_listener2_dict['default_pool'] = self.test_pool2_dict
        del self.test_listener2_dict['l7policies']
        del self.test_listener2_dict['sni_containers']
        del self.test_listener2_dict['client_ca_tls_certificate_id']
        del self.test_listener2_dict['client_crl_container_id']

        self.test_listeners = [
            self.test_listener1_dict, self.test_listener2_dict
        ]

        self.db_listener1 = data_models.Listener(**self.test_listener1_dict)
        self.db_listener2 = data_models.Listener(**self.test_listener2_dict)
        self.db_listener1.default_pool = self.db_pool1
        self.db_listener2.default_pool = self.db_pool2
        self.db_listener1.l7policies = self.db_l7policies
        self.db_listener1.sni_containers = [
            data_models.SNI(tls_container_id='2'),
            data_models.SNI(tls_container_id='3')
        ]

        self.test_db_listeners = [self.db_listener1, self.db_listener2]

        cert1 = data_models.TLSContainer(certificate='cert 1')
        cert2 = data_models.TLSContainer(certificate='cert 2')
        cert3 = data_models.TLSContainer(certificate='cert 3')
        ca_cert = 'ca cert'
        crl_file_content = 'X509 CRL FILE'

        self.provider_listener1_dict = {
            'admin_state_up':
            True,
            'connection_limit':
            10000,
            'default_pool':
            self.provider_pool1_dict,
            'default_pool_id':
            self.pool1_id,
            'default_tls_container_data':
            cert1.to_dict(),
            'default_tls_container_ref':
            self.default_tls_container_ref,
            'description':
            'Listener 1',
            'insert_headers': {},
            'l7policies':
            self.provider_l7policies_dict,
            'listener_id':
            self.listener1_id,
            'loadbalancer_id':
            self.lb_id,
            'name':
            'listener_1',
            'project_id':
            self.project_id,
            'protocol':
            'TCP',
            'protocol_port':
            90,
            'sni_container_data': [cert2.to_dict(),
                                   cert3.to_dict()],
            'sni_container_refs':
            [self.sni_container_ref_1, self.sni_container_ref_2],
            'timeout_client_data':
            1000,
            'timeout_member_connect':
            2000,
            'timeout_member_data':
            3000,
            'timeout_tcp_inspect':
            4000,
            'client_ca_tls_container_ref':
            self.client_ca_tls_certificate_ref,
            'client_ca_tls_container_data':
            ca_cert,
            'client_authentication':
            constants.CLIENT_AUTH_NONE,
            'client_crl_container_ref':
            self.client_crl_container_ref,
            'client_crl_container_data':
            crl_file_content
        }

        self.provider_listener2_dict = copy.deepcopy(
            self.provider_listener1_dict)
        self.provider_listener2_dict['listener_id'] = self.listener2_id
        self.provider_listener2_dict['name'] = 'listener_2'
        self.provider_listener2_dict['description'] = 'Listener 1'
        self.provider_listener2_dict['default_pool_id'] = self.pool2_id
        self.provider_listener2_dict['default_pool'] = self.provider_pool2_dict
        del self.provider_listener2_dict['l7policies']
        self.provider_listener2_dict['client_ca_tls_container_ref'] = None
        del self.provider_listener2_dict['client_ca_tls_container_data']
        self.provider_listener2_dict['client_authentication'] = (
            constants.CLIENT_AUTH_NONE)
        self.provider_listener2_dict['client_crl_container_ref'] = None
        del self.provider_listener2_dict['client_crl_container_data']

        self.provider_listener1 = driver_dm.Listener(
            **self.provider_listener1_dict)
        self.provider_listener2 = driver_dm.Listener(
            **self.provider_listener2_dict)
        self.provider_listener1.default_pool = self.provider_pool1
        self.provider_listener2.default_pool = self.provider_pool2
        self.provider_listener1.l7policies = self.provider_l7policies

        self.provider_listeners = [
            self.provider_listener1, self.provider_listener2
        ]

        self.test_vip_dict = {
            'ip_address': self.ip_address,
            'network_id': self.network_id,
            'port_id': self.port_id,
            'subnet_id': self.subnet_id,
            'qos_policy_id': self.qos_policy_id
        }

        self.provider_vip_dict = {
            'vip_address': self.ip_address,
            'vip_network_id': self.network_id,
            'vip_port_id': self.port_id,
            'vip_subnet_id': self.subnet_id,
            'vip_qos_policy_id': self.qos_policy_id
        }

        self.db_vip = data_models.Vip(ip_address=self.ip_address,
                                      network_id=self.network_id,
                                      port_id=self.port_id,
                                      subnet_id=self.subnet_id,
                                      qos_policy_id=self.qos_policy_id)

        self.test_loadbalancer1_dict = {
            'name': self.lb_name,
            'description': self.lb_description,
            'enabled': True,
            'provisioning_status': lib_consts.PENDING_UPDATE,
            'operating_status': lib_consts.OFFLINE,
            'topology': constants.TOPOLOGY_ACTIVE_STANDBY,
            'vrrp_group': None,
            'provider': 'amphora',
            'server_group_id': uuidutils.generate_uuid(),
            'project_id': self.project_id,
            'id': self.lb_id,
            'flavor_id': self.flavor_id,
            'tags': ['test_tag']
        }

        self.provider_loadbalancer_dict = {
            'additional_vips': None,
            'admin_state_up': True,
            'description': self.lb_description,
            'flavor': {
                "something": "else"
            },
            'listeners': None,
            'loadbalancer_id': self.lb_id,
            'name': self.lb_name,
            'pools': None,
            'project_id': self.project_id,
            'vip_address': self.ip_address,
            'vip_network_id': self.network_id,
            'vip_port_id': self.port_id,
            'vip_qos_policy_id': self.qos_policy_id,
            'vip_subnet_id': self.subnet_id
        }

        self.provider_loadbalancer_tree_dict = {
            'additional_vips': None,
            'admin_state_up': True,
            'description': self.lb_description,
            'flavor': {
                "something": "else"
            },
            'listeners': None,
            'loadbalancer_id': self.lb_id,
            'name': self.lb_name,
            'pools': None,
            'project_id': self.project_id,
            'vip_address': self.ip_address,
            'vip_network_id': self.network_id,
            'vip_port_id': self.port_id,
            'vip_qos_policy_id': self.qos_policy_id,
            'vip_subnet_id': self.subnet_id
        }
Beispiel #17
0
    def setUp(self):
        super().setUp()
        self.driver = ovn_driver.OvnProviderDriver()
        add_req_thread = mock.patch.object(ovn_helper.OvnProviderHelper,
                                           'add_request')
        self.member_line = ('member_%s_%s:%s_%s' %
                            (self.member_id, self.member_address,
                             self.member_port, self.member_subnet_id))
        self.ovn_lb = mock.MagicMock()
        self.ovn_lb.name = 'foo_ovn_lb'
        self.ovn_lb.external_ids = {
            ovn_const.LB_EXT_IDS_VIP_KEY: '10.22.33.4',
            'pool_%s' % self.pool_id: self.member_line,
            'listener_%s' % self.listener_id: '80:pool_%s' % self.pool_id
        }
        self.mock_add_request = add_req_thread.start()
        self.project_id = uuidutils.generate_uuid()

        self.fail_member = data_models.Member(
            address='198.51.100.4',
            admin_state_up=True,
            member_id=self.member_id,
            monitor_address="100.200.200.100",
            monitor_port=66,
            name='Amazin',
            pool_id=self.pool_id,
            protocol_port=99,
            subnet_id=self.member_subnet_id,
            weight=55)
        self.ref_member = data_models.Member(address='198.52.100.4',
                                             admin_state_up=True,
                                             member_id=self.member_id,
                                             monitor_address=data_models.Unset,
                                             monitor_port=data_models.Unset,
                                             name='Amazing',
                                             pool_id=self.pool_id,
                                             protocol_port=99,
                                             subnet_id=self.member_subnet_id,
                                             weight=55)
        self.update_member = data_models.Member(
            address='198.53.100.4',
            admin_state_up=False,
            member_id=self.member_id,
            monitor_address=data_models.Unset,
            monitor_port=data_models.Unset,
            name='Amazin',
            pool_id=self.pool_id,
            protocol_port=99,
            subnet_id=self.member_subnet_id,
            weight=55)
        self.ref_update_pool = data_models.Pool(
            admin_state_up=False,
            description='pool',
            name='Peter',
            lb_algorithm=constants.LB_ALGORITHM_SOURCE_IP_PORT,
            loadbalancer_id=self.loadbalancer_id,
            listener_id=self.listener_id,
            members=[self.ref_member],
            pool_id=self.pool_id,
            protocol='TCP',
            session_persistence={'type': 'fix'})
        self.ref_pool = data_models.Pool(
            admin_state_up=True,
            description='pool',
            name='Peter',
            lb_algorithm=constants.LB_ALGORITHM_SOURCE_IP_PORT,
            loadbalancer_id=self.loadbalancer_id,
            listener_id=self.listener_id,
            members=[self.ref_member],
            pool_id=self.pool_id,
            protocol='TCP',
            session_persistence={'type': 'fix'})
        self.ref_http_pool = data_models.Pool(
            admin_state_up=True,
            description='pool',
            lb_algorithm=constants.LB_ALGORITHM_SOURCE_IP_PORT,
            loadbalancer_id=self.loadbalancer_id,
            listener_id=self.listener_id,
            members=[self.ref_member],
            name='Groot',
            pool_id=self.pool_id,
            protocol='HTTP',
            session_persistence={'type': 'fix'})
        self.ref_lc_pool = data_models.Pool(
            admin_state_up=True,
            description='pool',
            lb_algorithm=constants.LB_ALGORITHM_LEAST_CONNECTIONS,
            loadbalancer_id=self.loadbalancer_id,
            listener_id=self.listener_id,
            members=[self.ref_member],
            name='Groot',
            pool_id=self.pool_id,
            protocol='HTTP',
            session_persistence={'type': 'fix'})
        self.ref_listener = data_models.Listener(
            admin_state_up=False,
            connection_limit=5,
            default_pool=self.ref_pool,
            default_pool_id=self.pool_id,
            listener_id=self.listener_id,
            loadbalancer_id=self.loadbalancer_id,
            name='listener',
            protocol='TCP',
            protocol_port=42)
        self.ref_listener_udp = data_models.Listener(
            admin_state_up=False,
            connection_limit=5,
            default_pool=self.ref_pool,
            default_pool_id=self.pool_id,
            listener_id=self.listener_id,
            loadbalancer_id=self.loadbalancer_id,
            name='listener',
            protocol='UDP',
            protocol_port=42)
        self.ref_listener_sctp = data_models.Listener(
            admin_state_up=False,
            connection_limit=5,
            default_pool=self.ref_pool,
            default_pool_id=self.pool_id,
            listener_id=self.listener_id,
            loadbalancer_id=self.loadbalancer_id,
            name='listener',
            protocol='SCTP',
            protocol_port=42)
        self.fail_listener = data_models.Listener(
            admin_state_up=False,
            connection_limit=5,
            default_pool=self.ref_pool,
            default_pool_id=self.pool_id,
            listener_id=self.listener_id,
            loadbalancer_id=self.loadbalancer_id,
            name='listener',
            protocol='http',
            protocol_port=42)
        self.ref_lb_fully_populated = data_models.LoadBalancer(
            admin_state_up=False,
            listeners=[self.ref_listener],
            pools=[self.ref_pool],
            loadbalancer_id=self.loadbalancer_id,
            name='favorite_lb0',
            project_id=self.project_id,
            vip_address=self.vip_address,
            vip_network_id=self.vip_network_id)
        self.ref_lb0 = data_models.LoadBalancer(
            admin_state_up=False,
            listeners=[self.ref_listener],
            loadbalancer_id=self.loadbalancer_id,
            name='favorite_lb0',
            project_id=self.project_id,
            vip_address=self.vip_address,
            vip_network_id=self.vip_network_id)
        self.ref_lb1 = data_models.LoadBalancer(
            admin_state_up=True,
            listeners=[self.ref_listener],
            loadbalancer_id=self.loadbalancer_id,
            name='favorite_lb1',
            project_id=self.project_id,
            vip_address=self.vip_address,
            vip_network_id=self.vip_network_id)
        self.fail_health_monitor = data_models.HealthMonitor(
            admin_state_up=True,
            name='UnHealthy',
            pool_id=self.pool_id,
            healthmonitor_id=self.healthmonitor_id,
            type="not_valid",
            delay=1,
            timeout=2,
            max_retries_down=3,
            max_retries=4)
        self.ref_health_monitor = data_models.HealthMonitor(
            admin_state_up=True,
            name='Healthy',
            pool_id=self.pool_id,
            healthmonitor_id=self.healthmonitor_id,
            type=constants.HEALTH_MONITOR_TCP,
            delay=6,
            timeout=7,
            max_retries_down=5,
            max_retries=3)
        self.ref_update_health_monitor = data_models.HealthMonitor(
            admin_state_up=True,
            name='ReHealthy',
            healthmonitor_id=self.healthmonitor_id,
            delay=16,
            timeout=17,
            max_retries_down=15,
            max_retries=13)
        mock.patch.object(ovn_helper.OvnProviderHelper,
                          '_find_ovn_lbs',
                          side_effect=lambda x, protocol=None: self.ovn_lb
                          if protocol else [self.ovn_lb]).start()
        self.mock_find_lb_pool_key = mock.patch.object(
            ovn_helper.OvnProviderHelper,
            '_find_ovn_lb_with_pool_key',
            return_value=self.ovn_lb).start()
        self.mock_get_subnet_from_pool = mock.patch.object(
            ovn_helper.OvnProviderHelper,
            '_get_subnet_from_pool',
            return_value=None).start()
Beispiel #18
0
    def setUp(self):
        super(TestProviderDataModels, self).setUp()

        self.loadbalancer_id = uuidutils.generate_uuid()
        self.project_id = uuidutils.generate_uuid()
        self.vip_address = '192.0.2.83'
        self.vip_network_id = uuidutils.generate_uuid()
        self.vip_port_id = uuidutils.generate_uuid()
        self.vip_subnet_id = uuidutils.generate_uuid()
        self.listener_id = uuidutils.generate_uuid()
        self.vip_qos_policy_id = uuidutils.generate_uuid()
        self.default_tls_container_ref = uuidutils.generate_uuid()
        self.sni_container_ref_1 = uuidutils.generate_uuid()
        self.sni_container_ref_2 = uuidutils.generate_uuid()
        self.pool_id = uuidutils.generate_uuid()
        self.session_persistence = {
            "cookie_name": "sugar",
            "type": "APP_COOKIE"
        }
        self.member_id = uuidutils.generate_uuid()
        self.mem_subnet_id = uuidutils.generate_uuid()
        self.healthmonitor_id = uuidutils.generate_uuid()
        self.l7policy_id = uuidutils.generate_uuid()
        self.l7rule_id = uuidutils.generate_uuid()

        self.ref_l7rule = data_models.L7Rule(admin_state_up=True,
                                             compare_type='STARTS_WITH',
                                             invert=True,
                                             key='cookie',
                                             l7policy_id=self.l7policy_id,
                                             l7rule_id=self.l7rule_id,
                                             type='COOKIE',
                                             project_id=self.project_id,
                                             value='chocolate')

        self.ref_l7policy = data_models.L7Policy(
            action='REJECT',
            admin_state_up=False,
            description='A L7 Policy',
            l7policy_id=self.l7policy_id,
            listener_id=self.listener_id,
            name='l7policy',
            position=1,
            redirect_pool_id=self.pool_id,
            redirect_url='/test',
            rules=[self.ref_l7rule],
            project_id=self.project_id,
            redirect_prefix='http://example.com',
            redirect_http_code=301)

        self.ref_listener = data_models.Listener(
            admin_state_up=True,
            connection_limit=5000,
            default_pool=None,
            default_pool_id=None,
            default_tls_container_data='default_cert_data',
            default_tls_container_ref=self.default_tls_container_ref,
            description=data_models.Unset,
            insert_headers={'X-Forwarded-For': 'true'},
            l7policies=[self.ref_l7policy],
            listener_id=self.listener_id,
            loadbalancer_id=self.loadbalancer_id,
            name='super_listener',
            project_id=self.project_id,
            protocol='avian',
            protocol_port=42,
            sni_container_data=['sni_cert_data_1', 'sni_cert_data_2'],
            sni_container_refs=[
                self.sni_container_ref_1, self.sni_container_ref_2
            ],
            timeout_client_data=3,
            timeout_member_connect=4,
            timeout_member_data=5,
            timeout_tcp_inspect=6,
            client_authentication=None,
            client_ca_tls_container_data=None,
            client_ca_tls_container_ref=None,
            client_crl_container_data=None,
            client_crl_container_ref=None,
            allowed_cidrs=None)

        self.ref_lb = data_models.LoadBalancer(
            admin_state_up=False,
            description='One great load balancer',
            flavor={'cake': 'chocolate'},
            listeners=[self.ref_listener],
            loadbalancer_id=self.loadbalancer_id,
            name='favorite_lb',
            project_id=self.project_id,
            vip_address=self.vip_address,
            vip_network_id=self.vip_network_id,
            vip_port_id=self.vip_port_id,
            vip_subnet_id=self.vip_subnet_id,
            vip_qos_policy_id=self.vip_qos_policy_id)

        self.ref_vip = data_models.VIP(
            vip_address=self.vip_address,
            vip_network_id=self.vip_network_id,
            vip_port_id=self.vip_port_id,
            vip_subnet_id=self.vip_subnet_id,
            vip_qos_policy_id=self.vip_qos_policy_id)

        self.ref_member = data_models.Member(address='192.0.2.10',
                                             admin_state_up=True,
                                             member_id=self.member_id,
                                             monitor_address='192.0.2.11',
                                             monitor_port=8888,
                                             name='member',
                                             pool_id=self.pool_id,
                                             project_id=self.project_id,
                                             protocol_port=80,
                                             subnet_id=self.mem_subnet_id,
                                             weight=1,
                                             backup=False)

        self.ref_healthmonitor = data_models.HealthMonitor(
            admin_state_up=False,
            delay=1,
            expected_codes='200,202',
            healthmonitor_id=self.healthmonitor_id,
            http_method='GET',
            max_retries=2,
            max_retries_down=3,
            name='member',
            pool_id=self.pool_id,
            project_id=self.project_id,
            timeout=4,
            type='HTTP',
            url_path='/test',
            http_version=1.1,
            domain_name='testdomainname.com')

        self.ref_pool = data_models.Pool(
            admin_state_up=True,
            description='A pool',
            healthmonitor=None,
            lb_algorithm='fast',
            loadbalancer_id=self.loadbalancer_id,
            members=[self.ref_member],
            name='pool',
            pool_id=self.pool_id,
            project_id=self.project_id,
            listener_id=self.listener_id,
            protocol='avian',
            session_persistence=self.session_persistence)

        self.ref_l7rule_dict = {
            'admin_state_up': True,
            'compare_type': 'STARTS_WITH',
            'invert': True,
            'key': 'cookie',
            'l7policy_id': self.l7policy_id,
            'l7rule_id': self.l7rule_id,
            'type': 'COOKIE',
            'project_id': self.project_id,
            'value': 'chocolate'
        }

        self.ref_l7policy_dict = {
            'action': 'REJECT',
            'admin_state_up': False,
            'description': 'A L7 Policy',
            'l7policy_id': self.l7policy_id,
            'listener_id': self.listener_id,
            'name': 'l7policy',
            'position': 1,
            'project_id': self.project_id,
            'redirect_pool_id': self.pool_id,
            'redirect_url': '/test',
            'rules': [self.ref_l7rule_dict],
            'redirect_prefix': 'http://example.com',
            'redirect_http_code': 301
        }

        self.ref_lb_dict = {
            'project_id': self.project_id,
            'flavor': {
                'cake': 'chocolate'
            },
            'vip_network_id': self.vip_network_id,
            'admin_state_up': False,
            'loadbalancer_id': self.loadbalancer_id,
            'vip_port_id': self.vip_port_id,
            'vip_address': self.vip_address,
            'description': 'One great load balancer',
            'vip_subnet_id': self.vip_subnet_id,
            'name': 'favorite_lb',
            'vip_qos_policy_id': self.vip_qos_policy_id
        }

        self.ref_listener_dict = {
            'admin_state_up':
            True,
            'connection_limit':
            5000,
            'default_pool':
            None,
            'default_pool_id':
            None,
            'default_tls_container_data':
            'default_cert_data',
            'default_tls_container_ref':
            self.default_tls_container_ref,
            'description':
            None,
            'insert_headers': {
                'X-Forwarded-For': 'true'
            },
            'listener_id':
            self.listener_id,
            'l7policies': [self.ref_l7policy_dict],
            'loadbalancer_id':
            self.loadbalancer_id,
            'name':
            'super_listener',
            'project_id':
            self.project_id,
            'protocol':
            'avian',
            'protocol_port':
            42,
            'sni_container_data': ['sni_cert_data_1', 'sni_cert_data_2'],
            'sni_container_refs':
            [self.sni_container_ref_1, self.sni_container_ref_2],
            'timeout_client_data':
            3,
            'timeout_member_connect':
            4,
            'timeout_member_data':
            5,
            'timeout_tcp_inspect':
            6,
            'client_authentication':
            None,
            'client_ca_tls_container_data':
            None,
            'client_ca_tls_container_ref':
            None,
            'client_crl_container_data':
            None,
            'client_crl_container_ref':
            None,
            'allowed_cidrs':
            None,
        }

        self.ref_lb_dict_with_listener = {
            'admin_state_up': False,
            'description': 'One great load balancer',
            'flavor': {
                'cake': 'chocolate'
            },
            'listeners': [self.ref_listener_dict],
            'loadbalancer_id': self.loadbalancer_id,
            'name': 'favorite_lb',
            'project_id': self.project_id,
            'vip_address': self.vip_address,
            'vip_network_id': self.vip_network_id,
            'vip_port_id': self.vip_port_id,
            'vip_subnet_id': self.vip_subnet_id,
            'vip_qos_policy_id': self.vip_qos_policy_id
        }

        self.ref_vip_dict = {
            'vip_address': self.vip_address,
            'vip_network_id': self.vip_network_id,
            'vip_port_id': self.vip_port_id,
            'vip_subnet_id': self.vip_subnet_id,
            'vip_qos_policy_id': self.vip_qos_policy_id
        }

        self.ref_member_dict = {
            'address': '192.0.2.10',
            'admin_state_up': True,
            'member_id': self.member_id,
            'monitor_address': '192.0.2.11',
            'monitor_port': 8888,
            'name': 'member',
            'pool_id': self.pool_id,
            'project_id': self.project_id,
            'protocol_port': 80,
            'subnet_id': self.mem_subnet_id,
            'weight': 1,
            'backup': False
        }

        self.ref_healthmonitor_dict = {
            'admin_state_up': False,
            'delay': 1,
            'expected_codes': '200,202',
            'healthmonitor_id': self.healthmonitor_id,
            'http_method': 'GET',
            'max_retries': 2,
            'max_retries_down': 3,
            'name': 'member',
            'pool_id': self.pool_id,
            'project_id': self.project_id,
            'timeout': 4,
            'type': 'HTTP',
            'url_path': '/test',
            'http_version': 1.1,
            'domain_name': 'testdomainname.com'
        }

        self.ref_pool_dict = {
            'admin_state_up': True,
            'description': 'A pool',
            'healthmonitor': self.ref_healthmonitor_dict,
            'lb_algorithm': 'fast',
            'loadbalancer_id': self.loadbalancer_id,
            'members': [self.ref_member_dict],
            'name': 'pool',
            'pool_id': self.pool_id,
            'project_id': self.project_id,
            'listener_id': self.listener_id,
            'protocol': 'avian',
            'session_persistence': self.session_persistence
        }