/*
* RHQ Management Platform
* Copyright (C) 2005-2008 Red Hat, Inc.
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License, version 2, as
* published by the Free Software Foundation, and/or the GNU Lesser
* General Public License, version 2.1, also as published by the Free
* Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License and the GNU Lesser General Public License
* for more details.
*
* You should have received a copy of the GNU General Public License
* and the GNU Lesser General Public License along with this program;
* if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package org.rhq.core.clientapi.descriptor;
import static org.testng.Assert.*;
import org.testng.annotations.Test;
import org.rhq.core.clientapi.descriptor.plugin.PluginDescriptor;
import org.rhq.core.clientapi.descriptor.plugin.Help;
import org.rhq.core.domain.plugin.Plugin;
import org.rhq.core.util.MessageDigestGenerator;
import java.net.URL;
import java.util.jar.Manifest;
import java.util.jar.Attributes;
import java.util.jar.JarOutputStream;
import java.util.jar.JarFile;
import java.io.FileOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.ByteArrayInputStream;
public class PluginTransformerTest {
@Test
public void pluginNameShouldBeSetToDescriptorName() throws Exception {
PluginDescriptor pluginDescriptor = new PluginDescriptor();
pluginDescriptor.setName("testPlugin");
PluginTransformer transformer = new PluginTransformer();
Plugin plugin = transformer.toPlugin(pluginDescriptor, getTestPluginURL());
assertEquals(
plugin.getName(),
pluginDescriptor.getName(),
"The plugin.name property should be set to the plugin descriptor name."
);
}
@Test
public void pluginDisplayNameShouldBeSetToDescriptorDisplayName() throws Exception {
PluginDescriptor pluginDescriptor = new PluginDescriptor();
pluginDescriptor.setName("testPlugin");
pluginDescriptor.setDisplayName("Test Plugin");
PluginTransformer transformer = new PluginTransformer();
Plugin plugin = transformer.toPlugin(pluginDescriptor, getTestPluginURL());
assertEquals(
plugin.getDisplayName(),
pluginDescriptor.getDisplayName(),
"The plugin.displayName property should be set to the plugin descriptor display name."
);
}
@Test
public void pluginDisplayNameShouldBeSetToDescriptorNameWhenItsDisplayNameIsNull() throws Exception {
PluginDescriptor pluginDescriptor = new PluginDescriptor();
pluginDescriptor.setName("testPlugin");
PluginTransformer transformer = new PluginTransformer();
Plugin plugin = transformer.toPlugin(pluginDescriptor, getTestPluginURL());
assertEquals(
plugin.getDisplayName(),
pluginDescriptor.getName(),
"The plugin.displayName property should be set to the plugin descriptor name when the descriptor display name is null."
);
}
@Test
public void pluginAmpsVersionShouldBeSetToDescriptorAmpsVersion() throws Exception {
PluginDescriptor pluginDescriptor = new PluginDescriptor();
pluginDescriptor.setAmpsVersion("2.1");
PluginTransformer transformer = new PluginTransformer();
Plugin plugin = transformer.toPlugin(pluginDescriptor, getTestPluginURL());
assertEquals(
plugin.getAmpsVersion(),
pluginDescriptor.getAmpsVersion(),
"The plugin.ampsVersion property should be set to the plugin descriptor ampsVersion."
);
}
@Test
public void pluginAmpsVersionShouldBeSetToDefaultWhenDescriptorAmpsVersionIsNull() throws Exception {
PluginDescriptor pluginDescriptor = new PluginDescriptor();
PluginTransformer transformer = new PluginTransformer();
Plugin plugin = transformer.toPlugin(pluginDescriptor, getTestPluginURL());
assertEquals(
plugin.getAmpsVersion(),
"2.0",
"The Plugin.ampsVersion property should default to 2.0 when it is not defined in the plugin descriptor"
);
}
@Test
public void pluginDescriptionShouldBeSetToDescriptorDescription() throws Exception {
PluginDescriptor pluginDescriptor = new PluginDescriptor();
pluginDescriptor.setDescription("description");
PluginTransformer transformer = new PluginTransformer();
Plugin plugin = transformer.toPlugin(pluginDescriptor, getTestPluginURL());
assertEquals(
plugin.getDescription(),
pluginDescriptor.getDescription(),
"The plugin.description property should be set to the plugin descriptor description."
);
}
@Test
public void pluginEnabledFlagShouldBeSetToTrue() throws Exception {
PluginDescriptor pluginDescriptor = new PluginDescriptor();
PluginTransformer transformer = new PluginTransformer();
Plugin plugin = transformer.toPlugin(pluginDescriptor, getTestPluginURL());
assertTrue(plugin.isEnabled(), "The plugin.enabled property should be set to true.");
}
@Test
public void pluginPathShouldBeSetToPathOfPluginURL() throws Exception {
File jarFile = createPluginJARFile();
PluginDescriptor pluginDescriptor = new PluginDescriptor();
URL pluginURL = toURL(jarFile);
PluginTransformer transformer = new PluginTransformer();
Plugin plugin = transformer.toPlugin(pluginDescriptor, pluginURL);
assertEquals(
plugin.getPath(),
pluginURL.getPath(),
"The plugin.path property should be set to the plugin url path."
);
}
@Test
public void pluginMtimeShouldBeSetToLastModificationTimeOfPluginJarFile() throws Exception {
File jarFile = createPluginJARFile();
PluginDescriptor pluginDescriptor = new PluginDescriptor();
URL pluginURL = toURL(jarFile);
PluginTransformer transformer = new PluginTransformer();
Plugin plugin = transformer.toPlugin(pluginDescriptor, pluginURL);
assertEquals(
plugin.getMtime(),
jarFile.lastModified(),
"The plugin.mtime property should be set to the last modification time of the plugin JAR file."
);
}
@Test
public void pluginHelpShouldBeSetToDescriptorHelp() throws Exception {
Help help = new Help();
help.getContent().add("help");
PluginDescriptor pluginDescriptor = new PluginDescriptor();
pluginDescriptor.setHelp(help);
PluginTransformer transformer = new PluginTransformer();
Plugin plugin = transformer.toPlugin(pluginDescriptor, getTestPluginURL());
assertEquals(
plugin.getHelp(),
pluginDescriptor.getHelp().getContent().get(0),
"The plugin.help property should be set to the plugin descriptor help."
);
}
@Test
public void pluginMd5ShouldBeSetToMd5OfPluginJarFile() throws Exception {
File jarFile = createPluginJARFile();
PluginDescriptor pluginDescriptor = new PluginDescriptor();
URL pluginURL = toURL(jarFile);
PluginTransformer transformer = new PluginTransformer();
Plugin plugin = transformer.toPlugin(pluginDescriptor, pluginURL);
assertEquals(
plugin.getMd5(),
MessageDigestGenerator.getDigestString(jarFile),
"The plugin.md5 property should be set to the MD5 sum of the plugin JAR file."
);
}
@Test
public void pluginVersionShouldBeSetToPluginDescriptorVersion() throws Exception {
PluginDescriptor pluginDescriptor = new PluginDescriptor();
pluginDescriptor.setVersion("2.1");
PluginTransformer transformer = new PluginTransformer();
Plugin plugin = transformer.toPlugin(pluginDescriptor, getTestPluginURL());
assertEquals(
plugin.getVersion(),
pluginDescriptor.getVersion(),
"The plugin.version property should be set to the plugin descriptor version."
);
}
@Test
public void pluginVersionShouldBeSetToVersionInPluginJarManifestWhenDescriptorVersionIsNull() throws Exception {
File jarFile = createPluginJARFile();
URL pluginURL = toURL(jarFile);
PluginTransformer transformer = new PluginTransformer();
Plugin plugin = transformer.toPlugin(new PluginDescriptor(), pluginURL);
assertEquals(
plugin.getVersion(),
getVersionFromPluginJarManifest(jarFile),
"The pliugin.version property should be set to the " + Attributes.Name.IMPLEMENTATION_VERSION +
" attribute in the plugin JAR manifest when the plugin descriptor version is null."
);
}
@Test(expectedExceptions = {PluginTransformException.class})
public void exceptionShouldBeThrownWhenVersionNotFoundInDescriptorOrPluginJarManifest() throws Exception {
File jarFile = createPluginJARFileWithoutVersionInManifest();
URL pluginURL = toURL(jarFile);
PluginTransformer transformer = new PluginTransformer();
Plugin plugin = transformer.toPlugin(new PluginDescriptor(), pluginURL);
}
URL getTestPluginURL() throws Exception {
File jarFile = createPluginJARFile();
return toURL(jarFile);
}
File createPluginJARFile() throws Exception {
URL url = getClass().getResource(".");
Manifest manifest = new Manifest();
Attributes attrs = manifest.getMainAttributes();
attrs.put(Attributes.Name.MANIFEST_VERSION, "1.0");
attrs.putValue(Attributes.Name.IMPLEMENTATION_VERSION.toString(), "2.1");
File jarFile = new File(url.getPath(), "test-plugin.jar");
JarOutputStream stream = new JarOutputStream(new FileOutputStream(jarFile), manifest);
stream.flush();
stream.close();
return jarFile;
}
File createPluginJARFileWithoutVersionInManifest() throws Exception {
URL url = getClass().getResource(".");
Manifest manifest = new Manifest();
File jarFile = new File(url.getPath(), "test-plugin-without-version.jar");
JarOutputStream stream = new JarOutputStream(new FileOutputStream(jarFile), manifest);
stream.flush();
stream.close();
return jarFile;
}
URL toURL(File file) throws Exception {
return file.toURI().toURL();
}
String getVersionFromPluginJarManifest(File pluginJarFile) throws Exception {
JarFile jarFile = new JarFile(pluginJarFile);
Manifest manifest = jarFile.getManifest();
Attributes attributes = manifest.getMainAttributes();
jarFile.close();
return attributes.getValue(Attributes.Name.IMPLEMENTATION_VERSION);
}
}