def test_write_single_field(self): """ Write a single field to the eeprom file. """ done = {} def read(data): """ Read dummy. """ if data["bank"] == 1: done['read1'] = True return {"data": "\xff" * 256} else: raise Exception("Wrong page") def write(data): """ Write dummy. """ self.assertEquals(1, data["bank"]) self.assertEquals(2, data["address"]) self.assertEquals("abc", data["data"]) done['write'] = True communicator = MasterCommunicator(read, write) eeprom_file = EepromFile(communicator) eeprom_file.write([EepromData(EepromAddress(1, 2, 3), "abc")]) self.assertTrue('read1' in done) self.assertTrue('write' in done)
def test_write_single_field(self): """ Write a single field to the eeprom file. """ done = {} def read(data): """ Read dummy. """ if data["bank"] == 1: done['read1'] = True return {"data": "\xff" * 256} else: raise Exception("Wrong page") def write(data): """ Write dummy. """ self.assertEquals(1, data["bank"]) self.assertEquals(2, data["address"]) self.assertEquals("abc", data["data"]) done['write'] = True communicator = MasterCommunicator(read, write) eeprom_file = EepromFile(communicator) eeprom_file.write([EepromData(EepromAddress(1, 2, 3), "abc")]) self.assertTrue('read1' in done) self.assertTrue('write' in done)
def test_write_multiple_fields(self): """ Test writing multiple fields to the eeprom file. """ done = {} def read(data): """ Read dummy. """ if data["bank"] == 1: done['read1'] = True return {"data": "\xff" * 256} elif data["bank"] == 2: done['read2'] = True return {"data": "\x00" * 256} else: raise Exception("Wrong page") def write(data): """ Write dummy. """ if 'write1' not in done: done['write1'] = True self.assertEquals(1, data["bank"]) self.assertEquals(2, data["address"]) self.assertEquals("abc", data["data"]) elif 'write2' not in done: done['write2'] = True self.assertEquals(2, data["bank"]) self.assertEquals(123, data["address"]) self.assertEquals("More bytes", data["data"]) elif 'write3' not in done: done['write3'] = True self.assertEquals(2, data["bank"]) self.assertEquals(133, data["address"]) self.assertEquals(" than 10", data["data"]) else: raise Exception("Too many writes") communicator = MasterCommunicator(read, write) eeprom_file = EepromFile(communicator) eeprom_file.write([ EepromData(EepromAddress(1, 2, 3), "abc"), EepromData(EepromAddress(2, 123, 18), "More bytes than 10") ]) self.assertTrue('read1' in done) self.assertTrue('read2' in done) self.assertTrue('write1' in done) self.assertTrue('write2' in done) self.assertTrue('write3' in done)
def test_write_multiple_fields(self): """ Test writing multiple fields to the eeprom file. """ done = {} def read(data): """ Read dummy. """ if data["bank"] == 1: done['read1'] = True return {"data": "\xff" * 256} elif data["bank"] == 2: done['read2'] = True return {"data": "\x00" * 256} else: raise Exception("Wrong page") def write(data): """ Write dummy. """ if 'write1' not in done: done['write1'] = True self.assertEquals(1, data["bank"]) self.assertEquals(2, data["address"]) self.assertEquals("abc", data["data"]) elif 'write2' not in done: done['write2'] = True self.assertEquals(2, data["bank"]) self.assertEquals(123, data["address"]) self.assertEquals("More bytes", data["data"]) elif 'write3' not in done: done['write3'] = True self.assertEquals(2, data["bank"]) self.assertEquals(133, data["address"]) self.assertEquals(" than 10", data["data"]) else: raise Exception("Too many writes") communicator = MasterCommunicator(read, write) eeprom_file = EepromFile(communicator) eeprom_file.write([EepromData(EepromAddress(1, 2, 3), "abc"), EepromData(EepromAddress(2, 123, 18), "More bytes than 10")]) self.assertTrue('read1' in done) self.assertTrue('read2' in done) self.assertTrue('write1' in done) self.assertTrue('write2' in done) self.assertTrue('write3' in done)
def test_cache_write(self): """ Test the eeprom cache on writing. """ state = {'read': 0, 'write': 0} def read(_): """ Read dummy. """ if state['read'] == 0: state['read'] = 1 return {"data": "\xff" * 256} else: raise Exception("Too many reads !") def write(data): """ Write dummy. """ if state['write'] == 0: self.assertEquals(1, data["bank"]) self.assertEquals(100, data["address"]) self.assertEquals("\x00" * 10, data["data"]) state['write'] = 1 elif state['write'] == 1: self.assertEquals(1, data["bank"]) self.assertEquals(110, data["address"]) self.assertEquals("\x00" * 10, data["data"]) state['write'] = 2 else: raise Exception("Too many writes !") communicator = MasterCommunicator(read, write) eeprom_file = EepromFile(communicator) address = EepromAddress(1, 0, 256) read = eeprom_file.read([address]) self.assertEquals("\xff" * 256, read[address].bytes) eeprom_file.write([EepromData(EepromAddress(1, 100, 20), "\x00" * 20)]) address = EepromAddress(1, 0, 256) read = eeprom_file.read([address]) self.assertEquals("\xff" * 100 + "\x00" * 20 + "\xff" * 136, read[address].bytes) self.assertEquals(1, state['read']) self.assertEquals(2, state['write'])
def test_cache_write(self): """ Test the eeprom cache on writing. """ state = {'read': 0, 'write': 0} def read(_): """ Read dummy. """ if state['read'] == 0: state['read'] = 1 return {"data": "\xff" * 256} else: raise Exception("Too many reads !") def write(data): """ Write dummy. """ if state['write'] == 0: self.assertEquals(1, data["bank"]) self.assertEquals(100, data["address"]) self.assertEquals("\x00" * 10, data["data"]) state['write'] = 1 elif state['write'] == 1: self.assertEquals(1, data["bank"]) self.assertEquals(110, data["address"]) self.assertEquals("\x00" * 10, data["data"]) state['write'] = 2 else: raise Exception("Too many writes !") communicator = MasterCommunicator(read, write) eeprom_file = EepromFile(communicator) address = EepromAddress(1, 0, 256) read = eeprom_file.read([address]) self.assertEquals("\xff" * 256, read[address].bytes) eeprom_file.write([EepromData(EepromAddress(1, 100, 20), "\x00" * 20)]) address = EepromAddress(1, 0, 256) read = eeprom_file.read([address]) self.assertEquals("\xff" * 100 + "\x00" * 20 + "\xff" * 136, read[address].bytes) self.assertEquals(1, state['read']) self.assertEquals(2, state['write'])
def test_write_end_of_page(self): """ Test writing an address that is close (< BATCH_SIZE) to the end of the page. """ done = {} def read(_): """ Read dummy. """ return {"data": "\x00" * 256} def write(data): """ Write dummy. """ self.assertEquals(117, data["bank"]) self.assertEquals(248, data["address"]) self.assertEquals("test\xff\xff\xff\xff", data["data"]) done['done'] = True SetUpTestInjections(master_communicator=MasterCommunicator(read, write)) eeprom_file = EepromFile() eeprom_file.write([EepromData(EepromAddress(117, 248, 8), "test\xff\xff\xff\xff")]) self.assertTrue(done['done'])
def test_write_end_of_page(self): """ Test writing an address that is close (< BATCH_SIZE) to the end of the page. """ done = {} def read(_): """ Read dummy. """ return {"data": "\x00" * 256} def write(data): """ Write dummy. """ self.assertEquals(117, data["bank"]) self.assertEquals(248, data["address"]) self.assertEquals("test\xff\xff\xff\xff", data["data"]) done['done'] = True communicator = MasterCommunicator(read, write) eeprom_file = EepromFile(communicator) eeprom_file.write([EepromData(EepromAddress(117, 248, 8), "test\xff\xff\xff\xff")]) self.assertTrue(done['done'])
def test_cache_write_exception(self): """ The cache should be invalidated if a write fails. """ state = {'read': 0, 'write': 0} def read(_): """ Read dummy. """ if state['read'] == 0: state['read'] = 1 return {"data": "\xff" * 256} elif state['read'] == 1: state['read'] = 2 return {"data": "\xff" * 256} else: raise Exception("Too many reads !") def write(_): """ Write dummy. """ state['write'] += 1 raise Exception("write fails...") communicator = MasterCommunicator(read, write) eeprom_file = EepromFile(communicator) address = EepromAddress(1, 0, 256) read = eeprom_file.read([address]) self.assertEquals("\xff" * 256, read[address].bytes) try: eeprom_file.write( [EepromData(EepromAddress(1, 100, 20), "\x00" * 20)]) self.fail("Should not get here !") except Exception: pass address = EepromAddress(1, 0, 256) read = eeprom_file.read([address]) self.assertEquals("\xff" * 256, read[address].bytes) self.assertEquals(2, state['read']) self.assertEquals(1, state['write'])
def test_cache_write_exception(self): """ The cache should be invalidated if a write fails. """ state = {'read': 0, 'write': 0} def read(_): """ Read dummy. """ if state['read'] == 0: state['read'] = 1 return {"data": "\xff" * 256} elif state['read'] == 1: state['read'] = 2 return {"data": "\xff" * 256} else: raise Exception("Too many reads !") def write(_): """ Write dummy. """ state['write'] += 1 raise Exception("write fails...") communicator = MasterCommunicator(read, write) eeprom_file = EepromFile(communicator) address = EepromAddress(1, 0, 256) read = eeprom_file.read([address]) self.assertEquals("\xff" * 256, read[address].bytes) try: eeprom_file.write([EepromData(EepromAddress(1, 100, 20), "\x00" * 20)]) self.fail("Should not get here !") except Exception: pass address = EepromAddress(1, 0, 256) read = eeprom_file.read([address]) self.assertEquals("\xff" * 256, read[address].bytes) self.assertEquals(2, state['read']) self.assertEquals(1, state['write'])
def test_write_multiple_fields_same_batch(self): """ Test writing multiple fields to the eeprom file. """ done = {} def read(data): """ Read dummy. """ if data["bank"] == 1: done['read'] = True return {"data": "\xff" * 256} else: raise Exception("Wrong page") def write(data): """ Write dummy. """ if 'write1' not in done: done['write1'] = True self.assertEquals(1, data["bank"]) self.assertEquals(2, data["address"]) self.assertEquals("abc\xff\xff\xffdefg", data["data"]) elif 'write2' not in done: done['write2'] = True self.assertEquals(1, data["bank"]) self.assertEquals(12, data["address"]) self.assertEquals("hijklmn", data["data"]) else: raise Exception("Too many writes") communicator = MasterCommunicator(read, write) eeprom_file = EepromFile(communicator) eeprom_file.write([ EepromData(EepromAddress(1, 2, 3), "abc"), EepromData(EepromAddress(1, 8, 11), "defghijklmn") ]) self.assertTrue('read' in done) self.assertTrue('write1' in done) self.assertTrue('write2' in done)
def test_write_multiple_fields_same_batch(self): """ Test writing multiple fields to the eeprom file. """ done = {} def read(data): """ Read dummy. """ if data["bank"] == 1: done['read'] = True return {"data": "\xff" * 256} else: raise Exception("Wrong page") def write(data): """ Write dummy. """ if 'write1' not in done: done['write1'] = True self.assertEquals(1, data["bank"]) self.assertEquals(2, data["address"]) self.assertEquals("abc\xff\xff\xffdefg", data["data"]) elif 'write2' not in done: done['write2'] = True self.assertEquals(1, data["bank"]) self.assertEquals(12, data["address"]) self.assertEquals("hijklmn", data["data"]) else: raise Exception("Too many writes") communicator = MasterCommunicator(read, write) eeprom_file = EepromFile(communicator) eeprom_file.write([EepromData(EepromAddress(1, 2, 3), "abc"), EepromData(EepromAddress(1, 8, 11), "defghijklmn")]) self.assertTrue('read' in done) self.assertTrue('write1' in done) self.assertTrue('write2' in done)