forked from linode/linode_api4-python
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_sharegroups.py
More file actions
249 lines (209 loc) · 8.45 KB
/
Copy pathtest_sharegroups.py
File metadata and controls
249 lines (209 loc) · 8.45 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
import datetime
from test.integration.conftest import get_region
from test.integration.helpers import get_test_label
import pytest
from linode_api4.objects import (
Image,
ImageShareGroup,
ImageShareGroupImagesToAdd,
ImageShareGroupImageToAdd,
ImageShareGroupImageToUpdate,
ImageShareGroupMemberToAdd,
ImageShareGroupMemberToUpdate,
ImageShareGroupToken,
)
def wait_for_image_status(
test_linode_client, image_id, expected_status, timeout=360, interval=5
):
import time
get_image = test_linode_client.load(Image, image_id)
timer = 0
while get_image.status != expected_status and timer < timeout:
time.sleep(interval)
timer += interval
get_image = test_linode_client.load(Image, image_id)
if timer >= timeout:
raise TimeoutError(
f"Created image did not reach status '{expected_status}' within {timeout} seconds."
)
@pytest.fixture(scope="class")
def sample_linode(test_linode_client, e2e_test_firewall):
client = test_linode_client
region = get_region(client, {"Linodes", "Cloud Firewall"}, site_type="core")
label = get_test_label(length=8)
linode_instance, password = client.linode.instance_create(
"g6-nanode-1",
region,
image="linode/ubuntu24.04",
label=label + "_modlinode",
)
yield linode_instance
linode_instance.delete()
@pytest.fixture(scope="class")
def create_image_id(test_linode_client, sample_linode):
create_image = test_linode_client.images.create(
sample_linode.disks[0],
label="linode-api4python-test-image-sharing-image",
)
wait_for_image_status(test_linode_client, create_image.id, "available")
yield create_image.id
create_image.delete()
@pytest.fixture(scope="function")
def share_group_id(test_linode_client):
group_label = get_test_label(8) + "_sharegroup_api4_test"
group = test_linode_client.sharegroups.create_sharegroup(
label=group_label,
description="Test api4python",
)
yield group.id
group.delete()
def test_get_share_groups(test_linode_client, share_group_id):
response = test_linode_client.sharegroups()
sharegroups_list = response.lists[0]
assert len(sharegroups_list) > 0
assert sharegroups_list[0].api_endpoint == "/images/sharegroups/{id}"
assert sharegroups_list[0].id > 0
assert sharegroups_list[0].description != ""
assert isinstance(sharegroups_list[0].images_count, int)
assert not sharegroups_list[0].is_suspended
assert sharegroups_list[0].label != ""
assert isinstance(sharegroups_list[0].members_count, int)
assert sharegroups_list[0].uuid != ""
assert isinstance(sharegroups_list[0].created, datetime.date)
assert not sharegroups_list[0].expiry
def test_add_update_remove_share_group(test_linode_client):
group_label = get_test_label(8) + "_sharegroup_api4_test"
share_group = test_linode_client.sharegroups.create_sharegroup(
label=group_label,
description="Test api4python create",
)
assert share_group.api_endpoint == "/images/sharegroups/{id}"
assert share_group.id > 0
assert share_group.description == "Test api4python create"
assert isinstance(share_group.images_count, int)
assert not share_group.is_suspended
assert share_group.label == group_label
assert isinstance(share_group.members_count, int)
assert share_group.uuid != ""
assert isinstance(share_group.created, datetime.date)
assert not share_group.updated
assert not share_group.expiry
load_share_group = test_linode_client.load(ImageShareGroup, share_group.id)
assert load_share_group.id == share_group.id
assert load_share_group.description == "Test api4python create"
load_share_group.label = "Updated Sharegroup Label"
load_share_group.description = "Test update description"
load_share_group.save()
load_share_group_after_update = test_linode_client.load(
ImageShareGroup, share_group.id
)
assert load_share_group_after_update.id == share_group.id
assert load_share_group_after_update.label == "Updated Sharegroup Label"
assert (
load_share_group_after_update.description == "Test update description"
)
share_group.delete()
with pytest.raises(RuntimeError) as err:
test_linode_client.load(ImageShareGroup, share_group.id)
assert "[404] Not found" in str(err.value)
def test_add_get_update_revoke_image_to_share_group(
test_linode_client, create_image_id, share_group_id
):
share_group = test_linode_client.load(ImageShareGroup, share_group_id)
add_image_response = share_group.add_images(
ImageShareGroupImagesToAdd(
images=[
ImageShareGroupImageToAdd(id=create_image_id),
]
)
)
assert 0 < len(add_image_response)
assert (
add_image_response[0].image_sharing.shared_by.sharegroup_id
== share_group.id
)
assert (
add_image_response[0].image_sharing.shared_by.source_image_id
== create_image_id
)
get_response = share_group.get_image_shares()
assert 0 < len(get_response)
assert (
get_response[0].image_sharing.shared_by.sharegroup_id == share_group.id
)
assert (
get_response[0].image_sharing.shared_by.source_image_id
== create_image_id
)
assert get_response[0].description == ""
update_response = share_group.update_image_share(
ImageShareGroupImageToUpdate(
image_share_id=get_response[0].id, description="Description update"
)
)
assert update_response.description == "Description update"
share_groups_by_image_id_response = (
test_linode_client.sharegroups.sharegroups_by_image_id(create_image_id)
)
assert 0 < len(share_groups_by_image_id_response.lists)
assert share_groups_by_image_id_response.lists[0][0].id == share_group.id
share_group.revoke_image_share(get_response[0].id)
get_after_revoke_response = share_group.get_image_shares()
assert len(get_after_revoke_response) == 0
def test_list_tokens(test_linode_client):
response = test_linode_client.sharegroups.tokens()
assert response.page_endpoint == "images/sharegroups/tokens"
assert len(response.lists[0]) >= 0
def test_create_token_to_own_share_group_error(test_linode_client):
group_label = get_test_label(8) + "_sharegroup_api4_test"
response_create_share_group = (
test_linode_client.sharegroups.create_sharegroup(
label=group_label,
description="Test api4python create",
)
)
with pytest.raises(RuntimeError) as err:
test_linode_client.sharegroups.create_token(
response_create_share_group.uuid
)
assert "[400] valid_for_sharegroup_uuid" in str(err.value)
assert "You may not create a token for your own sharegroup" in str(
err.value
)
response_create_share_group.delete()
def test_get_invalid_token(test_linode_client):
with pytest.raises(RuntimeError) as err:
test_linode_client.load(ImageShareGroupToken, "36b0-4d52_invalid")
assert "[404] Not found" in str(err.value)
def test_try_to_add_member_invalid_token(test_linode_client, share_group_id):
share_group = test_linode_client.load(ImageShareGroup, share_group_id)
with pytest.raises(RuntimeError) as err:
share_group.add_member(
ImageShareGroupMemberToAdd(
token="not_existing_token",
label="New Member",
)
)
assert "[500] Invalid token format" in str(err.value)
def test_list_share_group_members(test_linode_client, share_group_id):
share_group = test_linode_client.load(ImageShareGroup, share_group_id)
response = share_group.get_members()
assert 0 == len(response)
def test_try_to_get_update_revoke_share_group_member_by_invalid_token(
test_linode_client, share_group_id
):
share_group = test_linode_client.load(ImageShareGroup, share_group_id)
with pytest.raises(RuntimeError) as err:
share_group.get_member("not_existing_token")
assert "[404] Not found" in str(err.value)
with pytest.raises(RuntimeError) as err:
share_group.update_member(
ImageShareGroupMemberToUpdate(
token_uuid="not_existing_token",
label="Update Member",
)
)
assert "[404] Not found" in str(err.value)
with pytest.raises(RuntimeError) as err:
share_group.remove_member("not_existing_token")
assert "[404] Not found" in str(err.value)