@Before public void cleanup() throws Exception { try (Connection connection = ConnectionFactory.connect(TEST_URI, new Properties())) { EntityRef<VoltronReadWriteLockClient, Void, Void> ref = getEntityReference(connection); try { assertThat(ref.destroy(), is(true)); } catch (EntityNotFoundException e) { //expected } } }
URI uri = URI.create("diagnostic://localhost:" + activePort); Connection connection = ConnectionFactory.connect(uri, properties); EntityRef<Diagnostics, Object, Void> ref = connection.getEntityRef(Diagnostics.class, 1, "root"); Diagnostics diagnostics = ref.fetchEntity(null);
@Test public void testReadLockExcludesWrite() throws Exception { try (Connection connection = ConnectionFactory.connect(TEST_URI, new Properties())) { EntityRef<VoltronReadWriteLockClient, Void, Void> ref = getEntityReference(connection); ref.create(null); VoltronReadWriteLockClient locker = ref.fetchEntity(null); locker.lock(READ); try { VoltronReadWriteLockClient tester = ref.fetchEntity(null); assertThat(tester.tryLock(WRITE), is(false)); } finally { locker.unlock(READ); } } }
@Test public void testWriteLockExcludesRead() throws Exception { try (Connection connection = ConnectionFactory.connect(TEST_URI, new Properties())) { EntityRef<VoltronReadWriteLockClient, Void, Void> ref = getEntityReference(connection); ref.create(null); VoltronReadWriteLockClient locker = ref.fetchEntity(null); locker.lock(WRITE); try { VoltronReadWriteLockClient tester = ref.fetchEntity(null); assertThat(tester.tryLock(READ), is(false)); } finally { locker.unlock(WRITE); } } }
@Test public void testWriteLockExcludesWrite() throws Exception { try (Connection connection = ConnectionFactory.connect(TEST_URI, new Properties())) { EntityRef<VoltronReadWriteLockClient, Void, Void> ref = getEntityReference(connection); ref.create(null); VoltronReadWriteLockClient locker = ref.fetchEntity(null); locker.lock(WRITE); try { VoltronReadWriteLockClient tester = ref.fetchEntity(null); assertThat(tester.tryLock(WRITE), is(false)); } finally { locker.unlock(WRITE); } } }
@Test public void testReadLockAllowsRead() throws Exception { try (Connection connection = ConnectionFactory.connect(TEST_URI, new Properties())) { EntityRef<VoltronReadWriteLockClient, Void, Void> ref = getEntityReference(connection); ref.create(null); VoltronReadWriteLockClient locker = ref.fetchEntity(null); locker.lock(READ); try { VoltronReadWriteLockClient tester = ref.fetchEntity(null); assertThat(tester.tryLock(READ), is(true)); tester.unlock(READ); } finally { locker.unlock(READ); } } }
@Test public void testWriteUnblocksAfterWriteReleased() throws Exception { try (Connection connection = ConnectionFactory.connect(TEST_URI, new Properties())) { final EntityRef<VoltronReadWriteLockClient, Void, Void> ref = getEntityReference(connection); ref.create(null); Future<Void> success; final VoltronReadWriteLockClient tester; VoltronReadWriteLockClient locker = ref.fetchEntity(null); locker.lock(WRITE); try { tester = ref.fetchEntity(null); success = async(() -> { tester.lock(WRITE); return null; }); try { success.get(50, TimeUnit.MILLISECONDS); fail("Expected TimeoutException"); } catch (TimeoutException e) { //expected } } finally { locker.unlock(WRITE); } success.get(2, TimeUnit.MINUTES); tester.unlock(WRITE); } }
@Test public void testReadUnblocksAfterWriteReleased() throws Exception { try (Connection connection = ConnectionFactory.connect(TEST_URI, new Properties())) { final EntityRef<VoltronReadWriteLockClient, Void, Void> ref = getEntityReference(connection); ref.create(null); Future<Void> success; final VoltronReadWriteLockClient tester; VoltronReadWriteLockClient locker = ref.fetchEntity(null); locker.lock(WRITE); try { tester = ref.fetchEntity(null); success = async(() -> { tester.lock(READ); return null; }); try { success.get(50, TimeUnit.MILLISECONDS); fail("Expected TimeoutException"); } catch (TimeoutException e) { //expected } } finally { locker.unlock(WRITE); } success.get(2, TimeUnit.MINUTES); tester.unlock(READ); } }
@Test public void testWriteUnblocksAfterReadReleased() throws Exception { try (Connection connection = ConnectionFactory.connect(TEST_URI, new Properties())) { final EntityRef<VoltronReadWriteLockClient, Void, Void> ref = getEntityReference(connection); ref.create(null); Future<Void> success; final VoltronReadWriteLockClient tester; VoltronReadWriteLockClient locker = ref.fetchEntity(null); locker.lock(READ); try { tester = ref.fetchEntity(null); success = async(() -> { tester.lock(WRITE); return null; }); try { success.get(50, TimeUnit.MILLISECONDS); fail("Expected TimeoutException"); } catch (TimeoutException e) { //expected } } finally { locker.unlock(READ); } success.get(2, TimeUnit.MINUTES); tester.unlock(WRITE); } }