def test_unload(self): "Test unload of architecture" interface = Interface() retMsg = interface.load({'filepath':TEST_ARCH_PATH}) self.assertEqual(retMsg,{'status':True}) retMsg = interface.unload() self.assertEqual(retMsg,{'status':True})
def test_parse_command(self): "Test API parse" interface = Interface() retMsg = interface.parse_command({}) self.assertEqual(retMsg,{}) # load retMsg = interface.parse_command({ 'load' : { 'filepath' : TEST_ARCH_PATH } }) self.assertEqual(retMsg,{'status':True}) # step retMsg = interface.parse_command({ 'step' : { 'type' : 'logic' } }) self.assertEqual(retMsg,{'status':True}) # reset retMsg = interface.parse_command({'reset':{}}) self.assertEqual(retMsg,{'status':True}) # program retMsg = interface.parse_command({ 'program' : { 'filepath':TEST_PROGRAM_PATH,'memory':'memory' } }) self.assertTrue(retMsg['memory']['success']) # inspect retMsg = interface.parse_command({'inspect':['q']}) self.assertIn('q',retMsg) # unload retMsg = interface.parse_command({'unload':{}}) self.assertEqual(retMsg,{'status':True}) # assemble retMsg = interface.parse_command({ 'assemble' : { 'filepath':TEST_ASSEMBLE_PATH } }) self.assertEqual(retMsg['errors'],'')
def test_program(self): "Test program function for a valid architecture" interface = Interface() retMsg = interface.load({'filepath':TEST_ARCH_PATH}) self.assertEqual(retMsg,{'status':True}) retMsg = interface.handle_component_msg({'inspect':['memory']}) self.assertEqual(len(retMsg['memory']['state']),0) retMsg = interface.program({'filepath':TEST_PROGRAM_PATH,'memory':'memory'}) self.assertTrue(retMsg['memory']['success']) retMsg = interface.handle_component_msg({'inspect':['memory']}) self.assertNotEqual(len(retMsg['memory']['state']),0)
def test_step(self): "Test architecture clock step" interface = Interface() retMsg = interface.load({'filepath':TEST_ARCH_PATH}) self.assertEqual(retMsg,{'status':True}) retMsg = interface.handle_component_msg({'inspect':['q']}) value_1 = retMsg['q']['state'] retMsg = interface.step({'type':'logic'}) self.assertEqual(retMsg,({'status':True})) retMsg = interface.handle_component_msg({'inspect':['q']}) value_2 = retMsg['q']['state'] self.assertNotEqual(value_1,value_2)
def test_assemble(self): "Test assemble (requires GCC)" interface = Interface() retMsg = interface.assemble({'filepath':TEST_ASSEMBLE_PATH}) self.assertEqual(retMsg['errors'],'')
def test_constructor(self): "Standard test for constructor" interface = Interface()
def test_handle_component_msg(self): "Test architecture hook API router" interface = Interface() retMsg = interface.load({'filepath':TEST_ARCH_PATH}) self.assertEqual(retMsg,{'status':True}) retMsg = interface.handle_component_msg({'inspect':['q']}) self.assertIn('q',retMsg) retMsg = interface.handle_component_msg({ 'modify' : { 'name' : 'memory', 'parameters' : { 'start' : 0, 'data' : [10,20,30,40,50,60,70,80] } } }) self.assertTrue(retMsg['memory']['success']) retMsg = interface.handle_component_msg({'inspect':['memory']}) self.assertEqual(retMsg['memory']['state'][7],80) retMsg = interface.handle_component_msg({'clear' : ['memory']}) self.assertTrue(retMsg['memory']['success']) retMsg = interface.handle_component_msg({'inspect':['memory']}) self.assertEqual(len(retMsg['memory']['state']),0) retMsg = interface.handle_component_msg({'inspect':['const']}) value_1 = retMsg['const']['state'] retMsg = interface.handle_component_msg({ 'generate' : { 'name' : 'const', 'parameters' : { 'state' : value_1 + 1 } } }) self.assertTrue(retMsg['const']['success']) retMsg = interface.handle_component_msg({'inspect':['const']}) value_2 = retMsg['const']['state'] self.assertNotEqual(value_1,value_2)
if __name__ == "__main__": isAlex = False # You're probably not Alex so we won't us sentry if len(sys.argv) > 1: port = int(sys.argv[1]) else: port = DEFAULT_HOST_PORT if isAlex: from sentry.sentry import initialize_sentry client = initialize_sentry() try: interface = Interface() async def api_call(websocket, path): async for message in websocket: try: msg = json.loads(message.replace("\\", "/")) retMsg = interface.parse_command(msg) rxStr = json.dumps(retMsg) await websocket.send(rxStr) except Exception as e: await websocket.send( json.dumps({ 'status': False, 'error': 'cannot parse JSON message: {}'.format(str(e))