blob: 13ec607bdd4acbe9d8f73399fd393fd46135ea56 [file] [log] [blame]
/*
* 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";
}