diff --git a/src/main/java/org/jenkins/plugins/lockableresources/LockableResourcesManager.java b/src/main/java/org/jenkins/plugins/lockableresources/LockableResourcesManager.java index 93ee733be..c6ee39979 100644 --- a/src/main/java/org/jenkins/plugins/lockableresources/LockableResourcesManager.java +++ b/src/main/java/org/jenkins/plugins/lockableresources/LockableResourcesManager.java @@ -23,6 +23,7 @@ import java.io.PrintStream; import java.util.ArrayList; import java.util.Collections; +import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; @@ -939,6 +940,11 @@ public boolean steal(List resources, String userName) { r.setStolen(); } unlock(resources, null, false); + // unlock() nulls resource.reservedTimestamp via resource.setBuild(null), so set it afterwards + Date date = new Date(); + for (LockableResource r : resources) { + r.setReservedTimestamp(date); + } save(); } return true; diff --git a/src/test/java/org/jenkins/plugins/lockableresources/actions/LockableResourcesRootActionTest.java b/src/test/java/org/jenkins/plugins/lockableresources/actions/LockableResourcesRootActionTest.java index f90b21dfa..fe29b8a6d 100644 --- a/src/test/java/org/jenkins/plugins/lockableresources/actions/LockableResourcesRootActionTest.java +++ b/src/test/java/org/jenkins/plugins/lockableresources/actions/LockableResourcesRootActionTest.java @@ -2,6 +2,8 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; import static org.junit.Assert.assertThrows; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.when; @@ -330,8 +332,10 @@ public void testDoSteal() throws IOException, ServletException { // system must be permitted to create resource resource = this.createResource("resource1"); // when the resource is not reserved, the doSteal action reserve it for you + assertNull(resource.getReservedTimestamp()); action.doSteal(req, rsp); assertTrue("is reserved by system", resource.isReserved()); + assertNotNull(resource.getReservedTimestamp()); // somebody SecurityContextHolder.getContext().setAuthentication(this.reserve_user1.impersonate2()); @@ -344,15 +348,18 @@ public void testDoSteal() throws IOException, ServletException { SecurityContextHolder.getContext().setAuthentication(this.admin.impersonate2()); action.doReset(req, rsp); assertFalse("unreserved", resource.isReserved()); + assertNull(resource.getReservedTimestamp()); // switch to user1 and reserve it action.doReserve(req, rsp); assertTrue("is reserved by user1", resource.isReserved()); + assertNotNull(resource.getReservedTimestamp()); // switch to user with STEAL permission SecurityContextHolder.getContext().setAuthentication(this.steal_user.impersonate2()); action.doSteal(req, rsp); assertEquals("reserved by user", this.steal_user.getId(), resource.getReservedBy()); + assertNotNull(resource.getReservedTimestamp()); // invalid params. Just check if it crash here SecurityContextHolder.getContext().setAuthentication(this.admin.impersonate2());