@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; }
@Override public boolean visitLabelTokenCommand(Command.LabelTokenCommand command) throws IOException { LabelTokenRecord record = command.getRecord(); // id+in_use(byte)+type_blockId(int)+nr_type_records(int) byte inUse = record.inUse() ? Record.IN_USE.byteValue() : Record.NOT_IN_USE.byteValue(); channel.put(NeoCommandType.LABEL_KEY_COMMAND); channel.putInt(record.getId()).put(inUse).putInt(record.getNameId()); writeDynamicRecords(record.getNameRecords()); 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); }