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