mirror of https://github.com/cirruslabs/tart.git
56 lines
1.8 KiB
Python
56 lines
1.8 KiB
Python
import os
|
|
import tempfile
|
|
import timeit
|
|
import uuid
|
|
|
|
import bitmath
|
|
import pytest
|
|
|
|
amount_to_transfer = bitmath.GB(1)
|
|
minimal_speed_per_second = bitmath.Mb(100)
|
|
|
|
|
|
class TestOCI:
|
|
@pytest.mark.dependency()
|
|
def test_push_speed(self, tart, vm_with_random_disk, docker_registry):
|
|
start = timeit.default_timer()
|
|
tart.run(["push", "--insecure", vm_with_random_disk, docker_registry.remote_name(vm_with_random_disk)])
|
|
stop = timeit.default_timer()
|
|
|
|
actual_speed_per_second = self._calculate_speed_per_second(amount_to_transfer, stop - start)
|
|
assert actual_speed_per_second > minimal_speed_per_second
|
|
|
|
@pytest.mark.dependency(depends=["TestOCI::test_push_speed"])
|
|
def test_pull_speed(self, tart, vm_with_random_disk, docker_registry):
|
|
start = timeit.default_timer()
|
|
tart.run(["pull", "--insecure", docker_registry.remote_name(vm_with_random_disk)])
|
|
stop = timeit.default_timer()
|
|
|
|
actual_speed_per_second = self._calculate_speed_per_second(amount_to_transfer, stop - start)
|
|
assert actual_speed_per_second > minimal_speed_per_second
|
|
|
|
@staticmethod
|
|
def _calculate_speed_per_second(amount_transferred, time_taken):
|
|
return (amount_transferred / time_taken).best_prefix(bitmath.SI)
|
|
|
|
|
|
@pytest.fixture(scope="class")
|
|
def vm_with_random_disk(tart):
|
|
vm_name = str(uuid.uuid4())
|
|
|
|
# Create a VM (Linux for speed's sake)
|
|
tart.run(["create", "--linux", vm_name])
|
|
|
|
# Populate VM's disk with "amount_to_transfer" of random bytes
|
|
# to effectively disable Tart's OCI blob compression
|
|
disk_path = os.path.join(tart.home(), "vms", vm_name, "disk.img")
|
|
|
|
with tempfile.NamedTemporaryFile(delete=False) as tf:
|
|
tf.write(os.urandom(amount_to_transfer.bytes))
|
|
tf.close()
|
|
os.rename(tf.name, disk_path)
|
|
|
|
yield vm_name
|
|
|
|
tart.run(["delete", vm_name])
|