Skip to content

Commit 744761b

Browse files
committed
Update integration tests for private image sharing feature
1 parent b2bf5d9 commit 744761b

File tree

1 file changed

+153
-48
lines changed

1 file changed

+153
-48
lines changed
Lines changed: 153 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import datetime
2-
2+
from test.integration.conftest import get_region
33
from test.integration.helpers import (
44
get_test_label,
55
)
@@ -9,12 +9,18 @@
99
from linode_api4.objects import (
1010
Image,
1111
ImageShareGroup,
12+
ImageShareGroupImagesToAdd,
13+
ImageShareGroupImageToAdd,
14+
ImageShareGroupImageToUpdate,
1215
ImageShareGroupMemberToAdd,
16+
ImageShareGroupMemberToUpdate,
1317
ImageShareGroupToken,
1418
)
1519

1620

17-
def wait_for_image_status(test_linode_client, image_id, expected_status, timeout=180, interval=5):
21+
def wait_for_image_status(
22+
test_linode_client, image_id, expected_status, timeout=180, interval=5
23+
):
1824
import time
1925

2026
get_image = test_linode_client.load(Image, image_id)
@@ -29,100 +35,173 @@ def wait_for_image_status(test_linode_client, image_id, expected_status, timeout
2935
)
3036

3137

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")
38+
@pytest.fixture(scope="class")
39+
def sample_linode(test_linode_client, e2e_test_firewall):
40+
client = test_linode_client
41+
region = get_region(client, {"Linodes", "Cloud Firewall"}, site_type="core")
42+
label = get_test_label(length=8)
43+
44+
linode_instance, password = client.linode.instance_create(
45+
"g6-nanode-1",
46+
region,
47+
image="linode/debian12",
48+
label=label + "_modlinode",
49+
)
50+
yield linode_instance
51+
linode_instance.delete()
52+
53+
54+
@pytest.fixture(scope="class")
55+
def create_image_id(test_linode_client, sample_linode):
56+
create_image = test_linode_client.images.create(
57+
sample_linode.disks[0],
58+
label="linode-api4python-test-image-sharing-image",
59+
)
3660
wait_for_image_status(test_linode_client, create_image.id, "available")
3761
yield create_image.id
62+
create_image.delete()
3863

3964

4065
@pytest.fixture(scope="function")
4166
def share_group_id(test_linode_client):
4267
group_label = get_test_label(8) + "_sharegroup_api4_test"
43-
response = test_linode_client.sharegroups.create_sharegroup(
68+
group = test_linode_client.sharegroups.create_sharegroup(
4469
label=group_label,
4570
description="Test api4python",
4671
)
47-
yield response.id
72+
yield group.id
73+
group.delete()
4874

4975

5076
def test_get_share_groups(test_linode_client):
5177
response = test_linode_client.sharegroups()
5278
sharegroups_list = response.lists[0]
5379
assert len(sharegroups_list) > 0
54-
assert sharegroups_list[0].api_endpoint == '/images/sharegroups/{id}'
80+
assert sharegroups_list[0].api_endpoint == "/images/sharegroups/{id}"
5581
assert sharegroups_list[0].id > 0
56-
assert sharegroups_list[0].description != ''
82+
assert sharegroups_list[0].description != ""
5783
assert isinstance(sharegroups_list[0].images_count, int)
5884
assert sharegroups_list[0].is_suspended == False
59-
assert sharegroups_list[0].label != ''
85+
assert sharegroups_list[0].label != ""
6086
assert isinstance(sharegroups_list[0].members_count, int)
61-
assert sharegroups_list[0].uuid != ''
87+
assert sharegroups_list[0].uuid != ""
6288
assert isinstance(sharegroups_list[0].created, datetime.date)
6389
assert isinstance(sharegroups_list[0].updated, datetime.date)
6490
assert not sharegroups_list[0].expiry
6591

6692

6793
def test_add_update_remove_share_group(test_linode_client):
6894
group_label = get_test_label(8) + "_sharegroup_api4_test"
69-
response_create = test_linode_client.sharegroups.create_sharegroup(
95+
share_group = test_linode_client.sharegroups.create_sharegroup(
7096
label=group_label,
7197
description="Test api4python create",
7298
)
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()
99+
assert share_group.api_endpoint == "/images/sharegroups/{id}"
100+
assert share_group.id > 0
101+
assert share_group.description == "Test api4python create"
102+
assert isinstance(share_group.images_count, int)
103+
assert share_group.is_suspended == False
104+
assert share_group.label == group_label
105+
assert isinstance(share_group.members_count, int)
106+
assert share_group.uuid != ""
107+
assert isinstance(share_group.created, datetime.date)
108+
assert not share_group.updated
109+
assert not share_group.expiry
110+
111+
load_share_group = test_linode_client.load(ImageShareGroup, share_group.id)
112+
assert load_share_group.id == share_group.id
113+
assert load_share_group.description == "Test api4python create"
114+
115+
load_share_group.label = "Updated Sharegroup Label"
116+
load_share_group.description = "Test update description"
117+
load_share_group.save()
118+
load_share_group_after_update = test_linode_client.load(
119+
ImageShareGroup, share_group.id
120+
)
121+
assert load_share_group_after_update.id == share_group.id
122+
assert load_share_group_after_update.label == "Updated Sharegroup Label"
123+
assert (
124+
load_share_group_after_update.description == "Test update description"
125+
)
126+
127+
share_group.delete()
92128
with pytest.raises(RuntimeError) as err:
93-
test_linode_client.load(ImageShareGroup, response_create.id)
129+
test_linode_client.load(ImageShareGroup, share_group.id)
94130
assert "[404] Not found" in str(err.value)
95131

96132

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",
133+
def test_add_get_update_revoke_image_to_share_group(
134+
test_linode_client, create_image_id, share_group_id
135+
):
136+
share_group = test_linode_client.load(ImageShareGroup, share_group_id)
137+
add_image_response = share_group.add_images(
138+
ImageShareGroupImagesToAdd(
139+
images=[
140+
ImageShareGroupImageToAdd(id=create_image_id),
141+
]
142+
)
143+
)
144+
assert 0 < len(add_image_response)
145+
assert (
146+
add_image_response[0].image_sharing.shared_by.sharegroup_id
147+
== share_group.id
148+
)
149+
assert (
150+
add_image_response[0].image_sharing.shared_by.source_image_id
151+
== create_image_id
102152
)
103153

104-
response_create_share_group.sharegroups_by_image_id(image_id=create_image_id)
105-
# TODO: Add assertions
154+
get_response = share_group.get_image_shares()
155+
assert 0 < len(get_response)
156+
assert (
157+
get_response[0].image_sharing.shared_by.sharegroup_id == share_group.id
158+
)
159+
assert (
160+
get_response[0].image_sharing.shared_by.source_image_id
161+
== create_image_id
162+
)
163+
assert get_response[0].description == ""
106164

107-
response_create_share_group.delete()
165+
update_response = share_group.update_image_share(
166+
ImageShareGroupImageToUpdate(
167+
image_share_id=get_response[0].id, description="Description update"
168+
)
169+
)
170+
assert update_response.description == "Description update"
171+
172+
share_groups_by_image_id_response = (
173+
test_linode_client.sharegroups.sharegroups_by_image_id(create_image_id)
174+
)
175+
assert 0 < len(share_groups_by_image_id_response.lists)
176+
assert share_groups_by_image_id_response.lists[0][0].id == share_group.id
177+
178+
share_group.revoke_image_share(get_response[0].id)
179+
get_after_revoke_response = share_group.get_image_shares()
180+
assert len(get_after_revoke_response) == 0
108181

109182

110183
def test_list_tokens(test_linode_client):
111184
response = test_linode_client.sharegroups.tokens()
112-
assert response.page_endpoint == 'images/sharegroups/tokens'
185+
assert response.page_endpoint == "images/sharegroups/tokens"
113186
assert len(response.lists[0]) >= 0
114187

115188

116189
def test_create_token_to_own_share_group_error(test_linode_client):
117190
group_label = get_test_label(8) + "_sharegroup_api4_test"
118-
response_create_share_group = test_linode_client.sharegroups.create_sharegroup(
119-
label=group_label,
120-
description="Test api4python create",
191+
response_create_share_group = (
192+
test_linode_client.sharegroups.create_sharegroup(
193+
label=group_label,
194+
description="Test api4python create",
195+
)
121196
)
122197
with pytest.raises(RuntimeError) as err:
123-
test_linode_client.sharegroups.create_token(response_create_share_group.uuid)
198+
test_linode_client.sharegroups.create_token(
199+
response_create_share_group.uuid
200+
)
124201
assert "[400] valid_for_sharegroup_uuid" in str(err.value)
125-
assert "You may not create a token for your own sharegroup" in str(err.value)
202+
assert "You may not create a token for your own sharegroup" in str(
203+
err.value
204+
)
126205

127206
response_create_share_group.delete()
128207

@@ -143,5 +222,31 @@ def test_try_to_add_member_invalid_token(test_linode_client, share_group_id):
143222
)
144223
)
145224
assert "[500] Invalid token format" in str(err.value)
146-
share_group.delete()
147225

226+
227+
def test_list_share_group_members(test_linode_client, share_group_id):
228+
share_group = test_linode_client.load(ImageShareGroup, share_group_id)
229+
response = share_group.get_members()
230+
assert 0 == len(response)
231+
232+
233+
def test_try_to_get_update_revoke_share_group_member_by_invalid_token(
234+
test_linode_client, share_group_id
235+
):
236+
share_group = test_linode_client.load(ImageShareGroup, share_group_id)
237+
with pytest.raises(RuntimeError) as err:
238+
share_group.get_member("notExistingToken")
239+
assert "[404] Not found" in str(err.value)
240+
241+
with pytest.raises(RuntimeError) as err:
242+
share_group.update_member(
243+
ImageShareGroupMemberToUpdate(
244+
token_uuid="notExistingToken",
245+
label="Update Member",
246+
)
247+
)
248+
assert "[404] Not found" in str(err.value)
249+
250+
with pytest.raises(RuntimeError) as err:
251+
share_group.remove_member("notExistingToken")
252+
assert "[404] Not found" in str(err.value)

0 commit comments

Comments
 (0)