11import datetime
2-
2+ from test . integration . conftest import get_region
33from test .integration .helpers import (
44 get_test_label ,
55)
99from 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" )
4166def 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
5076def 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
6793def 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
110183def 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
116189def 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