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
@@ -29,22 +33,40 @@ def wait_for_image_status(test_linode_client, image_id, expected_status, timeout
2933 )
3034
3135
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" )
36+ @pytest .fixture (scope = "class" )
37+ def sample_linode (test_linode_client , e2e_test_firewall ):
38+ client = test_linode_client
39+ region = get_region (client , {"Linodes" , "Cloud Firewall" }, site_type = "core" )
40+ label = get_test_label (length = 8 )
41+
42+ linode_instance , password = client .linode .instance_create (
43+ "g6-nanode-1" ,
44+ region ,
45+ image = "linode/debian12" ,
46+ label = label + "_modlinode" ,
47+ )
48+ yield linode_instance
49+ linode_instance .delete ()
50+
51+
52+ @pytest .fixture (scope = "class" )
53+ def create_image_id (test_linode_client , sample_linode ):
54+ create_image = test_linode_client .images .create (sample_linode .disks [0 ],
55+ label = "linode-api4python-test-image-sharing-image" )
3656 wait_for_image_status (test_linode_client , create_image .id , "available" )
3757 yield create_image .id
58+ create_image .delete ()
3859
3960
4061@pytest .fixture (scope = "function" )
4162def share_group_id (test_linode_client ):
4263 group_label = get_test_label (8 ) + "_sharegroup_api4_test"
43- response = test_linode_client .sharegroups .create_sharegroup (
64+ group = test_linode_client .sharegroups .create_sharegroup (
4465 label = group_label ,
4566 description = "Test api4python" ,
4667 )
47- yield response .id
68+ yield group .id
69+ group .delete ()
4870
4971
5072def test_get_share_groups (test_linode_client ):
@@ -66,45 +88,71 @@ def test_get_share_groups(test_linode_client):
6688
6789def test_add_update_remove_share_group (test_linode_client ):
6890 group_label = get_test_label (8 ) + "_sharegroup_api4_test"
69- response_create = test_linode_client .sharegroups .create_sharegroup (
91+ share_group = test_linode_client .sharegroups .create_sharegroup (
7092 label = group_label ,
7193 description = "Test api4python create" ,
7294 )
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 ()
95+ assert share_group .api_endpoint == '/images/sharegroups/{id}'
96+ assert share_group .id > 0
97+ assert share_group .description == 'Test api4python create'
98+ assert isinstance (share_group .images_count , int )
99+ assert share_group .is_suspended == False
100+ assert share_group .label == group_label
101+ assert isinstance (share_group .members_count , int )
102+ assert share_group .uuid != ''
103+ assert isinstance (share_group .created , datetime .date )
104+ assert not share_group .updated
105+ assert not share_group .expiry
106+
107+ load_share_group = test_linode_client .load (ImageShareGroup , share_group .id )
108+ assert load_share_group .id == share_group .id
109+ assert load_share_group .description == 'Test api4python create'
110+
111+ load_share_group .label = 'Updated Sharegroup Label'
112+ load_share_group .description = 'Test update description'
113+ load_share_group .save ()
114+ load_share_group_after_update = test_linode_client .load (ImageShareGroup , share_group .id )
115+ assert load_share_group_after_update .id == share_group .id
116+ assert load_share_group_after_update .label == 'Updated Sharegroup Label'
117+ assert load_share_group_after_update .description == 'Test update description'
118+
119+ share_group .delete ()
92120 with pytest .raises (RuntimeError ) as err :
93- test_linode_client .load (ImageShareGroup , response_create .id )
121+ test_linode_client .load (ImageShareGroup , share_group .id )
94122 assert "[404] Not found" in str (err .value )
95123
96124
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" ,
125+ def test_add_get_update_revoke_image_to_share_group (test_linode_client , create_image_id , share_group_id ):
126+ share_group = test_linode_client .load (ImageShareGroup , share_group_id )
127+ add_image_response = share_group .add_images (
128+ ImageShareGroupImagesToAdd (
129+ images = [
130+ ImageShareGroupImageToAdd (id = create_image_id ),
131+ ]
132+ )
102133 )
134+ assert 0 < len (add_image_response )
135+ assert add_image_response [0 ].image_sharing .shared_by .sharegroup_id == share_group .id
136+ assert add_image_response [0 ].image_sharing .shared_by .source_image_id == create_image_id
137+
138+ get_response = share_group .get_image_shares ()
139+ assert 0 < len (get_response )
140+ assert get_response [0 ].image_sharing .shared_by .sharegroup_id == share_group .id
141+ assert get_response [0 ].image_sharing .shared_by .source_image_id == create_image_id
142+ assert get_response [0 ].description == ""
143+
144+ update_response = share_group .update_image_share (
145+ ImageShareGroupImageToUpdate (image_share_id = get_response [0 ].id , description = "Description update" )
146+ )
147+ assert update_response .description == "Description update"
103148
104- response_create_share_group .sharegroups_by_image_id (image_id = create_image_id )
105- # TODO: Add assertions
149+ share_groups_by_image_id_response = test_linode_client .sharegroups .sharegroups_by_image_id (create_image_id )
150+ assert 0 < len (share_groups_by_image_id_response .lists )
151+ assert share_groups_by_image_id_response .lists [0 ][0 ].id == share_group .id
106152
107- response_create_share_group .delete ()
153+ share_group .revoke_image_share (get_response [0 ].id )
154+ get_after_revoke_response = share_group .get_image_shares ()
155+ assert len (get_after_revoke_response ) == 0
108156
109157
110158def test_list_tokens (test_linode_client ):
@@ -143,5 +191,29 @@ def test_try_to_add_member_invalid_token(test_linode_client, share_group_id):
143191 )
144192 )
145193 assert "[500] Invalid token format" in str (err .value )
146- share_group .delete ()
147194
195+
196+ def test_list_share_group_members (test_linode_client , share_group_id ):
197+ share_group = test_linode_client .load (ImageShareGroup , share_group_id )
198+ response = share_group .get_members ()
199+ assert 0 == len (response )
200+
201+
202+ def test_try_to_get_update_revoke_share_group_member_by_invalid_token (test_linode_client , share_group_id ):
203+ share_group = test_linode_client .load (ImageShareGroup , share_group_id )
204+ with pytest .raises (RuntimeError ) as err :
205+ share_group .get_member ("notExistingToken" )
206+ assert "[404] Not found" in str (err .value )
207+
208+ with pytest .raises (RuntimeError ) as err :
209+ share_group .update_member (
210+ ImageShareGroupMemberToUpdate (
211+ token_uuid = "notExistingToken" ,
212+ label = "Update Member" ,
213+ )
214+ )
215+ assert "[404] Not found" in str (err .value )
216+
217+ with pytest .raises (RuntimeError ) as err :
218+ share_group .remove_member ("notExistingToken" )
219+ assert "[404] Not found" in str (err .value )
0 commit comments