Skip to content

Commit 0e3b4cd

Browse files
committed
chore(controller): modify clean ptype check
1 parent 97c944b commit 0e3b4cd

2 files changed

Lines changed: 29 additions & 3 deletions

File tree

rootfs/api/tests/test_build.py

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -351,7 +351,17 @@ def test_build_no_remove_process(self, mock_requests):
351351
self.assertEqual(response.status_code, 200, response.data)
352352
self.assertEqual(response.json()['structure'], {'web': 1, 'task': 1, 'worker': 1})
353353

354-
# clean worker
354+
# clean worker, repicas 1 not allow
355+
response = self.client.post('/v2/apps/{}/ptypes/clean'.format(app_id), {"ptypes": "task"})
356+
self.assertEqual(response.status_code, 400, response.data)
357+
358+
# scale task
359+
url = f"/v2/apps/{app_id}/ptypes/scale"
360+
body = {'task': 0}
361+
response = self.client.post(url, body)
362+
self.assertEqual(response.status_code, 204, response.data)
363+
364+
# clean worker, repicas 0 allow
355365
response = self.client.post('/v2/apps/{}/ptypes/clean'.format(app_id), {"ptypes": "task"})
356366
self.assertEqual(response.status_code, 204, response.data)
357367

@@ -361,8 +371,19 @@ def test_build_no_remove_process(self, mock_requests):
361371
self.assertEqual(response.status_code, 200, response.data)
362372
self.assertEqual(response.json()['structure'], {'web': 1, 'worker': 1})
363373

364-
# clean all worker
374+
# ptypes is a required field
365375
response = self.client.post('/v2/apps/{}/ptypes/clean'.format(app_id))
376+
self.assertEqual(response.status_code, 400, response.data)
377+
378+
url = f"/v2/apps/{app_id}/ptypes/scale"
379+
body = {'worker': 0}
380+
response = self.client.post(url, body)
381+
self.assertEqual(response.status_code, 204, response.data)
382+
383+
# clean worker
384+
response = self.client.post(
385+
'/v2/apps/{}/ptypes/clean'.format(app_id),
386+
{"ptypes": "worker"})
366387
self.assertEqual(response.status_code, 204, response.data)
367388

368389
# look at the app structure

rootfs/api/views.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -491,7 +491,12 @@ def clean(self, request, *args, **kwargs):
491491
app = self.get_app()
492492
ptypes = set(
493493
[ptype for ptype in request.data.get("ptypes", "").split(",") if ptype])
494-
ptypes = app.check_ptypes(ptypes)
494+
if not ptypes:
495+
raise DryccException("ptypes is a required field")
496+
latest_ptypes = [k for k, v in app.structure.items() if v != 0]
497+
not_allow = [ptype for ptype in ptypes if ptype in latest_ptypes]
498+
if not_allow:
499+
raise DryccException(f'ptype {",".join(not_allow)} should not garbage.')
495500
app.clean(ptypes=ptypes)
496501
return Response(status=status.HTTP_204_NO_CONTENT)
497502

0 commit comments

Comments
 (0)