#!/usr/bin/env python

# Copyright (c) 2017 Rebaca and others.
#
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Apache License, Version 2.0
# which accompanies this distribution, and is available at
# http://www.apache.org/licenses/LICENSE-2.0

""" Unit test testcase for JuJu EPC Implementation"""

import logging
import unittest

import mock

from functest.opnfv_tests.vnf.epc import juju_epc


class JujuEpcTesting(unittest.TestCase):
    # pylint: disable=missing-docstring
    """Unittest for ABoT EPC with juju orchestrator"""

    def setUp(self):

        self.tenant = 'juju_epc'
        self.creds = {'username': 'user',
                      'password': 'pwd'}
        self.orchestrator = {'name': 'juju',
                             'version': '2.0',
                             'object': 'foo',
                             'requirements': {'flavor': {'name': 'm1.small',
                                                         'ram_min': 2048},
                                              'pip': 'python3-pip',
                                              'repo_link': 'ppa:juju/stable',
                                              'dep_package': 'software-'
                                                             'properties'
                                                             '-common',
                                              'pip3_packages': 'juju-wait'}}
        self.vnf = {'name': 'juju_epc',
                    'descriptor': {'version': '1',
                                   'file_name': '/src/epc-test/'
                                                'abot_charm/'
                                                'functest-abot-'
                                                'epc-bundle/bundle.yaml',
                                   'name': 'abot-oai-epc',
                                   'requirements': {'flavor':
                                                    {'name': 'm1.medium',
                                                     'ram_min': 4096}}}}
        with mock.patch('functest.opnfv_tests.vnf.epc.juju_epc.os.makedirs'), \
            mock.patch('functest.opnfv_tests.vnf.epc.juju_epc.get_config',
                       return_value={'tenant_images': 'foo',
                                     'orchestrator': self.orchestrator,
                                     'vnf': self.vnf, 'vnf_test_suite': '',
                                     'version': 'whatever'}), \
            mock.patch('functest.utils.openstack_utils.get_keystone_client',
                       return_value='test'), \
            mock.patch('functest.utils.openstack_utils.get_glance_client',
                       return_value='test'), \
            mock.patch('functest.utils.openstack_utils.get_neutron_client',
                       return_value='test'), \
            mock.patch('functest.utils.openstack_utils.get_nova_client',
                       return_value='test'):
            self.epc_vnf = juju_epc.JujuEpc()

        self.images = {'image1': 'url1',
                       'image2': 'url2'}
        self.details = {'orchestrator': {'status': 'PASS', 'duration': 120},
                        'vnf': {},
                        'test_vnf':  {}}

    @unittest.skip("It must be fixed. Please see JIRA FUNCTEST-915")
    @mock.patch('functest.utils.openstack_utils.get_keystone_client',
                return_value='test')
    @mock.patch('functest.utils.openstack_utils.get_or_create_tenant_for_vnf',
                return_value=True)
    @mock.patch('functest.utils.openstack_utils.get_or_create_user_for_vnf',
                return_value=True)
    @mock.patch('functest.utils.openstack_utils.get_credentials',
                return_value={'auth_url': 'test/v1',
                              'project_name': 'test_tenant'})
    @mock.patch('snaps.openstack.create_image.OpenStackImage.create')
    @mock.patch('os.system')
    def test_prepare_default(self, *args):
        """ Unittest for Prepare testcase """
        self.epc_vnf.orchestrator = self.orchestrator
        self.assertIsNone(self.epc_vnf.prepare())
        args[4].assert_called_once_with('test',
                                        'debayan',
                                        'OAI EPC deployed '
                                        'with Juju')


if __name__ == "__main__":
    logging.disable(logging.CRITICAL)
    unittest.main(verbosity=2)

@@ -2514,1363 +2514,360 @@
 r'%7D)
-, %5C%0A            mock.patch('functest.utils.openstack_utils.get_keystone_client',%0A                       return_value='test'), %5C%0A            mock.patch('functest.utils.openstack_utils.get_glance_client',%0A                       return_value='test'), %5C%0A            mock.patch('functest.utils.openstack_utils.get_neutron_client',%0A                       return_value='test'), %5C%0A            mock.patch('functest.utils.openstack_utils.get_nova_client',%0A                       return_value='test'):%0A            self.epc_vnf = juju_epc.JujuEpc()%0A%0A        self.images = %7B'image1': 'url1',%0A                       'image2': 'url2'%7D%0A        self.details = %7B'orchestrator': %7B'status': 'PASS', 'duration': 120%7D,%0A                        'vnf': %7B%7D,%0A                        'test_vnf':  %7B%7D%7D%0A%0A    @unittest.skip(%22It must be fixed. Please see JIRA FUNCTEST-915%22)%0A    @mock.patch('functest.utils.openstack_utils.get_keystone_client',%0A                return_value='test')%0A    @mock.patch('functest.utils.openstack_utils.get_or_create_tenant_for_vnf',%0A                return_value=True)%0A    @mock.patch('functest.utils.openstack_utils.get_or_create_user_for_vnf',%0A                return_value=True)%0A    @mock.patch('functest.utils.openstack_utils.get_credentials',%0A                return_value=%7B'auth_url': 'test/v1',%0A                              'project_name': 'test_tenant'%7D
+:%0A            self.epc_vnf = juju_epc.JujuEpc()%0A%0A        self.images = %7B'image1': 'url1',%0A                       'image2': 'url2'%7D%0A        self.details = %7B'orchestrator': %7B'status': 'PASS', 'duration': 120%7D,%0A                        'vnf': %7B%7D,%0A                        'test_vnf':  %7B%7D%7D%0A%0A    @unittest.skip(%22It must be fixed. Please see JIRA FUNCTEST-915%22
 )%0A  

Remove deprecated monkey patches