Skip to content

Commit 0eccb0a

Browse files
committed
from unittest to pytest
1 parent d903aed commit 0eccb0a

File tree

3 files changed

+76
-192
lines changed

3 files changed

+76
-192
lines changed

scaleway/scaleway/instance/v1/custom_api.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import time
12
from typing import Optional, Dict, cast
23

34
from requests import Response
@@ -8,6 +9,8 @@
89
from .custom_marshalling import marshal_GetServerUserDataRequest
910
from .custom_types import GetServerUserDataRequest, GetAllServerUserDataResponse
1011

12+
max_retry = 10
13+
interval = 0.01
1114

1215
class InstanceUtilsV1API(InstanceV1API):
1316
"""
@@ -125,3 +128,16 @@ def set_all_server_user_data(
125128
)
126129

127130
return None
131+
132+
def wait_test_instance_server(self, server_id, zone):
133+
int = interval
134+
for i in range(1, max_retry):
135+
int *= i
136+
s = InstanceUtilsV1API.get_server(self, zone=zone, server_id=server_id)
137+
138+
if s.server.state == "running" or s.server.state == "stopped":
139+
return s
140+
141+
time.sleep(int)
142+
143+
return self._throw_on_error()
Lines changed: 60 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
import uuid
2-
import time
32
from typing import Generator
43

54
import pytest
65

6+
from scaleway.instance.v1.custom_api import InstanceUtilsV1API
7+
from scaleway_async.instance.v1 import AttachServerVolumeRequestVolumeType
78
from scaleway_core.client import Client
8-
from scaleway.instance.v1.api import InstanceV1API
99
from scaleway.instance.v1.types import VolumeVolumeType, BootType, Server, VolumeServerTemplate
10-
from scaleway.block.v1alpha1 import BlockV1Alpha1API, Volume
10+
from scaleway.block.v1alpha1 import BlockV1Alpha1API
1111
from scaleway.block.v1alpha1.types import Volume, CreateVolumeRequestFromEmpty
1212
from vcr_config import scw_vcr
1313

@@ -18,52 +18,28 @@
1818
commercial_type = "DEV1-S"
1919
zone = "fr-par-1"
2020

21-
22-
@pytest.fixture
21+
@pytest.fixture(scope="module")
2322
@scw_vcr.use_cassette
24-
def apis() -> Generator[tuple[InstanceV1API, BlockV1Alpha1API, str, Server | None, list[Volume]], None, None]:
23+
def instance_block_api() -> tuple[InstanceUtilsV1API, BlockV1Alpha1API]:
2524
client = Client.from_config_file_and_env()
26-
instanceAPI = InstanceV1API(client, bypass_validation=True)
27-
blockAPI = BlockV1Alpha1API(client, bypass_validation=True)
28-
29-
created_server: Server | None = None
30-
created_volumes: list[Volume] = []
31-
32-
yield instanceAPI, blockAPI, zone, created_server, created_volumes
33-
34-
for volume in created_volumes:
35-
if created_server:
36-
instanceAPI.detach_server_volume(
37-
server_id=created_server.id, volume_id=volume.id
38-
)
39-
blockAPI.wait_for_volume(volume_id=volume.id, zone=zone)
40-
wait_test_instance_server(instanceAPI, created_server.id, zone)
41-
blockAPI.delete_volume(volume_id=volume.id)
42-
43-
if created_server:
44-
instanceAPI.delete_server(zone=zone, server_id=created_server.id)
45-
46-
@scw_vcr.use_cassette
47-
def wait_test_instance_server(instanceAPI: InstanceV1API, server_id: str, zone: str) -> Server:
48-
delay = interval
49-
for i in range(1, max_retry):
50-
delay *= i
51-
s = instanceAPI.get_server(zone=zone, server_id=server_id)
52-
if s.server.state in ("running", "stopped"):
53-
return s.server
54-
time.sleep(delay)
55-
pytest.fail("Server did not reach 'running' or 'stopped' state in time.")
25+
instance_api = InstanceUtilsV1API(client)
26+
block_api = BlockV1Alpha1API(client)
27+
return instance_api, block_api
5628

29+
@pytest.fixture(scope="module")
5730
@scw_vcr.use_cassette
58-
def create_test_instance_server(instanceAPI: InstanceV1API, zone: str) -> Server:
31+
def instance_volume(instance_block_api: tuple[InstanceUtilsV1API, BlockV1Alpha1API]) -> Generator[
32+
tuple[Server | None, list[Volume]], None, None]:
33+
instance_api, block_api = instance_block_api
34+
volumes_list: list[Volume] = []
5935
volumes = {
6036
"0": VolumeServerTemplate(
6137
volume_type=VolumeVolumeType.L_SSD,
6238
size=volume_size,
6339
boot=False,
6440
)
6541
}
66-
server = instanceAPI._create_server(
42+
instance = instance_api._create_server(
6743
commercial_type=commercial_type,
6844
zone=zone,
6945
name=server_name,
@@ -73,47 +49,60 @@ def create_test_instance_server(instanceAPI: InstanceV1API, zone: str) -> Server
7349
boot_type=BootType.LOCAL,
7450
image="c00ae53c-1e29-4087-a384-47f3c5c1cd84",
7551
)
76-
wait_test_instance_server(instanceAPI, server.server.id, zone)
77-
return server.server
78-
79-
@scw_vcr.use_cassette
80-
def create_test_from_empty_volume(blockAPI: BlockV1Alpha1API, number: int, zone: str) -> list[Volume]:
81-
volumes: list[Volume] = []
82-
for _ in range(number):
83-
volume = blockAPI.create_volume(
84-
from_empty=CreateVolumeRequestFromEmpty(size=1_000_000_000),
85-
)
86-
blockAPI.wait_for_volume(volume_id=volume.id, zone=zone)
87-
volumes.append(volume)
88-
return volumes
52+
instance_api.wait_test_instance_server(instance.server.id, zone=zone)
53+
yield instance.server, volumes_list
54+
for volume in volumes_list:
55+
instance_api.detach_server_volume(server_id=instance.server.id, volume_id=volume.id, zone=zone)
56+
block_api.wait_for_volume(volume_id=volume.id, zone=zone)
57+
block_api.delete_volume(volume_id=volume.id, zone=zone)
58+
instance_api.delete_server(server_id=instance.server.id, zone=zone)
8959

9060
@scw_vcr.use_cassette
91-
def test_attach_additional_volume(apis):
92-
instanceAPI, blockAPI, zone, created_server, created_volumes = apis
61+
def test_attach_additionnal_volume(instance_block_api: tuple[InstanceUtilsV1API, BlockV1Alpha1API], instance_volume: tuple[Server, list[Volume]]) -> None:
62+
instance_api, block_api = instance_block_api
63+
server, volumes_list = instance_volume
64+
additional_volume = block_api.create_volume(
65+
from_empty=CreateVolumeRequestFromEmpty(size=volume_size),
66+
)
67+
updated_volume = block_api.wait_for_volume(volume_id=additional_volume.id, zone=zone)
68+
volumes_list.append(updated_volume)
69+
assert updated_volume.size == volume_size
70+
assert updated_volume.id is not None
9371

94-
server = create_test_instance_server(instanceAPI, zone)
72+
instance_api.attach_server_volume(server_id=server.id, volume_id=additional_volume.id, zone=zone, volume_type=AttachServerVolumeRequestVolumeType.SBS_VOLUME)
73+
instance_api.wait_test_instance_server(server_id=server.id, zone=zone)
74+
block_api.wait_for_volume(volume_id=additional_volume.id, zone=zone)
9575

96-
additional_volumes = create_test_from_empty_volume(blockAPI, 1, zone)
97-
created_volumes.extend(additional_volumes)
76+
server_details = instance_api.get_server(server_id=server.id, zone=zone).server
77+
attached_volume_ids = [v.id for v in server_details.volumes.values()]
78+
assert additional_volume.id in attached_volume_ids
9879

99-
additional_volume = additional_volumes[0]
80+
@scw_vcr.use_cassette
81+
def test_list_server(instance_block_api: tuple[InstanceUtilsV1API, BlockV1Alpha1API]) -> None:
82+
instance_api, block_api = instance_block_api
83+
servers = instance_api.list_servers(zone=zone)
84+
assert len(servers.servers) == 1
85+
assert servers.servers[0].name == server_name
10086

101-
assert server.id is not None
102-
assert server.zone == zone
87+
@scw_vcr.use_cassette
88+
def test_create_new_server(instance_block_api: tuple[InstanceUtilsV1API, BlockV1Alpha1API]) -> None:
89+
instance_api, block_api = instance_block_api
90+
server = instance_api._create_server(
91+
commercial_type=commercial_type,
92+
zone=zone,
93+
name=server_name,
94+
dynamic_ip_required=False,
95+
volumes={},
96+
protected=False,
97+
boot_type=BootType.LOCAL,
98+
)
99+
assert server.server.id is not None
100+
assert server.server.name == server_name
103101

104-
assert additional_volume.id is not None
105-
assert additional_volume.size == 1_000_000_000
102+
servers = instance_api.list_servers(zone=zone)
103+
assert len(servers.servers) == 2
106104

107-
instanceAPI.attach_server_volume(
108-
server_id=server.id,
109-
volume_id=additional_volume.id,
110-
volume_type=VolumeVolumeType.SBS_VOLUME,
111-
)
105+
instance_api.delete_server(server_id=server.server.id, zone=zone)
112106

113-
blockAPI.wait_for_volume(volume_id=additional_volume.id, zone=zone)
114107

115-
updated_server = instanceAPI.get_server(zone=zone, server_id=server.id)
116-
attached_volumes = updated_server.server.volumes or {}
117-
attached_volume_ids = [v.id for v in attached_volumes.values()]
118108

119-
assert additional_volume.id in attached_volume_ids

scaleway/tests/test_instance.py

Lines changed: 0 additions & 121 deletions
This file was deleted.

0 commit comments

Comments
 (0)