1 package com.atlassian.plugin.osgi.factory.transform;
2
3 import com.atlassian.plugin.PluginAccessor;
4 import com.atlassian.plugin.JarPluginArtifact;
5 import com.atlassian.plugin.osgi.hostcomponents.HostComponentRegistration;
6 import com.atlassian.plugin.osgi.container.impl.DefaultOsgiPersistentCache;
7 import com.atlassian.plugin.osgi.factory.transform.model.SystemExports;
8 import com.atlassian.plugin.test.PluginJarBuilder;
9 import com.atlassian.plugin.test.PluginTestUtils;
10
11 import org.osgi.framework.Constants;
12
13 import java.io.File;
14 import java.io.IOException;
15 import java.net.URISyntaxException;
16 import java.util.ArrayList;
17 import java.util.HashMap;
18 import java.util.Map;
19 import java.util.jar.Attributes;
20 import java.util.jar.JarFile;
21 import java.util.zip.ZipEntry;
22 import java.util.zip.ZipFile;
23
24 import junit.framework.TestCase;
25
26 public class TestDefaultPluginTransformer extends TestCase
27 {
28 private DefaultPluginTransformer transformer;
29 private File tmpDir;
30
31 @Override
32 protected void setUp() throws Exception
33 {
34 super.setUp();
35 tmpDir = PluginTestUtils.createTempDirectory("plugin-transformer");
36 transformer = new DefaultPluginTransformer(new DefaultOsgiPersistentCache(tmpDir), SystemExports.NONE, null, PluginAccessor.Descriptor.FILENAME);
37 }
38
39 @Override
40 protected void tearDown() throws Exception
41 {
42 super.tearDown();
43 tmpDir = null;
44 transformer = null;
45 }
46
47 public void testAddFilesToZip() throws URISyntaxException, IOException
48 {
49 final File file = PluginTestUtils.getFileForResource("myapp-1.0-plugin.jar");
50
51 final Map<String, byte[]> files = new HashMap<String, byte[]>()
52 {
53 {
54 put("foo", "bar".getBytes());
55 }
56 };
57 final File copy = transformer.addFilesToExistingZip(file, files);
58 assertNotNull(copy);
59 assertTrue(!copy.getName().equals(file.getName()));
60 assertTrue(copy.length() != file.length());
61
62 final ZipFile zip = new ZipFile(copy);
63 final ZipEntry entry = zip.getEntry("foo");
64 assertNotNull(entry);
65 }
66
67 public void testTransform() throws Exception
68 {
69 final File file = new PluginJarBuilder()
70 .addFormattedJava("my.Foo",
71 "package my;",
72 "public class Foo {",
73 " com.atlassian.plugin.osgi.factory.transform.Fooable bar;",
74 "}")
75 .addPluginInformation("foo", "foo", "1.1")
76 .build();
77
78 final File copy = transformer.transform(new JarPluginArtifact(file), new ArrayList<HostComponentRegistration>()
79 {
80 {
81 add(new StubHostComponentRegistration(Fooable.class));
82 }
83 });
84
85 assertNotNull(copy);
86 assertTrue(copy.getName().contains(String.valueOf(file.lastModified())));
87 assertTrue(copy.getName().endsWith(".jar"));
88 assertEquals(tmpDir.getAbsolutePath(), copy.getParentFile().getParentFile().getAbsolutePath());
89 final JarFile jar = new JarFile(copy);
90 final Attributes attrs = jar.getManifest().getMainAttributes();
91
92 assertEquals("1.1", attrs.getValue(Constants.BUNDLE_VERSION));
93
94 assertNotNull(jar.getEntry("META-INF/spring/atlassian-plugins-host-components.xml"));
95 }
96
97 public void testGenerateCacheName() throws IOException
98 {
99 File tmp = File.createTempFile("asdf", ".jar", tmpDir);
100 assertTrue(DefaultPluginTransformer.generateCacheName(tmp).endsWith(".jar"));
101 tmp = File.createTempFile("asdf", "asdf", tmpDir);
102 assertTrue(DefaultPluginTransformer.generateCacheName(tmp).endsWith(String.valueOf(tmp.lastModified())));
103
104 tmp = File.createTempFile("asdf", "asdf.", tmpDir);
105 assertTrue(DefaultPluginTransformer.generateCacheName(tmp).endsWith(String.valueOf(tmp.lastModified())));
106
107 tmp = File.createTempFile("asdf", "asdf.s", tmpDir);
108 assertTrue(DefaultPluginTransformer.generateCacheName(tmp).endsWith(String.valueOf(".s")));
109
110 }
111
112 }