Merge "Add missing unit tests for L7 repo classes"

This commit is contained in:
Jenkins 2016-03-12 01:10:16 +00:00 committed by Gerrit Code Review
commit 719ddb51ce
2 changed files with 122 additions and 25 deletions
octavia

@ -678,6 +678,7 @@ class L7RuleRepository(BaseRepository):
constants.L7RULE_TYPE_PATH,
constants.L7RULE_TYPE_FILE_TYPE)):
l7rule_dict['key'] = None
model_kwargs.update({'key': None})
validate.l7rule_data(self.model_class(**l7rule_dict))
l7rule_db.update(model_kwargs)
@ -745,6 +746,7 @@ class L7PolicyRepository(BaseRepository):
self._validate_l7policy_pool_data(session, l7policy)
if l7policy.action:
model_kwargs.update(action=l7policy.action)
if l7policy.action == constants.L7POLICY_ACTION_REJECT:
model_kwargs.update(redirect_url=None)
model_kwargs.update(redirect_pool_id=None)
@ -754,34 +756,21 @@ class L7PolicyRepository(BaseRepository):
elif (l7policy.action ==
constants.L7POLICY_ACTION_REDIRECT_TO_POOL):
model_kwargs.update(redirect_url=None)
elif l7policy.redirect_url:
model_kwargs.update(
action=constants.L7POLICY_ACTION_REDIRECT_TO_URL)
model_kwargs.update(redirect_pool_id=None)
elif l7policy.redirect_pool_id:
model_kwargs.update(
action=constants.L7POLICY_ACTION_REDIRECT_TO_POOL)
model_kwargs.update(redirect_url=None)
l7policy_db.update(model_kwargs)
# Position manipulation must happen outside the other alterations
# in the previous transaction
listener = (session.query(models.Listener).
filter_by(id=l7policy_db.listener_id).first())
# Immediate refresh, as we have found that sqlalchemy will sometimes
# cache the above query
session.refresh(listener)
if position is not None and position < len(listener.l7policies) + 1:
if position is not None:
listener = (session.query(models.Listener).
filter_by(id=l7policy_db.listener_id).first())
# Immediate refresh, as we have found that sqlalchemy will
# sometimes cache the above query
session.refresh(listener)
with session.begin(subtransactions=True):
l7policy_db = listener.l7policies.pop(l7policy_db.position - 1)
listener.l7policies.insert(position - 1, l7policy_db)
listener.l7policies.reorder()
elif position is not None:
with session.begin(subtransactions=True):
l7policy_db = listener.l7policies.pop(l7policy_db.position - 1)
listener.l7policies.append(l7policy_db)
listener.l7policies.reorder()
return self.get(session, id=l7policy.id)

@ -1698,6 +1698,20 @@ class L7PolicyRepositoryTest(BaseRepositoryTest):
self.assertEqual(1, new_l7policy.position)
self.assertIsNone(new_l7policy.redirect_url)
def test_create_no_id(self):
listener = self.create_listener(uuidutils.generate_uuid(), 80)
l7policy = self.l7policy_repo.create(
self.session, listener_id=listener.id,
action=constants.L7POLICY_ACTION_REJECT,
enabled=True)
new_l7policy = self.l7policy_repo.get(self.session, id=l7policy.id)
self.assertEqual(listener.id, new_l7policy.listener_id)
self.assertIsNone(new_l7policy.redirect_pool_id)
self.assertIsNone(new_l7policy.redirect_url)
self.assertEqual(constants.L7POLICY_ACTION_REJECT,
new_l7policy.action)
self.assertEqual(1, new_l7policy.position)
def test_update(self):
new_url = 'http://www.example.com/'
listener = self.create_listener(uuidutils.generate_uuid(), 80)
@ -1708,7 +1722,7 @@ class L7PolicyRepositoryTest(BaseRepositoryTest):
self.l7policy_repo.update(
self.session, id=l7policy.id,
action=constants.L7POLICY_ACTION_REDIRECT_TO_URL,
redirect_url=new_url)
redirect_url=new_url, position=l7policy.position)
new_l7policy = self.l7policy_repo.get(self.session, id=l7policy.id)
new_pool = self.pool_repo.get(self.session, id=pool.id)
self.assertEqual(new_url, new_l7policy.redirect_url)
@ -1717,6 +1731,10 @@ class L7PolicyRepositoryTest(BaseRepositoryTest):
self.assertIsNone(new_l7policy.redirect_pool_id)
self.assertNotIn(new_l7policy.id, new_pool.l7policies)
def test_update_bad_id(self):
self.assertRaises(exceptions.NotFound, self.l7policy_repo.update,
self.session, id=uuidutils.generate_uuid())
def test_delete(self):
listener = self.create_listener(uuidutils.generate_uuid(), 80)
pool = self.create_pool(uuidutils.generate_uuid())
@ -1729,6 +1747,10 @@ class L7PolicyRepositoryTest(BaseRepositoryTest):
self.assertIsNotNone(new_listener)
self.assertEqual(0, len(new_listener.l7policies))
def test_delete_bad_id(self):
self.assertRaises(exceptions.NotFound, self.l7policy_repo.delete,
self.session, id=uuidutils.generate_uuid())
def test_reorder_policies(self):
listener = self.create_listener(uuidutils.generate_uuid(), 80)
pool = self.create_pool(uuidutils.generate_uuid())
@ -1819,7 +1841,7 @@ class L7PolicyRepositoryTest(BaseRepositoryTest):
self.assertIsNone(self.l7policy_repo.get(self.session, id=l7policy.id))
self.assertIsNone(self.l7rule_repo.get(self.session, id=l7rule.id))
def test_update_redirect_pool(self):
def test_update_action_rdr_url_to_redirect_pool(self):
listener = self.create_listener(uuidutils.generate_uuid(), 80)
pool = self.create_pool(uuidutils.generate_uuid())
l7policy = self.create_l7policy(
@ -1837,7 +1859,7 @@ class L7PolicyRepositoryTest(BaseRepositoryTest):
new_l7policy.action)
self.assertIsNone(new_l7policy.redirect_url)
def test_update_action_reject(self):
def test_update_action_rdr_url_to_reject(self):
listener = self.create_listener(uuidutils.generate_uuid(), 80)
l7policy = self.create_l7policy(
uuidutils.generate_uuid(), listener.id, 1,
@ -1856,6 +1878,86 @@ class L7PolicyRepositoryTest(BaseRepositoryTest):
self.assertIsNone(new_l7policy.redirect_url)
self.assertIsNone(new_l7policy.redirect_pool_id)
def test_update_action_rdr_pool_to_reject(self):
listener = self.create_listener(uuidutils.generate_uuid(), 80)
pool = self.create_pool(uuidutils.generate_uuid())
l7policy = self.create_l7policy(
uuidutils.generate_uuid(), listener.id, 1,
action=constants.L7POLICY_ACTION_REDIRECT_TO_POOL,
redirect_pool_id=pool.id)
new_l7policy = self.l7policy_repo.get(self.session, id=l7policy.id)
self.assertIsNone(new_l7policy.redirect_url)
self.l7policy_repo.update(
self.session, id=l7policy.id,
action=constants.L7POLICY_ACTION_REJECT)
new_l7policy = self.l7policy_repo.get(self.session, id=l7policy.id)
self.assertEqual(constants.L7POLICY_ACTION_REJECT,
new_l7policy.action)
self.assertIsNone(new_l7policy.redirect_url)
self.assertIsNone(new_l7policy.redirect_pool_id)
def test_update_reject_to_rdr_pool(self):
listener = self.create_listener(uuidutils.generate_uuid(), 80)
pool = self.create_pool(uuidutils.generate_uuid())
l7policy = self.create_l7policy(
uuidutils.generate_uuid(), listener.id, 1,
action=constants.L7POLICY_ACTION_REJECT)
new_l7policy = self.l7policy_repo.get(self.session, id=l7policy.id)
self.assertIsNone(new_l7policy.redirect_url)
self.assertIsNone(new_l7policy.redirect_pool_id)
self.l7policy_repo.update(
self.session, id=l7policy.id,
redirect_pool_id=pool.id)
new_l7policy = self.l7policy_repo.get(self.session, id=l7policy.id)
self.assertEqual(pool.id, new_l7policy.redirect_pool_id)
self.assertEqual(constants.L7POLICY_ACTION_REDIRECT_TO_POOL,
new_l7policy.action)
self.assertIsNone(new_l7policy.redirect_url)
def test_update_reject_to_rdr_url(self):
listener = self.create_listener(uuidutils.generate_uuid(), 80)
l7policy = self.create_l7policy(
uuidutils.generate_uuid(), listener.id, 1,
action=constants.L7POLICY_ACTION_REJECT)
new_l7policy = self.l7policy_repo.get(self.session, id=l7policy.id)
self.assertIsNone(new_l7policy.redirect_url)
self.assertIsNone(new_l7policy.redirect_pool_id)
self.l7policy_repo.update(
self.session, id=l7policy.id,
redirect_url='http://www.example.com/')
new_l7policy = self.l7policy_repo.get(self.session, id=l7policy.id)
self.assertEqual('http://www.example.com/', new_l7policy.redirect_url)
self.assertEqual(constants.L7POLICY_ACTION_REDIRECT_TO_URL,
new_l7policy.action)
self.assertIsNone(new_l7policy.redirect_pool_id)
def test_update_position_only(self):
listener = self.create_listener(uuidutils.generate_uuid(), 80)
l7policy_a = self.create_l7policy(
uuidutils.generate_uuid(), listener.id, 1,
action=constants.L7POLICY_ACTION_REJECT)
l7policy_b = self.create_l7policy(
uuidutils.generate_uuid(), listener.id, 2,
action=constants.L7POLICY_ACTION_REJECT)
new_l7policy_a = self.l7policy_repo.get(self.session, id=l7policy_a.id)
new_l7policy_b = self.l7policy_repo.get(self.session, id=l7policy_b.id)
self.assertEqual(1, new_l7policy_a.position)
self.assertEqual(2, new_l7policy_b.position)
self.l7policy_repo.update(
self.session, id=l7policy_a.id,
position=999)
new_l7policy_a = self.l7policy_repo.get(self.session, id=l7policy_a.id)
new_l7policy_b = self.l7policy_repo.get(self.session, id=l7policy_b.id)
self.assertEqual(2, new_l7policy_a.position)
self.assertEqual(1, new_l7policy_b.position)
self.l7policy_repo.update(
self.session, id=l7policy_a.id,
position=1)
new_l7policy_a = self.l7policy_repo.get(self.session, id=l7policy_a.id)
new_l7policy_b = self.l7policy_repo.get(self.session, id=l7policy_b.id)
self.assertEqual(1, new_l7policy_a.position)
self.assertEqual(2, new_l7policy_b.position)
def test_create_with_invalid_redirect_pool_id(self):
bad_lb = self.lb_repo.create(
self.session, id=uuidutils.generate_uuid(),
@ -1963,14 +2065,20 @@ class L7RuleRepositoryTest(BaseRepositoryTest):
def test_update(self):
l7rule = self.create_l7rule(uuidutils.generate_uuid(),
self.l7policy.id)
self.l7policy.id,
type=constants.L7RULE_TYPE_HEADER,
key="My-Header")
new_l7rule = self.l7rule_repo.get(self.session, id=l7rule.id)
self.assertEqual('/api', new_l7rule.value)
self.assertFalse(new_l7rule.invert)
self.l7rule_repo.update(self.session, id=l7rule.id,
value='/images', invert=True)
update_dict = {'type': constants.L7RULE_TYPE_PATH,
'value': '/images',
'invert': True}
self.l7rule_repo.update(self.session, id=l7rule.id, **update_dict)
new_l7rule = self.l7rule_repo.get(self.session, id=l7rule.id)
self.assertEqual(constants.L7RULE_TYPE_PATH, new_l7rule.type)
self.assertEqual('/images', new_l7rule.value)
self.assertIsNone(new_l7rule.key)
self.assertTrue(new_l7rule.invert)
def test_update_bad_id(self):