View Javadoc

1   package com.atlassian.vcache.internal.core;
2   
3   import com.atlassian.vcache.internal.RequestContext;
4   import org.junit.Rule;
5   import org.junit.Test;
6   import org.junit.rules.ExpectedException;
7   
8   import java.util.Optional;
9   
10  import static org.hamcrest.Matchers.is;
11  import static org.hamcrest.Matchers.notNullValue;
12  import static org.junit.Assert.assertThat;
13  
14  public class ThreadLocalRequestContextSupplierTest {
15      @Rule
16      public ExpectedException thrown = ExpectedException.none();
17  
18      @Test
19      public void normal_flow() {
20          final ThreadLocalRequestContextSupplier supplier = ThreadLocalRequestContextSupplier.strictSupplier();
21  
22          supplier.initThread("abc");
23  
24          final RequestContext context = supplier.get();
25  
26          assertThat(context, notNullValue());
27          assertThat(context.partitionIdentifier(), is("abc"));
28  
29          supplier.clearThread();
30      }
31  
32      @Test
33      public void get_not_init() {
34          final ThreadLocalRequestContextSupplier supplier = ThreadLocalRequestContextSupplier.strictSupplier();
35  
36          thrown.expect(IllegalStateException.class);
37          thrown.expectMessage("Thread has not been initialised.");
38  
39          final RequestContext context = supplier.get();
40      }
41  
42      @Test
43      public void get_not_init_lenient() {
44          final ThreadLocalRequestContextSupplier supplier = ThreadLocalRequestContextSupplier.lenientSupplier(() -> "lenient");
45  
46          final RequestContext context = supplier.get();
47  
48          assertThat(context.partitionIdentifier(), is("lenient"));
49  
50          final String value = context.computeIfAbsent("lost", () -> "keys");
51  
52          assertThat(value, is("keys"));
53  
54          final Optional<String> again = context.get("lost");
55  
56          assertThat(again, is(Optional.<String>empty()));
57      }
58  
59      @Test
60      public void init_double() {
61          final ThreadLocalRequestContextSupplier supplier = ThreadLocalRequestContextSupplier.strictSupplier();
62          supplier.initThread("abc");
63  
64          thrown.expect(IllegalStateException.class);
65          thrown.expectMessage("Thread '" + Thread.currentThread().getName() + "' has already been initialised.");
66  
67          supplier.initThread("def");
68      }
69  
70      @Test
71      public void init_bad_name() {
72          final ThreadLocalRequestContextSupplier supplier = ThreadLocalRequestContextSupplier.strictSupplier();
73  
74          thrown.expect(IllegalArgumentException.class);
75          thrown.expectMessage("Invalid partition identifier: :Oliver:");
76  
77          supplier.initThread(":Oliver:");
78      }
79  
80      @Test
81      public void clear_no_init() {
82          final ThreadLocalRequestContextSupplier supplier = ThreadLocalRequestContextSupplier.strictSupplier();
83  
84          supplier.clearThread();
85      }
86  }