File: test_devcenter_operations.py

package info (click to toggle)
python-azure 20250603%2Bgit-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 851,724 kB
  • sloc: python: 7,362,925; ansic: 804; javascript: 287; makefile: 195; sh: 145; xml: 109
file content (422 lines) | stat: -rw-r--r-- 18,079 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
# coding: utf-8
# -------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License.txt in the project root for
# license information.
# --------------------------------------------------------------------------
import functools
import os
import pytest
import logging
from devtools_testutils import AzureRecordedTestCase, PowerShellPreparer, recorded_by_proxy
from azure.identity import InteractiveBrowserCredential
from azure.identity import DefaultAzureCredential
from azure.developer.devcenter import DevCenterClient
from azure.developer.devcenter.models import DevBoxProvisioningState
from azure.developer.devcenter.models import OperationStatus
from testcase import DevcenterPowerShellPreparer
from datetime import timedelta


class TestDevcenter(AzureRecordedTestCase):
    def create_client(self, endpoint):
        credential = self.get_credential(DevCenterClient)
        return DevCenterClient(endpoint, credential=credential)

    @DevcenterPowerShellPreparer()
    @recorded_by_proxy
    def test_get_project(self, **kwargs):
        self.logger = logging.getLogger(__name__)
        endpoint = kwargs.pop("devcenter_endpoint")
        project_name = kwargs.pop("devcenter_project_name")

        client = self.create_client(endpoint)

        project = client.get_project(project_name)
        assert project is not None
        assert project.name == project_name

    @DevcenterPowerShellPreparer()
    @recorded_by_proxy
    def test_list_projects(self, **kwargs):
        self.logger = logging.getLogger(__name__)
        endpoint = kwargs.pop("devcenter_endpoint")
        project_name = kwargs.pop("devcenter_project_name")

        client = self.create_client(endpoint)

        projects = list(client.list_projects())
        assert projects is not None
        assert len(projects) == 1
        assert projects[0].name == project_name

    @DevcenterPowerShellPreparer()
    @recorded_by_proxy
    def test_get_pool(self, **kwargs):
        self.logger = logging.getLogger(__name__)
        endpoint = kwargs.pop("devcenter_endpoint")
        project_name = kwargs.pop("devcenter_project_name")
        pool_name = kwargs.pop("devcenter_pool_name")

        client = self.create_client(endpoint)

        pool_response = client.get_pool(project_name, pool_name)
        assert pool_response is not None
        assert pool_response.name == pool_name

    @DevcenterPowerShellPreparer()
    @recorded_by_proxy
    def test_get_pools(self, **kwargs):
        self.logger = logging.getLogger(__name__)
        endpoint = kwargs.pop("devcenter_endpoint")
        project_name = kwargs.pop("devcenter_project_name")
        pool_name = kwargs.pop("devcenter_pool_name")

        client = self.create_client(endpoint)

        pools_response = list(client.list_pools(project_name))
        assert pools_response is not None
        assert len(pools_response) == 1
        assert pools_response[0].name == pool_name

    @DevcenterPowerShellPreparer()
    @recorded_by_proxy
    def test_get_schedule(self, **kwargs):
        self.logger = logging.getLogger(__name__)
        endpoint = kwargs.pop("devcenter_endpoint")
        project_name = kwargs.pop("devcenter_project_name")
        pool_name = kwargs.pop("devcenter_pool_name")

        client = self.create_client(endpoint)

        # Schedule
        schedule_response = client.get_schedule(project_name, pool_name, "default")
        assert schedule_response is not None
        assert schedule_response.name == "default"

    @DevcenterPowerShellPreparer()
    @recorded_by_proxy
    def test_get_schedules(self, **kwargs):
        self.logger = logging.getLogger(__name__)
        endpoint = kwargs.pop("devcenter_endpoint")
        project_name = kwargs.pop("devcenter_project_name")
        pool_name = kwargs.pop("devcenter_pool_name")

        client = self.create_client(endpoint)

        # Schedules
        schedules_response = list(client.list_schedules(project_name, pool_name))
        assert schedules_response is not None
        assert len(schedules_response) == 1
        assert schedules_response[0].name == "default"

    @DevcenterPowerShellPreparer()
    @recorded_by_proxy
    def test_create_dev_box(self, **kwargs):
        self.logger = logging.getLogger(__name__)
        endpoint = kwargs.pop("devcenter_endpoint")
        project_name = kwargs.pop("devcenter_project_name")
        pool_name = kwargs.pop("devcenter_pool_name")
        user = kwargs.pop("devcenter_test_user_id")
        devbox_name = kwargs.pop("devcenter_devbox_name")

        client = self.create_client(endpoint)

        # Create DevBox
        create_devbox_response = client.begin_create_dev_box(project_name, user, devbox_name, {"poolName": pool_name})
        devbox_result = create_devbox_response.result()
        assert devbox_result is not None
        assert devbox_result.provisioning_state in [
            DevBoxProvisioningState.SUCCEEDED,
            DevBoxProvisioningState.PROVISIONED_WITH_WARNING,
        ]

    @DevcenterPowerShellPreparer()
    @recorded_by_proxy
    def test_dev_box_action(self, **kwargs):
        self.logger = logging.getLogger(__name__)
        endpoint = kwargs.pop("devcenter_endpoint")
        project_name = kwargs.pop("devcenter_project_name")
        devbox_name = kwargs.pop("devcenter_devbox_name")
        default_user = "me"

        client = self.create_client(endpoint)

        # Actions
        action_response = client.get_dev_box_action(project_name, default_user, devbox_name, "schedule-default")
        next_time_date = action_response.next.scheduled_time
        assert next_time_date is not None
        assert action_response.name == "schedule-default"

        actions_response = list(client.list_dev_box_actions(project_name, default_user, devbox_name))
        assert actions_response[0].name == action_response.name

        next_time_date = next_time_date + timedelta(hours=1)
        delay_all_response = list(
            client.delay_all_dev_box_actions(project_name, default_user, devbox_name, delay_until=next_time_date)
        )
        assert delay_all_response[0].action.next.scheduled_time == next_time_date

        # Failing with a 400 saying the date range isn't valid, even though the delay_all works just fine.
        next_time_date = next_time_date + timedelta(hours=1)
        delay_response = client.delay_dev_box_action(
            project_name, default_user, devbox_name, "schedule-default", delay_until=next_time_date
        )
        assert delay_response.next.scheduled_time == next_time_date

        client.skip_dev_box_action(project_name, default_user, devbox_name, "schedule-default")

    @DevcenterPowerShellPreparer()
    @recorded_by_proxy
    def test_get_dev_box(self, **kwargs):
        self.logger = logging.getLogger(__name__)
        endpoint = kwargs.pop("devcenter_endpoint")
        project_name = kwargs.pop("devcenter_project_name")
        devbox_name = kwargs.pop("devcenter_devbox_name")
        default_user = "me"

        client = self.create_client(endpoint)

        devbox_response = client.get_dev_box(project_name, default_user, devbox_name)
        assert devbox_response.name == devbox_name

    @DevcenterPowerShellPreparer()
    @recorded_by_proxy
    def test_list_dev_boxes(self, **kwargs):
        self.logger = logging.getLogger(__name__)
        endpoint = kwargs.pop("devcenter_endpoint")
        project_name = kwargs.pop("devcenter_project_name")
        devbox_name = kwargs.pop("devcenter_devbox_name")
        default_user = "me"

        client = self.create_client(endpoint)

        devboxes_response = client.list_dev_boxes(project_name, default_user)
        filtered_devbox_response = filter(lambda x: x.name == devbox_name, devboxes_response)
        assert len(list(filtered_devbox_response)) == 1

    @DevcenterPowerShellPreparer()
    @recorded_by_proxy
    def test_list_all_dev_boxes(self, **kwargs):
        self.logger = logging.getLogger(__name__)
        endpoint = kwargs.pop("devcenter_endpoint")
        project_name = kwargs.pop("devcenter_project_name")
        devbox_name = kwargs.pop("devcenter_devbox_name")
        default_user = "me"

        client = self.create_client(endpoint)

        devboxes_response = client.list_all_dev_boxes()
        filtered_devbox_response = filter(
            lambda x: x.name == devbox_name and x.project_name == project_name, devboxes_response
        )
        assert len(list(filtered_devbox_response)) == 1

    @DevcenterPowerShellPreparer()
    @recorded_by_proxy
    def test_list_all_dev_boxes_by_user(self, **kwargs):
        self.logger = logging.getLogger(__name__)
        endpoint = kwargs.pop("devcenter_endpoint")
        project_name = kwargs.pop("devcenter_project_name")
        devbox_name = kwargs.pop("devcenter_devbox_name")
        default_user = "me"

        client = self.create_client(endpoint)

        devboxes_response = client.list_all_dev_boxes_by_user(default_user)
        filtered_devbox_response = filter(
            lambda x: x.name == devbox_name and x.project_name == project_name, devboxes_response
        )
        assert len(list(filtered_devbox_response)) == 1

    @DevcenterPowerShellPreparer()
    @recorded_by_proxy
    def test_get_remote_connection(self, **kwargs):
        self.logger = logging.getLogger(__name__)
        endpoint = kwargs.pop("devcenter_endpoint")
        project_name = kwargs.pop("devcenter_project_name")
        devbox_name = kwargs.pop("devcenter_devbox_name")
        default_user = "me"

        client = self.create_client(endpoint)

        connection_response = client.get_remote_connection(project_name, default_user, devbox_name)
        assert connection_response.web_url is not None

    @DevcenterPowerShellPreparer()
    @recorded_by_proxy
    def test_restart_dev_box(self, **kwargs):
        self.logger = logging.getLogger(__name__)
        endpoint = kwargs.pop("devcenter_endpoint")
        project_name = kwargs.pop("devcenter_project_name")
        devbox_name = kwargs.pop("devcenter_devbox_name")
        default_user = "me"

        client = self.create_client(endpoint)

        restart_response = client.begin_restart_dev_box(project_name, default_user, devbox_name)
        restart_result = restart_response.result()
        assert restart_result.status == OperationStatus.SUCCEEDED

    @DevcenterPowerShellPreparer()
    @recorded_by_proxy
    def test_stop_start_delete_dev_box(self, **kwargs):
        self.logger = logging.getLogger(__name__)
        endpoint = kwargs.pop("devcenter_endpoint")
        project_name = kwargs.pop("devcenter_project_name")
        devbox_name = kwargs.pop("devcenter_devbox_name")
        default_user = "me"

        client = self.create_client(endpoint)

        stop_response = client.begin_stop_dev_box(project_name, default_user, devbox_name)
        stop_result = stop_response.result()
        assert stop_result.status == OperationStatus.SUCCEEDED

        start_response = client.begin_start_dev_box(project_name, default_user, devbox_name)
        start_result = start_response.result()
        assert start_result.status == OperationStatus.SUCCEEDED

        delete_response = client.begin_delete_dev_box(project_name, default_user, devbox_name)
        delete_result = delete_response.result()
        assert delete_result.status == OperationStatus.SUCCEEDED

    @DevcenterPowerShellPreparer()
    @recorded_by_proxy
    def test_get_catalog(self, **kwargs):
        self.logger = logging.getLogger(__name__)
        endpoint = kwargs.pop("devcenter_endpoint")
        project_name = kwargs.pop("devcenter_project_name")
        catalog_name = kwargs.pop("devcenter_catalog_name")

        client = self.create_client(endpoint)

        catalog_response = client.get_catalog(project_name, catalog_name)
        assert catalog_response.name == catalog_name

    @DevcenterPowerShellPreparer()
    @recorded_by_proxy
    def test_list_catalogs(self, **kwargs):
        self.logger = logging.getLogger(__name__)
        endpoint = kwargs.pop("devcenter_endpoint")
        project_name = kwargs.pop("devcenter_project_name")
        catalog_name = kwargs.pop("devcenter_catalog_name")

        client = self.create_client(endpoint)

        catalogs_response = client.list_catalogs(project_name)
        catalogs_response = list(catalogs_response)
        filtered_catalog_response = filter(lambda x: x.name == catalog_name, catalogs_response)
        filtered_catalog_response = list(filtered_catalog_response)
        assert len(filtered_catalog_response) == 1
        assert filtered_catalog_response[0].name == catalog_name

    @DevcenterPowerShellPreparer()
    @recorded_by_proxy
    def test_get_environment_definition(self, **kwargs):
        self.logger = logging.getLogger(__name__)
        endpoint = kwargs.pop("devcenter_endpoint")
        project_name = kwargs.pop("devcenter_project_name")
        catalog_name = kwargs.pop("devcenter_catalog_name")
        env_definition_name = kwargs.pop("devcenter_environment_definition_name")

        client = self.create_client(endpoint)

        env_definition_response = client.get_environment_definition(project_name, catalog_name, env_definition_name)
        assert env_definition_response.name == env_definition_name

    @DevcenterPowerShellPreparer()
    @recorded_by_proxy
    def test_list_environment_definitions(self, **kwargs):
        self.logger = logging.getLogger(__name__)
        endpoint = kwargs.pop("devcenter_endpoint")
        project_name = kwargs.pop("devcenter_project_name")
        env_definition_name = kwargs.pop("devcenter_environment_definition_name")

        client = self.create_client(endpoint)

        all_env_definition_response = client.list_environment_definitions(project_name)
        filtered_all_env_definition_response = filter(
            lambda x: x.name == env_definition_name, all_env_definition_response
        )
        filtered_all_env_definition_response = list(filtered_all_env_definition_response)
        assert (
            len(filtered_all_env_definition_response) == 1
            and filtered_all_env_definition_response[0].name == env_definition_name
        )

    @DevcenterPowerShellPreparer()
    @recorded_by_proxy
    def test_list_environment_definitions_by_catalog(self, **kwargs):
        self.logger = logging.getLogger(__name__)
        endpoint = kwargs.pop("devcenter_endpoint")
        project_name = kwargs.pop("devcenter_project_name")
        catalog_name = kwargs.pop("devcenter_catalog_name")
        env_definition_name = kwargs.pop("devcenter_environment_definition_name")

        client = self.create_client(endpoint)

        env_definitions_response = client.list_environment_definitions_by_catalog(project_name, catalog_name)
        filtered_env_definitions_response = filter(lambda x: x.name == env_definition_name, env_definitions_response)
        filtered_env_definitions_response = list(filtered_env_definitions_response)
        assert (
            len(filtered_env_definitions_response) == 1
            and filtered_env_definitions_response[0].name == env_definition_name
        )

    @DevcenterPowerShellPreparer()
    @recorded_by_proxy
    def test_list_environment_types(self, **kwargs):
        self.logger = logging.getLogger(__name__)
        endpoint = kwargs.pop("devcenter_endpoint")
        project_name = kwargs.pop("devcenter_project_name")
        environment_type_name = kwargs.pop("devcenter_environment_type_name")

        client = self.create_client(endpoint)

        env_types_response = client.list_environment_types(project_name)
        filtered_env_types_response = filter(lambda x: x.name == environment_type_name, env_types_response)
        filtered_env_types_response = list(filtered_env_types_response)
        assert len(filtered_env_types_response) == 1 and filtered_env_types_response[0].name == environment_type_name

    @DevcenterPowerShellPreparer()
    @recorded_by_proxy
    def test_environments(self, **kwargs):
        self.logger = logging.getLogger(__name__)
        endpoint = kwargs.pop("devcenter_endpoint")
        project_name = kwargs.pop("devcenter_project_name")
        environment_type_name = kwargs.pop("devcenter_environment_type_name")
        catalog_name = kwargs.pop("devcenter_catalog_name")
        env_definition_name = kwargs.pop("devcenter_environment_definition_name")
        env_name = kwargs.pop("devcenter_environment_name")
        default_user = "me"

        client = self.create_client(endpoint)

        environment = {
            "environmentType": environment_type_name,
            "catalogName": catalog_name,
            "environmentDefinitionName": env_definition_name,
        }
        create_env_response = client.begin_create_or_update_environment(
            project_name, default_user, env_name, environment
        )
        create_env_result = create_env_response.result()
        assert create_env_result.provisioning_state == DevBoxProvisioningState.SUCCEEDED

        env_response = client.get_environment(project_name, default_user, env_name)
        assert env_response.name == env_name

        envs_response = client.list_environments(project_name, default_user)
        envs_response = filter(lambda x: x.name == env_name, envs_response)
        envs_response = list(envs_response)
        assert len(envs_response) == 1 and envs_response[0].name == env_response.name

        all_envs_response = client.list_all_environments(project_name)
        all_envs_response = filter(lambda x: x.name == env_name, all_envs_response)
        all_envs_response = list(all_envs_response)
        assert len(all_envs_response) == 1 and all_envs_response[0].name == env_response.name

        delete_response = client.begin_delete_environment(project_name, default_user, env_name)
        delete_result = delete_response.result()
        assert delete_result.status == OperationStatus.SUCCEEDED