View Javadoc
1   package it.com.atlassian.plugin.osgi;
2   
3   import com.atlassian.plugin.osgi.PluginInContainerTestBase;
4   import com.atlassian.plugin.osgi.StaticBooleanFlag;
5   import com.atlassian.plugin.osgi.StaticHolder;
6   import com.atlassian.plugin.test.PluginJarBuilder;
7   import org.junit.After;
8   import org.junit.Test;
9   
10  import static org.junit.Assert.assertEquals;
11  import static org.junit.Assert.assertFalse;
12  import static org.junit.Assert.assertTrue;
13  
14  public class TestPluginSpringInteraction extends PluginInContainerTestBase {
15  
16      @After
17      public void tearDown() {
18          StaticHolder.set(null);
19      }
20  
21      @Test
22      public void testDisposableAndAutowiring() throws Exception {
23          StaticBooleanFlag.flag.set(false);
24          StaticHolder.set(null);
25  
26          createTestPluginJarBuilder().build(pluginsDir);
27  
28          initPluginManager();
29          // destroy should not have been called yet
30          assertFalse(StaticBooleanFlag.flag.get());
31          // but autowiring should have happened exactly once
32          assertEquals(Integer.valueOf(1), StaticHolder.get());
33  
34          // on disable
35          pluginController.disablePlugin("test.plugin");
36          assertTrue(StaticBooleanFlag.flag.get());
37          pluginController.enablePlugins("test.plugin");
38  
39          // on framework shutdown
40          StaticBooleanFlag.flag.set(false);
41          osgiContainerManager.stop();
42          assertTrue(StaticBooleanFlag.flag.get());
43      }
44  
45      @Test
46      public void testAutowiringHappensOnce() throws Exception {
47          // create the plugin and verify that autowiring happens only once, even if <context:annotation-config/> is
48          // configured by the plugin
49          createTestPluginJarBuilder().addFormattedResource("META-INF/spring/plugin-context.xml",
50                  "<?xml version='1.0' encoding='UTF-8'?>",
51                  "<beans xmlns:osgi='http://www.springframework.org/schema/osgi'",
52                  "       xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'",
53                  "       xmlns:context='http://www.springframework.org/schema/context'",
54                  "       xmlns='http://www.springframework.org/schema/beans'",
55                  "              xsi:schemaLocation='http://www.springframework.org/schema/beans ",
56                  "              http://www.springframework.org/schema/beans/spring-beans-2.5.xsd",
57                  "              http://www.springframework.org/schema/context",
58                  "              http://www.springframework.org/schema/context/spring-context.xsd'>",
59                  "  <context:annotation-config/>",
60                  "</beans>")
61                  .build(pluginsDir);
62  
63          initPluginManager();
64          assertEquals(Integer.valueOf(1), StaticHolder.get());
65      }
66  
67      private PluginJarBuilder createTestPluginJarBuilder() throws Exception {
68          return new PluginJarBuilder("testDisposableAndAutowiring")
69                  .addFormattedResource("atlassian-plugin.xml",
70                  "<atlassian-plugin name='Test' key='test.plugin' pluginsVersion='2'>",
71                  "    <plugin-info>",
72                  "        <version>1.0</version>",
73                  "    </plugin-info>",
74                  "    <component key='obj' class='my.Foo'/>",
75                  "    <component key='bar' class='my.Bar'/>",
76                  "</atlassian-plugin>")
77                  .addFormattedJava("my.Bar",
78                          "package my;",
79                          "public class Bar {",
80                          "}")
81                  .addFormattedJava("my.Foo",
82                          "package my;",
83                          "public class Foo implements org.springframework.beans.factory.DisposableBean{",
84                          "  private int counter;",
85                          "  @org.springframework.beans.factory.annotation.Autowired",
86                          "  public void setBar(my.Bar bar) {",
87                          "    com.atlassian.plugin.osgi.StaticHolder.set(++counter);",
88                          "  }",
89                          "  @Override",
90                          "  public void destroy() {",
91                          "    com.atlassian.plugin.osgi.StaticBooleanFlag.flag.set(true);",
92                          "  }",
93                          "}");
94  
95      }
96  }