def test_clear_local_image(self): for slot in range(self.num_slots): # Test clearing already cleared self.fpga_clear_local_image(slot) (rc, stdout, stderr) = self.run_cmd("sudo fpga-clear-local-image -S {}".format(slot), echo=True) assert len(stdout) == 3 assert len(stderr) == 1 assert stdout[0] == 'AFI {} none cleared 1 ok 0 {}'.format(slot, self.shell_version) assert stdout[1] == 'AFIDEVICE {} 0x1d0f 0x1042 {}'.format(slot, self.slot2device[slot]) # -A (async) (rc, stdout, stderr) = self.run_cmd("sudo fpga-clear-local-image -S {} -A".format(slot), echo=True) assert len(stdout) == 1 assert len(stderr) == 1 # Clear again immediately. It should fail because busy (rc, stdout, stderr) = self.run_cmd("sudo fpga-clear-local-image -S {} -A".format(slot), echo=True, check=False) assert rc != 0 assert len(stdout) == 2 assert len(stderr) == 1 assert stdout[0] == 'Error: (3) busy' # Poll for cleared while True: fpgaLocalImage = aws_fpga_test_utils.fpga_describe_local_image(slot) logger.info('status={}'.format(fpgaLocalImage.statusName)) if fpgaLocalImage.statusName != 'cleared': time.sleep(1) continue (rc, stdout, stderr) = self.run_cmd("sudo fpga-describe-local-image -S {}".format(slot), echo=True) assert len(stdout) == 3 assert len(stderr) == 1 assert stdout[0] == 'AFI {} none cleared 1 ok 0 {}'.format(slot, self.shell_version) assert stdout[1] == 'AFIDEVICE {} 0x1d0f 0x1042 {}'.format(slot, self.slot2device[slot]) break
def check_fpga_afi_loaded(agfi, slot): fpgaLocalImage = aws_fpga_test_utils.fpga_describe_local_image(slot) assert fpgaLocalImage.statusName == 'loaded', "{} FPGA StatusName != loaded: {}".format(agfi, fpgaLocalImage.statusName) assert fpgaLocalImage.statusCode == '0', "{} status code != 0: {}".format(agfi, fpgaLocalImage.statusCode) assert fpgaLocalImage.errorName == 'ok', "{} FPGA ErrorName != ok: {}".format(agfi, fpgaLocalImage.ErrorName) assert fpgaLocalImage.errorCode == '0', "{} ErrorCode != 0: {}".format(agfi, fpgaLocalImage.errorCode) assert fpgaLocalImage.agfi == agfi, "Expected {}, actual {}".format(agfi, fpgaLocalImage.agfi) return fpgaLocalImage
def test_load_local_image(self): for slot in range(self.num_slots): (rc, stdout, stderr) = self.run_cmd("sudo fpga-load-local-image -S {} -I {}".format(slot, self.cl_hello_world_agfi), echo=True) assert len(stdout) == 3 assert len(stderr) == 1 assert stdout[0] == "AFI {} {} loaded 0 ok 0 {}".format(slot, self.cl_hello_world_agfi, self.shell_version) assert stdout[1] == 'AFIDEVICE {} 0x1d0f 0xf000 {}'.format(slot, self.slot2device[slot]) self.fpga_clear_local_image(slot) # -A (rc, stdout, stderr) = self.run_cmd("sudo fpga-load-local-image -S {} -I {} -A".format(slot, self.cl_hello_world_agfi), echo=True) assert len(stdout) == 1 assert len(stderr) == 1 # Poll for it to be loaded while True: fpgaLocalImage = aws_fpga_test_utils.fpga_describe_local_image(slot) logger.info('status={}'.format(fpgaLocalImage.statusName)) if fpgaLocalImage.statusName != 'loaded': time.sleep(1) continue (rc, stdout, stderr) = self.run_cmd("sudo fpga-describe-local-image -S {}".format(slot), echo=True) assert len(stdout) == 3 assert len(stderr) == 1 assert stdout[0] == "AFI {} {} loaded 0 ok 0 {}".format(slot, self.cl_hello_world_agfi, self.shell_version) assert stdout[1] == 'AFIDEVICE {} 0x1d0f 0xf000 {}'.format(slot, self.slot2device[slot]) break self.fpga_clear_local_image(slot) # -H (rc, stdout, stderr) = self.run_cmd("sudo fpga-load-local-image -S {} -I {} -H".format(slot, self.cl_hello_world_agfi), echo=True) assert len(stdout) == 5 assert len(stderr) == 1 assert stdout[0] == 'Type FpgaImageSlot FpgaImageId StatusName StatusCode ErrorName ErrorCode ShVersion' assert stdout[1] == "AFI {} {} loaded 0 ok 0 {}".format(slot, self.cl_hello_world_agfi, self.shell_version) assert stdout[2] == 'Type FpgaImageSlot VendorId DeviceId DBDF' assert stdout[3] == 'AFIDEVICE {} 0x1d0f 0xf000 {}'.format(slot, self.slot2device[slot]) self.fpga_clear_local_image(slot) # -F (rc, stdout, stderr) = self.run_cmd("sudo fpga-load-local-image -S {} -I {} -F".format(slot, self.cl_hello_world_agfi), echo=True) assert len(stdout) == 3 assert len(stderr) == 1 assert stdout[0] == "AFI {} {} loaded 0 ok 0 {}".format(slot, self.cl_hello_world_agfi, self.shell_version) assert stdout[1] == 'AFIDEVICE {} 0x1d0f 0xf000 {}'.format(slot, self.slot2device[slot]) self.fpga_clear_local_image(slot)