1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.lang3.concurrent;
18
19 import static org.junit.jupiter.api.Assertions.assertFalse;
20 import static org.junit.jupiter.api.Assertions.assertTrue;
21
22 import java.io.IOException;
23 import java.util.concurrent.atomic.AtomicBoolean;
24
25 import org.junit.jupiter.api.Test;
26
27
28
29
30 public class LazyInitializerFailableCloserTest extends AbstractConcurrentInitializerTest {
31
32 private final AtomicBoolean closed = new AtomicBoolean();
33
34
35
36
37
38
39 @Override
40 protected LazyInitializer<Object> createInitializer() {
41 return LazyInitializer.builder().setInitializer(this::makeObject).setCloser(e -> throwingCloser()).get();
42 }
43
44 private Object makeObject() throws ConcurrentException {
45 if (closed.get()) {
46
47 throw new ConcurrentException("test", new IOException());
48 }
49 return new Object();
50 }
51
52 @Test
53 public void testIsInitialized() throws ConcurrentException {
54 final LazyInitializer<Object> initializer = createInitializer();
55 assertFalse(initializer.isInitialized());
56 initializer.get();
57 assertTrue(initializer.isInitialized());
58 assertFalse(closed.get());
59 initializer.close();
60 assertTrue(closed.get());
61 }
62
63 private void throwingCloser() throws ConcurrentException {
64 closed.set(true);
65
66 if (!closed.get()) {
67
68 throw new ConcurrentException("test", new IOException());
69 }
70 }
71
72 }