| /* | |
| * 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.io.File; | |
| /** | |
| * | |
| * @author Jennifer Chou | |
| */ | |
| public class ManualSyncTest extends AdminBaseDevTest { | |
| @Override | |
| protected String getTestDescription() { | |
| return "Tests Manual Sync support."; | |
| } | |
| public ManualSyncTest() { | |
| host = "localhost"; | |
| glassFishHome = TestEnv.getGlassFishHome(); | |
| dasDomainXml = TestEnv.getDomainXml(); | |
| nodeDir = TestEnv.getNodesHome(); | |
| instancesHome = TestEnv.getInstancesHome(DEFAULT_LOCAL_NODE); | |
| curDir = new File(System.getProperty("user.dir")); | |
| // note that it is in /gf/domains/domain1 NOT /gf/domains/domain1/server | |
| syncDir = new File(TestEnv.getDomainHome(), "sync"); | |
| // it does NOT need to exist -- do not insist! | |
| //nodeDir = new File(glassFishHome, "nodes"); | |
| //instancesHome = new File(nodeDir, DEFAULT_LOCAL_NODE); | |
| } | |
| public static void main(String[] args) { | |
| new ManualSyncTest().runTests(); | |
| } | |
| private void runTests() { | |
| startDomain(); | |
| testExport(); | |
| testRetrieve(); | |
| testExportCluster(); | |
| testImport(); | |
| testImportDasOffline(); | |
| testImportNode(); | |
| testImportNodeDir(); | |
| testEndtoEnd(); | |
| stopDomain(); | |
| stat.printSummary(); | |
| } | |
| private void testExport() { | |
| String i = "noinstance"; | |
| report("export-sync-bundle-" + i, !asadmin("export-sync-bundle", "--target", i)); | |
| /* | |
| * export default bundle | |
| */ | |
| i = "iexportdefbun"; | |
| String bundleName = i + "-sync-bundle.zip"; | |
| File bundle = new File(syncDir, bundleName); | |
| report("create-instance-" + i, asadmin("create-instance", "--node", DEFAULT_LOCAL_NODE, i)); | |
| report("export-sync-bundle-" + i, asadmin("export-sync-bundle", "--target", i)); | |
| report("check-bundle-" + i, bundle.isFile()); | |
| //cleanup | |
| report("delete-instance-" + i, asadmin("delete-instance", i)); | |
| report("delete-bundle-" + i, bundle.delete()); | |
| report("delete-syncdir-" + i, syncDir.delete()); | |
| /* | |
| * export my bundle | |
| */ | |
| i = "iexportmybun"; | |
| bundleName = i + "-my-bundle.zip"; | |
| File mybundleDir = new File(glassFishHome, "mybundles"); | |
| bundle = new File(mybundleDir, bundleName); | |
| report("create-instance-" + i, asadmin("create-instance", "--node", DEFAULT_LOCAL_NODE, i)); | |
| report("export-sync-bundle-" + i, asadmin("export-sync-bundle", "--target", i, bundle.getPath())); | |
| report("check-bundle-" + i, bundle.isFile()); | |
| //cleanup | |
| report("delete-instance-" + i, asadmin("delete-instance", i)); | |
| report("delete-bundle-" + i, bundle.delete()); | |
| report("delete-mybundledir-" + i, mybundleDir.delete()); | |
| /* | |
| * export default bundle to my dir | |
| */ | |
| i = "iexportmydir"; | |
| bundleName = i + "-sync-bundle.zip"; | |
| mybundleDir = new File(glassFishHome, "mybundles"); | |
| mybundleDir.mkdir(); //mybundles directory must exist, otherwise it will be exported to a file called 'mybundles' | |
| bundle = new File(mybundleDir, bundleName); | |
| report("create-instance-" + i, asadmin("create-instance", "--node", DEFAULT_LOCAL_NODE, i)); | |
| report("export-sync-bundle-" + i, asadmin("export-sync-bundle", "--target", i, mybundleDir.getPath())); | |
| report("check-bundle-" + i, bundle.isFile()); | |
| //cleanup | |
| report("delete-instance-" + i, asadmin("delete-instance", i)); | |
| report("delete-bundle-" + i, bundle.delete()); | |
| report("delete-mybundledir-" + i, mybundleDir.delete()); | |
| /* | |
| * export default bundle to curr dir - happens to be | |
| * domains/domain1/config for glassfish | |
| */ | |
| i = "iexportcurrdir"; | |
| bundleName = i + "-my-bundle.zip"; | |
| bundle = new File(TestEnv.getDomainConfigDir(), bundleName); | |
| report("create-instance-" + i, asadmin("create-instance", "--node", DEFAULT_LOCAL_NODE, i)); | |
| report("export-sync-bundle-" + i, asadmin("export-sync-bundle", "--target", i, bundleName)); | |
| report("check-bundle-" + i, bundle.isFile()); // KABOOM | |
| //cleanup | |
| report("delete-instance-" + i, asadmin("delete-instance", i)); | |
| report("delete-bundle-" + i, bundle.delete()); // KABOOM | |
| //AsadminReturn ret = asadminWithOutput("_get-host-and-port", "--virtualserver", "jenvs"); | |
| //boolean success = ret.outAndErr.indexOf("1010") >= 0; | |
| //report("port-set-create-domain-sysprop", success); | |
| } | |
| private void testRetrieve() { | |
| String i = "iretrievecurrdir"; | |
| String bundleName = i + "-sync-bundle.zip"; | |
| File bundle = new File(curDir, bundleName); | |
| /* | |
| * retrieve bundle in current working directory | |
| */ | |
| report("create-instance-" + i, asadmin("create-instance", "--node", DEFAULT_LOCAL_NODE, i)); | |
| report("export-sync-bundle-" + i, asadmin("export-sync-bundle", "--target", i, "--retrieve", "true")); | |
| report("check-bundle-" + i, bundle.isFile()); | |
| //cleanup | |
| report("delete-instance-" + i, asadmin("delete-instance", i)); | |
| report("delete-bundle-" + i, bundle.delete()); | |
| /* | |
| * retrieve my bundle | |
| */ | |
| i = "iretrievemybun"; | |
| bundleName = i + "-my-bundle.zip"; | |
| bundle = new File(glassFishHome, bundleName); //parent dir must exist, if it doesn't exist will put in the next parent that exists | |
| report("create-instance-" + i, asadmin("create-instance", "--node", DEFAULT_LOCAL_NODE, i)); | |
| report("export-sync-bundle-" + i, asadmin("export-sync-bundle", "--target", i, "--retrieve", "true", bundle.getPath())); | |
| report("check-bundle-" + i, bundle.isFile()); | |
| //cleanup | |
| report("delete-instance-" + i, asadmin("delete-instance", i)); | |
| report("delete-bundle-" + i, bundle.delete()); | |
| /* | |
| * export default bundle to my dir | |
| */ | |
| i = "iretrievemydir"; | |
| bundleName = i + "-sync-bundle.zip"; | |
| bundle = new File(glassFishHome, bundleName); | |
| report("create-instance-" + i, asadmin("create-instance", "--node", DEFAULT_LOCAL_NODE, i)); | |
| report("export-sync-bundle-" + i, asadmin("export-sync-bundle", "--target", i, glassFishHome.getPath())); | |
| report("check-bundle-" + i, bundle.isFile()); | |
| //cleanup | |
| report("delete-instance-" + i, asadmin("delete-instance", i)); | |
| report("delete-bundle-" + i, bundle.delete()); | |
| } | |
| private void testExportCluster() { | |
| /* | |
| * export using cluster target | |
| */ | |
| String i = "iexport1"; | |
| String c = "cexport"; | |
| String bundleName = c + "-sync-bundle.zip"; | |
| File bundle = new File(syncDir, bundleName); | |
| report("create-cluster-" + c, asadmin("create-cluster", c)); | |
| report("export-sync-bundle-bad" + i, !asadmin("export-sync-bundle", "--target", c)); | |
| report("create-instance-" + i, asadmin("create-instance", "--node", DEFAULT_LOCAL_NODE, "--cluster", c, i)); | |
| report("export-sync-bundle-" + i, asadmin("export-sync-bundle", "--target", c)); | |
| report("check-bundle-" + i, bundle.isFile()); | |
| //cleanup | |
| report("delete-instance-" + i, asadmin("delete-instance", i)); | |
| report("delete-instance-" + c, asadmin("delete-cluster", c)); | |
| report("delete-bundle-" + c, bundle.delete()); | |
| report("delete-syncdir-" + c, syncDir.delete()); //KABOOM | |
| } | |
| private void testImport() { | |
| String i = "iimportnobundle"; | |
| File bundle = new File("nosuchbundle"); | |
| report("import-sync-bundle-" + i, !asadmin("import-sync-bundle", "--instance", i, bundle.getPath())); | |
| /* | |
| * import default bundle | |
| */ | |
| i = "iimportdefbun"; | |
| String bundleName = i + "-sync-bundle.zip"; | |
| bundle = new File(syncDir, bundleName); | |
| File instDomainXml = TestEnv.getInstanceDomainXml(DEFAULT_LOCAL_NODE, i); | |
| report("check-dasdomainxml-" + i, dasDomainXml.exists()); // KABOOM | |
| report("create-instance-" + i, asadmin("create-instance", "--node", DEFAULT_LOCAL_NODE, i)); | |
| long dasDomainXmlTS = dasDomainXml.lastModified(); | |
| report("export-sync-bundle-" + i, asadmin("export-sync-bundle", "--target", i)); | |
| report("check-bundle-" + i, bundle.isFile()); | |
| report("import-sync-bundle-" + i, asadmin("import-sync-bundle", "--instance", i, bundle.getPath())); | |
| String s = get("servers.server." + i + ".property.rendezvousOccurred"); | |
| report("check-rendezvous-" + i, s != null && s.equals("true")); | |
| report("check-domainxml-" + i, instDomainXml.exists()); | |
| long instDomainXmlTS = instDomainXml.lastModified(); | |
| report("check-timestamp-" + i, dasDomainXmlTS == instDomainXmlTS); | |
| //cleanup | |
| report("delete-instance-" + i, asadmin("delete-instance", i)); | |
| report("delete-bundle-" + i, bundle.delete()); | |
| report("delete-syncdir-" + i, syncDir.delete()); | |
| } | |
| private void testImportDasOffline() { | |
| String testname = "iimportdasoff"; | |
| String bundleName = testname + "-sync-bundle.zip"; | |
| File bundle = new File(syncDir, bundleName); | |
| File instDomainXml = TestEnv.getInstanceDomainXml(DEFAULT_LOCAL_NODE, testname); | |
| report("check-dasdomainxml-" + testname, dasDomainXml.exists()); | |
| report("create-instance-" + testname, asadmin("create-instance", "--node", DEFAULT_LOCAL_NODE, testname)); | |
| long dasDomainXmlTS = dasDomainXml.lastModified(); | |
| report("export-sync-bundle-" + testname, asadmin("export-sync-bundle", "--target", testname)); | |
| report("check-bundle-" + testname, bundle.isFile()); | |
| /* | |
| * import bundle with DAS offline | |
| */ | |
| stopDomain(); | |
| report("import-sync-bundle-" + testname, asadmin("import-sync-bundle", "--instance", testname, bundle.getPath())); | |
| report("check-domainxml-" + testname, instDomainXml.exists()); | |
| long instDomainXmlTS = instDomainXml.lastModified(); | |
| report("check-timestamp-" + testname, dasDomainXmlTS == instDomainXmlTS); | |
| startDomain(); | |
| String s = get("servers.server." + testname + ".property.rendezvousOccurred"); | |
| report("check-rendezvous-" + testname, s == null); | |
| //cleanup | |
| report("delete-instance-" + testname, asadmin("delete-instance", testname)); | |
| report("delete-bundle-" + testname, bundle.delete()); | |
| report("delete-syncdir-" + testname, syncDir.delete()); | |
| } | |
| /* | |
| * WBN - yes this is VERY confusing! | |
| * we create an instance in the default node | |
| * we import to a different fake node, "nodeimport" | |
| */ | |
| private void testImportNode() { | |
| String i = "iimportnode"; | |
| String node = "nodeimport"; | |
| String bundleName = i + "-sync-bundle.zip"; | |
| File bundle = new File(syncDir, bundleName); | |
| File instDomainXml = TestEnv.getInstanceDomainXml(node, i); // gf3/gf/nodes/nodeimport/iimportnode/config/domain.xml | |
| File dasFile = TestEnv.getDasPropertiesFile(node); | |
| report("check-dasdomainxml-" + i, dasDomainXml.exists()); | |
| report("create-instance-" + i, asadmin("create-instance", "--node", DEFAULT_LOCAL_NODE, i)); | |
| long dasDomainXmlTS = dasDomainXml.lastModified(); | |
| report("export-sync-bundle-" + i, asadmin("export-sync-bundle", "--target", i)); | |
| report("check-bundle-" + i, bundle.isFile()); | |
| report("import-sync-bundle-" + i, asadmin("import-sync-bundle", "--instance", i, "--node", node, bundle.getPath())); | |
| report("check-domainxml-" + i, instDomainXml.exists()); | |
| long instDomainXmlTS = instDomainXml.lastModified(); | |
| boolean same = (dasDomainXmlTS == instDomainXmlTS); | |
| if(!same) { | |
| // troubleshooting info | |
| System.out.printf("XXXXXXXXXXXXXXXXXXXXXXXXXXX\ndas timestamp: %s\ninstance timestamp: %s\nXXXXXXXXXXXXXXX\n", | |
| "" + dasDomainXmlTS, "" + instDomainXmlTS); | |
| System.out.printf("XXXXXXXXXXXXXX domxml=%s, instxml=%s\n", dasDomainXml, instDomainXml); | |
| } | |
| report("check-timestamp-" + i, same); | |
| report("check-das-properties-" + i, dasFile.exists()); | |
| String s = get("servers.server." + i + ".property.rendezvousOccurred"); | |
| report("check-rendezvous-" + i, s.equals("true")); | |
| //cleanup | |
| report("delete-instance-" + i, asadmin("delete-instance", i)); | |
| bundle.delete(); | |
| syncDir.delete(); | |
| File domainHome = TestEnv.getDomainHome(); | |
| File nodeHome = TestEnv.getInstancesHome(node); | |
| if (TestEnv.isV4Layout()) | |
| deleteDirectory(new File(domainHome, "agent")); | |
| else | |
| deleteDirectory(nodeHome); | |
| } | |
| private void testImportNodeDir() { | |
| String instance = "iimportnodedir"; | |
| String node = "nodeimport"; | |
| String bundleName = instance + "-sync-bundle.zip"; | |
| File bundle = new File(syncDir, bundleName); | |
| File nodeDirParent = TestEnv.getNodesHome(); | |
| File instDomainXml = TestEnv.getInstanceDomainXml(node, instance); | |
| File dasFile = TestEnv.getDasPropertiesFile(DEFAULT_LOCAL_NODE); | |
| report("check-dasdomainxml-" + instance, dasDomainXml.exists()); | |
| report("create-instance-" + instance, asadmin("create-instance", "--node", DEFAULT_LOCAL_NODE, instance)); | |
| long dasDomainXmlTS = dasDomainXml.lastModified(); | |
| report("export-sync-bundle-" + instance, asadmin("export-sync-bundle", "--target", instance)); | |
| report("check-bundle-" + instance, bundle.isFile()); | |
| if (TestEnv.isV4Layout()) | |
| report("import-sync-bundle-" + instance, asadmin("import-sync-bundle", "--instance", instance, "--node", node, "--domaindir", nodeDirParent.getPath(), bundle.getPath())); | |
| else | |
| report("import-sync-bundle-" + instance, asadmin("import-sync-bundle", "--instance", instance, "--node", node, "--nodedir", nodeDirParent.getPath(), bundle.getPath())); | |
| report("check-domainxml-" + instance, instDomainXml.exists()); | |
| long instDomainXmlTS = instDomainXml.lastModified(); | |
| report("check-timestamp-" + instance, dasDomainXmlTS == instDomainXmlTS); | |
| report("check-das-properties-" + instance, dasFile.exists()); | |
| String s = get("servers.server." + instance + ".property.rendezvousOccurred"); | |
| report("check-rendezvous-" + instance, s != null && s.equals("true")); | |
| //cleanup | |
| report("delete-instance-" + instance, asadmin("delete-instance", instance)); | |
| bundle.delete(); | |
| syncDir.delete(); | |
| if(TestEnv.isV3Layout()) | |
| deleteDirectory(nodeDirParent); | |
| } | |
| private void testEndtoEnd() { | |
| String testname = "iendtoend"; | |
| String bundleName = testname + "-sync-bundle.zip"; | |
| File bundle = new File(syncDir, bundleName); | |
| File instDomainXml = TestEnv.getInstanceDomainXml(DEFAULT_LOCAL_NODE, testname); | |
| File webapp = new File("resources", "helloworld.war"); | |
| final String i1url = "http://localhost:18080/"; | |
| report("check-dasdomainxml-" + testname, dasDomainXml.exists()); | |
| // byron says this create-instance call is broken in das-branch. | |
| // when you step over the next line in v4 trunk -- domain.xml exists | |
| // in the branch, the iendtoend dir exists but is totally empty... | |
| // the error shows up below in the check for domain.xml | |
| // TODO THIS IS BROKEN IN THE BRANCH WBN | |
| // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | |
| // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | |
| // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | |
| // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | |
| report("create-instance-" + testname, asadmin("create-instance", "--node", DEFAULT_LOCAL_NODE, "--systemproperties", | |
| "HTTP_LISTENER_PORT=18080", testname)); | |
| report("deploy-" + testname, asadmin("deploy", "--target", testname, webapp.getAbsolutePath())); | |
| long dasDomainXmlTS = dasDomainXml.lastModified(); | |
| report("export-sync-bundle-" + testname, asadmin("export-sync-bundle", "--target", testname)); | |
| report("check-domainxml-" + testname, instDomainXml.exists()); | |
| stopDomain(); | |
| report("check-bundle-" + testname, bundle.isFile()); | |
| report("import-sync-bundle-" + testname, asadmin("import-sync-bundle", "--instance", testname, bundle.getPath())); | |
| long instDomainXmlTS = instDomainXml.lastModified(); | |
| report("check-timestamp-" + testname, dasDomainXmlTS == instDomainXmlTS); | |
| report("start-local-instance-" + testname, asadmin("start-local-instance", testname)); | |
| String urlStr = getURL(i1url + "helloworld/hi.jsp"); | |
| report("check-app-" + testname, matchString("Hello", urlStr)); | |
| startDomain(); | |
| String s = get("servers.server." + testname + ".property.rendezvousOccurred"); | |
| report("check-rendezvous-" + testname, s == null); | |
| //cleanup | |
| report("undeploy-" + testname, asadmin("undeploy", "--target", testname, "helloworld")); | |
| report("stop-local-instance-" + testname, asadmin("stop-local-instance", testname)); | |
| sleep(5); | |
| report("delete-instance-" + testname, asadmin("delete-instance", testname)); | |
| bundle.delete(); | |
| syncDir.delete(); | |
| } | |
| public boolean deleteDirectory(File path) { | |
| if (path.exists()) { | |
| File[] files = path.listFiles(); | |
| for (File f : files) { | |
| if (f.isDirectory()) { | |
| deleteDirectory(f); | |
| } | |
| else { | |
| f.delete(); | |
| } | |
| } | |
| } | |
| return (path.delete()); | |
| } | |
| private void sleep(int n) { | |
| try { | |
| // Give instances time to come down | |
| Thread.sleep(n * 1000); | |
| } | |
| catch (InterruptedException e) { | |
| } | |
| } | |
| private final String host; | |
| private final File glassFishHome; | |
| private final File nodeDir; | |
| private final File instancesHome; | |
| private final File syncDir; | |
| private final File curDir; | |
| private final File dasDomainXml; | |
| private final String DEFAULT_LOCAL_NODE = "localhost-domain1"; | |
| } |