public static HeldLocksToken getFakeHeldLocksToken(String clientName, String requestingThread, BigInteger tokenId, String... descriptors) { ImmutableSortedMap<LockDescriptor, LockMode> lockDescriptorLockMode = getLockDescriptorLockMode(Arrays.asList(descriptors)); return new HeldLocksToken(tokenId, LockClient.of(clientName), System.currentTimeMillis(), System.currentTimeMillis(), LockCollections.of(lockDescriptorLockMode), LockRequest.getDefaultLockTimeout(), 0L, requestingThread); }
@AfterClass public static void afterClass() throws IOException { LockServiceTestUtils.cleanUpLogStateDir(); }
@Test public void testSerialisationAndDeserialisationOfLockResponse() throws Exception { HeldLocksToken token = LockServiceTestUtils.getFakeHeldLocksToken("client A", "Fake thread", new BigInteger("1"), "held-lock-1", "logger-lock"); LockResponse response = new LockResponse(token); ObjectMapper mapper = new ObjectMapper(); LockResponse deserializedLockResponse = mapper.readValue(mapper.writeValueAsString(response), LockResponse.class); assertEquals(deserializedLockResponse, response); }
@BeforeClass public static void setUp() throws Exception { LockServiceTestUtils.cleanUpLogStateDir(); outstandingLockRequestMultimap.put(clientA, request2); HeldLocksToken token = LockServiceTestUtils.getFakeHeldLocksToken("client A", "Fake thread", new BigInteger("1"), "held-lock-1", "logger-lock"); HeldLocksToken token2 = LockServiceTestUtils.getFakeHeldLocksToken("client B", "Fake thread 2", new BigInteger("2"), "held-lock-2", "held-lock-3");
@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()))); } }
@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()); }
@Test public void testSerialisationAndDeserialisationOfHeldLocksGrant() throws Exception { ImmutableSortedMap<LockDescriptor, LockMode> lockDescriptorLockMode = LockServiceTestUtils .getLockDescriptorLockMode(ImmutableList.of("lock1", "lock2")); HeldLocksGrant heldLocksGrant = new HeldLocksGrant( BigInteger.ONE, System.currentTimeMillis(), System.currentTimeMillis() + 10L, LockCollections.of(lockDescriptorLockMode), SimpleTimeDuration.of(100, TimeUnit.SECONDS), 10L); ObjectMapper mapper = new ObjectMapper(); String serializedForm = mapper.writeValueAsString(heldLocksGrant); HeldLocksGrant deserialzedlockServerOptions = mapper.readValue(serializedForm, HeldLocksGrant.class); assertEquals(heldLocksGrant, deserialzedlockServerOptions); }
@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()); }
LockServiceTestUtils.cleanUpLogStateDir();
@Test public void testSerialisationAndDeserialisationOfLockResponseWithLockHolders() throws Exception { HeldLocksToken token = LockServiceTestUtils.getFakeHeldLocksToken("client A", "Fake thread", new BigInteger("1"), "held-lock-1", "logger-lock"); Map<LockDescriptor, LockClient> lockHolders = ImmutableMap.of(StringLockDescriptor.of("lock_id"), LockClient.ANONYMOUS, StringLockDescriptor.of("lock_id2"), LockClient.of("client")); LockResponse response = new LockResponse(token, lockHolders); ObjectMapper mapper = new ObjectMapper(); LockResponse deserializedLockResponse = mapper.readValue(mapper.writeValueAsString(response), LockResponse.class); assertEquals(lockHolders, deserializedLockResponse.getLockHolders()); }
@Test public void testFilesExist() throws Exception { List<File> files = LockServiceTestUtils.logStateDirFiles(); assertEquals("Unexpected number of descriptor files", files.stream() .filter(file -> file.getName().startsWith(LockServiceStateLogger.DESCRIPTORS_FILE_PREFIX)) .count(), 1); assertEquals("Unexpected number of lock state files", files.stream() .filter(file -> file.getName().startsWith(LockServiceStateLogger.LOCKSTATE_FILE_PREFIX)) .count(), 1); assertEquals("Unexpected number of lock sync state files", files.stream() .filter(file -> file.getName().startsWith(LockServiceStateLogger.SYNC_STATE_FILE_PREFIX)) .count(), 1); assertEquals("Unexpected number of synthesized request state files", files.stream() .filter(file -> file.getName().startsWith(LockServiceStateLogger.SYNTHESIZED_REQUEST_STATE_FILE_PREFIX)) .count(), 1); }
@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"); } } }