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