/src/test/org/apache/nutch/plugin/TestPluginSystem.java
Java | 282 lines | 183 code | 25 blank | 74 comment | 17 complexity | 93152c7fd79eb8b200459f5a0aae3bc6 MD5 | raw file
- /*
- /**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- package org.apache.nutch.plugin;
- import java.io.File;
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.FileWriter;
- import java.io.IOException;
- import java.util.LinkedList;
- import java.util.Locale;
- import java.util.Properties;
- import junit.framework.TestCase;
- import org.apache.hadoop.conf.Configuration;
- import org.apache.nutch.util.NutchConfiguration;
- /**
- * Unit tests for the plugin system
- *
- * @author joa23
- */
- public class TestPluginSystem extends TestCase {
- private int fPluginCount;
- private LinkedList fFolders = new LinkedList();
- private Configuration conf ;
- private PluginRepository repository;
- protected void setUp() throws Exception {
- this.conf = NutchConfiguration.create();
- conf.set("plugin.includes", ".*");
- // String string = this.conf.get("plugin.includes", "");
- // conf.set("plugin.includes", string + "|Dummy*");
- fPluginCount = 5;
- createDummyPlugins(fPluginCount);
- this.repository = PluginRepository.get(conf);
- }
- /*
- * (non-Javadoc)
- *
- * @see junit.framework.TestCase#tearDown()
- */
- protected void tearDown() throws Exception {
- for (int i = 0; i < fFolders.size(); i++) {
- File folder = (File) fFolders.get(i);
- delete(folder);
- folder.delete();
- }
- }
- /**
- */
- public void testPluginConfiguration() {
- String string = getPluginFolder();
- File file = new File(string);
- if (!file.exists()) {
- file.mkdir();
- }
- assertTrue(file.exists());
- }
- /**
- */
- public void testLoadPlugins() {
- PluginDescriptor[] descriptors = repository
- .getPluginDescriptors();
- int k = descriptors.length;
- assertTrue(fPluginCount <= k);
- for (int i = 0; i < descriptors.length; i++) {
- PluginDescriptor descriptor = descriptors[i];
- if (!descriptor.getPluginId().startsWith("getPluginFolder()")) {
- continue;
- }
- assertEquals(1, descriptor.getExportedLibUrls().length);
- assertEquals(1, descriptor.getNotExportedLibUrls().length);
- }
- }
- /**
- *
- */
- public void testGetExtensionAndAttributes() {
- String xpId = " sdsdsd";
- ExtensionPoint extensionPoint =repository
- .getExtensionPoint(xpId);
- assertEquals(extensionPoint, null);
- Extension[] extension1 = repository
- .getExtensionPoint(getGetExtensionId()).getExtensions();
- assertEquals(extension1.length, fPluginCount);
- for (int i = 0; i < extension1.length; i++) {
- Extension extension2 = extension1[i];
- String string = extension2.getAttribute(getGetConfigElementName());
- assertEquals(string, getParameterValue());
- }
- }
- /**
- * @throws PluginRuntimeException
- */
- public void testGetExtensionInstances() throws PluginRuntimeException {
- Extension[] extensions = repository
- .getExtensionPoint(getGetExtensionId()).getExtensions();
- assertEquals(extensions.length, fPluginCount);
- for (int i = 0; i < extensions.length; i++) {
- Extension extension = extensions[i];
- Object object = extension.getExtensionInstance();
- if (!(object instanceof HelloWorldExtension))
- fail(" object is not a instance of HelloWorldExtension");
- ((ITestExtension) object).testGetExtension("Bla ");
- String string = ((ITestExtension) object).testGetExtension("Hello");
- assertEquals("Hello World", string);
- }
- }
- /**
- *
- *
- */
- public void testGetClassLoader() {
- PluginDescriptor[] descriptors = repository
- .getPluginDescriptors();
- for (int i = 0; i < descriptors.length; i++) {
- PluginDescriptor descriptor = descriptors[i];
- assertNotNull(descriptor.getClassLoader());
- }
- }
- /**
- * @throws IOException
- */
- public void testGetResources() throws IOException {
- PluginDescriptor[] descriptors = repository
- .getPluginDescriptors();
- for (int i = 0; i < descriptors.length; i++) {
- PluginDescriptor descriptor = descriptors[i];
- if (!descriptor.getPluginId().startsWith("getPluginFolder()")) {
- continue;
- }
- String value = descriptor.getResourceString("key", Locale.UK);
- assertEquals("value", value);
- value = descriptor.getResourceString("key",
- Locale.TRADITIONAL_CHINESE);
- assertEquals("value", value);
- }
- }
- /**
- * @return a PluginFolderPath
- */
- private String getPluginFolder() {
- String[] strings = conf.getStrings("plugin.folders");
- if (strings == null || strings.length == 0)
- fail("no plugin directory setuped..");
- String name = strings[0];
- return new PluginManifestParser(conf, this.repository).getPluginFolder(name).toString();
- }
- /**
- * Creates some Dummy Plugins
- *
- * @param pCount
- */
- private void createDummyPlugins(int pCount) {
- String string = getPluginFolder();
- try {
- File folder = new File(string);
- folder.mkdir();
- for (int i = 0; i < pCount; i++) {
- String pluginFolder = string + File.separator + "DummyPlugin"
- + i;
- File file = new File(pluginFolder);
- file.mkdir();
- fFolders.add(file);
- createPluginManifest(i, file.getAbsolutePath());
- createResourceFile(file.getAbsolutePath());
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- /**
- * Creates an ResourceFile
- *
- * @param pFolderPath
- * @throws FileNotFoundException
- * @throws IOException
- */
- private void createResourceFile(String pFolderPath)
- throws FileNotFoundException, IOException {
- Properties properties = new Properties();
- properties.setProperty("key", "value");
- properties.store(new FileOutputStream(pFolderPath + File.separator
- + "messages" + ".properties"), "");
- }
- /**
- * Deletes files in path
- *
- * @param path
- * @throws IOException
- */
- private void delete(File path) throws IOException {
- File[] files = path.listFiles();
- for (int i = 0; i < files.length; ++i) {
- if (files[i].isDirectory())
- delete(files[i]);
- files[i].delete();
- }
- }
- /**
- * Creates an Plugin Manifest File
- *
- * @param i
- * @param pFolderPath
- * @throws IOException
- */
- private void createPluginManifest(int i, String pFolderPath)
- throws IOException {
- FileWriter out = new FileWriter(pFolderPath + File.separator
- + "plugin.xml");
- String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
- + "<!--this is just a simple plugin for testing issues.-->"
- + "<plugin id=\"org.apache.nutch.plugin."
- + i
- + "\" name=\""
- + i
- + "\" version=\"1.0\" provider-name=\"joa23\" "
- + "class=\"org.apache.nutch.plugin.SimpleTestPlugin\">"
- + "<extension-point id=\"aExtensioID\" "
- + "name=\"simple Parser Extension\" "
- + "schema=\"schema/testExtensionPoint.exsd\"/>"
- + "<runtime><library name=\"libs/exported.jar\"><extport/></library>"
- + "<library name=\"libs/not_exported.jar\"/></runtime>"
- + "<extension point=\"aExtensioID\">"
- + "<implementation name=\"simple Parser Extension\" "
- + "id=\"aExtensionId.\" class=\"org.apache.nutch.plugin.HelloWorldExtension\">"
- + "<parameter name=\"dummy-name\" value=\"a simple param value\"/>"
- + "</implementation></extension></plugin>";
- out.write(xml);
- out.flush();
- out.close();
- }
- private String getParameterValue() {
- return "a simple param value";
- }
- private static String getGetExtensionId() {
- return "aExtensioID";
- }
- private static String getGetConfigElementName() {
- return "dummy-name";
- }
- public static void main(String[] args) throws IOException {
- new TestPluginSystem().createPluginManifest(1, "/");
- }
- }