| @@ -436,6 +436,8 @@ async def release_board(board_id, user: str = Depends(lookup_user), | |||||
| board=Board.from_orm(brd)), | board=Board.from_orm(brd)), | ||||
| ) | ) | ||||
| await brd.deactivate() | |||||
| env = os.environ.copy() | env = os.environ.copy() | ||||
| addkeys = { 'iface', 'ip', 'devfsrule', 'devfspath' } | addkeys = { 'iface', 'ip', 'devfsrule', 'devfspath' } | ||||
| env.update((k, brd.attrs[k]) for k in addkeys if k in brd.attrs) | env.update((k, brd.attrs[k]) for k in addkeys if k in brd.attrs) | ||||
| @@ -608,10 +610,11 @@ class TestBiteLab(unittest.IsolatedAsyncioTestCase): | |||||
| self.assertEqual(res.json(), { 'cora-z7s': BoardClassInfo(**{ | self.assertEqual(res.json(), { 'cora-z7s': BoardClassInfo(**{ | ||||
| 'arch': 'arm-armv7', 'clsname': 'cora-z7s', }) }) | 'arch': 'arm-armv7', 'clsname': 'cora-z7s', }) }) | ||||
| @patch('bitelab.BoardImpl.deactivate') | |||||
| @patch('asyncio.create_subprocess_exec') | @patch('asyncio.create_subprocess_exec') | ||||
| @patch('bitelab.snmp.snmpget') | @patch('bitelab.snmp.snmpget') | ||||
| @patch('logging.error') | @patch('logging.error') | ||||
| async def test_board_release_script_fail(self, le, sg, cse): | |||||
| async def test_board_release_script_fail(self, le, sg, cse, bideact): | |||||
| # that when snmpget returns False | # that when snmpget returns False | ||||
| sg.return_value = False | sg.return_value = False | ||||
| @@ -655,10 +658,11 @@ class TestBiteLab(unittest.IsolatedAsyncioTestCase): | |||||
| # and that the error got logged | # and that the error got logged | ||||
| le.assert_called_with('release script failure: board: \'cora-1\', ret: 1, stderr: b\'error\'') | le.assert_called_with('release script failure: board: \'cora-1\', ret: 1, stderr: b\'error\'') | ||||
| @patch('bitelab.BoardImpl.deactivate') | |||||
| @patch('bitelab.BoardImpl.activate') | @patch('bitelab.BoardImpl.activate') | ||||
| @patch('asyncio.create_subprocess_exec') | @patch('asyncio.create_subprocess_exec') | ||||
| @patch('bitelab.snmp.snmpget') | @patch('bitelab.snmp.snmpget') | ||||
| async def test_board_reserve_release(self, sg, cse, biact): | |||||
| async def test_board_reserve_release(self, sg, cse, biact, bideact): | |||||
| # that when releasing a board that is not yet reserved | # that when releasing a board that is not yet reserved | ||||
| res = await self.client.post('/board/cora-1/release', | res = await self.client.post('/board/cora-1/release', | ||||
| auth=BiteAuth('anotherlongapikey')) | auth=BiteAuth('anotherlongapikey')) | ||||
| @@ -786,6 +790,9 @@ class TestBiteLab(unittest.IsolatedAsyncioTestCase): | |||||
| 'cora-1', 'foo', env=env, | 'cora-1', 'foo', env=env, | ||||
| stdout=subprocess.PIPE, stderr=subprocess.PIPE) | stdout=subprocess.PIPE, stderr=subprocess.PIPE) | ||||
| # and deactivated attributes | |||||
| bideact.assert_called() | |||||
| # that it can be reserved by a different user | # that it can be reserved by a different user | ||||
| res = await self.client.post('/board/cora-1/reserve', | res = await self.client.post('/board/cora-1/reserve', | ||||
| auth=BiteAuth('anotherlongapikey')) | auth=BiteAuth('anotherlongapikey')) | ||||