View Javadoc

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  }