Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

added in tests for bad checksums on ubuntu images, and added in some … #1481

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 5 additions & 3 deletions apiclient/harvester_api/managers/images.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ class ImageManager(BaseManager):
DOWNLOAD_fmt = "v1/harvester/harvesterhci.io.virtualmachineimages/{ns}/{uid}/download"
_KIND = "VirtualMachineImage"

def create_data(self, name, url, desc, stype, namespace, display_name=None, storageclass=None):
def create_data(self, name, url, desc, stype, namespace, image_checksum=None,
display_name=None, storageclass=None):
data = {
"apiVersion": "{API_VERSION}",
"kind": self._KIND,
Expand All @@ -26,6 +27,7 @@ def create_data(self, name, url, desc, stype, namespace, display_name=None, stor
"spec": {
"displayName": display_name or name,
"sourceType": stype,
"checksum": image_checksum,
"url": url
}
}
Expand All @@ -38,10 +40,10 @@ def create(self, name, namespace=DEFAULT_NAMESPACE, **kwargs):
return self._create(self.PATH_fmt.format(uid=name, ns=namespace), **kwargs)

def create_by_url(
self, name, url, namespace=DEFAULT_NAMESPACE,
self, name, url, imageChecksum=None, namespace=DEFAULT_NAMESPACE,
description="", display_name=None, storageclass=None
):
data = self.create_data(name, url, description, "download", namespace,
data = self.create_data(name, url, description, "download", namespace, imageChecksum,
display_name, storageclass)
return self.create("", namespace, json=data)

Expand Down
2 changes: 2 additions & 0 deletions apiclient/harvester_api/managers/images.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ class ImageManager(BaseManager):
desc: str,
stype: str,
namespace: str,
imageChecksum=str,
display_name: str = ...
) -> dict:
"""
Expand All @@ -43,6 +44,7 @@ class ImageManager(BaseManager):
self,
name: str,
url: str,
imageChecksum: str,
namespace: str = ...,
description: str = ...,
display_name: str = ...
Expand Down
8 changes: 7 additions & 1 deletion config.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# Harvester Cluster
endpoint: 'https://localhost:30443'
endpoint: 'https://localhost'
username: 'admin'
password: 'password1234'
# Be used to access Harvester node, fill in one of following is enough.
Expand All @@ -23,7 +23,13 @@ sleep-timeout: 3
node-scripts-location: 'scripts/vagrant'

opensuse-image-url: https://download.opensuse.org/repositories/Cloud:/Images:/Leap_15.5/images/openSUSE-Leap-15.5.x86_64-NoCloud.qcow2
# sha512sum for opensuse image-url
opensuse-checksum: ''

ubuntu-image-url: https://cloud-images.ubuntu.com/releases/releases/22.04/release/ubuntu-22.04-server-cloudimg-amd64.img
# sha512sum for ubuntu image-url
ubuntu-checksum: ''

# URL to download all images
image-cache-url: ''

Expand Down
12 changes: 12 additions & 0 deletions harvester_e2e_tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -274,6 +274,18 @@ def pytest_addoption(parser):
default=config_data.get('terraform-provider-rancher'),
help=('Version of Terraform Rancher Provider')
)
parser.addoption(
'--ubuntu-checksum',
action='store',
default=config_data.get('ubuntu-checksum'),
help=('Checksum for ubuntu_image')
)
parser.addoption(
'--opensuse-checksum',
action='store',
default=config_data.get('opensuse-checksum'),
help=('Checksum for opensuse_image')
)


def pytest_configure(config):
Expand Down
12 changes: 12 additions & 0 deletions harvester_e2e_tests/fixtures/api_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,18 @@ def rancher_wait_timeout(request):
return request.config.getoption("--rancher-cluster-wait-timeout", 1800)


@pytest.fixture(scope="session")
def ubuntu_checksum(request):
noahgildersleeve marked this conversation as resolved.
Show resolved Hide resolved
"""Returns Ubuntu checksum from config"""
return request.config.getoption("--ubuntu-checksum")


@pytest.fixture(scope="session")
def opensuse_checksum(request):
"""Returns openSUSE checksum from config"""
return request.config.getoption("--opensuse-checksum")


@pytest.fixture(scope="session")
def host_state(request):
class HostState:
Expand Down
9 changes: 6 additions & 3 deletions harvester_e2e_tests/fixtures/images.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
@pytest.fixture(scope="session")
def image_opensuse(request, api_client):
image_server = request.config.getoption("--image-cache-url")
image_checksum = request.config.getoption("--opensuse-checksum", default=None)
url = urlparse(
request.config.getoption("--opensuse-image-url")
)
Expand All @@ -22,12 +23,13 @@ def image_opensuse(request, api_client):
*_, image_name = url.path.rsplit("/", 1)
url = urlparse(urljoin(f"{image_server}/", image_name))

return ImageInfo(url, name="opensuse", ssh_user="opensuse")
return ImageInfo(url, image_checksum, name="opensuse", ssh_user="opensuse")


@pytest.fixture(scope="session")
def image_ubuntu(request):
image_server = request.config.getoption("--image-cache-url")
image_checksum = request.config.getoption("--ubuntu-checksum", default=None)
url = urlparse(
request.config.getoption("--ubuntu-image-url") or DEFAULT_UBUNTU_IMAGE_URL
)
Expand All @@ -36,7 +38,7 @@ def image_ubuntu(request):
*_, image_name = url.path.rsplit("/", 1)
url = urlparse(urljoin(f"{image_server}/", image_name))

return ImageInfo(url, name="ubuntu", ssh_user="ubuntu")
return ImageInfo(url, image_checksum, name="ubuntu", ssh_user="ubuntu")


@pytest.fixture(scope="session")
Expand All @@ -49,13 +51,14 @@ def image_k3s(request):


class ImageInfo:
def __init__(self, url_result, name="", ssh_user=None):
def __init__(self, url_result, image_checksum=None, name="", ssh_user=None):
self.url_result = url_result
if name:
self.name = name
else:
self.name = self.url.rsplit("/", 1)[-1]
self.ssh_user = ssh_user
self.image_checksum = image_checksum

def __repr__(self):
return f"{__class__.__name__}({self.url_result})"
Expand Down
8 changes: 5 additions & 3 deletions harvester_e2e_tests/integrations/test_1_images.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,8 @@ def fake_invalid_image_file():
yield Path(f.name)


def create_image_url(api_client, name, image_url, wait_timeout):
code, data = api_client.images.create_by_url(name, image_url)
def create_image_url(api_client, name, image_url, image_checksum, wait_timeout):
code, data = api_client.images.create_by_url(name, image_url, image_checksum)

assert 201 == code, (code, data)
image_spec = data.get("spec")
Expand Down Expand Up @@ -112,6 +112,7 @@ def get_image(api_client, image_name):

@pytest.fixture(scope="class")
def cluster_network(api_client, vlan_nic):
# We should change this at some point. It fails if the total cnet name is over 12 chars
albinsun marked this conversation as resolved.
Show resolved Hide resolved
cnet = f"cnet-{vlan_nic}"
code, data = api_client.clusternetworks.get(cnet)
if code != 200:
Expand Down Expand Up @@ -266,7 +267,8 @@ def test_create_image_url(self, image_info, unique_name, api_client, wait_timeou
"""
image_name = f"{image_info.name}-{unique_name}"
image_url = image_info.url
create_image_url(api_client, image_name, image_url, wait_timeout)
create_image_url(api_client, image_name, image_url,
image_info.image_checksum, wait_timeout)

@pytest.mark.skip_version_if("> v1.2.0", "<= v1.4.0", reason="Issue#4293 fix after `v1.4.0`")
@pytest.mark.p0
Expand Down
Loading