1 package it.com.atlassian.plugin.osgi;
2
3 import com.atlassian.plugin.DefaultModuleDescriptorFactory;
4 import com.atlassian.plugin.osgi.CallableModuleDescriptor;
5 import com.atlassian.plugin.osgi.PluginInContainerTestBase;
6 import com.atlassian.plugin.osgi.hostcomponents.ComponentRegistrar;
7 import com.atlassian.plugin.osgi.hostcomponents.HostComponentProvider;
8 import com.atlassian.plugin.test.PluginJarBuilder;
9 import org.junit.Test;
10
11 import java.util.concurrent.Callable;
12
13 import static org.junit.Assert.assertEquals;
14 import static org.junit.Assert.assertNotSame;
15 import static org.junit.Assert.assertTrue;
16
17 public class TestPluginFrameworkWarmRestart extends PluginInContainerTestBase {
18 @Test
19 public void testWarmRestart() throws Exception {
20 final DefaultModuleDescriptorFactory factory = new DefaultModuleDescriptorFactory(hostContainer);
21 factory.addModuleDescriptor("object", CallableModuleDescriptor.class);
22
23 final HostComponentProvider prov = new HostComponentProvider() {
24 private int count = 1;
25
26 public void provide(ComponentRegistrar registrar) {
27 registrar.register(Callable.class).forInstance(new Callable() {
28 public Object call() {
29 return "count:" + (count++) + "-";
30 }
31 });
32 }
33 };
34
35 new PluginJarBuilder("testWarmRestart")
36 .addFormattedResource("atlassian-plugin.xml",
37 "<atlassian-plugin name='Test' key='test.plugin' pluginsVersion='2'>",
38 " <plugin-info>",
39 " <version>1.0</version>",
40 " </plugin-info>",
41 " <object key='obj' class='my.Foo'/>",
42 " <object key='obj-disabled' class='my.Foo'/>",
43 "</atlassian-plugin>")
44 .addFormattedJava("my.Foo",
45 "package my;",
46 "import java.util.concurrent.Callable;",
47 "public class Foo implements Callable {",
48 " private Callable host;",
49 " public Foo(Callable host) { this.host = host; }",
50 " public Object call() throws Exception { return ((String)host.call()) + System.identityHashCode(this); }",
51 "}")
52 .build(pluginsDir);
53 initPluginManager(prov, factory);
54 pluginController.disablePluginModule("test.plugin:obj-disabled");
55
56 assertEquals(1, pluginAccessor.getEnabledPlugins().size());
57 assertEquals(1, pluginAccessor.getEnabledModulesByClass(Callable.class).size());
58 assertEquals("Test", pluginAccessor.getPlugin("test.plugin").getName());
59 assertEquals("my.Foo", pluginAccessor.getPlugin("test.plugin").getModuleDescriptor("obj").getModule().getClass().getName());
60 String value = (String) pluginAccessor.getEnabledModulesByClass(Callable.class).get(0).call();
61 assertTrue(value.startsWith("count:1-"));
62 String id = value.substring("count:1-".length());
63
64 pluginSystemLifecycle.warmRestart();
65
66 assertEquals(1, pluginAccessor.getEnabledPlugins().size());
67 assertEquals(1, pluginAccessor.getEnabledModulesByClass(Callable.class).size());
68 assertEquals("Test", pluginAccessor.getPlugin("test.plugin").getName());
69 assertEquals("my.Foo", pluginAccessor.getPlugin("test.plugin").getModuleDescriptor("obj").getModule().getClass().getName());
70 String value2 = (String) pluginAccessor.getEnabledModulesByClass(Callable.class).get(0).call();
71 assertTrue(value2.startsWith("count:2-"));
72 String id2 = value2.substring("count:2-".length());
73
74 assertNotSame(id, id2);
75
76 }
77 }