Beispiel #1
0
    def test_vhd_stream_to_vdi(self, conn_close, conn_getRes, conn_send,
                               conn_req, conn_connect, get_path):
        vdh_stream = mock.Mock()
        cache_size = 4 * 1024
        remain_size = vdi_handler.CHUNK_SIZE / 2
        file_size = cache_size + vdi_handler.CHUNK_SIZE * 2 + remain_size
        headers = {
            'Content-Type': 'application/octet-stream',
            'Content-Length': '%s' % file_size
        }
        image_cmd = vdi_handler.ImageStreamToVDIs(self.context, self.session,
                                                  self.instance, self.host_url,
                                                  self.sr_ref, self.stream)
        mock_parser = mock.Mock()
        mock_parser.cached_buff = b'\x00' * cache_size
        mock_parser.src_file = vdh_stream
        image_cmd.task_ref = 'fake-task-ref'
        vdh_stream.read.side_effect = ['chunk1', 'chunk2', 'chunk3']

        image_cmd._vhd_stream_to_vdi(mock_parser, 'fake_vdi_ref', file_size)

        conn_connect.assert_called_once_with()
        get_path.assert_called_once_with(self.session, 'fake-task-ref',
                                         'fake_vdi_ref')
        conn_connect.assert_called_once_with()
        conn_req.assert_called_once_with('PUT', 'fake-path', headers=headers)
        expect_send_calls = [
            mock.call(mock_parser.cached_buff),
            mock.call('chunk1'),
            mock.call('chunk2'),
            mock.call('chunk3'),
        ]
        conn_send.assert_has_calls(expect_send_calls)
        conn_getRes.assert_called_once_with()
        conn_close.assert_called_once_with()
Beispiel #2
0
    def test_start(self, mock_to_vdi, mock_createVDI, mock_get_parser,
                   mock_open):
        self.session.task.create.return_value = 'fake-task-ref'
        mock_footer = mock.Mock(current_size=1073741824)
        mock_parser = mock.Mock()
        mock_get_parser.return_value = mock_parser
        mock_parser.parse_vhd_footer.return_value = mock_footer
        fake_vhd_info = mock.Mock()
        fake_vhd_info.size = 29371904
        fake_vhd_info.name = '0.vhd'
        mock_tarfile = mock.MagicMock()
        mock_tarfile.__enter__.return_value = mock_tarfile
        mock_tarfile.__iter__.return_value = [fake_vhd_info]
        mock_open.return_value = mock_tarfile
        mock_tarfile.extractfile.return_value = 'fake-file-obj'

        image_cmd = vdi_handler.ImageStreamToVDIs(self.context, self.session,
                                                  self.instance, self.host_url,
                                                  self.sr_ref, self.stream)
        image_cmd.start()

        self.session.task.create.assert_called_once_with(
            'VDI_IMPORT_for_instance-001',
            'Importing VDI for instance: instance-001')
        mock_open.assert_called_once_with(mode="r|gz", fileobj=self.stream)
        mock_tarfile.extractfile.assert_called_once_with(fake_vhd_info)
        mock_createVDI.assert_called_once_with(self.session, self.instance,
                                               1073741824)
        mock_to_vdi.assert_called_once_with(mock_parser, 'fake_vdi_ref',
                                            29371904)
        self.session.VDI.get_uuid.assert_called_once_with('fake_vdi_ref')
Beispiel #3
0
    def test_createVDI(self, mock_create_vdi):
        virtual_size = 1073741824
        image_cmd = vdi_handler.ImageStreamToVDIs(self.context, self.session,
                                                  self.instance, self.host_url,
                                                  self.sr_ref, self.stream)
        expect_result = 'fake-vdi-ref'

        result = image_cmd._createVDI(self.session, self.instance,
                                      virtual_size)

        mock_create_vdi.assert_called_once_with(self.session, 'fake-sr-ref',
                                                self.instance, 'instance-001',
                                                'root', virtual_size)
        self.session.VDI.get_uuid.assert_called_once_with('fake-vdi-ref')
        self.assertEqual(expect_result, result)
Beispiel #4
0
    def test_vhd_stream_to_vdi_conn_except(self, conn_close, conn_getRes,
                                           conn_send, conn_req, conn_connect,
                                           get_path):
        vdh_stream = mock.Mock()
        cache_size = 4 * 1024
        remain_size = vdi_handler.CHUNK_SIZE / 2
        file_size = cache_size + vdi_handler.CHUNK_SIZE * 2 + remain_size
        image_cmd = vdi_handler.ImageStreamToVDIs(self.context, self.session,
                                                  self.instance, self.host_url,
                                                  self.sr_ref, self.stream)
        mock_parser = mock.Mock()
        mock_parser.cached_buff = b'\x00' * cache_size
        mock_parser.src_file = vdh_stream
        image_cmd.task_ref = 'fake-task-ref'
        vdh_stream.read.return_value = ['chunk1', 'chunk2', 'chunk3']

        self.assertRaises(exception.HostConnectionFailure,
                          image_cmd._vhd_stream_to_vdi, mock_parser,
                          'fake_vdi_ref', file_size)
Beispiel #5
0
def stream_to_vdis(context, session, instance, host_url, sr_ref, data):
    handler = vdi_handler.ImageStreamToVDIs(context, session, instance,
                                            host_url, sr_ref, data)
    handler.start()
    return handler.vdis