@Test public void testSynthesizedRequestState() throws Exception { List<File> files = LockServiceTestUtils.logStateDirFiles(); Optional<File> synthesizedRequestStateFile = files.stream().filter( file -> file.getName().startsWith(LockServiceStateLogger.SYNTHESIZED_REQUEST_STATE_FILE_PREFIX)) .findFirst(); assertThat(synthesizedRequestStateFile).isPresent(); assertSynthesizedRequestStateStructureCorrect(synthesizedRequestStateFile.get()); assertDescriptorsNotPresentInFile(synthesizedRequestStateFile.get()); }
@Test public void testSyncState() throws Exception { List<File> files = LockServiceTestUtils.logStateDirFiles(); Optional<File> syncStateFile = files.stream().filter( file -> file.getName().startsWith(LockServiceStateLogger.SYNC_STATE_FILE_PREFIX)).findFirst(); assertThat(syncStateFile).isPresent(); assertSyncStateStructureCorrect(syncStateFile.get()); assertDescriptorsNotPresentInFile(syncStateFile.get()); }
private Set<LockDescriptor> getAllDescriptors() { Set<LockDescriptor> allDescriptors = Sets.newHashSet(); allDescriptors.addAll(getOutstandingDescriptors()); allDescriptors.addAll(getHeldDescriptors()); return allDescriptors; }
private void assertSynthesizedRequestStateStructureCorrect(File file) throws FileNotFoundException { Iterable<Object> synthesizedRequestState = new Yaml().loadAll(new FileInputStream(file)); for (Object ymlMap : synthesizedRequestState) { assertTrue("Request state contains unrecognizable object", ymlMap instanceof Map); Map map = (Map) ymlMap; if (map.containsKey(LockServiceStateLogger.SYNTHESIZED_REQUEST_STATE_TITLE)) { Object mapObj = map.get(LockServiceStateLogger.SYNTHESIZED_REQUEST_STATE_TITLE); assertTrue("Request state is not a map", mapObj instanceof Map); assertEquals(getSyncStateDescriptors().size(), ((Map) mapObj).size()); } else { throw new IllegalStateException("Map found in YAML document without an expected key"); } } }
@Test public void testDescriptors() throws Exception { List<File> files = LockServiceTestUtils.logStateDirFiles(); Optional<File> descriptorsFile = files.stream().filter( file -> file.getName().startsWith(LockServiceStateLogger.DESCRIPTORS_FILE_PREFIX)).findFirst(); Map<String, String> descriptorsMap = new Yaml().loadAs(new FileInputStream(descriptorsFile.get()), Map.class); Set<LockDescriptor> allDescriptors = getAllDescriptors(); for (LockDescriptor descriptor : allDescriptors) { assertTrue("Existing descriptor can't be found in dumped descriptors", descriptorsMap.values().stream().anyMatch(descriptorFromFile -> descriptorFromFile.equals(descriptor.toString()))); } }
private void assertSyncStateStructureCorrect(File syncStateFile) throws FileNotFoundException { Iterable<Object> syncState = new Yaml().loadAll(new FileInputStream(syncStateFile)); for (Object ymlMap : syncState) { assertTrue("Sync state contains unrecognizable object", ymlMap instanceof Map); Map map = (Map) ymlMap; if (map.containsKey(LockServiceStateLogger.SYNC_STATE_TITLE)) { Object mapObj = map.get(LockServiceStateLogger.SYNC_STATE_TITLE); assertTrue("Sync state is not a map", mapObj instanceof Map); assertEquals(getSyncStateDescriptors().size(), ((Map) mapObj).size()); } else { throw new IllegalStateException("Map found in YAML document without an expected key"); } } }
@Test public void testLockState() throws Exception { List<File> files = LockServiceTestUtils.logStateDirFiles(); Optional<File> lockStateFile = files.stream().filter( file -> file.getName().startsWith(LockServiceStateLogger.LOCKSTATE_FILE_PREFIX)).findFirst(); Iterable<Object> lockState = new Yaml().loadAll(new FileInputStream(lockStateFile.get())); for (Object ymlMap : lockState) { assertTrue("Lock state contains unrecognizable object", ymlMap instanceof Map); Map map = (Map) ymlMap; if (map.containsKey(LockServiceStateLogger.OUTSTANDING_LOCK_REQUESTS_TITLE)) { Object arrayObj = map.get(LockServiceStateLogger.OUTSTANDING_LOCK_REQUESTS_TITLE); assertTrue("Outstanding lock requests is not a list", arrayObj instanceof List); assertEquals(getOutstandingDescriptors().size(), ((List) arrayObj).size()); } else if (map.containsKey(LockServiceStateLogger.HELD_LOCKS_TITLE)) { Object mapObj = map.get(LockServiceStateLogger.HELD_LOCKS_TITLE); assertTrue("Held locks is not a map", mapObj instanceof Map); assertEquals(getHeldDescriptors().size(), ((Map) mapObj).size()); } else { throw new IllegalStateException("Map found in YAML document without an expected key"); } } }