/*
* Copyright (c) 2014 EMC Corporation
* All Rights Reserved
*/
package com.emc.storageos.management.backup;
import java.util.List;
import java.util.Arrays;
import java.util.Map;
import java.util.TreeMap;
import com.emc.storageos.coordinator.client.model.ProductName;
import com.emc.storageos.management.backup.exceptions.FatalBackupException;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class BackupOpsTest extends BackupTestBase {
private static final Logger log = LoggerFactory.getLogger(BackupOpsTest.class);
private static final String STANDALONE = "standalone";
private static final String VIPR1 = "standalone";
private static final String VIPR2 = "standalone";
private static final String LOCALHOST = "127.0.0.1";
private static BackupOps backupOps = new BackupOps();
@BeforeClass
public static void setUp() {
Map<String, String> hosts = new TreeMap<>();
hosts.put(STANDALONE, LOCALHOST);
backupOps.setHosts(hosts);
backupOps.setPorts(Arrays.asList(7199));
backupOps.setCoordinatorClient(coordinatorClient);
FakeDrUtil fakeDrUtil = new FakeDrUtil();
backupOps.setDrUtil(fakeDrUtil);
ProductName name = new DummyProductName("vipr");
}
@Test
public void testCreateBackup() {
String backupName1 = "bk-standalone";
backupOps.createBackup(backupName1);
createBackup(backupName1, zkBackupHandler);
createBackup(backupName1, geoDbBackupHandler);
}
@Test
public void testCreateBackupWithInvalidBackupNames() {
String invalidBackupName = "../abc";
boolean expected = false;
try {
backupOps.createBackup(invalidBackupName);
} catch (IllegalArgumentException e) {
expected = true;
}
Assert.assertTrue(
String.format("%s is not a valid backup name, IllegalArgumentException should be threw out", invalidBackupName),
expected);
invalidBackupName = "";
expected = false;
try {
backupOps.createBackup(invalidBackupName);
} catch (IllegalArgumentException e) {
expected = true;
}
Assert.assertTrue(
String.format("%s is not a valid backup name, IllegalArgumentException should be threw out", invalidBackupName),
expected);
// build a name of more than 200 characters
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 201; i++) {
sb.append('a');
}
invalidBackupName = sb.toString();
expected = false;
try {
backupOps.createBackup(invalidBackupName);
} catch (IllegalArgumentException e) {
expected = true;
}
Assert.assertTrue(
String.format("%s is not a valid backup name, IllegalArgumentException should be threw out", invalidBackupName),
expected);
}
@Test
public void testListBackup() {
// standalone cluster
List<BackupSetInfo> backupSetList1 = backupOps.listBackup();
Assert.assertNotNull(backupSetList1);
for (BackupSetInfo backupset : backupSetList1) {
log.info("Get backup info: {}", backupset.toString());
}
// multi-node cluster
{
Map<String, String> hosts = new TreeMap<>();
hosts.put(VIPR1, LOCALHOST);
hosts.put(VIPR2, LOCALHOST);
backupOps.setHosts(hosts);
}
List<BackupSetInfo> backupSetList2 = null;
try {
backupSetList2 = backupOps.listBackup();
} finally {
Map<String, String> hosts = new TreeMap<>();
hosts.put(STANDALONE, LOCALHOST);
backupOps.setHosts(hosts);
}
Assert.assertNotNull(backupSetList2);
for (BackupSetInfo backupset : backupSetList2) {
log.info("Get backup info: {}", backupset.toString());
}
}
@Test
public void testDeleteBackup() {
// standalone cluster
String backupName1 = "bk-standalone";
try {
backupOps.deleteBackup(backupName1);
} catch (FatalBackupException e) {
log.info("Have deleted an non-existing backup");
}
List<BackupSetInfo> backupList1 = backupOps.listBackup();
for (BackupSetInfo backupSetInfo1 : backupList1) {
if (backupSetInfo1.getName().startsWith(backupName1)) {
Assert.fail(String.format("Don't delete backup; %s", backupName1));
}
}
boolean expected = false;
try {
backupOps.deleteBackup(backupName1);
} catch (FatalBackupException e) {
expected = true;
}
Assert.assertTrue("Can't detect non-existing backup", expected);
}
static class DummyProductName extends ProductName {
public DummyProductName(String name) {
super.setName(name);
}
}
}