View Javadoc

1   package com.atlassian.sal.core.lifecycle;
2   
3   import com.atlassian.fugue.Pair;
4   import com.atlassian.plugin.Plugin;
5   import com.atlassian.plugin.event.events.PluginDisablingEvent;
6   import com.atlassian.plugin.event.events.PluginFrameworkShuttingDownEvent;
7   import com.atlassian.sal.api.lifecycle.LifecycleAware;
8   import org.junit.Before;
9   import org.junit.Test;
10  import org.junit.runner.RunWith;
11  import org.mockito.runners.MockitoJUnitRunner;
12  import org.osgi.framework.Bundle;
13  import org.osgi.framework.ServiceReference;
14  
15  import static org.mockito.Mockito.mock;
16  import static org.mockito.Mockito.never;
17  import static org.mockito.Mockito.verify;
18  import static org.mockito.Mockito.when;
19  
20  @RunWith(MockitoJUnitRunner.class)
21  public class TestDefaultLifecycleManagerOnStopAware extends TestDefaultLifecycleManagerBase {
22      @Before
23      @Override
24      public void setUp() throws Exception {
25          super.setUp();
26          defaultLifecycleManager.afterPropertiesSet();
27      }
28  
29      @Test
30      public void onStopNotCalledPrematurely() throws Exception {
31          final LifecycleAware deathAware = getLifecycleAwareStarted();
32  
33          verify(deathAware, never()).onStop();
34      }
35  
36      @Test
37      public void onStopCalledWhenFrameworkShuttingDown() throws Exception {
38          final LifecycleAware deathAware = getLifecycleAwareStarted();
39  
40          defaultLifecycleManager.onPluginFrameworkShuttingDown(new PluginFrameworkShuttingDownEvent(pluginController, pluginAccessor));
41          verify(deathAware).onStop();
42      }
43  
44      @Test
45      public void onStopWillNotBreakLegacyPlugins() throws Exception {
46          final LifecycleAware legacyLifecycleAware = LegacyLifecycleAwareGenerator.newInstance();
47  
48          registerService(pluginBundle, legacyLifecycleAware);
49          enablePlugin(pluginKey);
50          isApplicationSetup = true;
51          defaultLifecycleManager.start();
52  
53          defaultLifecycleManager.onPluginFrameworkShuttingDown(new PluginFrameworkShuttingDownEvent(pluginController, pluginAccessor));
54      }
55  
56      @Test
57      public void onStopCalledOnceWhenFrameworkShuttingDownCalledTwice() throws Exception {
58          final LifecycleAware deathAware = getLifecycleAwareStarted();
59  
60          defaultLifecycleManager.onPluginFrameworkShuttingDown(new PluginFrameworkShuttingDownEvent(pluginController, pluginAccessor));
61          defaultLifecycleManager.onPluginFrameworkShuttingDown(new PluginFrameworkShuttingDownEvent(pluginController, pluginAccessor));
62          verify(deathAware).onStop();
63      }
64  
65      @Test
66      public void onStopCalledWhenPluginDisabling() throws Exception {
67          final LifecycleAware deathAware = getLifecycleAwareStarted();
68          defaultLifecycleManager.onPluginDisabling(new PluginDisablingEvent(getMyPlugin()));
69          verify(deathAware).onStop();
70      }
71  
72      @Test
73      public void onStopCalledOnceWhenPluginDisablingCalledTwice() throws Exception {
74          final LifecycleAware deathAware = getLifecycleAwareStarted();
75          defaultLifecycleManager.onPluginDisabling(new PluginDisablingEvent(getMyPlugin()));
76          defaultLifecycleManager.onPluginDisabling(new PluginDisablingEvent(getMyPlugin()));
77          verify(deathAware).onStop();
78      }
79  
80      @Test
81      public void onStopNotCalledWhenPluginDisablingIsForAnotherPlugin() throws Exception {
82          final LifecycleAware deathAware = getLifecycleAwareStarted();
83          defaultLifecycleManager.onPluginDisabling(new PluginDisablingEvent(getPlugin(pluginKey + ".not-my-event")));
84          verify(deathAware, never()).onStop();
85      }
86  
87      @Test
88      public void onStopCalledWhenServiceUnregistered() throws Exception {
89          Pair<LifecycleAware, ServiceReference<LifecycleAware>> started = getLifecycleAwareStartedWithService();
90          unregisterService(started.right());
91          verify(started.left()).onStop();
92      }
93  
94      private Plugin getPlugin(String key) {
95          Plugin plugin = mock(Plugin.class);
96          when(plugin.getKey()).thenReturn(key);
97          return plugin;
98      }
99  
100     private Plugin getMyPlugin() {
101         return getPlugin(pluginKey);
102     }
103 
104     private Pair<LifecycleAware, ServiceReference<LifecycleAware>> getLifecycleAwareStartedWithService() {
105         final Pair<LifecycleAware, ServiceReference<LifecycleAware>> started = mockLifecycleAwareAndRegisterService(pluginBundle);
106         enablePlugin(pluginKey);
107         isApplicationSetup = true;
108 
109         defaultLifecycleManager.start();
110         return started;
111     }
112 
113     private LifecycleAware getLifecycleAwareStarted() {
114         return getLifecycleAwareStartedWithService().left();
115     }
116 
117     private Pair<LifecycleAware, ServiceReference<LifecycleAware>> mockLifecycleAwareAndRegisterService(final Bundle bundle) {
118         return mockLifecycleAwareAndRegisterService(bundle, LifecycleAware.class);
119     }
120 }