View Javadoc

1   package com.atlassian.plugin.manager;
2   
3   import com.atlassian.plugin.Plugin;
4   import com.atlassian.plugin.PluginInformation;
5   import com.atlassian.plugin.jmx.PluginManagerMXBean;
6   
7   import com.google.common.collect.ImmutableList;
8   
9   import org.hamcrest.Description;
10  import org.hamcrest.Matcher;
11  import org.hamcrest.TypeSafeMatcher;
12  import org.junit.Before;
13  import org.junit.Test;
14  import org.junit.runner.RunWith;
15  import org.mockito.Mock;
16  import org.mockito.runners.MockitoJUnitRunner;
17  
18  import static org.hamcrest.MatcherAssert.assertThat;
19  import static org.hamcrest.Matchers.arrayContaining;
20  import static org.hamcrest.Matchers.equalTo;
21  import static org.hamcrest.Matchers.is;
22  import static org.mockito.Mockito.mock;
23  import static org.mockito.Mockito.when;
24  
25  @RunWith (MockitoJUnitRunner.class)
26  public class TestDefaultPluginManagerJmxBridge
27  {
28      @Mock private DefaultPluginManager defaultPluginManager;
29  
30      // Hold this via the interface class so we provide usages of its methods
31      private PluginManagerMXBean defaultPluginManagerJmxBridge;
32  
33      @Before
34      public void setUp() throws Exception
35      {
36          defaultPluginManagerJmxBridge = new DefaultPluginManagerJmxBridge(defaultPluginManager);
37      }
38  
39      @Test
40      public void getPluginsReturnsPlugins()
41      {
42          final String pluginKey = "alpha";
43          final Plugin plugin = mock(Plugin.class);
44          when(plugin.getKey()).thenReturn(pluginKey);
45          final String version = "1.2.3";
46          final PluginInformation pluginInformation = mock(PluginInformation.class);
47          when(pluginInformation.getVersion()).thenReturn(version);
48          when(plugin.getPluginInformation()).thenReturn(pluginInformation);
49          when(defaultPluginManager.isPluginEnabled(pluginKey)).thenReturn(true);
50  
51          final Plugin nullPlugin = mock(Plugin.class);
52  
53          when(defaultPluginManager.getPlugins()).thenReturn(ImmutableList.of(plugin, nullPlugin));
54          final PluginManagerMXBean.PluginData[] pluginDatas = defaultPluginManagerJmxBridge.getPlugins();
55          assertThat(pluginDatas, arrayContaining(pluginData(pluginKey, version, true), pluginData(null, null, false)));
56      }
57  
58      private Matcher<PluginManagerMXBean.PluginData> pluginData(final String key, final String version, final boolean enabled)
59      {
60          final Matcher<String> keyMatcher = equalTo(key);
61          final Matcher<String> versionMatcher = equalTo(version);
62          final Matcher<Boolean> enabledMatcher = equalTo(enabled);
63          return new TypeSafeMatcher<PluginManagerMXBean.PluginData>()
64          {
65              @Override
66              protected boolean matchesSafely(final PluginManagerMXBean.PluginData item)
67              {
68                  return keyMatcher.matches(item.getKey())
69                          && versionMatcher.matches(item.getVersion())
70                          && enabledMatcher.matches(item.isEnabled());
71              }
72  
73              @Override
74              public void describeTo(final Description description)
75              {
76                  description.appendText("PluginData with key ");
77                  keyMatcher.describeTo(description);
78                  description.appendText(" and version ");
79                  versionMatcher.describeTo(description);
80                  description.appendText(" and enabled ");
81                  enabledMatcher.describeTo(description);
82  
83              }
84          };
85      }
86  
87      @Test
88      public void scanForNewPluginsDoesScanForNewPlugins()
89      {
90          final int expected = 1;
91          when(defaultPluginManager.scanForNewPlugins()).thenReturn(expected);
92          final int actual = defaultPluginManagerJmxBridge.scanForNewPlugins();
93          assertThat(actual, is(expected));
94      }
95  }