Skip to content

Commit fcc8ecd

Browse files
committed
Fix: Include slave_id when moving tasks
Send an empty slave_id for the master by default and reject explicit None instead of omitting the required attribute. Cover default, master, slave, and invalid values in request and client tests. Commit generated using the `pi` coding agent harness (model: openai-codex/gpt-6-sol).
1 parent c5e320f commit fcc8ecd

7 files changed

Lines changed: 62 additions & 17 deletions

File tree

‎gvm/protocols/gmp/_gmp224.py‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3926,13 +3926,14 @@ def modify_task(
39263926
)
39273927

39283928
def move_task(
3929-
self, task_id: EntityID, *, slave_id: EntityID | None = None
3929+
self, task_id: EntityID, *, slave_id: EntityID = ""
39303930
) -> T:
39313931
"""Move an existing task to another GMP slave scanner or the master
39323932
39333933
Args:
39343934
task_id: UUID of the task to be moved
3935-
slave_id: UUID of the sensor to reassign the task to, empty for master.
3935+
slave_id: UUID of the sensor to reassign the task to. Defaults to
3936+
an empty string, which selects the master.
39363937
"""
39373938
return self._send_request_and_transform_response(
39383939
Tasks.move_task(task_id, slave_id=slave_id)

‎gvm/protocols/gmp/_gmpnext.py‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -958,13 +958,14 @@ def modify_task(
958958
)
959959

960960
def move_task(
961-
self, task_id: EntityID, *, slave_id: EntityID | None = None
961+
self, task_id: EntityID, *, slave_id: EntityID = ""
962962
) -> T:
963963
"""Move an existing task to another GMP slave scanner or the master
964964
965965
Args:
966966
task_id: UUID of the task to be moved
967-
slave_id: UUID of the sensor to reassign the task to, empty for master.
967+
slave_id: UUID of the sensor to reassign the task to. Defaults to
968+
an empty string, which selects the master.
968969
"""
969970
return self._send_request_and_transform_response(
970971
Tasks.move_task(

‎gvm/protocols/gmp/requests/next/_tasks.py‎

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -695,24 +695,27 @@ def modify_task(
695695

696696
@classmethod
697697
def move_task(
698-
cls, task_id: EntityID, *, slave_id: EntityID | None = None
698+
cls, task_id: EntityID, *, slave_id: EntityID = ""
699699
) -> Request:
700700
"""Move an existing task to another GMP slave scanner or the master
701701
702702
Args:
703703
task_id: UUID of the task to be moved
704-
slave_id: UUID of the sensor to reassign the task to, empty for master.
704+
slave_id: UUID of the sensor to reassign the task to. Defaults to
705+
an empty string, which selects the master.
705706
"""
706707
if not task_id:
707708
raise RequiredArgument(
708709
function=cls.move_task.__name__, argument="task_id"
709710
)
711+
if slave_id is None:
712+
raise RequiredArgument(
713+
function=cls.move_task.__name__, argument="slave_id"
714+
)
710715

711716
cmd = XmlCommand("move_task")
712717
cmd.set_attribute("task_id", str(task_id))
713-
714-
if slave_id is not None:
715-
cmd.set_attribute("slave_id", str(slave_id))
718+
cmd.set_attribute("slave_id", str(slave_id))
716719

717720
return cmd
718721

‎gvm/protocols/gmp/requests/v224/_tasks.py‎

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -354,24 +354,27 @@ def modify_task(
354354

355355
@classmethod
356356
def move_task(
357-
cls, task_id: EntityID, *, slave_id: EntityID | None = None
357+
cls, task_id: EntityID, *, slave_id: EntityID = ""
358358
) -> Request:
359359
"""Move an existing task to another GMP slave scanner or the master
360360
361361
Args:
362362
task_id: UUID of the task to be moved
363-
slave_id: UUID of the sensor to reassign the task to, empty for master.
363+
slave_id: UUID of the sensor to reassign the task to. Defaults to
364+
an empty string, which selects the master.
364365
"""
365366
if not task_id:
366367
raise RequiredArgument(
367368
function=cls.move_task.__name__, argument="task_id"
368369
)
370+
if slave_id is None:
371+
raise RequiredArgument(
372+
function=cls.move_task.__name__, argument="slave_id"
373+
)
369374

370375
cmd = XmlCommand("move_task")
371376
cmd.set_attribute("task_id", str(task_id))
372-
373-
if slave_id is not None:
374-
cmd.set_attribute("slave_id", str(slave_id))
377+
cmd.set_attribute("slave_id", str(slave_id))
375378

376379
return cmd
377380

‎tests/protocols/gmp/requests/v224/test_tasks.py‎

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -664,7 +664,14 @@ def test_move_task(self):
664664
request = Tasks().move_task("task_id")
665665
self.assertEqual(
666666
bytes(request),
667-
b'<move_task task_id="task_id"/>',
667+
b'<move_task task_id="task_id" slave_id=""/>',
668+
)
669+
670+
def test_move_task_to_master(self):
671+
request = Tasks().move_task("task_id", slave_id="")
672+
self.assertEqual(
673+
bytes(request),
674+
b'<move_task task_id="task_id" slave_id=""/>',
668675
)
669676

670677
def test_move_task_with_slave_id(self):
@@ -681,6 +688,10 @@ def test_move_task_missing_task_id(self):
681688
with self.assertRaises(RequiredArgument):
682689
Tasks().move_task(None)
683690

691+
def test_move_task_none_slave_id(self):
692+
with self.assertRaises(RequiredArgument):
693+
Tasks().move_task("task_id", slave_id=None)
694+
684695
def test_start_task(self):
685696
request = Tasks().start_task("task_id")
686697
self.assertEqual(

‎tests/protocols/gmpnext/entities/tasks/test_move_task.py‎

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,16 @@ class GmpMoveTaskTestMixin:
1010
def test_move_task(self):
1111
self.gmp.move_task("a1")
1212

13-
self.connection.send.has_been_called_with(b'<move_task task_id="a1"/>')
13+
self.connection.send.has_been_called_with(
14+
b'<move_task task_id="a1" slave_id=""/>'
15+
)
16+
17+
def test_move_task_to_master(self):
18+
self.gmp.move_task("a1", slave_id="")
19+
20+
self.connection.send.has_been_called_with(
21+
b'<move_task task_id="a1" slave_id=""/>'
22+
)
1423

1524
def test_move_task_to_slave(self):
1625
self.gmp.move_task("a1", slave_id="s1")
@@ -25,3 +34,7 @@ def test_missing_id(self):
2534

2635
with self.assertRaises(GvmError):
2736
self.gmp.move_task("")
37+
38+
def test_none_slave_id(self):
39+
with self.assertRaises(GvmError):
40+
self.gmp.move_task("a1", slave_id=None)

‎tests/protocols/gmpv224/entities/tasks/test_move_task.py‎

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,16 @@ class GmpMoveTaskTestMixin:
1010
def test_move_task(self):
1111
self.gmp.move_task("a1")
1212

13-
self.connection.send.has_been_called_with(b'<move_task task_id="a1"/>')
13+
self.connection.send.has_been_called_with(
14+
b'<move_task task_id="a1" slave_id=""/>'
15+
)
16+
17+
def test_move_task_to_master(self):
18+
self.gmp.move_task("a1", slave_id="")
19+
20+
self.connection.send.has_been_called_with(
21+
b'<move_task task_id="a1" slave_id=""/>'
22+
)
1423

1524
def test_move_task_to_slave(self):
1625
self.gmp.move_task("a1", slave_id="s1")
@@ -25,3 +34,7 @@ def test_missing_id(self):
2534

2635
with self.assertRaises(GvmError):
2736
self.gmp.move_task("")
37+
38+
def test_none_slave_id(self):
39+
with self.assertRaises(GvmError):
40+
self.gmp.move_task("a1", slave_id=None)

0 commit comments

Comments
 (0)