1 package com.atlassian.plugin.osgi;
2
3 import com.atlassian.plugin.DefaultModuleDescriptorFactory;
4 import com.atlassian.plugin.hostcontainer.DefaultHostContainer;
5 import com.atlassian.plugin.osgi.hostcomponents.ComponentRegistrar;
6 import com.atlassian.plugin.osgi.hostcomponents.HostComponentProvider;
7 import com.atlassian.plugin.test.PluginJarBuilder;
8
9 import java.util.concurrent.Callable;
10
11 public class TestPluginFrameworkWarmRestart extends PluginInContainerTestBase
12 {
13 public void testWarmRestart() throws Exception
14 {
15 final DefaultModuleDescriptorFactory factory = new DefaultModuleDescriptorFactory(new DefaultHostContainer());
16 factory.addModuleDescriptor("object", ObjectModuleDescriptor.class);
17
18 final HostComponentProvider prov = new HostComponentProvider()
19 {
20 private int count = 1;
21 public void provide(ComponentRegistrar registrar)
22 {
23 registrar.register(Callable.class).forInstance(new Callable()
24 {
25 public Object call()
26 {
27 return "count:"+(count++)+"-";
28 }
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 }