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