/*
* JBoss, Home of Professional Open Source.
* Copyright 2015, Red Hat, Inc., and individual contributors
* as indicated by the @author tags. See the copyright.txt file 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.cli.parsing.test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.util.List;
import org.jboss.as.cli.CommandContext;
import org.jboss.as.cli.CommandContextFactory;
import org.jboss.as.cli.Util;
import org.jboss.dmr.ModelNode;
import org.jboss.dmr.ModelType;
import org.junit.BeforeClass;
import org.junit.Test;
/**
*
* @author Alexey Loubyansky
*/
public class LinebreaksTestCase {
private static final String LN = Util.LINE_SEPARATOR;
private static CommandContext ctx;
private final String[] headers = new String[]{"{","rollout"," main-server-group", "(",
"max-failed-servers","=","2",",",
"rolling-to-servers","=","true",")",",",
"other-server-group",
" rollback-across-groups",";",
"rollback-on-runtime-failure","=","true",
"}"};
private final String[] op = new String[]{
":",
"read-resource","(",
"include-defaults","=","true",",",
"recursive","=","false",")"
};
private final String[] cmd = new String[]{
"read-attribute"," product-name",
" --include-defaults","=","true",
" --verbose",
" --headers","="
};
@BeforeClass
public static void setup() throws Exception {
ctx = CommandContextFactory.getInstance().newCommandContext();
}
@Test
public void testOp() throws Exception {
testPieces(op);
}
@Test
public void testCmd() throws Exception {
testPieces(cmd);
}
@Test
public void testLineBreaksAndTabs() throws Exception {
final StringBuilder buf = new StringBuilder();
buf.append("/subsystem=security/security-domain=DemoAuthRealm/authentication=classic:add( \\").append(Util.LINE_SEPARATOR);
buf.append('\t').append("login-modules=[ \\").append(Util.LINE_SEPARATOR);
buf.append("\t\t").append("{ \\").append(Util.LINE_SEPARATOR);
buf.append("\t\t\t").append("\"code\" => \"Database\", \\").append(Util.LINE_SEPARATOR);
buf.append("\t\t\t").append("flag=>required, \\").append(Util.LINE_SEPARATOR);
buf.append("\t\t\t").append("test1 = > required, \\").append(Util.LINE_SEPARATOR);
buf.append("\t\t\t").append("test2 =\"> required\", \\").append(Util.LINE_SEPARATOR);
buf.append("\t\t\t").append("\"module-options\" = [ \\").append(Util.LINE_SEPARATOR);
buf.append("\t\t\t\t").append("\"unauthenticatedIdentity\"=\"guest\", \\").append(Util.LINE_SEPARATOR);
buf.append("\t\t\t\t").append("\"dsJndiName\"=\"java:jboss/jdbc/ApplicationDS\", \\").append(Util.LINE_SEPARATOR);
buf.append("\t\t\t\t").append("\"principalsQuery\"=\"select password from users where username=?\", \\").append(Util.LINE_SEPARATOR);
buf.append("\t\t\t\t").append("\"rolesQuery\"=\"select name, 'Roles' FROM user_roless ur, roles r, user u WHERE u.username=? and u.id = ur.user_id and ur.role_id = r.id\", \\").append(Util.LINE_SEPARATOR);
buf.append("\t\t\t\t").append("\"hashAlgorithm\" = \"MD5\", \\").append(Util.LINE_SEPARATOR);
buf.append("\t\t\t\t").append("hashEncoding = hex \\").append(Util.LINE_SEPARATOR);
buf.append("\t\t\t").append("] \\").append(Util.LINE_SEPARATOR);
buf.append("\t\t").append("} \\").append(Util.LINE_SEPARATOR);
buf.append('\t').append(']').append(Util.LINE_SEPARATOR);
buf.append(')');
final ModelNode node = ctx.buildRequest(buf.toString());
ModelNode addr = new ModelNode();
addr.add("subsystem", "security");
addr.add("security-domain", "DemoAuthRealm");
addr.add("authentication", "classic");
assertEquals(addr, node.get(Util.ADDRESS));
assertEquals("add", node.get(Util.OPERATION).asString());
final ModelNode loginModules = node.get("login-modules");
assertTrue(loginModules.isDefined());
assertEquals(ModelType.LIST, loginModules.getType());
List<ModelNode> list = loginModules.asList();
assertEquals(1, list.size());
final ModelNode module = list.get(0);
assertTrue(module.isDefined());
assertEquals("Database", module.get("code").asString());
assertEquals("required", module.get("flag").asString());
assertEquals("> required", module.get("test1").asString());
assertEquals("> required", module.get("test2").asString());
final ModelNode options = module.get("module-options");
assertTrue(options.isDefined());
assertEquals(ModelType.LIST, options.getType());
list = options.asList();
assertEquals(6, list.size());
assertEquals("guest", list.get(0).get("unauthenticatedIdentity").asString());
assertEquals("java:jboss/jdbc/ApplicationDS", list.get(1).get("dsJndiName").asString());
assertEquals("select password from users where username=?", list.get(2).get("principalsQuery").asString());
assertEquals("select name, 'Roles' FROM user_roless ur, roles r, user u WHERE u.username=? and u.id = ur.user_id and ur.role_id = r.id", list.get(3).get("rolesQuery").asString());
assertEquals("MD5", list.get(4).get("hashAlgorithm").asString());
assertEquals("hex", list.get(5).get("hashEncoding").asString());
}
protected void testPieces(String[] arr) throws Exception {
final StringBuilder buf = new StringBuilder();
for(String line : arr) {
buf.append(line);
}
for(String line : headers) {
buf.append(line);
}
final String noLN = buf.toString();
buf.setLength(0);
buf.append(arr[0]);
for(int i = 1; i < arr.length; ++i) {
buf.append('\\').append(LN).append(arr[i]);
}
for(int i = 0; i < headers.length; ++i) {
buf.append('\\').append(LN).append(headers[i]);
}
assertEquivalent(noLN, buf.toString());
}
protected void assertEquivalent(String line1, String line2) throws Exception {
final ModelNode op1 = ctx.buildRequest(line1);
// System.out.println(line2);
final ModelNode op2 = ctx.buildRequest(line2);
assertEquals(op1, op2);
// System.out.println(op1);
// System.out.println(op2);
}
}