/* * Copyright (c) 2014 EMC Corporation * All Rights Reserved */ package com.emc.storageos.datadomain.restapi; import com.emc.storageos.datadomain.restapi.model.*; import com.emc.storageos.services.util.EnvConfig; import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.net.URI; /* * Test client for DataDomainRESTClient */ public class DataDomainApiTest { private static final Logger _log = LoggerFactory.getLogger(DataDomainApiTest.class); private static DataDomainClient _client; private static DataDomainClientFactory _factory = new DataDomainClientFactory(); private static final int DEFAULT_MAX_CONN = 300; private static final int DEFAULT_MAX_CONN_PER_HOST = 100; private static final int DEFAULT_CONN_TIMEOUT = 1000 * 30; private static final int DEFAULT_SOCKET_CONN_TIMEOUT = 1000 * 60 * 60; private static final String ddURI = EnvConfig.get("sanity", "datadomain.uri"); private static final String user = EnvConfig.get("sanity", "datadomain.username"); private static final String password = EnvConfig.get("sanity", "datadomain.password"); @BeforeClass public static synchronized void setup() throws Exception { _factory = new DataDomainClientFactory(); _factory.setConnectionTimeoutMs(DEFAULT_CONN_TIMEOUT); _factory.setMaxConnections(DEFAULT_MAX_CONN); _factory.setMaxConnectionsPerHost(DEFAULT_MAX_CONN_PER_HOST); _factory.setSocketConnectionTimeoutMs(DEFAULT_SOCKET_CONN_TIMEOUT); _factory.setNeedCertificateManager(true); // _factory.setNeedCertificateManager(false); _factory.init(); _client = (DataDomainClient) _factory.getRESTClient(URI.create(ddURI), user, password); } @Test public void testDataDomainManagementSystem() throws Exception { _log.info("Test Data Domain Management System."); DDMCInfoDetail response = _client.getManagementSystemInfo(); _log.info("Management System : '" + response.toString() + "'"); DDSystemList systemlist = _client.getManagedSystemList(); DDSystem testDD = null; for (DDSystemInfo systemInfo : systemlist.getSystemInfo()) { DDSystem system = _client.getDDSystem(systemInfo.getId()); if (testDD == null) { testDD = system; } _log.info("DDSystem : \"" + system.toString() + "\""); } Assert.assertNotNull(testDD); DDMTreeList mtreeList = _client.getMTreeList(testDD.id); for (DDMTreeInfo mtreeInfo : mtreeList.mtree) { DDMTreeInfoDetail mtree = _client.getMTree(testDD.id, mtreeInfo.getId()); _log.info("MTree : \"" + mtree.toString() + "\""); } } @Test public void testDataDomainCreateMtree() throws Exception { _log.info("Test Data Domain Create Mtree."); DDSystemList systemlist = _client.getManagedSystemList(); DDSystem testDD = null; // DD system to test for (DDSystemInfo systemInfo : systemlist.getSystemInfo()) { testDD = _client.getDDSystem(systemInfo.getId()); break; } Assert.assertNotNull(testDD); String mTreeName = "testCrMTree100018"; DDMTreeInfoDetail mtree = null; try { DDMTreeList mtreeList = _client.getMTreeList(testDD.id); for (DDMTreeInfo mtreeInfo : mtreeList.mtree) { if (mtreeInfo.getName().contains(mTreeName)) { mtree = _client.getMTree(testDD.id, mtreeInfo.getId()); break; } } } catch (Exception notFound) { mtree = null; } if (mtree != null && mtree.delStatus != 1) { // ClientResponse resp = _client.deleteMTree(testDD.id,mtree.id); DDServiceStatus ddSvcStatus = _client.deleteMTree(testDD.id, mtree.id); // Assert.assertEquals(resp.getClientResponseStatus().getStatusCode(), 200); Assert.assertEquals(ddSvcStatus.getCode(), 200); } DDMTreeInfo mtreeInfo = _client.createMTree(testDD.id, "/data/col1/" + mTreeName, 4000000, true, "compliance"); Assert.assertTrue(mtreeInfo.getName().contains(mTreeName)); mtree = _client.getMTree(testDD.id, mtreeInfo.getId()); Assert.assertTrue(mtreeInfo.getId().equals(mtree.id)); Assert.assertTrue(mtree.name.contains(mTreeName)); _log.info("MTree : \"" + mtree.toString() + "\""); _client.deleteMTree(testDD.id, mtree.id); } @Test public void testDataDomainCreateShare() throws Exception { _log.info("Test Data Domain Create Export."); DDSystemList systemlist = _client.getManagedSystemList(); DDSystem testDD = null; // DD system to test for (DDSystemInfo systemInfo : systemlist.getSystemInfo()) { testDD = _client.getDDSystem(systemInfo.getId()); break; } Assert.assertNotNull(testDD); // Create mtree then create export String mTreeName = "testCrShareMTree100018"; DDMTreeInfoDetail mtree = null; try { DDMTreeList mtreeList = _client.getMTreeList(testDD.id); for (DDMTreeInfo mtreeInfo : mtreeList.mtree) { if (mtreeInfo.getName().contains(mTreeName)) { mtree = _client.getMTree(testDD.id, mtreeInfo.getId()); break; } } } catch (Exception notFound) { mtree = null; } // if(mtree != null && mtree.delStatus != 1 ){ // DDServiceStatus ddSvcStatus = _client.deleteMTree(testDD.id,mtree.id); // Assert.assertEquals(ddSvcStatus.getCode(), 200); // } DDMTreeInfo mtreeInfo; if (mtree == null || mtree.delStatus == 1) { mtreeInfo = _client.createMTree(testDD.id, "/data/col1/" + mTreeName, 4000000, true, "compliance"); Assert.assertTrue(mtreeInfo.getName().contains(mTreeName)); mtree = _client.getMTree(testDD.id, mtreeInfo.getId()); Assert.assertTrue(mtreeInfo.getId().equals(mtree.id)); Assert.assertTrue(mtree.name.contains(mTreeName)); } // Now create share String shareName = "testCrShare100018"; String sharePath = mtree.name; String desc = "Share with existing path"; String permissionType = DataDomainApiConstants.BROWSE_ALLOW; String permission = DataDomainApiConstants.SHARE_CHANGE; DDShareInfo ddShareInfo = _client.createShare(testDD.id, shareName, sharePath, -1, desc, permissionType, permission); String newShareId = ddShareInfo.getId(); DDShareInfoDetail ddShareInfoDetail = _client.getShare( testDD.id, newShareId); Assert.assertTrue(ddShareInfoDetail.getPathStatus() == 1); // Create share without existing path shareName = "testCrShare101018"; sharePath = mtree.name + "_1"; desc = "Share without existing path"; ddShareInfo = _client.createShare(testDD.id, shareName, sharePath, -1, desc, permissionType, permission); newShareId = ddShareInfo.getId(); ddShareInfoDetail = _client.getShare(testDD.id, newShareId); Assert.assertTrue(ddShareInfoDetail.getPathStatus() == 0); _log.info("MTree : \"" + mtree.toString() + "\""); _client.deleteShare(testDD.id, newShareId); _client.deleteMTree(testDD.id, mtree.id); } @Test public void testDiscoverNetwork() throws Exception { _log.info("Test Discover Networks (Ports) for DataDomain System."); DDMCInfoDetail response = _client.getManagementSystemInfo(); _log.info("Management System : '" + response.toString() + "'"); DDSystemList systemlist = _client.getManagedSystemList(); DDSystem testDD = null; for (DDSystemInfo systemInfo : systemlist.getSystemInfo()) { testDD = _client.getDDSystem(systemInfo.getId()); break; } Assert.assertNotNull(testDD); DDNetworkList networks = _client.getNetworks(testDD.id); for (DDNetworkInfo network : networks.network) { DDNetworkDetails network_details = _client.getNetwork(testDD.id, network.getId()); _log.info("Network : \"" + network_details.toString() + "\""); } } @Test public void testDiscoverExport() throws Exception { _log.info("Test Discover Networks (Ports) for DataDomain System."); DDMCInfoDetail response = _client.getManagementSystemInfo(); _log.info("Management System : '" + response.toString() + "'"); DDSystemList systemlist = _client.getManagedSystemList(); DDSystem testDD = null; for (DDSystemInfo systemInfo : systemlist.getSystemInfo()) { testDD = _client.getDDSystem(systemInfo.getId()); break; } Assert.assertNotNull(testDD); DDExportList exports = _client.getExports(testDD.id); for (DDExportInfo exportInfo : exports.getExports()) { DDExportInfoDetail export_details = _client.getExport(testDD.id, exportInfo.getId()); _log.info("Network : \"" + export_details.toString() + "\""); } } @Test public void testDataDomainExpandMtree() throws Exception { _log.info("Test Data Domain Create Mtree."); DDSystemList systemlist = _client.getManagedSystemList(); DDSystem testDD = null; // DD system to test for (DDSystemInfo systemInfo : systemlist.getSystemInfo()) { DDSystem system = _client.getDDSystem(systemInfo.getId()); if (testDD == null) { testDD = system; break; } } Assert.assertNotNull(testDD); DDMTreeInfoDetail mtree = null; try { DDMTreeList mtreeList = _client.getMTreeList(testDD.id); mtree = _client.getMTree(testDD.id, mtreeList.mtree.get(1).getId()); } catch (Exception notFound) { mtree = null; } Assert.assertNotNull(mtree != null); long newSize = 5 + mtree.quotaConfig.getHardLimit(); // newSize = newSize << 1; DDMTreeInfo mtreeInfo = _client.expandMTree(testDD.id, mtree.id, newSize); mtree = _client.getMTree(testDD.id, mtreeInfo.getId()); Assert.assertEquals(newSize, mtree.logicalCapacity.getTotal()); } }