|
|
@@ -49,6 +49,26 @@ def check_res_code(res): |
|
|
|
print('Got status: %d, json: %s' % (res.status_code, res.json())) |
|
|
|
sys.exit(1) |
|
|
|
|
|
|
|
def makebool(s): |
|
|
|
s = s.lower() |
|
|
|
if s in { 'on', 'true', '1' }: |
|
|
|
return True |
|
|
|
elif s in { 'off', 'false', '0' }: |
|
|
|
return False |
|
|
|
|
|
|
|
raise ValueError('invalid value for bool: %s' % repr(s)) |
|
|
|
|
|
|
|
_typeconv = dict(power=makebool) |
|
|
|
def make_attrs(*args): |
|
|
|
'''Convert list of attributes to a dictionary.''' |
|
|
|
|
|
|
|
r = {} |
|
|
|
for i in args: |
|
|
|
k, v = i.split('=', 1) |
|
|
|
r[k] = _typeconv[k](v) |
|
|
|
|
|
|
|
return r |
|
|
|
|
|
|
|
async def real_main(): |
|
|
|
baseurl = os.environ['BITELAB_URL'] |
|
|
|
authkey = os.environ['BITELAB_AUTH'] |
|
|
@@ -74,6 +94,20 @@ async def real_main(): |
|
|
|
|
|
|
|
check_res_code(res) |
|
|
|
|
|
|
|
brd = Board.parse_obj(res.json()) |
|
|
|
print('Name:\t%s' % brd.name) |
|
|
|
print('Class:\t%s' % brd.brdclass) |
|
|
|
print('Attributes:') |
|
|
|
for i in sorted(brd.attrs): |
|
|
|
print('\t%s\t%s' % (i, brd.attrs[i])) |
|
|
|
elif sys.argv[1] == 'set': |
|
|
|
board_id = sys.argv[-1] |
|
|
|
res = await client.post('board/%s/attrs' % |
|
|
|
urllib.parse.quote(board_id, safe=''), |
|
|
|
auth=BiteAuth(authkey), json=make_attrs(*sys.argv[2:-1])) |
|
|
|
|
|
|
|
check_res_code(res) |
|
|
|
|
|
|
|
brd = Board.parse_obj(res.json()) |
|
|
|
print('Name:\t%s' % brd.name) |
|
|
|
print('Class:\t%s' % brd.brdclass) |
|
|
@@ -216,3 +250,42 @@ Attributes: |
|
|
|
ac.assert_called_with(base_url='http://someserver/') |
|
|
|
|
|
|
|
acp.assert_called_with('board/cora-z7s/release', auth=BiteAuth('thisisanapikey')) |
|
|
|
|
|
|
|
@patch.dict(sys.__dict__, dict(argv=[ '', 'set', 'power=on', 'cora-z7s' ])) |
|
|
|
def test_set(self): |
|
|
|
ac = self.ac |
|
|
|
acp = self.acp |
|
|
|
acp.return_value.status_code = HTTP_200_OK |
|
|
|
acp.return_value.json.return_value = Board(name='cora-1', |
|
|
|
brdclass='cora-z7s', reserved=True, |
|
|
|
attrs={ |
|
|
|
'ip': '172.20.20.5', |
|
|
|
'power': True, |
|
|
|
}).dict() |
|
|
|
|
|
|
|
ret, stdout = self.runMain() |
|
|
|
|
|
|
|
output = '''Name:\tcora-1 |
|
|
|
Class:\tcora-z7s |
|
|
|
Attributes: |
|
|
|
\tip\t172.20.20.5 |
|
|
|
\tpower\tTrue |
|
|
|
''' |
|
|
|
|
|
|
|
self.assertEqual(ret, 0) |
|
|
|
self.assertEqual(stdout, output) |
|
|
|
|
|
|
|
ac.assert_called_with(base_url='http://someserver/') |
|
|
|
|
|
|
|
acp.assert_called_with('board/cora-z7s/attrs', |
|
|
|
auth=BiteAuth('thisisanapikey'), json=dict(power=True)) |
|
|
|
|
|
|
|
def test_make_attrs(self): |
|
|
|
self.assertEqual(make_attrs('power=on'), dict(power=True)) |
|
|
|
self.assertEqual(make_attrs('power=True'), dict(power=True)) |
|
|
|
self.assertEqual(make_attrs('power=1'), dict(power=True)) |
|
|
|
self.assertEqual(make_attrs('power=off'), dict(power=False)) |
|
|
|
self.assertEqual(make_attrs('power=FALSE'), dict(power=False)) |
|
|
|
self.assertEqual(make_attrs('power=0'), dict(power=False)) |
|
|
|
|
|
|
|
self.assertRaises(ValueError, make_attrs, 'power=bar') |