package org.rhq.plugins.apache;
import java.io.File;
import java.util.List;
import net.augeas.Augeas;
import org.rhq.augeas.AugeasProxy;
import org.rhq.augeas.node.AugeasNode;
import org.rhq.augeas.tree.AugeasTree;
import org.rhq.core.domain.configuration.Configuration;
import org.rhq.core.domain.configuration.definition.ConfigurationDefinition;
import org.rhq.core.pc.PluginContainer;
import org.rhq.plugins.apache.augeas.AugeasConfigurationApache;
import org.rhq.plugins.apache.mapping.ApacheAugeasMapping;
import org.rhq.plugins.apache.util.ApacheConfigurationUtil;
import org.rhq.plugins.apache.util.AugeasNodeSearch;
public class ApacheAugeasTest {
/**
* Tests if all included configuration files were loaded.
*/
public void testFiles(AugeasProxy augeas) {
System.out.print("Test if all included configuration files was discovered and loaded.");
AugeasConfigurationApache config = (AugeasConfigurationApache) augeas.getConfiguration();
List<File> configFiles = config.getAllConfigurationFiles();
/*
* There are three files one main file one which is included from main file and one which is included from
* included file and which is declared in IfModule. All of them must be discovered.
*/
for (File confFile : configFiles) {
boolean found = false;
for (String fileName : ApacheTestConstants.CONFIG_FILE_NAMES) {
if (!confFile.getName().equals(fileName))
found = true;
}
assert found;
}
System.out.println(" [success!]");
}
/**
* Tests mapping of augeas tree to configuration and back.
* @param cont
* @throws Exception
*/
public void testMapping(PluginContainer cont) {
ApacheAugeasUtil apacheUtil = new ApacheAugeasUtil();
try {
//copy all configuration files to temporary folder
String path = apacheUtil.prepareConfigFiles();
//loading of augeas from temporary folder
AugeasProxy proxy =
apacheUtil.initAugeas(path + File.separator + ApacheTestConstants.ROOT_CONFIG_FILE_NAME, path, path);
AugeasTree tree = proxy.getAugeasTree(ApacheTestConstants.MODULE_NAME, true);
testLoadConfig(tree, cont);
testSaveConfig(cont);
apacheUtil.cleanConfigFiles();
} catch (Exception e) {
e.printStackTrace();
apacheUtil.cleanConfigFiles();
}
}
/**
* Tests mapping of augeas tree to rhq configuration.
* @param tree
* @param container
* @throws Exception
*/
public void testLoadConfig(AugeasTree tree, PluginContainer container) throws Exception {
System.out.print("\tTest mapping of augeas tree to rhq configuration.");
ApacheConfigurationUtil util = new ApacheConfigurationUtil();
for (Components component : Components.values()) {
//get nodes for each component
List<AugeasNode> nodes = component.getAllNodes(tree);
for (int i = 0; i < nodes.size(); i++) {
String key = AugeasNodeSearch.getNodeKey(nodes.get(i), tree.getRootNode());
Configuration config =
ApacheConfigurationUtil.componentToConfiguration(container, component, key, tree);
//load configuration for related component and augeas node from tempfolder
Configuration expectedConfig =
util.loadConfiguration(ApacheTestConstants.getConfigFilesPathForLoad() + File.separator
+ component.getComponentName() + String.valueOf(i));
assert config.equals(expectedConfig) : "Unexpected Resource configuration - \nExpected:\n\t"
+ expectedConfig.toString(true) + "\nActual:\n\t" + config.toString(true);
}
}
System.out.println(" [success!]");
}
/**
* Tests mapping of rhq configuration to augeas tree.
*
* @param container
* @throws Exception
*/
public void testSaveConfig(PluginContainer container) throws Exception {
System.out.print("Test mapping of rhq configuration to augeas tree.");
ApacheAugeasUtil apacheUtil = new ApacheAugeasUtil();
//load augeas tree from temporary folder
String path = ApacheTestConstants.getApacheConfigFilesPath();
AugeasProxy proxy = apacheUtil.initAugeas(path + ApacheTestConstants.ROOT_CONFIG_FILE_NAME, path, path);
AugeasTree tree = proxy.getAugeasTree(ApacheTestConstants.MODULE_NAME, true);
//load augeas tree from temporary folder "updateconfig"
String pathUpdate = ApacheTestConstants.getApacheConfigFilesPathForUpdate();
AugeasProxy proxyUpdate =
apacheUtil.initAugeas(pathUpdate + ApacheTestConstants.ROOT_CONFIG_FILE_NAME, pathUpdate, pathUpdate);
AugeasTree treeUpdate = proxyUpdate.getAugeasTree(ApacheTestConstants.MODULE_NAME, true);
for (Components component : Components.values()) {
List<AugeasNode> nodes = component.getAllNodes(tree);
ConfigurationDefinition configDef =
ApacheConfigurationUtil.getConfigurationDefinition(container, component);
for (int i = 0; i < nodes.size(); i++) {
//load component from first tree - transfare that tree to configuration - and update second tree with that configuration
String key = AugeasNodeSearch.getNodeKey(nodes.get(i), tree.getRootNode());
Configuration config =
ApacheConfigurationUtil.componentToConfiguration(container, component, key, tree);
AugeasNode updateNode = AugeasNodeSearch.findNodeById(treeUpdate.getRootNode(), key);
ApacheAugeasMapping mapping = new ApacheAugeasMapping(treeUpdate);
mapping.updateAugeas(updateNode, config, configDef);
}
}
treeUpdate.save();
//test if the updated augeas tree can be mapped to configuration stored at files in "loadconfig" temporary directory
testLoadConfig(treeUpdate, container);
System.out.println(" [success!]");
}
public boolean isAugeasInstalled() {
try {
Augeas ag = new Augeas();
} catch (Throwable e) {
return false;
}
return true;
}
}