Skip to content

Commit 92e12da

Browse files
committed
test: improve test coverage of lock manager
Acked-by: Paul Millar Target: master
1 parent 985b50e commit 92e12da

File tree

2 files changed

+159
-0
lines changed

2 files changed

+159
-0
lines changed

core/src/test/java/org/dcache/nfs/v4/nlm/NlmLockTest.java

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,4 +106,49 @@ public void shouldAllowEndingLockRange() {
106106
assertFalse("false conflicting lock range", lock.isOverlappingRange(lock1));
107107
assertFalse("false conflicting lock range", lock.isOverlappingRange(lock2));
108108
}
109+
110+
@Test
111+
public void shouldEqual() {
112+
NlmLock lock1 = new NlmLock(lo1, nfs_lock_type4.WRITE_LT, 0, 1);
113+
NlmLock lock2 = new NlmLock(lo1, nfs_lock_type4.WRITE_LT, 0, 1);
114+
115+
assertTrue("the same lock should be equal", lock1.equals(lock2));
116+
assertTrue("equal objects must have the same hashcode", lock1.hashCode() == lock2.hashCode());
117+
}
118+
119+
@Test
120+
public void shouldNotBeEqualByOwner() {
121+
122+
NlmLock lock1 = new NlmLock(lo1, nfs_lock_type4.WRITE_LT, 0, nfs4_prot.NFS4_UINT64_MAX);
123+
NlmLock lock2 = new NlmLock(lo2, nfs_lock_type4.WRITE_LT, 0, nfs4_prot.NFS4_UINT64_MAX);
124+
125+
assertFalse("lock with different owner can't be equal", lock1.equals(lock2));
126+
}
127+
128+
@Test
129+
public void shouldNotBeEqualByOffset() {
130+
131+
NlmLock lock1 = new NlmLock(lo1, nfs_lock_type4.WRITE_LT, 0, nfs4_prot.NFS4_UINT64_MAX);
132+
NlmLock lock2 = new NlmLock(lo1, nfs_lock_type4.WRITE_LT, 1, nfs4_prot.NFS4_UINT64_MAX);
133+
134+
assertFalse("lock with different offsets can't be equal", lock1.equals(lock2));
135+
}
136+
137+
@Test
138+
public void shouldNotBeEqualByType() {
139+
140+
NlmLock lock1 = new NlmLock(lo1, nfs_lock_type4.WRITE_LT, 0, nfs4_prot.NFS4_UINT64_MAX);
141+
NlmLock lock2 = new NlmLock(lo1, nfs_lock_type4.READ_LT, 0, nfs4_prot.NFS4_UINT64_MAX);
142+
143+
assertFalse("lock with different types can't be equal", lock1.equals(lock2));
144+
}
145+
146+
@Test
147+
public void shouldNotBeEqualByLegth() {
148+
149+
NlmLock lock1 = new NlmLock(lo1, nfs_lock_type4.WRITE_LT, 0, 1);
150+
NlmLock lock2 = new NlmLock(lo1, nfs_lock_type4.WRITE_LT, 0, 2);
151+
152+
assertFalse("lock with different length can't be equal", lock1.equals(lock2));
153+
}
109154
}

core/src/test/java/org/dcache/nfs/v4/nlm/SimpleLmTest.java

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -292,6 +292,33 @@ public void testSplitLock() throws LockException {
292292
nlm.test(file1, lock3);
293293
}
294294

295+
@Test
296+
public void testSplitWholeFileLock() throws LockException {
297+
NlmLock lock1 = new LockBuilder()
298+
.withOwner("owner1")
299+
.from(0)
300+
.length(nfs4_prot.NFS4_UINT64_MAX)
301+
.forWrite()
302+
.build();
303+
nlm.lock(file1, lock1);
304+
305+
NlmLock lock2 = new LockBuilder()
306+
.withOwner("owner1")
307+
.from(1)
308+
.length(nfs4_prot.NFS4_UINT64_MAX)
309+
.forRead()
310+
.build();
311+
nlm.unlock(file1, lock2);
312+
313+
NlmLock lock3 = new LockBuilder()
314+
.withOwner("owner2")
315+
.from(1)
316+
.length(1)
317+
.forWrite()
318+
.build();
319+
nlm.test(file1, lock3);
320+
}
321+
295322
@Test(expected = LockDeniedException.class)
296323
public void testMergeOfOverlapingLocks() throws LockException {
297324
NlmLock lock1 = new LockBuilder()
@@ -319,6 +346,93 @@ public void testMergeOfOverlapingLocks() throws LockException {
319346
nlm.test(file1, lock3);
320347
}
321348

349+
@Test(expected = LockDeniedException.class)
350+
public void testMergeOfContinuesLocks() throws LockException {
351+
NlmLock lock1 = new LockBuilder()
352+
.withOwner("owner1")
353+
.from(74)
354+
.length(nfs4_prot.NFS4_UINT64_MAX)
355+
.forWrite()
356+
.build();
357+
nlm.lock(file1, lock1);
358+
359+
NlmLock lock2 = new LockBuilder()
360+
.withOwner("owner1")
361+
.from(0)
362+
.length(75)
363+
.forWrite()
364+
.build();
365+
nlm.lock(file1, lock2);
366+
367+
NlmLock lock3 = new LockBuilder()
368+
.withOwner("owner2")
369+
.from(1)
370+
.length(100)
371+
.forWrite()
372+
.build();
373+
nlm.test(file1, lock3);
374+
}
375+
376+
@Test(expected = LockDeniedException.class)
377+
public void testMergeOfWholeFileLocks() throws LockException {
378+
NlmLock lock1 = new LockBuilder()
379+
.withOwner("owner1")
380+
.from(0)
381+
.length(nfs4_prot.NFS4_UINT64_MAX)
382+
.forWrite()
383+
.build();
384+
nlm.lock(file1, lock1);
385+
386+
NlmLock lock2 = new LockBuilder()
387+
.withOwner("owner1")
388+
.from(0)
389+
.length(nfs4_prot.NFS4_UINT64_MAX)
390+
.forWrite()
391+
.build();
392+
nlm.lock(file1, lock2);
393+
394+
NlmLock lock3 = new LockBuilder()
395+
.withOwner("owner2")
396+
.from(1)
397+
.length(100)
398+
.forWrite()
399+
.build();
400+
nlm.test(file1, lock3);
401+
}
402+
403+
@Test
404+
public void testLocAfterUnlockIfExist() throws LockException {
405+
NlmLock lock1 = new LockBuilder()
406+
.withOwner("owner1")
407+
.from(0)
408+
.length(1)
409+
.forRead()
410+
.build();
411+
nlm.lock(file1, lock1);
412+
413+
nlm.unlockIfExists(file1, lock1);
414+
415+
NlmLock lock2 = new LockBuilder()
416+
.withOwner("owner2")
417+
.from(0)
418+
.length(1)
419+
.forWrite()
420+
.build();
421+
nlm.test(file1, lock2);
422+
}
423+
424+
@Test
425+
public void testUnlockIfExistNonExisting() throws LockException {
426+
NlmLock lock1 = new LockBuilder()
427+
.withOwner("owner1")
428+
.from(0)
429+
.length(1)
430+
.forRead()
431+
.build();
432+
433+
nlm.unlockIfExists(file1, lock1);
434+
}
435+
322436
public static class LockBuilder {
323437

324438
private long offset;

0 commit comments

Comments
 (0)