Fix image upload tests.

This commit is contained in:
grossmj
2019-03-18 17:19:23 +07:00
parent 5aa67d18c0
commit edafc29cdc
2 changed files with 26 additions and 19 deletions

View File

@@ -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)

View File

@@ -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)