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()
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')
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)
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)
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