| /* | |
| * 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.*; | |
| import java.net.*; | |
| /* | |
| * Dev test for DAS recovery commands (backup-domain, restore-domain, | |
| * list-backups) @author Byron Nevins @author Yamini K B @author Chris Kasso | |
| */ | |
| public class BackupCommandsTest extends AdminBaseDevTest { | |
| public BackupCommandsTest() { | |
| 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) { | |
| if (isHadas()) | |
| BACKUP_FILE = NEW_BACKUP_FILE; | |
| else | |
| BACKUP_FILE = OLD_BACKUP_FILE; | |
| new BackupCommandsTest().run(); | |
| } | |
| @Override | |
| public String getTestName() { | |
| return "DAS backup and recovery"; | |
| } | |
| @Override | |
| protected String getTestDescription() { | |
| return "Developer tests for backup-domain/restore-domain/list-backups"; | |
| } | |
| @Override | |
| public void subrun() { | |
| testCommandsWithDefaultOptions(); | |
| testCommandsWithDASRunning(); | |
| testCommandsWithOperands(); | |
| testBackupDirOption(); | |
| testRestoreWithFileName(); | |
| testCommandsWithNoDomains(); | |
| testCommandsWithMultipleDomains(); | |
| stat.printSummary(); | |
| } | |
| private void testCommandsWithDASRunning() { | |
| asadmin("start-domain"); | |
| // backup folder doesn't exist | |
| // perform a backup | |
| report("backup-domain-DAS-running", !asadmin("backup-domain")); | |
| // list backup | |
| report("list-backups-DAS-running", asadmin("list-backups")); | |
| // restore backup | |
| report("restore-domain-DAS-running", !asadmin("restore-domain", FORCE_OPTION)); | |
| asadmin("stop-domain"); | |
| } | |
| private void testCommandsWithDefaultOptions() { | |
| // perform a backup | |
| report("backup-domain-no-operand", asadmin("backup-domain")); | |
| // list backup | |
| report("list-backups-no-operand", asadmin("list-backups")); | |
| // restore backup | |
| report("restore-domain-no-operand", !asadmin("restore-domain")); | |
| // force restore backup | |
| report("force-restore-domain-no-operand", asadmin("restore-domain", FORCE_OPTION)); | |
| } | |
| private void testCommandsWithOperands() { | |
| // perform a backup | |
| report("backup-domain-with-operand", asadmin("backup-domain", DOMAIN1)); | |
| // list backup | |
| report("list-backups-with-operand", asadmin("list-backups", DOMAIN1)); | |
| // restore backup | |
| report("restore-domain-with-operand", asadmin("restore-domain", DOMAIN1)); | |
| } | |
| private void testBackupDirOption() { | |
| AsadminReturn ret; | |
| // perform a backup | |
| report("backup-domain-with-backupdir", asadmin("backup-domain", "--backupdir", BACKUP_DIR, DOMAIN1)); | |
| // list backup | |
| report("list-backups-with-backupdir", asadmin("list-backups", "--backupdir", BACKUP_DIR)); | |
| // list backup invalid domain | |
| report("list-backups-with-invalid-operand", !asadmin("list-backups", "--backupdir", BACKUP_DIR, "foo")); | |
| // test for absolute path | |
| report("list-backups-with-invalid-backupdir", !asadmin("list-backups", "--backupdir", "foo")); | |
| // test recovery from backupdir. Ensure backups within the domain | |
| // directory are preserved. | |
| asadmin("backup-domain", "--backupdir", BACKUP_DIR, DOMAIN1); | |
| ret = asadminWithOutput("list-backups"); | |
| String existingDomainBackups = ret.out; | |
| report("restore-domain-with-valid-backupdir", asadmin("restore-domain", "--backupdir", BACKUP_DIR, DOMAIN1)); | |
| ret = asadminWithOutput("list-backups"); | |
| report("restore-domain-with-backupdir-preserves-backups", ret.out.equals(existingDomainBackups)); | |
| cleanupBackupDir(); | |
| } | |
| private void cleanupBackupDir() { | |
| File path = new File(BACKUP_DIR, DOMAIN1); | |
| File[] paths = path.listFiles(); | |
| if (paths != null) { | |
| for (File f : paths) { | |
| f.delete(); | |
| } | |
| } | |
| path.delete(); | |
| } | |
| private void testRestoreWithFileName() { | |
| // specify a different domain name | |
| report("restore-domain-with-filename", !asadmin("restore-domain", FILENAME_OPTION, "foo", DOMAIN2)); | |
| // force restore | |
| report("force-restore-domain-with-operand", !asadmin("restore-domain", FORCE_OPTION, DOMAIN2)); | |
| report("restore-domain-with-filename-1", !asadmin("restore-domain", FILENAME_OPTION, BACKUP_FILE)); | |
| report("restore-domain-with-filename-2", asadmin("restore-domain", FILENAME_OPTION, BACKUP_FILE, FORCE_OPTION)); | |
| report("restore-domain-with-filename-3", asadmin("restore-domain", FILENAME_OPTION, BACKUP_FILE, FORCE_OPTION, "r-domain2")); | |
| //remove the domains | |
| report("delete-domain-r-domain2", asadmin("delete-domain", "r-domain2")); | |
| report("delete-domain-domain2", asadmin("delete-domain", DOMAIN2)); | |
| } | |
| private void testCommandsWithNoDomains() { | |
| // delete the domain | |
| asadmin("delete-domain", DOMAIN1); | |
| // perform a backup | |
| report("backup-domain-empty-domaindir", !asadmin("backup-domain")); | |
| // list backup | |
| report("list-backups-empty-domaindir", !asadmin("list-backups")); | |
| // restore backup | |
| report("restore-domain-empty-domaindir", !asadmin("restore-domain")); | |
| // put back domain1 | |
| asadmin("create-domain", "--nopassword", DOMAIN1); | |
| } | |
| private void testCommandsWithMultipleDomains() { | |
| // create domain2 | |
| report("create-domain2-for-backup", asadmin("create-domain", "--nopassword", DOMAIN2)); | |
| // perform a backup | |
| report("backup-domain-multiple-domains-in-domaindir", !asadmin("backup-domain")); | |
| // perform a backup | |
| report("backup-domain1-multiple-explicit-arg", asadmin("backup-domain", DOMAIN1)); | |
| // list backup | |
| report("list-backups-multiple-domains-in-domaindir", !asadmin("list-backups")); | |
| // list backup with operand | |
| report("list-backups-with-operand-multiple-domains-in-domaindir", asadmin("list-backups", DOMAIN1)); | |
| // restore backup | |
| report("restore-domain-multiple-domains-in-domaindir", !asadmin("restore-domain", FORCE_OPTION)); | |
| report("start-domain1-backup", asadmin("start-domain", DOMAIN1)); | |
| // perform a backup on domain2 while domain1 is running (13463) | |
| report("backup-domain-multiple-domains-in-domaindir-13463", asadmin("backup-domain", DOMAIN2)); | |
| report("stop-domain1", asadmin("stop-domain", DOMAIN1)); | |
| //delete domain2 | |
| report("delete-domain2", asadmin("delete-domain", DOMAIN2)); | |
| } | |
| private final String host; | |
| private final File glassFishHome; | |
| private static boolean HADAS = false; | |
| private static final String DOMAIN1 = "domain1"; | |
| private static final String DOMAIN2 = "domain2"; | |
| private static final String FORCE_OPTION = "--force"; | |
| private static final String FILENAME_OPTION = "--filename"; | |
| private static String BACKUP_FILE; | |
| private static final String NEW_BACKUP_FILE = "resources/backups/domain2_v2.zip"; | |
| private static final String OLD_BACKUP_FILE = "resources/backups/domain2_v1.zip"; | |
| private static final String BACKUP_DIR = System.getenv("APS_HOME") + "/devtests/admin/cli/backupdir"; | |
| } |