@Override public boolean visitLabelTokenCommand(Command.LabelTokenCommand command) throws IOException { // id+in_use(byte)+type_blockId(int)+nr_type_records(int) int id = channel.getInt(); byte inUseFlag = channel.get(); boolean inUse = false; if ((inUseFlag & Record.IN_USE.byteValue()) == Record.IN_USE.byteValue()) { inUse = true; } else if (inUseFlag != Record.NOT_IN_USE.byteValue()) { throw new IOException("Illegal in use flag: " + inUseFlag); } LabelTokenRecord record = new LabelTokenRecord(id); record.setInUse(inUse); record.setNameId(channel.getInt()); int nrTypeRecords = channel.getInt(); for (int i = 0; i < nrTypeRecords; i++) { DynamicRecord dr = readDynamicRecord(); if (dr == null) { return true; } record.addNameRecord(dr); } command.init(record); return false; }
@Test public void shouldReportEmptyName() throws Exception { // given LabelTokenRecord key = inUse(new LabelTokenRecord(42)); DynamicRecord name = addLabelName(inUse(new DynamicRecord(6))); key.setNameId((int) name.getId()); // when ConsistencyReport.LabelTokenConsistencyReport report = check(key); // then verify(report).emptyName(name); verifyNoMoreInteractions(report); }
@Test public void shouldNotReportAnythingForConsistentlyChangedRecord() throws Exception { // given LabelTokenRecord oldRecord = notInUse(new LabelTokenRecord(42)); LabelTokenRecord newRecord = inUse(new LabelTokenRecord(42)); DynamicRecord name = addLabelName(inUse(new DynamicRecord(6))); name.setData(new byte[1]); newRecord.setNameId((int) name.getId()); // when ConsistencyReport.LabelTokenConsistencyReport report = checkChange(oldRecord, newRecord); // then verifyNoMoreInteractions(report); }
@Test public void shouldReportProblemsWithTheNewStateWhenCheckingChanges() throws Exception { // given LabelTokenRecord oldRecord = notInUse(new LabelTokenRecord(42)); LabelTokenRecord newRecord = inUse(new LabelTokenRecord(42)); DynamicRecord name = addLabelName(notInUse(new DynamicRecord(6))); newRecord.setNameId((int) name.getId()); // when ConsistencyReport.LabelTokenConsistencyReport report = checkChange(oldRecord, newRecord); // then verify(report).nameBlockNotInUse(name); verifyNoMoreInteractions(report); }