package jnpf.flowable.service.dev; import jnpf.flowable.util.RedisLock; import org.junit.Test; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.script.RedisScript; import java.util.List; import java.util.concurrent.TimeUnit; import static org.junit.Assert.*; import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; public class DevApprovalLocksTest { @Test public void releaseUsesSameTokenValueAsAcquireAndTheNativeNodeKey() { RedisLock nativeLocks = mock(RedisLock.class); RedisTemplate redis = mock(RedisTemplate.class); DevApprovalLocks locks = new DevApprovalLocks(nativeLocks, redis); when(nativeLocks.lock("tasknode", "token", 300, TimeUnit.SECONDS)).thenReturn(true); when(redis.execute(any(RedisScript.class), eq(List.of("workflow-lock:tasknode")), eq("token"))).thenReturn(1L); assertTrue(locks.lock("tasknode", "token", 300, TimeUnit.SECONDS)); assertTrue(locks.unlock("tasknode", "token")); verify(redis).execute(any(RedisScript.class), eq(List.of("workflow-lock:tasknode")), eq("token")); verify(nativeLocks, never()).unlock(anyString(), anyString()); } }