/*
* JBoss, Home of Professional Open Source
* Copyright 2015, Red Hat Inc., and individual contributors as indicated
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jboss.as.test.integration.domain.management.cli;
import org.apache.commons.io.FileUtils;
import org.jboss.as.test.integration.domain.management.util.DomainTestSupport;
import org.jboss.as.test.integration.domain.suites.CLITestSuite;
import org.jboss.as.test.integration.management.base.AbstractCliTestBase;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import org.jboss.logging.Logger;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import java.io.File;
import java.io.IOException;
/**
* Test for providing profile cloning ability (runtime (CLI)) to create
* new profiles based on existing JBoss profiles.
*
* Test clone "default" profile to "clone-profile-test-case-default" profile.
*
* https://issues.jboss.org/browse/WFLY-4838
*
* @author Marek Kopecky <mkopecky@redhat.com>
*/
public class CloneProfileTestCase extends AbstractCliTestBase {
private static Logger log = Logger.getLogger(CloneProfileTestCase.class);
private static final String ORIGINAL_PROFILE = "default";
private static final String NEW_PROFILE = "clone-profile-test-case-default";
/**
* Domain configuration
*/
private static File domainCfg;
@BeforeClass
public static void before() throws Exception {
DomainTestSupport domainSupport = CLITestSuite.createSupport(CloneProfileTestCase.class.getSimpleName());
AbstractCliTestBase.initCLI(DomainTestSupport.masterAddress);
File masterDir = new File(domainSupport.getDomainMasterConfiguration().getDomainDirectory());
domainCfg = new File(masterDir, "configuration"
+ File.separator + "testing-domain-standard.xml");
}
@AfterClass
public static void after() throws Exception {
AbstractCliTestBase.closeCLI();
CLITestSuite.stopSupport();
}
/**
* Sends command line to CLI, validate and return output.
*
* @param line command line
* @return CLI output
*/
private String cliRequest(String line, boolean successRequired) {
log.trace(line);
cli.sendLine(line);
String output = cli.readOutput();
if (successRequired) {
assertTrue("CLI command \"" + line + " doesn't contain \"success\"", output.contains("success"));
}
return output;
}
@Test
public void testProfile() throws IOException {
// get domain configuration
String domainCfgContent = FileUtils.readFileToString(domainCfg);
assertTrue("Domain configuration is not initialized correctly.", domainCfgContent.indexOf(NEW_PROFILE) == -1);
// clone profile
cliRequest("/profile=" + ORIGINAL_PROFILE + ":clone(to-profile=" + NEW_PROFILE + ")", true);
// get and check submodules
String originSubmodules = cliRequest("ls /profile=" + ORIGINAL_PROFILE + "/subsystem", false);
String newSubmodules = cliRequest("ls /profile=" + NEW_PROFILE + "/subsystem", false);
assertEquals("New profile has different submodules than origin profile.", originSubmodules, newSubmodules);
// check domain configuration
domainCfgContent = FileUtils.readFileToString(domainCfg);
assertTrue("Domain configuration doesn't contain " + NEW_PROFILE + "profile.", domainCfgContent.indexOf(NEW_PROFILE) != -1);
}
}