/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright (c) 2010-2017 Oracle and/or its affiliates. All rights reserved. * * The contents of this file are subject to the terms of either the GNU * General Public License Version 2 only ("GPL") or the Common Development * and Distribution License("CDDL") (collectively, the "License"). You * may not use this file except in compliance with the License. You can * obtain a copy of the License at * https://oss.oracle.com/licenses/CDDL+GPL-1.1 * or LICENSE.txt. See the License for the specific * language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each * file and include the License file at LICENSE.txt. * * GPL Classpath Exception: * Oracle designates this particular file as subject to the "Classpath" * exception as provided by Oracle in the GPL Version 2 section of the License * file that accompanied this code. * * Modifications: * If applicable, add the following below the License Header, with the fields * enclosed by brackets [] replaced by your own identifying information: * "Portions Copyright [year] [name of copyright owner]" * * Contributor(s): * If you wish your version of this file to be governed by only the CDDL or * only the GPL Version 2, indicate your decision by adding "[Contributor] * elects to include this software in this distribution under the [CDDL or GPL * Version 2] license." If you don't indicate a single choice of license, a * recipient has the option to distribute your version of this file under * either the CDDL, the GPL Version 2 or to extend the choice of license to * its licensees as provided above. However, if you add GPL Version 2 code * and therefore, elected the GPL Version 2 license, then the option applies * only if the new code is made subject to such option by the copyright * holder. */ package admin; import java.io.*; import java.net.*; import java.security.MessageDigest; /* * Dev test for load balancer administration commands. * @author Yamini K B */ public class LBCommandsTest extends AdminBaseDevTest { public LBCommandsTest() { String host0 = null; try { host0 = InetAddress.getLocalHost().getHostName(); } catch (Exception e) { host0 = LOCALHOST; } host = host0; System.out.println("Host= " + host); glassFishHome = getGlassFishHome(); System.out.println("GF HOME = " + glassFishHome); } public static void main(String[] args) { new LBCommandsTest().run(); } @Override public String getTestName() { return "LB commands"; } @Override protected String getTestDescription() { return "Developer tests for load balancer administration"; } @Override public void subrun() { asadmin("start-domain"); createInstances(); File loadbalancerXml = new File("resources", "loadbalancer.xml"); int i = 1; //create,list LB config runTest(i++ + ".create-http-lb-config", asadmin("create-http-lb-config", LB_CONFIG)); AsadminReturn ret = asadminWithOutput("list-http-lb-configs"); boolean success = ret.out.indexOf(LB_CONFIG) >= 0; runTest(i++ + ".list-http-lb-configs", success); runTest(i++ + ".re-create-http-lb-config", !asadmin("create-http-lb-config", LB_CONFIG)); //deleting cluster-ref when lb doesn't reference it should fail runTest(i++ + ".delete-http-lb-cluster-ref", !asadmin("delete-http-lb-ref", CONFIG_OPTION, LB_CONFIG, CLUSTER)); //test options runTest(i++ + ".create-http-lb-cluster-ref", !asadmin("create-http-lb-ref", CLUSTER)); runTest(i++ + ".create-http-lb-cluster-ref", !asadmin("create-http-lb-ref", CONFIG_OPTION, LB_CONFIG, LB_NAME_OPTION, LB_NAME, CLUSTER)); //create/delete cluster-ref for LB runTest(i++ + ".create-http-lb-cluster-ref", asadmin("create-http-lb-ref", CONFIG_OPTION, LB_CONFIG, CLUSTER)); runTest(i++ + ".re-create-http-lb-cluster-ref", !asadmin("create-http-lb-ref", CONFIG_OPTION, LB_CONFIG, CLUSTER)); //creating server-ref when cluster-ref entry is already present should fail runTest(i++ + ".create-http-lb-server-ref", !asadmin("create-http-lb-ref", CONFIG_OPTION, LB_CONFIG, STANDALONE_INSTANCE1)); //enable/disable clusters for LB runTest(i++ + ".enable-http-lb-server-for-cluster", asadmin("enable-http-lb-server", CLUSTER)); runTest(i++ + ".disable-http-lb-server-for-cluster", asadmin("disable-http-lb-server", CLUSTER)); runTest(i++ + ".delete-http-lb-config", !asadmin("delete-http-lb-config", LB_CONFIG)); //re-create HC runTest(i++ + ".re-create-http-health-checker-for-cluster", !asadmin("create-http-health-checker", CONFIG_OPTION, LB_CONFIG, TIMEOUT_OPTION, "30", INTERVAL_OPTION, "5", CLUSTER)); //re-create HC without specifying lb config name runTest(i++ + ".re-create-http-health-checker-for-cluster", !asadmin("create-http-health-checker", TIMEOUT_OPTION, "30", INTERVAL_OPTION, "5", CLUSTER)); ret = asadminWithOutput("list-http-lb-configs", LB_CONFIG); success = ret.out.indexOf(CLUSTER) >= 0; runTest(i++ + ".list-http-lb-configs", success); ret = asadminWithOutput("list-http-lb-configs", CLUSTER); success = ret.out.indexOf(LB_CONFIG) >= 0; runTest(i++ + ".list-http-lb-configs", success); runTest(i++ + ".delete-http-health-checker-for-cluster", asadmin("delete-http-health-checker", CONFIG_OPTION, LB_CONFIG, CLUSTER)); runTest(i++ + ".delete-http-health-checker-for-cluster", !asadmin("delete-http-health-checker", CONFIG_OPTION, LB_CONFIG, CLUSTER)); //test options runTest(i++ + ".delete-http-lb-cluster-ref", !asadmin("delete-http-lb-ref", CLUSTER)); runTest(i++ + ".delete-http-lb-cluster-ref", !asadmin("delete-http-lb-ref", CONFIG_OPTION, LB_CONFIG, LB_NAME_OPTION, LB_NAME, CLUSTER)); runTest(i++ + ".delete-http-lb-cluster-ref", asadmin("delete-http-lb-ref", CONFIG_OPTION, LB_CONFIG, CLUSTER)); //create server-ref for LB runTest(i++ + ".create-http-lb-server-ref", asadmin("create-http-lb-ref", CONFIG_OPTION, LB_CONFIG, STANDALONE_INSTANCE2)); runTest(i++ + ".create-http-lb-server-ref", asadmin("create-http-lb-ref", CONFIG_OPTION, LB_CONFIG, STANDALONE_INSTANCE1)); //creating cluster-ref when server-ref already exists should fail runTest(i++ + ".create-http-lb-cluster-ref", !asadmin("create-http-lb-ref", CONFIG_OPTION, LB_CONFIG, CLUSTER)); ret = asadminWithOutput("list-http-lb-configs", LB_CONFIG); success = ret.out.indexOf(STANDALONE_INSTANCE1) >= 0; runTest(i++ + ".list-http-lb-configs", success); ret = asadminWithOutput("list-http-lb-configs", STANDALONE_INSTANCE2); success = ret.out.indexOf(LB_CONFIG) >= 0; runTest(i++ + ".list-http-lb-configs", success); runTest(i++ + ".re-create-http-lb-server-ref", !asadmin("create-http-lb-ref", CONFIG_OPTION, LB_CONFIG, STANDALONE_INSTANCE1)); //enable/disable servers for LB runTest(i++ + ".enable-http-lb-server", asadmin("enable-http-lb-server", STANDALONE_INSTANCE2)); runTest(i++ + ".delete-http-lb-server-ref", !asadmin("delete-http-lb-ref", CONFIG_OPTION, LB_CONFIG, STANDALONE_INSTANCE2)); runTest(i++ + ".disable-http-lb-server", asadmin("disable-http-lb-server", STANDALONE_INSTANCE2)); runTest(i++ + ".enable-http-lb-server", asadmin("enable-http-lb-server", STANDALONE_INSTANCE2)); //delete/create health checker runTest(i++ + ".delete-http-health-checker", asadmin("delete-http-health-checker", CONFIG_OPTION, LB_CONFIG, STANDALONE_INSTANCE2)); runTest(i++ + ".delete-http-health-checker", !asadmin("delete-http-health-checker", CONFIG_OPTION, LB_CONFIG, STANDALONE_INSTANCE2)); runTest(i++ + ".create-http-health-checker", asadmin("create-http-health-checker", CONFIG_OPTION, LB_CONFIG, TIMEOUT_OPTION, "30", INTERVAL_OPTION, "5", STANDALONE_INSTANCE2)); runTest(i++ + ".re-create-http-health-checker-for-server", !asadmin("create-http-health-checker", CONFIG_OPTION, LB_CONFIG, TIMEOUT_OPTION, "30", INTERVAL_OPTION, "5", STANDALONE_INSTANCE2)); runTest(i++ + ".disable-http-lb-server", asadmin("disable-http-lb-server", STANDALONE_INSTANCE2)); runTest(i++ + ".disable-http-lb-server", asadmin("disable-http-lb-server", STANDALONE_INSTANCE1)); //delete server-ref for LB, but no apps runTest(i++ + ".delete-http-lb-server-ref", asadmin("delete-http-lb-ref", CONFIG_OPTION, LB_CONFIG, STANDALONE_INSTANCE2)); //configure weights runTest(i++ + ".configure-lb-weight", asadmin("configure-lb-weight", CLUSTER_OPTION, CLUSTER, "cl1-ins1=2:cl1-ins2=3:cl1-ins3=5")); //configure weight for non-existing instance runTest(i++ + ".configure-lb-weight", !asadmin("configure-lb-weight", CLUSTER_OPTION, CLUSTER, "foo=10")); //configure weight for standalone instance runTest(i++ + ".configure-lb-weight", !asadmin("configure-lb-weight", CLUSTER_OPTION, CLUSTER, "ins1=10")); // deploy an application to the cluster File webapp = new File("resources", "helloworld.war"); asadmin("deploy", "--target", CLUSTER, webapp.getAbsolutePath()); asadmin("create-application-ref", "--target", CLUSTER2, "helloworld"); asadmin("create-application-ref", "--target", STANDALONE_INSTANCE1, "helloworld"); asadmin("create-application-ref", "--target", STANDALONE_INSTANCE2, "helloworld"); //disable/enable application for LB runTest(i++ + ".enable-http-lb-application", asadmin("enable-http-lb-application", NAME_OPTION , "helloworld", STANDALONE_INSTANCE1)); runTest(i++ + "create-http-lb-server-ref", asadmin("create-http-lb-ref", CONFIG_OPTION, LB_CONFIG, STANDALONE_INSTANCE2)); runTest(i++ + ".delete-http-lb-server-ref", !asadmin("delete-http-lb-ref", CONFIG_OPTION, LB_CONFIG, STANDALONE_INSTANCE2)); //delete server-ref's for LB after app and server is disabled runTest(i++ + ".disable-http-lb-application", asadmin("disable-http-lb-application", NAME_OPTION , "helloworld", STANDALONE_INSTANCE1)); runTest(i++ + ".disable-http-lb-application", asadmin("disable-http-lb-application", NAME_OPTION , "helloworld", STANDALONE_INSTANCE2)); runTest(i++ + ".disable-http-lb-server", asadmin("disable-http-lb-server", STANDALONE_INSTANCE2)); runTest(i++ + ".delete-http-lb-server-ref", asadmin("delete-http-lb-ref", CONFIG_OPTION, LB_CONFIG, STANDALONE_INSTANCE1)); runTest(i++ + ".delete-http-lb-server-ref", asadmin("delete-http-lb-ref", CONFIG_OPTION, LB_CONFIG, STANDALONE_INSTANCE2)); runTest(i++ + ".enable-http-lb-application", asadmin("enable-http-lb-application", NAME_OPTION , "helloworld", STANDALONE_INSTANCE1)); runTest(i++ + ".enable-http-lb-application", asadmin("enable-http-lb-application", NAME_OPTION , "helloworld", STANDALONE_INSTANCE2)); //disable/enable application for LB runTest(i++ + ".enable-http-lb-application-for-cluster", asadmin("enable-http-lb-application", NAME_OPTION , "helloworld", CLUSTER)); //deleting cluster ref while app is enabled won't fail runTest(i++ + ".create-http-lb-cluster-ref", asadmin("create-http-lb-ref", CONFIG_OPTION, LB_CONFIG, CLUSTER)); runTest(i++ + ".delete-http-lb-cluster-ref", asadmin("delete-http-lb-ref", CONFIG_OPTION, LB_CONFIG, CLUSTER)); runTest(i++ + ".disable-http-lb-server", asadmin("disable-http-lb-server", CLUSTER)); runTest(i++ + ".disable-http-lb-application-for-cluster", asadmin("disable-http-lb-application", NAME_OPTION , "helloworld", CLUSTER)); //delete ref after app is disabled, should pass //runTest(i++ + ".delete-http-lb-cluster-ref", asadmin("delete-http-lb-ref", CONFIG_OPTION, LB_CONFIG, CLUSTER)); runTest(i++ + ".enable-http-lb-application-for-cluster", asadmin("enable-http-lb-application", NAME_OPTION , "helloworld", CLUSTER)); //delete the Lb config runTest(i++ + ".delete-http-lb-config", asadmin("delete-http-lb-config", LB_CONFIG)); //create lb-config with target specified runTest(i++ + ".create-http-lb-config", asadmin("create-http-lb-config", "--target", STANDALONE_INSTANCE1, LB_CONFIG)); //re-create should fail runTest(i++ + ".create-http-lb-config", !asadmin("create-http-lb-config", "--target", STANDALONE_INSTANCE1, LB_CONFIG)); //will fail since it contains refs runTest(i++ + ".delete-http-lb-config", !asadmin("delete-http-lb-config", LB_CONFIG)); //remove the refs and delete runTest(i++ + ".disable-http-lb-server", asadmin("disable-http-lb-server", STANDALONE_INSTANCE1)); runTest(i++ + ".disable-http-lb-application-for-server", asadmin("disable-http-lb-application", NAME_OPTION , "helloworld", STANDALONE_INSTANCE1)); runTest(i++ + ".delete-http-lb-server-ref", asadmin("delete-http-lb-ref", CONFIG_OPTION, LB_CONFIG, STANDALONE_INSTANCE1)); runTest(i++ + ".delete-http-lb-config", asadmin("delete-http-lb-config", LB_CONFIG)); //create the load balancer runTest(i++ + ".create-http-lb", asadmin("create-http-lb", DEVICEHOST_OPTION, LOCALHOST, DEVICEPORT_OPTION, "9000", LB_NAME)); ret = asadminWithOutput("list-http-lbs"); success = ret.out.indexOf(LB_NAME) >= 0; runTest(i++ + ".list-http-lbs", success); runTest(i++ + ".create-http-lb", !asadmin("create-http-lb", DEVICEHOST_OPTION, LOCALHOST, DEVICEPORT_OPTION, "9000", LB_NAME)); //delete the load balancer runTest(i++ + ".delete-http-lb", asadmin("delete-http-lb", LB_NAME)); //create the load balancer using all options runTest(i++ + ".create-http-lb", asadmin("create-http-lb", DEVICEHOST_OPTION, LOCALHOST, DEVICEPORT_OPTION, "9000", "--sslproxyhost", "myhost", "--sslproxyport", "6600", "--target", CLUSTER, "--lbpolicy", "user-defined", "--lbpolicymodule", "lbmodule.so", "--healthcheckerurl", "/test", "--healthcheckerinterval", "60", "--healthcheckertimeout", "20", "--lbenableallinstances", "false", "--lbenableallapplications", "false", "--lbweight", "cl1-ins1=2:cl1-ins2=3:cl1-ins3=5", "--responsetimeout", "20", "--httpsrouting", "true", "--reloadinterval", "30", "--monitor", "true", "--routecookie", "false", "--property", "name1=value1:name2=value2", LB_NAME)); ret = asadminWithOutput("list-http-lbs"); success = ret.out.indexOf(LB_NAME) >= 0; runTest(i++ + ".list-http-lbs", success); //delete the load balancer runTest(i++ + ".delete-http-lb", asadmin("delete-http-lb", LB_NAME)); //create lb and a config asadmin("create-http-lb", DEVICEHOST_OPTION, LOCALHOST, DEVICEPORT_OPTION, "9000", TARGET_OPTION, CLUSTER, LB_NAME); //set dummy host for load-balancer xml generation asadmin("set", "nodes.node." + LB_NODE1 + ".node-host=" + LB_NODE_HOST1); asadmin("set", "nodes.node." + LB_NODE2 + ".node-host=" + LB_NODE_HOST2); //export-httplb-config tests deleteXML(loadbalancerXml); asadmin("export-http-lb-config",LB_NAME_OPTION, LB_NAME, loadbalancerXml.getAbsolutePath()); runTest(i++ + ".export-http-lb-config", validateXML(loadbalancerXml, CHECKSUM1)); deleteXML(loadbalancerXml); asadmin("export-http-lb-config", CONFIG_OPTION, LB1_CONFIG, loadbalancerXml.getAbsolutePath()); runTest(i++ + ".export-http-lb-config", validateXML(loadbalancerXml, CHECKSUM1)); deleteXML(loadbalancerXml); asadmin("export-http-lb-config", TARGETS_OPTION, CLUSTER + "," + CLUSTER2, loadbalancerXml.getAbsolutePath()); runTest(i++ + ".export-http-lb-config", validateXML(loadbalancerXml, CHECKSUM2,CHECKSUM2_2)); deleteXML(loadbalancerXml); asadmin("export-http-lb-config", TARGETS_OPTION, CLUSTER + "," + CLUSTER2, PROPERTY_OPTION, "response-timeout-in-seconds=30:https-routing=true", loadbalancerXml.getAbsolutePath()); runTest(i++ + ".export-http-lb-config", validateXML(loadbalancerXml, CHECKSUM3,CHECKSUM3_2)); deleteXML(loadbalancerXml); asadmin("export-http-lb-config", TARGETS_OPTION, STANDALONE_INSTANCE1 + "," + STANDALONE_INSTANCE2, loadbalancerXml.getAbsolutePath()); runTest(i++ + ".export-http-lb-config", validateXML(loadbalancerXml, CHECKSUM4, CHECKSUM4_2)); deleteXML(loadbalancerXml); //export-http-lb-config negative tests runTest(i++ + ".export-http-lb-config", !asadmin("export-http-lb-config", loadbalancerXml.getAbsolutePath())); runTest(i++ + ".export-http-lb-config", !asadmin("export-http-lb-config", CONFIG_OPTION, "junk-lb-config", loadbalancerXml.getAbsolutePath())); runTest(i++ + ".export-http-lb-config", !asadmin("export-http-lb-config", LB_NAME_OPTION, "junk-lb-name", loadbalancerXml.getAbsolutePath())); runTest(i++ + ".export-http-lb-config", !asadmin("export-http-lb-config", TARGETS_OPTION, CLUSTER + "," + STANDALONE_INSTANCE1, loadbalancerXml.getAbsolutePath())); runTest(i++ + ".export-http-lb-config", !asadmin("export-http-lb-config", CONFIG_OPTION, LB1_CONFIG, LB_NAME_OPTION, LB_NAME, loadbalancerXml.getAbsolutePath())); deleteXML(loadbalancerXml); //revert dummy host setting asadmin("set", "nodes.node." + LB_NODE1 + ".node-host=" + LOCALHOST); asadmin("set", "nodes.node." + LB_NODE2 + ".node-host=" + LOCALHOST); //delete-lb asadmin("delete-http-lb", LB_NAME); //undeploy the app asadmin("undeploy", "--target", "domain", "helloworld"); deleteInstances(); asadmin("stop-domain"); stat.printSummary(); } private void createInstances() { asadmin("create-node-ssh", NODE_HOST_OPTION, LOCALHOST, FORCE_OPTION, TRUE, LB_NODE1); asadmin("create-node-ssh", NODE_HOST_OPTION, LOCALHOST, FORCE_OPTION, TRUE, LB_NODE2); asadmin("create-cluster", CLUSTER); asadmin("create-instance", CLUSTER_OPTION, CLUSTER, NODE_OPTION, LB_NODE1, INSTANCE1); asadmin("create-instance", CLUSTER_OPTION, CLUSTER, NODE_OPTION, LB_NODE2, INSTANCE2); asadmin("create-instance", CLUSTER_OPTION, CLUSTER, NODE_OPTION, LB_NODE1, INSTANCE3); asadmin("create-cluster", CLUSTER2); asadmin("create-instance", CLUSTER_OPTION, CLUSTER2, NODE_OPTION, LB_NODE1, INSTANCE4); asadmin("create-instance", CLUSTER_OPTION, CLUSTER2, NODE_OPTION, LB_NODE2, INSTANCE5); asadmin("create-instance", NODE_OPTION, LB_NODE1, STANDALONE_INSTANCE1); asadmin("create-instance", NODE_OPTION, LB_NODE2, STANDALONE_INSTANCE2); } private void deleteInstances() { asadmin("delete-instance", STANDALONE_INSTANCE2); asadmin("delete-instance", STANDALONE_INSTANCE1); asadmin("delete-instance", INSTANCE3); asadmin("delete-instance", INSTANCE2); asadmin("delete-instance", INSTANCE1); asadmin("delete-cluster", CLUSTER); asadmin("delete-instance", INSTANCE5); asadmin("delete-instance", INSTANCE4); asadmin("delete-cluster", CLUSTER2); asadmin("delete-node-ssh", LB_NODE1); asadmin("delete-node-ssh", LB_NODE2); deleteNodeDirectory(LB_NODE1); deleteNodeDirectory(LB_NODE2); } private void runTest(String tName, boolean status) { if(!status) { System.out.println("ABOVE TEST = " + tName + " FAILED!!!"); System.out.println("-------------------------------------------------------"); } report(tName, status); } private boolean validateXML(File loadbalancerXml, String checkSum) { try { String lbXmlCheckSum = getMD5Checksum(loadbalancerXml); System.out.println("lbXmlCheckSum : " + lbXmlCheckSum); if(checkSum.equals(lbXmlCheckSum)){ return true; } } catch (Exception ex) { System.out.println("Unable to get checksum : " + ex.getMessage()); } return false; } private boolean validateXML(File loadbalancerXml, String checkSum1, String checkSum2) { try { String lbXmlCheckSum = getMD5Checksum(loadbalancerXml); System.out.println("lbXmlCheckSum : " + lbXmlCheckSum); if(checkSum1.equals(lbXmlCheckSum) || checkSum2.equals(lbXmlCheckSum)){ return true; } } catch (Exception ex) { System.out.println("Unable to get checksum : " + ex.getMessage()); } return false; } public static byte[] createChecksum(File file) throws Exception { BufferedReader reader = new BufferedReader(new FileReader(file)); MessageDigest complete = MessageDigest.getInstance("MD5"); String line = null; while((line = reader.readLine()) != null) { System.out.println(line); if(line.contains("This file was generated on:")){ continue; } complete.update(line.getBytes()); } reader.close(); return complete.digest(); } public static String getMD5Checksum(File file) throws Exception { byte[] b = createChecksum(file); String result = ""; for (int i = 0; i < b.length; i++) { result += Integer.toString((b[i] & 0xff) + 0x100, 16).substring(1); } return result; } private void deleteXML(File loadbalancerXml) { if(loadbalancerXml.exists()){ loadbalancerXml.delete(); } } private final String host; private final File glassFishHome; private static final String CLUSTER = "cl1"; private static final String INSTANCE1 = "cl1-ins1"; private static final String INSTANCE2 = "cl1-ins2"; private static final String INSTANCE3 = "cl1-ins3"; private static final String CLUSTER2 = "cl2"; private static final String INSTANCE4 = "cl2-ins1"; private static final String INSTANCE5 = "cl2-ins2"; private static final String STANDALONE_INSTANCE1 = "ins1"; private static final String STANDALONE_INSTANCE2 = "ins2"; private static final String LB_CONFIG = "lb-config1"; private static final String LOCALHOST="localhost"; private static final String LB_NAME="lb1"; private static final String LB1_CONFIG = "lb1_LB_CONFIG"; private static final String LB_NODE_HOST1 = "dummy-lb-host1"; private static final String LB_NODE_HOST2 = "dummy-lb-host2"; private static final String LB_NODE1 = "lb-node1"; private static final String LB_NODE2 = "lb-node2"; private static final String TRUE = "true"; private static final String CONFIG_OPTION="--config"; private static final String TIMEOUT_OPTION="--timeout"; private static final String INTERVAL_OPTION="--interval"; private static final String NAME_OPTION="--name"; private static final String CLUSTER_OPTION="--cluster"; private static final String DEVICEHOST_OPTION="--devicehost"; private static final String DEVICEPORT_OPTION="--deviceport"; private static final String NODE_OPTION="--node"; private static final String PROPERTY_OPTION="--property"; private static final String NODE_HOST_OPTION="--nodehost"; private static final String FORCE_OPTION="--force"; private static final String LB_NAME_OPTION="--lbname"; private static final String TARGETS_OPTION="--lbtargets"; private static final String TARGET_OPTION="--target"; private static final String CHECKSUM1 = "6ac4df0a875e5202f190899e8ccf823c"; private static final String CHECKSUM2 = "b8f0b333dc1b935d8921a420985953b0"; private static final String CHECKSUM2_2 = "e954ded13fdaa34209a580e332e8ec70"; private static final String CHECKSUM3 = "4b5d431750cc251bf1920ce46c38ce38"; private static final String CHECKSUM3_2 = "2dd33443d61de9c51278d685c58fb57f"; private static final String CHECKSUM4 = "99d66d54e9749427359e2c4b06f63847"; private static final String CHECKSUM4_2 = "71f922d8e1e6aafc4d6f99c3ae4edb54"; }