/*
* JBoss, Home of Professional Open Source.
* Copyright 2016, 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;
import org.jboss.dmr.ModelNode;
import org.junit.Assert;
import org.junit.Test;
/**
*
* @author jdenise@redhat.com
*/
public class AttachmentTestCase {
private static final String PATH = Util.isWindows()
? "c:\\\\a\\\\nice\\\\attachment\\\\path" : "/a/nice/attachment/path";
private static final String EXPECTED_PATH = Util.isWindows()
? "c:\\a\\nice\\attachment\\path" : PATH;
private static final String VAULT_ADD_DESCRIPTION = "{\n"
+ " \"request-properties\" : {\n"
+ " \"code\" : {\n"
+ " \"type\" : \"STRING\",\n"
+ " \"description\" : \"Fully Qualified Name of the Security Vault Implementation.\",\n"
+ " \"expressions-allowed\" : true,\n"
+ " \"required\" : false,\n"
+ " \"nillable\" : true\n"
+ " },\n"
+ " \"module\" : {\n"
+ " \"type\" : \"STRING\",\n"
+ " \"description\" : \"The name of the module to load up the vault implementation from.\",\n"
+ " \"expressions-allowed\" : true,\n"
+ " \"required\" : false,\n"
+ " \"nillable\" : true,\n"
+ " \"requires\" : [\"code\"]\n"
+ " },\n"
+ " \"vault-options\" : {\n"
+ " \"type\" : \"OBJECT\",\n"
+ " \"description\" : \"Security Vault options.\",\n"
+ " \"expressions-allowed\" : true,\n"
+ " \"required\" : false,\n"
+ " \"nillable\" : true,\n"
+ " \"value-type\" : \"STRING\"\n"
+ " }\n"
+ " }\n"
+ "}";
private static final String VAULT_ADD_VALUE = "{\n"
+ "\"vault-options\" : {\n"
+ " \"KEYSTORE_PASSWORD\" : \"MASK-20OB41ZkH8YzlPTICpKg5.\",\n"
+ " \"KEYSTORE_ALIAS\" : \"jboss\" }\n"
+ "}";
private static final String DESCRIPTION = "{\n"
+ " \"request-properties\": {\n"
+ " \"toto\": {\n"
+ " \"type\": \"LIST\",\n"
+ " \"description\": \"\",\n"
+ " \"value-type\": \"STRING\"\n"
+ " },\n"
+ " \"titi_a\": {\n"
+ " \"type\": \"INT\",\n"
+ " \"description\": \"\",\n"
+ " \"" + Util.ATTACHED_STREAMS + "\": true,\n"
+ " \"" + Util.FILESYSTEM_PATH + "\": true\n"
+ " },\n"
+ " \"tata_a\": {\n"
+ " \"type\": \"LIST\",\n"
+ " \"description\": \"\",\n"
+ " \"" + Util.ATTACHED_STREAMS + "\": true,\n"
+ " \"" + Util.FILESYSTEM_PATH + "\": true,\n"
+ " \"value-type\": \"INT\"\n"
+ " },\n"
+ " \"tutu\": {\n"
+ " \"type\": \"OBJECT\",\n"
+ " \"description\": \"\",\n"
+ " \"value-type\": {\n"
+ " \"p1_a\": {\n"
+ " \"type\": \"INT\",\n"
+ " \"" + Util.ATTACHED_STREAMS + "\": true,\n"
+ " \"" + Util.FILESYSTEM_PATH + "\": true\n"
+ " },\n"
+ " \"p2_a\": {\n"
+ " \"type\": \"INT\",\n"
+ " \"" + Util.ATTACHED_STREAMS + "\": true,\n"
+ " \"" + Util.FILESYSTEM_PATH + "\": true\n"
+ " },\n"
+ " \"p3\": {\n"
+ " \"type\": \"LIST\",\n"
+ " \"description\": \"\",\n"
+ " \"value-type\": {\n"
+ " \"oo_file_a\": {\n"
+ " \"type\": \"INT\",\n"
+ " \"" + Util.ATTACHED_STREAMS + "\": true,\n"
+ " \"" + Util.FILESYSTEM_PATH + "\": true\n"
+ " },\n"
+ " \"ii_file\": {\n"
+ " \"type\": \"STRING\"\n"
+ " }\n"
+ " }\n"
+ " },\n"
+ " \"p4\": {\n"
+ " \"type\": \"OBJECT\",\n"
+ " \"description\": \"\",\n"
+ " \"value-type\": {\n"
+ " \"oo_file_a\": {\n"
+ " \"type\": \"INT\",\n"
+ " \"" + Util.ATTACHED_STREAMS + "\": true,\n"
+ " \"" + Util.FILESYSTEM_PATH + "\": true\n"
+ " },\n"
+ " \"ii_file\": {\n"
+ " \"type\": \"STRING\"\n"
+ " }\n"
+ " }\n"
+ " }\n"
+ " }\n"
+ " }\n"
+ " ,\n"
+ " \"content\": {\n"
+ " \"type\": \"LIST\",\n"
+ " \"description\": \"\",\n"
+ " \"value-type\": {\n"
+ " \"source_file_a\": {\n"
+ " \"type\": \"INT\",\n"
+ " \"" + Util.ATTACHED_STREAMS + "\": true,\n"
+ " \"" + Util.FILESYSTEM_PATH + "\": true\n"
+ " },\n"
+ " \"target_file\": {\n"
+ " \"type\": \"STRING\"\n"
+ " }\n"
+ " }\n"
+ " }\n"
+ " }\n"
+ "}\n";
private static final String VALUE = "{\n"
+ " \"toto\": [\"a\", \"b\", \"c\"],\n"
+ " \"titi_a\": \"" + PATH + "0\",\n"
+ " \"tata_a\": [\"" + PATH + "1\", \"" + PATH + "2\", \"" + PATH + "3\"],\n"
+ " \"tutu\": {\n"
+ " \"p1_a\": \"" + PATH + "4\",\n"
+ " \"p2_a\": \"" + PATH + "5\",\n"
+ " \"p3\": [\n"
+ " {\n"
+ " \"oo_file_a\": \"" + PATH + "6\",\n"
+ " \"ii_file\": \"spmeyhing\"\n"
+ " },\n"
+ " {\n"
+ " \"oo_file_a\": \"" + PATH + "7\",\n"
+ " \"ii_file\": \"spmeyhing2\"\n"
+ " }\n"
+ " ],\n"
+ " \"p4\": {\n"
+ " \"oo_file_a\": \"" + PATH + "8\",\n"
+ " \"ii_file\": \"spmeyhing3\"\n"
+ " }\n"
+ " },\n"
+ " \"content\": [{\n"
+ " \"source_file_a\": \"" + PATH + "9\",\n"
+ " \"target_file\": \"atarget1\"\n"
+ " },\n"
+ " {\n"
+ " \"source_file_a\": \"" + PATH + "10\",\n"
+ " \"target_file\": \"atarget2\"\n"
+ " }]\n"
+ "}\n"
+ "\n";
private static final String RESULT = "{\n"
+ " \"toto\" : [\n"
+ " \"a\",\n"
+ " \"b\",\n"
+ " \"c\"\n"
+ " ],\n"
+ " \"titi_a\" : 0,\n"
+ " \"tata_a\" : [\n"
+ " 1,\n"
+ " 2,\n"
+ " 3\n"
+ " ],\n"
+ " \"tutu\" : {\n"
+ " \"p1_a\" : 4,\n"
+ " \"p2_a\" : 5,\n"
+ " \"p3\" : [\n"
+ " {\n"
+ " \"oo_file_a\" : 6,\n"
+ " \"ii_file\" : \"spmeyhing\"\n"
+ " },\n"
+ " {\n"
+ " \"oo_file_a\" : 7,\n"
+ " \"ii_file\" : \"spmeyhing2\"\n"
+ " }\n"
+ " ],\n"
+ " \"p4\" : {\n"
+ " \"oo_file_a\" : 8,\n"
+ " \"ii_file\" : \"spmeyhing3\"\n"
+ " }\n"
+ " },\n"
+ " \"content\" : [\n"
+ " {\n"
+ " \"source_file_a\" : 9,\n"
+ " \"target_file\" : \"atarget1\"\n"
+ " },\n"
+ " {\n"
+ " \"source_file_a\" : 10,\n"
+ " \"target_file\" : \"atarget2\"\n"
+ " }\n"
+ " ]\n"
+ "}";
@Test
public void test1() throws CliInitializationException {
// 10 files should be replaced by indexes.
ModelNode description = ModelNode.fromJSONString(DESCRIPTION);
ModelNode value = ModelNode.fromJSONString(VALUE);
ModelNode expected = ModelNode.fromJSONString(RESULT);
ModelNode req = description.get(Util.REQUEST_PROPERTIES).asObject();
Attachments attachments = new Attachments();
CommandContext ctx = CommandContextFactory.getInstance().newCommandContext();
for (String k : value.keys()) {
Util.applyReplacements(ctx, k, value.get(k), req.get(k), req.get(k).get(Util.TYPE).asType(), attachments);
}
Assert.assertEquals("Should be equal", expected, value);
Assert.assertEquals(11, attachments.getAttachedFiles().size());
for (int i = 0; i < attachments.getAttachedFiles().size(); i++) {
String p = attachments.getAttachedFiles().get(i);
Assert.assertEquals(p, EXPECTED_PATH + i);
}
}
@Test
public void testInvalidValueType() throws CliInitializationException {
// 10 files should be replaced by indexes.
ModelNode description = ModelNode.fromJSONString(VAULT_ADD_DESCRIPTION);
ModelNode value = ModelNode.fromJSONString(VAULT_ADD_VALUE);
ModelNode req = description.get(Util.REQUEST_PROPERTIES).asObject();
Attachments attachments = new Attachments();
CommandContext ctx = CommandContextFactory.getInstance().newCommandContext();
for (String k : value.keys()) {
Util.applyReplacements(ctx, k, value.get(k), req.get(k), req.get(k).get(Util.TYPE).asType(), attachments);
}
}
}