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
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 }