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
30 assertFalse(StaticBooleanFlag.flag.get());
31
32 assertEquals(Integer.valueOf(1), StaticHolder.get());
33
34
35 pluginController.disablePlugin("test.plugin");
36 assertTrue(StaticBooleanFlag.flag.get());
37 pluginController.enablePlugins("test.plugin");
38
39
40 StaticBooleanFlag.flag.set(false);
41 osgiContainerManager.stop();
42 assertTrue(StaticBooleanFlag.flag.get());
43 }
44
45 @Test
46 public void testAutowiringHappensOnce() throws Exception {
47
48
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 }