Exemple #1
0
 def test_host_diskpool_get_info(self, dp_info):
     base.set_conf('zvm', 'disk_pool', None)
     results = self.api.host_diskpool_get_info()
     self.assertEqual(results['disk_total'], 0)
     self.assertEqual(results['disk_available'], 0)
     self.assertEqual(results['disk_used'], 0)
     dp_info.ssert_not_called()
Exemple #2
0
 def test_guest_deploy_unpackdiskimage_failed(self, request, execute):
     base.set_conf("zvm", "user_root_vdev", "0100")
     userid = 'fakeuser'
     image_name = 'fakeimg'
     transportfiles = '/faketrans'
     unpack_error = ('unpackdiskimage fakeuser start time: '
                     '2017-08-16-01:29:59.453\nSOURCE USER ID: "fakeuser"\n'
                     'DISK CHANNEL:   "0100"\n'
                     'IMAGE FILE:     "/var/lib/zvmsdk/images/fakeimg"\n\n'
                     'Image file compression level: 6\n'
                     'Deploying image to fakeuser\'s disk at channel 100.\n'
                     'ERROR: Unable to link fakeuser 0100 disk. '
                     'HCPLNM053E FAKEUSER not in CP directory\n'
                     'HCPDTV040E Device 260C does not exist\n'
                     'ERROR: Failed to connect disk: fakeuser:0100\n\n'
                     'IMAGE DEPLOYMENT FAILED.\n'
                     'A detailed trace can be found at: /var/log/zthin/'
                     'unpackdiskimage_trace_2017-08-16-01:29:59.453.txt\n'
                     'unpackdiskimage end time: 2017-08-16-01:29:59.605\n')
     execute.return_value = (3, unpack_error)
     self.assertRaises(exception.ZVMGuestDeployFailed,
                       self._smutclient.guest_deploy, userid, image_name,
                       transportfiles)
     unpack_cmd = [
         '/opt/zthin/bin/unpackdiskimage', 'fakeuser', '0100',
         '/var/lib/zvmsdk/images/fakeimg'
     ]
     execute.assert_called_once_with(unpack_cmd)
Exemple #3
0
    def test_get_volume_connector(self, get_fcp_info, get_host_info):
        fcp_info = [
            'fakehost: FCP device number: B83C', 'fakehost:   Status: Free',
            'fakehost:   NPIV world wide port number: '
            '2007123400001234', 'fakehost:   Channel path ID: 59',
            'fakehost:   Physical world wide port number: '
            '20076D8500005181'
        ]

        get_fcp_info.return_value = fcp_info
        get_host_info.return_value = {'zvm_host': 'fakehost'}
        base.set_conf('volume', 'fcp_list', 'b83c')
        # assign FCP
        self.db_op.new('b83c', 0)
        # set connections to 1 and assigner_id to b83c
        self.db_op.assign('b83c', 'fakeuser')
        # set reserved to 1
        self.db_op.reserve('b83c')

        try:
            connections = self.volumeops.get_volume_connector(
                'fakeuser', False)
            expected = {
                'zvm_fcp': ['b83c'],
                'wwpns': ['2007123400001234'],
                'host': 'fakehost'
            }
            self.assertEqual(expected, connections)

            fcp_list = self.db_op.get_from_fcp('b83c')
            expected = [(u'b83c', u'fakeuser', 1, 1, 0, u'')]
            self.assertEqual(expected, fcp_list)
        finally:
            self.db_op.delete('b83c')
Exemple #4
0
    def test_diskpool_get_volumes(self, get_diskpool_vols, cache_enable,
                                  mock_time):
        self._hostops._volumes = {}
        volumes = {'diskpool_volumes': 'IAS100 IAS101'}
        get_diskpool_vols.return_value = volumes
        cache_enable.return_value = True
        mock_time.return_value = 1
        diskpool_vols = self._hostops.diskpool_get_volumes("eckd:fakepool")
        get_diskpool_vols.assert_called_once_with("FAKEPOOL")
        self.assertEqual(diskpool_vols['diskpool_volumes'], 'IAS100 IAS101')
        self.assertEqual(self._hostops.disk_pool, "eckd:fakepool")

        # Test has cache data
        volumes = {'diskpool_volumes': 'IAS400 IAS501'}
        base.set_conf('monitor', 'cache_interval', '60')
        self._hostops._volumes = volumes
        diskpool_vols = self._hostops.diskpool_get_volumes("eckd:fakepool")
        self.assertEqual(1, get_diskpool_vols.call_count)
        self.assertEqual(diskpool_vols['diskpool_volumes'], 'IAS400 IAS501')
        self.assertEqual(self._hostops.disk_pool, "eckd:fakepool")

        # Test CONF.zvm.disk_pool has changed
        volumes = {'diskpool_volumes': 'IAS401 IAS601'}
        get_diskpool_vols.return_value = volumes
        base.set_conf('monitor', 'cache_interval', '60')
        diskpool_vols = self._hostops.diskpool_get_volumes("eckd:fakepool2")
        self.assertEqual(diskpool_vols['diskpool_volumes'], 'IAS401 IAS601')
        self.assertEqual(self._hostops.disk_pool, "eckd:fakepool2")
Exemple #5
0
 def test_guest_add_disks_no_disk_pool(self, cds):
     disk_list = [{'size': '1g', 'is_boot_disk': True,
                   'disk_pool': 'ECKD: eckdpool1'},
                  {'size': '1g', 'format': 'ext3'}]
     base.set_conf('zvm', 'disk_pool', None)
     self.assertRaises(exception.SDKInvalidInputFormat,
                       self.api.guest_create_disks, self.userid, disk_list)
     cds.ssert_not_called()
 def test_get_namelist(self, gsu):
     gsu.return_value = 'TUID'
     self.assertEqual('TSTNLIST', zvmutils.get_namelist())
     base.set_conf('zvm', 'namelist', None)
     self.assertEqual('NL00TUID', zvmutils.get_namelist())
     gsu.return_value = 'TESTUSER'
     self.assertEqual('NLSTUSER', zvmutils.get_namelist())
     base.set_conf('zvm', 'namelist', 'TSTNLIST')
Exemple #7
0
 def test_guest_create_no_disk_pool_swap_only_force_mdisk(self, create_vm):
     disk_list = [{'size': '1g', 'format': 'swap'}]
     vcpus = 1
     memory = 1024
     user_profile = 'profile'
     base.set_conf('zvm', 'disk_pool', None)
     base.set_conf('zvm', 'swap_force_mdisk', True)
     self.assertRaises(exception.SDKInvalidInputFormat,
                       self.api.guest_create, self.userid, vcpus, memory,
                       disk_list, user_profile)
Exemple #8
0
 def test_guest_create_with_no_disk_pool_swap_only(self, create_vm):
     disk_list = [{'size': '1g', 'format': 'swap'}]
     vcpus = 1
     memory = 1024
     user_profile = 'profile'
     base.set_conf('zvm', 'disk_pool', None)
     self.api.guest_create(self.userid, vcpus, memory, disk_list,
                           user_profile)
     create_vm.assert_called_once_with(self.userid, vcpus, memory,
                                       disk_list, user_profile, 32, '64G',
                                       '', '', '', [], {})
Exemple #9
0
    def test_guest_create_with_default_profile(self, create_vm):
        vcpus = 1
        memory = 1024
        disk_list = []
        user_profile = ''
        max_cpu = 10
        max_mem = '4G'
        base.set_conf('zvm', 'user_profile', 'abc')

        self.api.guest_create(self.userid, vcpus, memory, disk_list,
                              user_profile, max_cpu, max_mem)
        create_vm.assert_called_once_with(self.userid, vcpus, memory,
                                          disk_list, 'abc', max_cpu, max_mem,
                                          '', '', '', [], {}, '', None)
Exemple #10
0
 def test_get_available_fcp_reserve_false(self, get_from_assigner):
     """test reserve == False.
     no matter what connections is, the output will be same."""
     base.set_conf('volume', 'get_fcp_pair_with_same_index', 0)
     # case1: get_from_assigner return []
     get_from_assigner.return_value = []
     result = self.fcpops.get_available_fcp('user1', False)
     self.assertEqual([], result)
     # case2: get_from_assigner return ['1234', '5678']
     get_from_assigner.return_value = [('1234', '', 0, 0, 0, ''),
                                       ('5678', '', 0, 0, 0, '')]
     result = self.fcpops.get_available_fcp('user1', False)
     expected = ['1234', '5678']
     self.assertEqual(expected, result)
Exemple #11
0
 def test_host_get_diskpool_volumes(self, diskpool_vols):
     base.set_conf('zvm', 'disk_pool', None)
     disk_pool = 'ECKD:IAS1PL'
     result = self.api.host_get_diskpool_volumes(disk_pool)
     diskpool_vols.assert_called_once_with('IAS1PL')
     # Test disk_pool is None
     disk_pool = None
     try:
         self.api.host_get_diskpool_volumes(disk_pool)
     except Exception as exc:
         errmsg = ("Invalid disk_pool input None, disk_pool should be"
                   " configured for sdkserver.")
         result = errmsg in six.text_type(exc)
         self.assertEqual(result, True)
         pass
Exemple #12
0
 def test_guest_create_with_no_disk_pool(self, create_vm):
     disk_list = [{'size': '1g', 'is_boot_disk': True,
                   'disk_pool': 'ECKD: eckdpool1'},
                  {'size': '1g', 'format': 'ext3'},
                  {'size': '1g', 'format': 'swap'}]
     vcpus = 1
     memory = 1024
     user_profile = 'profile'
     max_cpu = 10
     max_mem = '4G'
     base.set_conf('zvm', 'disk_pool', None)
     self.assertRaises(exception.SDKInvalidInputFormat,
                       self.api.guest_create, self.userid, vcpus,
                       memory, disk_list, user_profile,
                       max_cpu, max_mem)
     create_vm.assert_not_called()
Exemple #13
0
    def test_root_volume_detach(self, mock_undedicate, mock_remove_disk,
                                mock_check, mock_fcp_info):

        connection_info = {
            'platform': 's390x',
            'ip': '1.2.3.4',
            'os_version': 'rhel7',
            'multipath': 'True',
            'target_wwpn': ['20076D8500005182', '20076D8500005183'],
            'target_lun': '2222',
            'zvm_fcp': ['183c', '283c'],
            'mount_point': '/dev/sdz',
            'assigner_id': 'user1',
            'is_root_volume': True
        }
        fcp_list = [
            'opnstk1: FCP device number: 183C', 'opnstk1:   Status: Free',
            'opnstk1:   NPIV world wide port number: 20076D8500005182',
            'opnstk1:   Channel path ID: 59',
            'opnstk1:   Physical world wide port number: '
            '20076D8500005181', 'opnstk1: FCP device number: 283C',
            'opnstk1:   Status: Active',
            'opnstk1:   NPIV world wide port number: 20076D8500005183',
            'opnstk1:   Channel path ID: 50',
            'opnstk1:   Physical world wide port number: '
            '20076D8500005185'
        ]
        mock_fcp_info.return_value = fcp_list
        mock_check.return_value = True
        base.set_conf('volume', 'fcp_list', '183c')
        base.set_conf('volume', 'fcp_list', '283c')
        self.db_op = database.FCPDbOperator()
        self.db_op.new('183c', 0)
        self.db_op.assign('183c', 'USER1')

        self.db_op.new('283c', 1)
        # assign will set the connections to 1
        self.db_op.assign('283c', 'USER1')

        try:
            self.volumeops.detach(connection_info)
            self.assertFalse(mock_undedicate.called)
            self.assertFalse(mock_remove_disk.called)
        finally:
            self.db_op.delete('183c')
            self.db_op.delete('283c')
Exemple #14
0
 def test_create_vm(self, request, add_mdisks):
     user_id = 'fakeuser'
     cpu = 2
     memory = 1024
     disk_list = [{
         'size': '1g',
         'is_boot_disk': True,
         'disk_pool': 'ECKD:eckdpool1',
         'format': 'ext3'
     }]
     profile = 'dfltprof'
     base.set_conf('zvm', 'default_admin_userid', 'lbyuser1 lbyuser2')
     base.set_conf('zvm', 'user_root_vdev', '0100')
     rd = ('makevm fakeuser directory LBYONLY 1024m G --cpus 2 '
           '--profile dfltprof --logonby "lbyuser1 lbyuser2" --ipl 0100')
     self._smutclient.create_vm(user_id, cpu, memory, disk_list, profile)
     request.assert_called_once_with(rd)
     add_mdisks.assert_called_once_with(user_id, disk_list)
Exemple #15
0
 def test_guest_deploy(self, request, execute, mkdtemp, cleantemp):
     base.set_conf("zvm", "user_root_vdev", "0100")
     execute.side_effect = [(0, ""), (0, "")]
     mkdtemp.return_value = '/tmp/tmpdir'
     userid = 'fakeuser'
     image_name = 'fakeimg'
     transportfiles = '/faketrans'
     self._smutclient.guest_deploy(userid, image_name, transportfiles)
     unpack_cmd = [
         '/opt/zthin/bin/unpackdiskimage', 'fakeuser', '0100',
         '/var/lib/zvmsdk/images/fakeimg'
     ]
     cp_cmd = ["/usr/bin/cp", '/faketrans', '/tmp/tmpdir/cfgdrv']
     execute.assert_has_calls([mock.call(unpack_cmd), mock.call(cp_cmd)])
     purge_rd = "changevm fakeuser purgerdr"
     punch_rd = "changevm fakeuser punchfile /tmp/tmpdir/cfgdrv --class X"
     request.assert_has_calls([mock.call(purge_rd), mock.call(punch_rd)])
     mkdtemp.assert_called_with()
     cleantemp.assert_called_with('/tmp/tmpdir')
Exemple #16
0
 def test_get_available_fcp_reserve_true(self, get_allocated, get_fcp_pair,
                                         assign, get_path_count):
     """test reserve == True"""
     base.set_conf('volume', 'get_fcp_pair_with_same_index', 0)
     # case1: get_allocated return []
     get_allocated.return_value = []
     get_fcp_pair.return_value = ['1234', '5678']
     expected = ['1234', '5678']
     result = self.fcpops.get_available_fcp('user1', True)
     assign.assert_has_calls([
         mock.call('1234', 'user1', update_connections=False),
         mock.call('5678', 'user1', update_connections=False)
     ])
     self.assertEqual(expected, result)
     # case2: get_allocated return ['c83c', 'c83d']
     get_allocated.return_value = [('c83c', 'user1', 0, 0, 0, ''),
                                   ('c83d', 'user1', 0, 0, 0, '')]
     get_path_count.return_value = 2
     result = self.fcpops.get_available_fcp('user1', True)
     expected = ['c83c', 'c83d']
     self.assertEqual(expected, result)
    def test_get_volume_connector(self):
        base.set_conf('network', 'my_ip', '1.2.3.4')
        # create 1 FCP
        self.db_op.new('b83c')

        try:
            connections = self.volumeops.get_volume_connector('dummy')
            expected = {'multipath': True,
                        'platform': 's390x',
                        'do_local_attach': False,
                        'fcp': u'b83c',
                        'os_version': '',
                        'os_type': 'linux',
                        'ip': '1.2.3.4'}
            self.assertEqual(expected, connections)

            fcp_list = self.db_op.get_from_fcp('b83c')
            expected = [(u'b83c', u'', 0, 1, u'')]
            self.assertEqual(expected, fcp_list)
        finally:
            self.db_op.delete('b83c')
Exemple #18
0
 def test_guest_deploy_smut_request_failed(self, request, execute, mkdtemp,
                                           cleantemp):
     base.set_conf("zvm", "user_root_vdev", "0100")
     fake_smut_results = {
         'rs': 8,
         'errno': 0,
         'strError': 'Failed',
         'overallRC': 3,
         'rc': 400,
         'logEntries': '',
         'response': ['(Error) output and error info']
     }
     execute.side_effect = [(0, ""), (0, "")]
     request.side_effect = [
         None,
         exception.ZVMClientRequestFailed(results=fake_smut_results)
     ]
     mkdtemp.return_value = '/tmp/tmpdir'
     userid = 'fakeuser'
     image_name = 'fakeimg'
     transportfiles = '/faketrans'
     remote_host = "[email protected]"
     self.assertRaises(exception.ZVMGuestDeployFailed,
                       self._smutclient.guest_deploy, userid, image_name,
                       transportfiles, remote_host)
     unpack_cmd = [
         '/opt/zthin/bin/unpackdiskimage', 'fakeuser', '0100',
         '/var/lib/zvmsdk/images/fakeimg'
     ]
     scp_cmd = [
         "/usr/bin/scp", "-B", '[email protected]:/faketrans',
         '/tmp/tmpdir/cfgdrv'
     ]
     execute.assert_has_calls([mock.call(unpack_cmd), mock.call(scp_cmd)])
     purge_rd = "changevm fakeuser purgerdr"
     punch_rd = "changevm fakeuser punchfile /tmp/tmpdir/cfgdrv --class X"
     request.assert_has_calls([mock.call(purge_rd), mock.call(punch_rd)])
     mkdtemp.assert_called_with()
     cleantemp.assert_called_with('/tmp/tmpdir')
Exemple #19
0
 def test_guest_deploy_cp_transport_failed(self, request, execute, mkdtemp,
                                           cleantemp):
     base.set_conf("zvm", "user_root_vdev", "0100")
     cp_error = ("/usr/bin/cp: cannot stat '/faketrans': "
                 "No such file or directory\n")
     execute.side_effect = [(0, ""), (1, cp_error)]
     mkdtemp.return_value = '/tmp/tmpdir'
     userid = 'fakeuser'
     image_name = 'fakeimg'
     transportfiles = '/faketrans'
     self.assertRaises(exception.ZVMGuestDeployFailed,
                       self._smutclient.guest_deploy, userid, image_name,
                       transportfiles)
     unpack_cmd = [
         '/opt/zthin/bin/unpackdiskimage', 'fakeuser', '0100',
         '/var/lib/zvmsdk/images/fakeimg'
     ]
     cp_cmd = ["/usr/bin/cp", '/faketrans', '/tmp/tmpdir/cfgdrv']
     execute.assert_has_calls([mock.call(unpack_cmd), mock.call(cp_cmd)])
     purge_rd = "changevm fakeuser purgerdr"
     request.assert_called_once_with(purge_rd)
     mkdtemp.assert_called_with()
     cleantemp.assert_called_with('/tmp/tmpdir')
Exemple #20
0
    def test_get_host_info(self, get_host_info, diskpool_get_info):
        get_host_info.return_value = {
            "zcc_userid": "FAKEUSER",
            "zvm_host": "FAKENODE",
            "zhcp": "fakehcp.fake.com",
            "cec_vendor": "FAKE",
            "cec_model": "2097",
            "hypervisor_os": "z/VM 6.1.0",
            "hypervisor_name": "fakenode",
            "architecture": "s390x",
            "lpar_cpu_total": "10",
            "lpar_cpu_used": "10",
            "lpar_memory_total": "16G",
            "lpar_memory_used": "16.0G",
            "lpar_memory_offline": "0",
            "ipl_time": "IPL at 03/13/14 21:43:12 EDT",
        }
        diskpool_get_info.return_value = {
            "disk_total": 406105,
            "disk_used": 367263,
            "disk_available": 38843,
        }
        host_info = self._hostops.get_info()
        get_host_info.assert_called_once_with()
        base.set_conf('zvm', 'disk_pool', 'ECKD:TESTPOOL')
        diskpool = CONF.zvm.disk_pool.split(':')[1]
        diskpool_get_info.assert_called_once_with(diskpool)
        self.assertEqual(host_info['vcpus'], 10)
        self.assertEqual(host_info['hypervisor_version'], 610)
        self.assertEqual(host_info['disk_total'], 406105)

        # Test disk_pool is None
        base.set_conf('zvm', 'disk_pool', None)
        host_info = self._hostops.get_info()
        self.assertEqual(host_info['disk_total'], 0)
        self.assertEqual(host_info['disk_used'], 0)
        self.assertEqual(host_info['disk_available'], 0)
Exemple #21
0
 def setUpClass(cls):
     super(GuestDbOperatorTestCase, cls).setUpClass()
     cls.old_db_path = CONF.database.path
     base.set_conf('database', 'path', '/tmp/test_sdk.db')
     cls.db_op = database.GuestDbOperator()
Exemple #22
0
 def setUpClass(cls):
     super(SDKSMUTClientTestCases, cls).setUpClass()
     cls.old_client_type = CONF.zvm.client_type
     base.set_conf('zvm', 'client_type', 'smut')
Exemple #23
0
 def tearDownClass(cls):
     base.set_conf('zvm', 'client_type', cls.old_client_type)
     super(SDKSMUTClientTestCases, cls).tearDownClass()