mirror of
https://github.com/GNS3/gns3-gui.git
synced 2026-05-17 00:46:01 +03:00
Fix image upload tests.
This commit is contained in:
@@ -38,6 +38,9 @@ class ImageUploadManager(object):
|
||||
self._controller = controller
|
||||
|
||||
def upload(self):
|
||||
if not os.path.exists(self._image.path):
|
||||
log.error("Image '{}' could not be found".format(self._image.path))
|
||||
return
|
||||
if self._directFileUpload:
|
||||
# first obtain endpoint and know when target request
|
||||
self._controller.getEndpoint(self._getComputePath(), self._compute_id, self._onLoadEndpointCallback, showProgress=False)
|
||||
@@ -72,10 +75,7 @@ class ImageUploadManager(object):
|
||||
self._callback(result, error, **kwargs)
|
||||
|
||||
def _fileUploadToCompute(self, endpoint):
|
||||
log.info("Uploading image '{}' to compute".format(self._image.path))
|
||||
if not os.path.exists(self._image.path):
|
||||
log.error("Image '{}' could not be found".format(self._image.path))
|
||||
return
|
||||
log.debug("Uploading image '{}' to compute".format(self._image.path))
|
||||
parse_results = urllib.parse.urlparse(endpoint)
|
||||
network_manager = self._controller.getHttpClient().getNetworkManager()
|
||||
client = HTTPClient.fromUrl(endpoint, network_manager=network_manager)
|
||||
@@ -85,9 +85,6 @@ class ImageUploadManager(object):
|
||||
context={"image_path": self._image.path}, progressText="Uploading {}".format(self._image.filename), timeout=None, prefix="")
|
||||
|
||||
def _fileUploadToController(self):
|
||||
log.info("Uploading image '{}' to controller".format(self._image.path))
|
||||
if not os.path.exists(self._image.path):
|
||||
log.error("Image '{}' could not be found".format(self._image.path))
|
||||
return
|
||||
log.debug("Uploading image '{}' to controller".format(self._image.path))
|
||||
self._controller.postCompute(self._getComputePath(), self._compute_id, self._callback, body=pathlib.Path(self._image.path),
|
||||
context={"image_path": self._image.path}, progressText="Uploading {}".format(self._image.filename), timeout=None)
|
||||
|
||||
@@ -15,9 +15,11 @@
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import os
|
||||
import pytest
|
||||
import unittest.mock
|
||||
import pathlib
|
||||
import tempfile
|
||||
|
||||
from gns3.registry.image import Image
|
||||
from gns3.image_upload_manager import ImageUploadManager
|
||||
@@ -25,7 +27,8 @@ from gns3.image_upload_manager import ImageUploadManager
|
||||
|
||||
@pytest.fixture
|
||||
def image():
|
||||
return Image('QEMU', 'test.img')
|
||||
(fd, path) = tempfile.mkstemp(suffix=".img")
|
||||
return Image('QEMU', path)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
@@ -38,10 +41,12 @@ def callback():
|
||||
|
||||
|
||||
def test_direct_file_upload(image, controller, callback):
|
||||
|
||||
|
||||
manager = ImageUploadManager(image, controller, 'compute_id', callback, directFileUpload=True)
|
||||
manager.upload()
|
||||
controller.getEndpoint.assert_called_with(
|
||||
'/QEMU/images/test.img',
|
||||
'/QEMU/images/{}'.format(image.filename),
|
||||
'compute_id',
|
||||
manager._onLoadEndpointCallback,
|
||||
showProgress=False
|
||||
@@ -50,35 +55,40 @@ def test_direct_file_upload(image, controller, callback):
|
||||
with unittest.mock.patch('gns3.image_upload_manager.HTTPClient') as client:
|
||||
manager._onLoadEndpointCallback(dict(endpoint='/endpoint'))
|
||||
client.fromUrl.return_value.createHTTPQuery.assert_called_with(
|
||||
'POST', '/endpoint', manager._checkIfSuccessfulCallback, body=pathlib.Path('test.img'),
|
||||
prefix="", progressText='Uploading test.img', timeout=None
|
||||
'POST', '/endpoint', manager._checkIfSuccessfulCallback, body=pathlib.Path(image.path),
|
||||
prefix="", context={'image_path': image.path}, progressText='Uploading {}'.format(image.filename), timeout=None
|
||||
)
|
||||
|
||||
manager._checkIfSuccessfulCallback({})
|
||||
callback.assert_called_with({}, False)
|
||||
os.remove(image.path)
|
||||
|
||||
|
||||
def test_direct_file_upload_fallback_to_controller(image, controller, callback):
|
||||
manager = ImageUploadManager(image, controller, callback, directFileUpload=True)
|
||||
manager._checkIfSuccessfulCallback({}, error=True, connection_error=True)
|
||||
controller.postCompute.assert_called_with(
|
||||
'/QEMU/images/test.img',
|
||||
'/QEMU/images/{}'.format(image.filename),
|
||||
callback,
|
||||
None,
|
||||
body=pathlib.Path('test.img'),
|
||||
progressText='Uploading test.img',
|
||||
body=pathlib.Path(image.path),
|
||||
context={'image_path': image.path},
|
||||
progressText='Uploading {}'.format(image.filename),
|
||||
timeout=None
|
||||
)
|
||||
os.remove(image.path)
|
||||
|
||||
|
||||
def test_upload_via_controller(image, controller, callback):
|
||||
manager = ImageUploadManager(image, controller, callback, directFileUpload=False)
|
||||
manager.upload()
|
||||
controller.postCompute.assert_called_with(
|
||||
'/QEMU/images/test.img',
|
||||
'/QEMU/images/{}'.format(image.filename),
|
||||
callback,
|
||||
None,
|
||||
body=pathlib.Path('test.img'),
|
||||
progressText='Uploading test.img',
|
||||
body=pathlib.Path(image.path),
|
||||
context={'image_path': image.path},
|
||||
progressText='Uploading {}'.format(image.filename),
|
||||
timeout=None
|
||||
)
|
||||
)
|
||||
os.remove(image.path)
|
||||
|
||||
Reference in New Issue
Block a user