# 4주차 과제 - 김소연(2)

**URL:** <https://forum.openinfra-kr.org/t/4-2/241>\
**Category:** 컨트리뷰션\
**Tags:** 2025컨트리뷰션, 컨트리뷰션\
**Created:** [8월 19, 2025, 5:44오후 UTC](https://forum.openinfra-kr.org/t/4-2/241 "2025-08-19T17:44:43Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![soni](https://forum.openinfra-kr.org/letter_avatar_proxy/v4/letter/s/a3d4f5/32.png) [@soni](https://forum.openinfra-kr.org/u/soni)\
**Post date:** [8월 19, 2025, 5:44오후 UTC](https://forum.openinfra-kr.org/t/4-2/241/1 "2025-08-19T17:44:43Z")

</div>

## openstack volume group CRUD functional test 구현하기

- path: `python-openstackclient/openstackclient/tests/functional/volume/v3/test_volume_group.py`

### test\_volume\_group.py

- 

```python
import time
import uuid

from openstackclient.tests.functional.volume.v3 import common

class VolumeTypeTests(common.BaseVolumeTests):
    """Functional tests for volume group."""

    # Create
    def test_volume_group_create_list(self):
        volume_group_type = uuid.uuid4().hex
        self.openstack('volume group type create ' + volume_group_type)

        volume_type = 'lvmdriver-1'

        name = uuid.uuid4().hex
        cmd_output = self.openstack(
            f'volume group create {volume_group_type} {volume_type} --name {name}',
            parse_output=True, 
        )

        self.assertEqual(name, cmd_output['Name'])

        # Read
        cmd_output = self.openstack('volume group list', parse_output=True)
        self.assertIn(name, [t['Name'] for t in cmd_output])

        #Update
        new_name = uuid.uuid4().hex
        md_output = self.openstack(
            f'volume group set {name} --name {new_name}',
            parse_output=True,
        )

        cmd_output = self.openstack('volume group list', parse_output=True)
        self.assertIn(new_name, [t['Name'] for t in cmd_output])

        # Delete
        self.addCleanup(
            self.openstack,
            'volume group type delete ' + volume_group_type,
        )

        self.addCleanup(
            self.openstack,
            'volume group delete ' + new_name,
        )

```

- volume group 삭제 후 volume group type 삭제(addCleaup은 역순으로 동작)

### openstack CLI 흐름

```bash
openstack volume group type create <volume_group_type>

----------------assertEqual()--------------------

openstack volume group create <volume_group_type> <volume_type> --name test1

openstack volume group list

----------------assertIn()--------------------

openstack volume group set test1 --name test2

openstack volume group list

----------------assertIn()--------------------

openstack volume group delete test2

openstack volume group type delete <volume_group_type>

```

### 인증 정보 변경

- clouds.yaml

```yaml
  devstack:
    auth:
      auth_url: http://180.210.83.106/identity
      project_name: admin
      project_domain_id: default
      username: admin
      user_domain_id: default
      password: <password>
    region_name: RegionOne
    volume_api_version: 3.14. # volume group cli 사용 위해 추가

```

- base.py

```python
ADMIN_CLOUD = os.environ.get('OS_ADMIN_CLOUD', 'devstack')

```

### functional test 실행 명령어

```bash
tox -e functional -- openstackclient.tests.functional.volume.v3.test_volume_group -v

```

### 실행 결과

 ![스크린샷 2025-08-20 오전 2.39.32](https://forum.openinfra-kr.org/uploads/default/original/1X/d65ede6ff5dff3fbd9f40e2c3a49bae730bfff69.png)
