コード例 #1
0
    def test_multi_sources_multi_destinations(self, mock_put):
        client = AddACLAccess(self.fake_env, self.sources, self.destinations,
                              self.default_port)
        client.execute()

        expected_payload_first_call = {
            "kind":
            "object#acl",
            "rules": [{
                "action": "permit",
                "protocol": "tcp",
                "source": self.sources[0],
                "destination": self.destinations[0],
                "l4-options": {
                    "dest-port-op": "eq",
                    "dest-port-start": str(self.default_port)
                }
            }, {
                "action": "permit",
                "protocol": "tcp",
                "source": self.sources[0],
                "destination": self.destinations[1],
                "l4-options": {
                    "dest-port-op": "eq",
                    "dest-port-start": str(self.default_port)
                }
            }]
        }
        expected_payload_second_call = {
            "kind":
            "object#acl",
            "rules": [{
                "action": "permit",
                "protocol": "tcp",
                "source": self.sources[1],
                "destination": self.destinations[0],
                "l4-options": {
                    "dest-port-op": "eq",
                    "dest-port-start": str(self.default_port)
                }
            }, {
                "action": "permit",
                "protocol": "tcp",
                "source": self.sources[1],
                "destination": self.destinations[1],
                "l4-options": {
                    "dest-port-op": "eq",
                    "dest-port-start": str(self.default_port)
                }
            }]
        }
        self.assertTrue(mock_put.called)
        self.assertEqual(mock_put.call_count, 2)
        put_args_first, put_args_second = mock_put.call_args_list
        expected_endpoint = 'fake_endpoint/api/ipv4/acl/1.1.1.1/27'
        self._validate_call(put_args_first, expected_payload_first_call,
                            expected_endpoint)
        expected_endpoint = 'fake_endpoint/api/ipv4/acl/2.2.2.2/27'
        self._validate_call(put_args_second, expected_payload_second_call,
                            expected_endpoint)
コード例 #2
0
    def test_one_source_without_execute_job(self, mock_run_job, mock_put):
        client = AddACLAccess(self.fake_env, self.sources[:1],
                              self.destinations[:1], self.default_port)
        client.create_acl(execute_job=False)

        expected_payload = {
            "kind":
            "object#acl",
            "rules": [{
                "action": "permit",
                "protocol": "tcp",
                "source": self.sources[0],
                "destination": self.destinations[0],
                "l4-options": {
                    "dest-port-op": "eq",
                    "dest-port-start": str(self.default_port)
                }
            }]
        }
        self.assertTrue(mock_put.called)
        self.assertEqual(mock_put.call_count, 1)
        put_args = mock_put.call_args
        expected_endpoint = 'fake_endpoint/api/ipv4/acl/1.1.1.1/27'
        self._validate_call(put_args, expected_payload, expected_endpoint)
        self.assertFalse(mock_run_job.called)
コード例 #3
0
 def setUp(self):
     super(WaitJobTestCase, self).setUp()
     self.client = AddACLAccess(self.fake_env, self.sources,
                                self.destinations, self.default_port)
     self.client.wait_job_attemps = 3
     self.client.wait_job_timeout = 1
     self.mock_json = {
         "jobs": {
             "create_timestamp": "2020-10-28 17:44:19",
             "environment": 1706,
             "finish_timestamp": "2020-10-28 17:44:44",
             "id_job": 3274906,
             "init_timestamp": "2020-10-28 17:44:44",
             "ip_version": "ipv4",
             "num_vlan": 60,
             "owner": "tsuru_app",
             "result": "success",
             "status": "SUCCESS",
             "type": "DIFF"
         },
         "kind": "object#job"
     }
     self.fake_resp = namedtuple('FakeResp', 'ok status_code content json')(
         True, 200, '', self.mock_json)
     self.fake_resp_error = namedtuple(
         'FakeResp', 'ok status_code content json')(False, 400, '',
                                                    self.mock_json)
コード例 #4
0
    def test_one_source_execute_job(self, mock_run_job, mock_put):
        mock_json = MagicMock(return_value={
            'id': 'fake_acl_id',
            'jobs': ['fake_job_id']
        })
        mock_put.return_value = namedtuple(
            'FakeResp', 'ok status_code content json')(True, 200, '',
                                                       mock_json)
        client = AddACLAccess(self.fake_env, self.sources[:1],
                              self.destinations[:1], self.default_port)
        client.create_acl()

        expected_payload = {
            "kind":
            "object#acl",
            "rules": [{
                "action": "permit",
                "protocol": "tcp",
                "source": self.sources[0],
                "destination": self.destinations[0],
                "l4-options": {
                    "dest-port-op": "eq",
                    "dest-port-start": str(self.default_port)
                }
            }]
        }
        self.assertTrue(mock_put.called)
        self.assertEqual(mock_put.call_count, 1)
        put_args = mock_put.call_args
        expected_endpoint = 'fake_endpoint/api/ipv4/acl/1.1.1.1/27'
        self._validate_call(put_args, expected_payload, expected_endpoint)
        self.assertTrue(mock_run_job.called)
コード例 #5
0
 def test_resp_not_ok(self, mock_stdout, mock_put):
     mock_put.return_value = namedtuple(
         'FakeResp', 'ok status_code content')(False, 400, 'Some error')
     client = AddACLAccess(self.fake_env, self.sources[:1],
                           self.destinations[:1], self.default_port)
     client.execute()
     self.assertIn('FAIL Status: {} Error: {}!!'.format(400, 'Some error'),
                   mock_stdout.getvalue())
コード例 #6
0
 def test_resp_ok(self, mock_stdout, mock_put):
     mock_put.return_value = namedtuple('FakeResp',
                                        'ok status_code content')(True, 200,
                                                                  '')
     client = AddACLAccess(self.fake_env, self.sources[:1],
                           self.destinations[:1], self.default_port)
     client.execute()
     self.assertIn("SUCCESS!!", mock_stdout.getvalue())
コード例 #7
0
 def test_resp_ok(self, mock_info, mock_run_job, mock_put):
     mock_put.return_value = namedtuple('FakeResp',
                                        'ok status_code content')(True, 200,
                                                                  '')
     client = AddACLAccess(self.fake_env, self.sources[:1],
                           self.destinations[:1], self.default_port)
     client.create_acl(execute_job=False)
     self.assertIn("SUCCESS!!", mock_info.call_args[0][0])
コード例 #8
0
 def test_resp_not_ok(self, mock_error, mock_run_job, mock_put):
     mock_put.return_value = namedtuple(
         'FakeResp', 'ok status_code content')(False, 400, 'Some error')
     client = AddACLAccess(self.fake_env, self.sources[:1],
                           self.destinations[:1], self.default_port)
     with self.assertRaises(Exception):
         client.create_acl(execute_job=False)
     self.assertTrue(mock_error.called)
     self.assertIn('FAIL for payload', mock_error.call_args[0][0])
コード例 #9
0
 def create_acl_for(self, vpc, env, pool_name):
     sources = Configuration.get_by_name_as_list('application_networks')
     destinations = [vpc]
     cli = AddACLAccess(
         env,
         sources,
         destinations,
         description="ACl created when pool {} was created".format(
             pool_name))
     cli.create_acl(execute_job=True)
コード例 #10
0
class WaitJobTestCase(BaseACLTestCase):
    def setUp(self):
        super(WaitJobTestCase, self).setUp()
        self.client = AddACLAccess(self.fake_env, self.sources,
                                   self.destinations, self.default_port)
        self.client.wait_job_attemps = 3
        self.client.wait_job_timeout = 1
        self.mock_json = {
            "jobs": {
                "create_timestamp": "2020-10-28 17:44:19",
                "environment": 1706,
                "finish_timestamp": "2020-10-28 17:44:44",
                "id_job": 3274906,
                "init_timestamp": "2020-10-28 17:44:44",
                "ip_version": "ipv4",
                "num_vlan": 60,
                "owner": "tsuru_app",
                "result": "success",
                "status": "SUCCESS",
                "type": "DIFF"
            },
            "kind": "object#job"
        }
        self.fake_resp = namedtuple('FakeResp', 'ok status_code content json')(
            True, 200, '', self.mock_json)
        self.fake_resp_error = namedtuple(
            'FakeResp', 'ok status_code content json')(False, 400, '',
                                                       self.mock_json)

    @patch('util.aclapi.LOG.info')
    @patch('util.aclapi.AddACLAccess._get_job')
    def test_job_finish_success(self, mock_get_job, mock_info):
        mock_get_job.return_value = self.mock_json
        self.client._wait_job_finish('fake_job_id')

        self.assertEqual(mock_get_job.call_count, 1)
        self.assertIn('SUCCESS', mock_info.call_args[0][0])

    @patch('util.aclapi.LOG.error')
    @patch('util.aclapi.AddACLAccess._get_job')
    def test_job_not_finish_success(self, mock_get_job, mock_error):
        self.mock_json['jobs']['status'] = 'RUNNING'
        mock_get_job.return_value = self.mock_json
        with self.assertRaises(WaitJobTimeoutError):
            self.client._wait_job_finish('fake_job_id')

        self.assertEqual(mock_get_job.call_count, 3)
        self.assertIn('Job not finished after 3 attemps',
                      mock_error.call_args[0][0])
コード例 #11
0
class ParseSourceTestCase(BaseACLTestCase):
    def setUp(self):
        super(ParseSourceTestCase, self).setUp()
        self.client = AddACLAccess(self.fake_env, self.sources,
                                   self.destinations, self.default_port)

    def test_source_port_none(self):
        source, port = self.client._parse_source("4.4.4.4/27")

        self.assertEqual(source, "4.4.4.4/27")
        self.assertEqual(port, None)

    def test_source_with_specific_port(self):
        source, port = self.client._parse_source(("4.4.4.4/27", 1234))

        self.assertEqual(source, "4.4.4.4/27")
        self.assertEqual(port, 1234)
コード例 #12
0
class GetJobTestCase(BaseACLTestCase):
    def setUp(self):
        super(GetJobTestCase, self).setUp()
        self.client = AddACLAccess(self.fake_env, self.sources,
                                   self.destinations, self.default_port)
        self.mock_json = MagicMock(
            return_value={
                "jobs": {
                    "create_timestamp": "2020-10-28 17:44:19",
                    "environment": 1706,
                    "finish_timestamp": "2020-10-28 17:44:44",
                    "id_job": 3274906,
                    "init_timestamp": "2020-10-28 17:44:44",
                    "ip_version": "ipv4",
                    "num_vlan": 60,
                    "owner": "tsuru_app",
                    "result": "success",
                    "status": "SUCCESS",
                    "type": "DIFF"
                },
                "kind": "object#job"
            })
        self.fake_resp = namedtuple('FakeResp', 'ok status_code content json')(
            True, 200, '', self.mock_json)

    @patch('util.aclapi.LOG.info')
    @patch('util.aclapi.requests.get')
    def test_get_job_success(self, mock_get, mock_info):
        mock_get.return_value = self.fake_resp

        self.client._get_job('fake_job_id')
        self.assertEqual(mock_get.call_count, 1)
        self.assertTrue(mock_info.called)
        self.assertIn('SUCCESS', mock_info.call_args[0][0])

    @patch('util.aclapi.LOG.error')
    @patch('util.aclapi.requests.get')
    def test_get_job_fail(self, mock_get, mock_error):
        mock_get.return_value = namedtuple(
            'FakeResp', 'ok status_code content json')(False, 400, '', {})

        with self.assertRaises(GetJobError):
            self.client._get_job('fake_job_id')
        self.assertEqual(mock_get.call_count, 1)
        self.assertTrue(mock_error.called)
        self.assertIn('FAIL', mock_error.call_args[0][0])
コード例 #13
0
 def setUp(self):
     super(RunJobTestCase, self).setUp()
     self.client = AddACLAccess(self.fake_env, self.sources,
                                self.destinations, self.default_port)
     self.mock_json_create_acl = MagicMock(return_value={
         'id': 'fake_acl_id',
         'jobs': ['fake_job_id']
     })
     self.fake_resp_create_acl = namedtuple('FakeResp',
                                            'ok status_code content json')(
                                                True, 200, '',
                                                self.mock_json_create_acl)
     self.mock_json_get_job = MagicMock(return_value={
         'id': 'fake_acl_id',
         'jobs': ['fake_job_id']
     })
     self.fake_resp_get_job = namedtuple(
         'FakeResp', 'ok status_code content json')(True, 200, '',
                                                    self.mock_json_get_job)
コード例 #14
0
 def setUp(self):
     super(MakePayloadTestCase, self).setUp()
     self.client = AddACLAccess(self.fake_env, self.sources,
                                self.destinations, self.default_port)
コード例 #15
0
class MakePayloadTestCase(BaseACLTestCase):
    def setUp(self):
        super(MakePayloadTestCase, self).setUp()
        self.client = AddACLAccess(self.fake_env, self.sources,
                                   self.destinations, self.default_port)

    def test_one_destination_default_port(self):
        self.client.destinations = self.destinations[:1]
        payload = self.client._make_payload("4.4.4.4/27")

        expected_payload = {
            "kind":
            "object#acl",
            "rules": [{
                "action": "permit",
                "protocol": "tcp",
                "source": "4.4.4.4/27",
                "destination": self.destinations[0],
                "l4-options": {
                    "dest-port-op": "eq",
                    "dest-port-start": str(self.default_port)
                }
            }]
        }

        self.assertDictEqual(payload, expected_payload)

    def test_multiple_destination_default_port(self):
        payload = self.client._make_payload("4.4.4.4/27")

        expected_payload = {
            "kind":
            "object#acl",
            "rules": [{
                "action": "permit",
                "protocol": "tcp",
                "source": "4.4.4.4/27",
                "destination": self.destinations[0],
                "l4-options": {
                    "dest-port-op": "eq",
                    "dest-port-start": str(self.default_port)
                }
            }, {
                "action": "permit",
                "protocol": "tcp",
                "source": "4.4.4.4/27",
                "destination": self.destinations[1],
                "l4-options": {
                    "dest-port-op": "eq",
                    "dest-port-start": str(self.default_port)
                }
            }]
        }

        self.assertDictEqual(payload, expected_payload)

    def test_one_destination_specific_port(self):
        self.client.destinations = self.destinations[:1]
        payload = self.client._make_payload("4.4.4.4/27", 1234)

        expected_payload = {
            "kind":
            "object#acl",
            "rules": [{
                "action": "permit",
                "protocol": "tcp",
                "source": "4.4.4.4/27",
                "destination": self.destinations[0],
                "l4-options": {
                    "dest-port-op": "eq",
                    "dest-port-start": "1234"
                }
            }]
        }

        self.assertDictEqual(payload, expected_payload)

    def test_multiple_destination_specific_port(self):
        payload = self.client._make_payload("4.4.4.4/27", 1234)

        expected_payload = {
            "kind":
            "object#acl",
            "rules": [{
                "action": "permit",
                "protocol": "tcp",
                "source": "4.4.4.4/27",
                "destination": self.destinations[0],
                "l4-options": {
                    "dest-port-op": "eq",
                    "dest-port-start": "1234"
                }
            }, {
                "action": "permit",
                "protocol": "tcp",
                "source": "4.4.4.4/27",
                "destination": self.destinations[1],
                "l4-options": {
                    "dest-port-op": "eq",
                    "dest-port-start": "1234"
                }
            }]
        }

        self.assertDictEqual(payload, expected_payload)

    def test_one_destination_no_port(self):
        self.client.destinations = self.destinations[:1]
        self.client.default_port = None
        payload = self.client._make_payload("4.4.4.4/27")

        expected_payload = {
            "kind":
            "object#acl",
            "rules": [{
                "action": "permit",
                "protocol": "ip",
                "source": "4.4.4.4/27",
                "destination": self.destinations[0]
            }]
        }

        self.assertDictEqual(payload, expected_payload)

    def test_multiple_destination_no_port(self):
        self.client.default_port = None
        payload = self.client._make_payload("4.4.4.4/27")

        expected_payload = {
            "kind":
            "object#acl",
            "rules": [{
                "action": "permit",
                "protocol": "ip",
                "source": "4.4.4.4/27",
                "destination": self.destinations[0],
            }, {
                "action": "permit",
                "protocol": "ip",
                "source": "4.4.4.4/27",
                "destination": self.destinations[1],
            }]
        }

        self.assertDictEqual(payload, expected_payload)
コード例 #16
0
class RunJobTestCase(BaseACLTestCase):
    def setUp(self):
        super(RunJobTestCase, self).setUp()
        self.client = AddACLAccess(self.fake_env, self.sources,
                                   self.destinations, self.default_port)
        self.mock_json_create_acl = MagicMock(return_value={
            'id': 'fake_acl_id',
            'jobs': ['fake_job_id']
        })
        self.fake_resp_create_acl = namedtuple('FakeResp',
                                               'ok status_code content json')(
                                                   True, 200, '',
                                                   self.mock_json_create_acl)
        self.mock_json_get_job = MagicMock(return_value={
            'id': 'fake_acl_id',
            'jobs': ['fake_job_id']
        })
        self.fake_resp_get_job = namedtuple(
            'FakeResp', 'ok status_code content json')(True, 200, '',
                                                       self.mock_json_get_job)

    @patch('util.aclapi.requests.put')
    def test_execute_run_job_when_is_configurated(self, mock_put):

        mock_put.return_value = self.fake_resp_create_acl
        with patch('util.aclapi.AddACLAccess._run_job') as mock_run_job:
            self.client.create_acl(execute_job=True)
            self.assertTrue(mock_run_job.called)

    @patch('util.aclapi.requests.put')
    def test_not_execute_run_job_when_is_configurated(self, mock_put):

        mock_put.return_value = self.fake_resp_create_acl
        with patch('util.aclapi.AddACLAccess._run_job') as mock_run_job:
            self.client.create_acl(execute_job=False)
            self.assertFalse(mock_run_job.called)

    @patch('util.aclapi.LOG.info')
    @patch('util.aclapi.AddACLAccess._wait_job_finish')
    @patch('util.aclapi.requests.get')
    def test_run_job_success(self, mock_get, mock_wait_job, mock_info):
        mock_get.return_value = self.fake_resp_create_acl

        self.client._run_job('fake_job_id')
        self.assertEqual(mock_get.call_count, 1)
        self.assertFalse(mock_wait_job.called)
        self.assertTrue(mock_info.called)
        self.assertIn('SUCCESS', mock_info.call_args[0][0])

    @patch('util.aclapi.LOG.error')
    @patch('util.aclapi.AddACLAccess._wait_job_finish')
    @patch('util.aclapi.requests.get')
    def test_run_job_fail(self, mock_get, mock_wait_job, mock_error):
        mock_get.return_value = namedtuple(
            'FakeResp', 'ok status_code content json')(False, 400, '', {})

        with self.assertRaises(RunJobError):
            self.client._run_job('fake_job_id')
        self.assertEqual(mock_get.call_count, 1)
        self.assertFalse(mock_wait_job.called)
        self.assertTrue(mock_error.called)
        self.assertIn('FAIL', mock_error.call_args[0][0])

    @patch('util.aclapi.AddACLAccess._wait_job_finish')
    @patch('util.aclapi.requests.get')
    def test_wait_job_finish_when_get_timeout_on_run_job(
            self, mock_get, mock_wait_job):
        mock_get.side_effect = requests.Timeout

        self.client._run_job('fake_job_id')
        self.assertTrue(mock_wait_job.called)