| /* |
| * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved. |
| * |
| * This program and the accompanying materials are made available under the |
| * terms of the Eclipse Public License v. 2.0, which is available at |
| * http://www.eclipse.org/legal/epl-2.0. |
| * |
| * This Source Code may also be made available under the following Secondary |
| * Licenses when the conditions for such availability set forth in the |
| * Eclipse Public License v. 2.0 are satisfied: GNU General Public License, |
| * version 2 with the GNU Classpath Exception, which is available at |
| * https://www.gnu.org/software/classpath/license.html. |
| * |
| * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 |
| */ |
| |
| package admin; |
| |
| import java.util.ArrayList; |
| import java.util.List; |
| |
| /** |
| * |
| * This will test miscellaneous commands that don't have a dedicated test file |
| * @author Tom Mueller |
| */ |
| public class GetSetTest extends AdminBaseDevTest { |
| final static boolean isWindows = System.getProperty("os.name").toLowerCase().contains("win"); |
| |
| @Override |
| protected String getTestDescription() { |
| return "Get/Set Commands Test"; |
| } |
| |
| public static void main(String[] args) { |
| new GetSetTest().runTests(); |
| } |
| |
| private String encodeStar(String s) { |
| return isWindows ? "\"" + s + "\"" : s; |
| } |
| |
| private void runTests() { |
| setup(); |
| testGetSetAll(); |
| testGetSetAlias(); |
| cleanup(); |
| stat.printSummary(); |
| } |
| |
| private void setup() { |
| startDomain(); |
| report("create-cluster", asadmin("create-cluster", "gs1")); |
| } |
| |
| @Override |
| public void cleanup() { |
| report("delete-cluster", asadmin("delete-cluster", "gs1")); |
| stopDomain(); |
| } |
| |
| /* |
| * Use "get *" to get all settable values, and then use set to set the attribute |
| * to the current value. |
| */ |
| private void testGetSetAll() { |
| final String t = "getsetall-"; |
| |
| AsadminReturn rv = asadminWithOutput("get", encodeStar("*")); |
| report(t + "get", rv.returnValue); |
| String[] lines = rv.out.split("[\r\n]"); |
| if (!rv.returnValue) return; |
| |
| filterJunk(lines); |
| List<String> setlines = new ArrayList(lines.length); |
| for (String line : lines) { |
| line = filterSet(line); |
| if (line == null) continue; |
| setlines.add(line); |
| } |
| testSets(t, setlines); |
| } |
| |
| /* |
| * Use "get *" to get all settable alias values, and then use set to set the attribute |
| * to the current value using the alias for the value. |
| */ |
| private void testGetSetAlias() { |
| final String t = "getsetalias-"; |
| final String[] aliases = { |
| "configs.config", |
| "servers.server", |
| "clusters.cluster", |
| }; |
| List<String> setlines = new ArrayList(); |
| |
| |
| for (String a : aliases) { |
| AsadminReturn rv = asadminWithOutput("get", encodeStar(a + ".*")); |
| report(t + "get", rv.returnValue); |
| String[] lines = rv.out.split("[\r\n]"); |
| if (!rv.returnValue) continue; |
| |
| filterJunk(lines); |
| |
| for (String line : lines) { |
| line = filterSet(line); |
| if (line == null) continue; |
| line = line.replace(a + ".", ""); |
| |
| if (line.contains("server.name") || |
| line.contains("gs1.name")) continue; |
| setlines.add(line); |
| } |
| } |
| testSets(t, setlines); |
| } |
| |
| /* |
| * Filter out set requests that are known not work. |
| * Encode the request if necessary. |
| */ |
| private String filterSet(String line) { |
| // set doesn't work on log levels or the log service |
| if (line.contains("module-log-levels")) return null; |
| if (line.contains("log-service")) return null; |
| // cannot set the primary key |
| if (line.contains("jndi-name")) return null; |
| if (line.contains("jdbc-connection-pool") && line.contains("name")) return null; |
| if (line.contains("connector-connection-pool") && line.contains("name")) return null; |
| // cannot set the jvm options |
| if (line.contains("jvm-options")) return null; |
| // bug ????? - there currently is no set method for this, remove once the bug is fixed |
| if (line.contains("ssl.ssl-inactivity-timeout")) return null; |
| // cannot set a list |
| if (line.contains("secure-admin-principal")) return null; |
| // cannot set applications |
| if (line.contains("applications.application")) return null; |
| // new security config has keys - cannot set them |
| if (line.contains("security-configurations")) return null; |
| |
| // escape the "." in some property names |
| final String[] dottedprops = { |
| "encryption.key.alias", |
| "signature.key.alias", |
| "dynamic.username.password", |
| "security.config", |
| "administrative.domain.name", |
| }; |
| |
| for (String dp : dottedprops) { |
| if (line.contains(dp)) { |
| line = line.replace(dp, dp.replace(".", "\\.")); |
| break; |
| } |
| } |
| return line; |
| |
| } |
| /* |
| * Test a list of set requests by running asadmin set repeatedly. |
| */ |
| private void testSets(String tname, List<String> reqs) { |
| String nvs[] = new String[20]; |
| int nvi = 1; |
| int cnt = 0; |
| nvs[0] = "set"; |
| for (String line : reqs) { |
| if (line.trim().length() == 0) |
| continue; |
| nvs[nvi++ % nvs.length] = line; |
| if (nvi % nvs.length == 0) { |
| boolean ret = asadmin(nvs); |
| if (ret) { |
| report(tname + "set-" + cnt, ret); |
| } |
| else { |
| // set each one individually to see which one failed. |
| for (int i = 1; i < nvs.length; i++) { |
| report(tname + "set-" + cnt + "-" + i, asadmin("set", nvs[i])); |
| } |
| } |
| nvi = 1; |
| ++cnt; |
| } |
| } |
| // run the last few by themselves |
| for (int i = 1; i < nvi; i++) { |
| report(tname + "set-end" + "-" + i, asadmin("set", nvs[i])); |
| } |
| } |
| private void filterJunk(String[] lines) { |
| // set junk to empty strings |
| for (int i = 0; i < lines.length; i++) { |
| if (lines[i].startsWith("configs")) |
| return; |
| |
| lines[i] = ""; |
| } |
| } |
| } |