필수 과제
과제 선택
- [image] glance
- 경로 :
openstacksdk/openstack/tests/functional/image/v2/test_member
- 명령어 :
openstack image member [ get | list ]
Functional 테스트 코드 구현
Functional 테스트 코드 실행을 위한 clouds.yaml 설정
clouds:
devstack-admin:
auth:
auth_url: http://xxx.xxx.xxx.xxx/identity
username: admin
password: password
project_domain_name: default
project_name: admin
user_domain_name: default
region_name: RegionOne
interface: public
auth_type: password
identity_api_version: 3
devstack:
auth:
auth_url: http://xxx.xxx.xxx.xxx/identity
username: demo
password: password
project_domain_name: default
project_name: demo
user_domain_name: default
region_name: RegionOne
interface: public
auth_type: password
identity_api_version: 3
devstack-alt:
auth:
auth_url: http://xxx.xxx.xxx.xxx/identity
username: alt_demo
password: password
project_domain_name: Default
project_name: alt_demo
user_domain_name: Default
region_name: RegionOne
interface: public
auth_type: password
identity_api_version: 3
devstack-system-admin:
auth:
auth_url: http://xxx.xxx.xxx.xxx/identity
username: admin
password: password
user_domain_name: Default
system_scope: all
region_name: RegionOne
interface: public
auth_type: password
identity_api_version: 3
Functional 테스트 코드 작성
from openstack import exceptions as sdk_exc
from openstack.image.v2 import image as _image
from openstack.image.v2 import member as _member
from openstack.tests.functional.image.v2 import base
TEST_IMAGE_NAME = 'Test Image for Sharing'
MEMBER_STATUS_PENDING = 'pending'
MEMBER_STATUS_ACCEPTED = 'accepted'
class TestImageMember(base.BaseImageTest):
def setUp(self):
super().setUp()
# NOTE(jbeen): 1-byte dummy image data for sharing tests; not bootable.
self.image = self.operator_cloud.image.create_image(
name=TEST_IMAGE_NAME,
disk_format='raw',
container_format='bare',
visibility='shared',
data=b'0',
)
self.assertIsInstance(self.image, _image.Image)
self.assertEqual(TEST_IMAGE_NAME, self.image.name)
self.member_id = self.user_cloud.session.get_project_id()
self.assertIsNotNone(self.member_id)
def tearDown(self):
self.operator_cloud.image.delete_image(self.image)
self.operator_cloud.image.wait_for_delete(self.image)
super().tearDown()
def test_image_members(self):
# add member
member = self.operator_cloud.image.add_member(
image=self.image, member=self.member_id
)
self.assertIsInstance(member, _member.Member)
self.assertEqual(self.member_id, member.member_id)
self.assertEqual(MEMBER_STATUS_PENDING, member.status)
# get member
member = self.operator_cloud.image.get_member(
image=self.image, member=self.member_id
)
self.assertIsInstance(member, _member.Member)
self.assertEqual(self.member_id, member.member_id)
# list members
members = list(self.operator_cloud.image.members(image=self.image))
self.assertIn(self.member_id, {m.id for m in members})
# update member
member = self.user_cloud.image.update_member(
image=self.image,
member=self.member_id,
status=MEMBER_STATUS_ACCEPTED,
)
self.assertIsInstance(member, _member.Member)
self.assertEqual(self.member_id, member.member_id)
self.assertEqual(MEMBER_STATUS_ACCEPTED, member.status)
# remove member
self.operator_cloud.image.remove_member(
image=self.image, member=self.member_id
)
self.assertRaises(
sdk_exc.NotFoundException,
self.operator_cloud.image.get_member,
image=self.image,
member=self.member_id,
)
Functional 테스트 코드 실행
tox -e functional -- openstack.tests.functional.image.v2.test_member
pep8 체크
tox -e pep8 -- openstack/tests/functional/image/v2/test_member.py
Gerrit 업로드
jbeen@BOOK-7EAU0DUI0E:~/projects/OCA-OpenStack/openstacksdk$ git commit -s
[master 45195fa3d] tests: Add functional test for image members
1 file changed, 87 insertions(+)
create mode 100644 openstack/tests/functional/image/v2/test_member.py
jbeen@BOOK-7EAU0DUI0E:~/projects/OCA-OpenStack/openstacksdk$ git log
commit 26aed4c211ec9d12b6bbc782b8589da97d3842e4 (HEAD -> master)
Author: jbeen <jeongwon.been@gmail.com>
Date: Sun Aug 17 16:09:02 2025 +0900
tests: Add functional test for image members
Add a functional test for image member operations with admin and demo
contexts covering add, list, get, update to accepted and remove.
Change-Id: I242ea5295981b215a684ec6d39439c06fcf6f510
Signed-off-by: jbeen <jeongwon.been@gmail.com>
jbeen@BOOK-7EAU0DUI0E:~/projects/OCA-OpenStack/openstacksdk$ git review -t functional-test
remote:
remote: Processing changes: refs: 1, new: 1
remote: Processing changes: refs: 1, new: 1
remote: Processing changes: refs: 1, new: 1, done
remote:
remote: SUCCESS
remote:
remote: https://review.opendev.org/c/openstack/openstacksdk/+/957598 tests: Add functional test for image members [NEW]
remote:
To ssh://review.opendev.org:29418/openstack/openstacksdk.git
* [new reference] HEAD -> refs/for/master%topic=functional-test