Skip to content

Commit fb09b29

Browse files
committed
Update integration tests for private image sharing feature
1 parent 09f1f4f commit fb09b29

File tree

1 file changed

+110
-40
lines changed

1 file changed

+110
-40
lines changed

test/integration/models/sharegroups/test_sharegroups.py

Lines changed: 110 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
11
import datetime
2-
2+
import pytest
33
from test.integration.helpers import (
44
get_test_label,
55
)
6-
7-
import pytest
8-
6+
from test.integration.conftest import get_region
97
from linode_api4.objects import (
108
Image,
119
ImageShareGroup,
10+
ImageShareGroupImagesToAdd,
11+
ImageShareGroupImageToAdd,
12+
ImageShareGroupImageToUpdate,
1213
ImageShareGroupMemberToAdd,
14+
ImageShareGroupMemberToUpdate,
1315
ImageShareGroupToken,
1416
)
1517

@@ -29,22 +31,40 @@ def wait_for_image_status(test_linode_client, image_id, expected_status, timeout
2931
)
3032

3133

32-
@pytest.fixture(scope="function")
33-
def create_image_id(test_linode_client, linode_for_legacy_interface_tests):
34-
# TODO: list disks by linode_for_legacy_interface_tests.id
35-
create_image = test_linode_client.images.create(disks[0], label="linode-api4python-test-image-sharing-image")
34+
@pytest.fixture(scope="class")
35+
def sample_linode(test_linode_client, e2e_test_firewall):
36+
client = test_linode_client
37+
region = get_region(client, {"Linodes", "Cloud Firewall"}, site_type="core")
38+
label = get_test_label(length=8)
39+
40+
linode_instance, password = client.linode.instance_create(
41+
"g6-nanode-1",
42+
region,
43+
image="linode/debian12",
44+
label=label + "_modlinode",
45+
)
46+
yield linode_instance
47+
linode_instance.delete()
48+
49+
50+
@pytest.fixture(scope="class")
51+
def create_image_id(test_linode_client, sample_linode):
52+
create_image = test_linode_client.images.create(sample_linode.disks[0],
53+
label="linode-api4python-test-image-sharing-image")
3654
wait_for_image_status(test_linode_client, create_image.id, "available")
3755
yield create_image.id
56+
create_image.delete()
3857

3958

4059
@pytest.fixture(scope="function")
4160
def share_group_id(test_linode_client):
4261
group_label = get_test_label(8) + "_sharegroup_api4_test"
43-
response = test_linode_client.sharegroups.create_sharegroup(
62+
group = test_linode_client.sharegroups.create_sharegroup(
4463
label=group_label,
4564
description="Test api4python",
4665
)
47-
yield response.id
66+
yield group.id
67+
group.delete()
4868

4969

5070
def test_get_share_groups(test_linode_client):
@@ -66,45 +86,71 @@ def test_get_share_groups(test_linode_client):
6686

6787
def test_add_update_remove_share_group(test_linode_client):
6888
group_label = get_test_label(8) + "_sharegroup_api4_test"
69-
response_create = test_linode_client.sharegroups.create_sharegroup(
89+
share_group = test_linode_client.sharegroups.create_sharegroup(
7090
label=group_label,
7191
description="Test api4python create",
7292
)
73-
assert response_create.api_endpoint == '/images/sharegroups/{id}'
74-
assert response_create.id > 0
75-
assert response_create.description == 'Test api4python create'
76-
assert isinstance(response_create.images_count, int)
77-
assert response_create.is_suspended == False
78-
assert response_create.label == group_label
79-
assert isinstance(response_create.members_count, int)
80-
assert response_create.uuid != ''
81-
assert isinstance(response_create.created, datetime.date)
82-
assert not response_create.updated
83-
assert not response_create.expiry
84-
85-
# TODO: update sharegroup label or description
86-
87-
response_get = test_linode_client.load(ImageShareGroup, response_create.id)
88-
assert response_get.id == response_create.id
89-
assert response_get.description == 'Test api4python create'
90-
91-
response_create.delete()
93+
assert share_group.api_endpoint == '/images/sharegroups/{id}'
94+
assert share_group.id > 0
95+
assert share_group.description == 'Test api4python create'
96+
assert isinstance(share_group.images_count, int)
97+
assert share_group.is_suspended == False
98+
assert share_group.label == group_label
99+
assert isinstance(share_group.members_count, int)
100+
assert share_group.uuid != ''
101+
assert isinstance(share_group.created, datetime.date)
102+
assert not share_group.updated
103+
assert not share_group.expiry
104+
105+
load_share_group = test_linode_client.load(ImageShareGroup, share_group.id)
106+
assert load_share_group.id == share_group.id
107+
assert load_share_group.description == 'Test api4python create'
108+
109+
load_share_group.label = 'Updated Sharegroup Label'
110+
load_share_group.description = 'Test update description'
111+
load_share_group.save()
112+
load_share_group_after_update = test_linode_client.load(ImageShareGroup, share_group.id)
113+
assert load_share_group_after_update.id == share_group.id
114+
assert load_share_group_after_update.label == 'Updated Sharegroup Label'
115+
assert load_share_group_after_update.description == 'Test update description'
116+
117+
share_group.delete()
92118
with pytest.raises(RuntimeError) as err:
93-
test_linode_client.load(ImageShareGroup, response_create.id)
119+
test_linode_client.load(ImageShareGroup, share_group.id)
94120
assert "[404] Not found" in str(err.value)
95121

96122

97-
def test_create_and_list_share_groups_by_image_id(test_linode_client, create_image_id):
98-
group_label = get_test_label(8) + "_sharegroup_api4_test"
99-
response_create_share_group = test_linode_client.sharegroups.create_sharegroup(
100-
label=group_label,
101-
description="Test api4python create",
123+
def test_add_get_update_revoke_image_to_share_group(test_linode_client, create_image_id, share_group_id):
124+
share_group = test_linode_client.load(ImageShareGroup, share_group_id)
125+
add_image_response = share_group.add_images(
126+
ImageShareGroupImagesToAdd(
127+
images=[
128+
ImageShareGroupImageToAdd(id=create_image_id),
129+
]
130+
)
102131
)
132+
assert 0 < len(add_image_response)
133+
assert add_image_response[0].image_sharing.shared_by.sharegroup_id == share_group.id
134+
assert add_image_response[0].image_sharing.shared_by.source_image_id == create_image_id
135+
136+
get_response = share_group.get_image_shares()
137+
assert 0 < len(get_response)
138+
assert get_response[0].image_sharing.shared_by.sharegroup_id == share_group.id
139+
assert get_response[0].image_sharing.shared_by.source_image_id == create_image_id
140+
assert get_response[0].description == ""
141+
142+
update_response = share_group.update_image_share(
143+
ImageShareGroupImageToUpdate(image_share_id=get_response[0].id, description="Description update")
144+
)
145+
assert update_response.description == "Description update"
103146

104-
response_create_share_group.sharegroups_by_image_id(image_id=create_image_id)
105-
# TODO: Add assertions
147+
share_groups_by_image_id_response = test_linode_client.sharegroups.sharegroups_by_image_id(create_image_id)
148+
assert 0 < len(share_groups_by_image_id_response.lists)
149+
assert share_groups_by_image_id_response.lists[0][0].id == share_group.id
106150

107-
response_create_share_group.delete()
151+
share_group.revoke_image_share(get_response[0].id)
152+
get_after_revoke_response = share_group.get_image_shares()
153+
assert len(get_after_revoke_response) == 0
108154

109155

110156
def test_list_tokens(test_linode_client):
@@ -143,5 +189,29 @@ def test_try_to_add_member_invalid_token(test_linode_client, share_group_id):
143189
)
144190
)
145191
assert "[500] Invalid token format" in str(err.value)
146-
share_group.delete()
147192

193+
194+
def test_list_share_group_members(test_linode_client, share_group_id):
195+
share_group = test_linode_client.load(ImageShareGroup, share_group_id)
196+
response = share_group.get_members()
197+
assert 0 == len(response)
198+
199+
200+
def test_try_to_get_update_revoke_share_group_member_by_invalid_token(test_linode_client, share_group_id):
201+
share_group = test_linode_client.load(ImageShareGroup, share_group_id)
202+
with pytest.raises(RuntimeError) as err:
203+
share_group.get_member("notExistingToken")
204+
assert "[404] Not found" in str(err.value)
205+
206+
with pytest.raises(RuntimeError) as err:
207+
share_group.update_member(
208+
ImageShareGroupMemberToUpdate(
209+
token_uuid="notExistingToken",
210+
label="Update Member",
211+
)
212+
)
213+
assert "[404] Not found" in str(err.value)
214+
215+
with pytest.raises(RuntimeError) as err:
216+
share_group.remove_member("notExistingToken")
217+
assert "[404] Not found" in str(err.value)

0 commit comments

Comments
 (0)