/* * Copyright (c) 2013 EMC Corporation * All Rights Reserved */ package com.emc.storageos.api.service; import com.emc.storageos.model.search.SearchResultResourceRep; import com.emc.storageos.security.authentication.InternalTenantServiceClient; import com.emc.storageos.coordinator.client.service.impl.CoordinatorClientImpl; import com.emc.storageos.model.tenant.*; import com.emc.storageos.security.authentication.RequestProcessingUtils; import com.sun.jersey.api.client.ClientResponse; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import javax.xml.bind.annotation.XmlRootElement; import java.net.URI; import java.util.ArrayList; import java.util.List; import java.util.Collections; /** * Tests internal tenant api * Note: requires some manual configuration for ad and license */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:coordinatorclient-var.xml" }) public class InternalTenantApiTest extends ApiTestBase { private String _server = "localhost"; private String _apiServer = "https://" + _server + ":8443"; private URI _rootTenantId; private String _rootToken; private InternalTenantServiceClient _internalTenantClient; @Autowired private CoordinatorClientImpl _coordinatorClient; @XmlRootElement(name = "results") public static class Resources { public List<SearchResultResourceRep> resource; } @Before public void setup() throws Exception { _internalTenantClient = new InternalTenantServiceClient(); _internalTenantClient.setCoordinatorClient(_coordinatorClient); _internalTenantClient.setServer(_server); List<String> urls = new ArrayList<String>(); urls.add(_apiServer); rSys = createHttpsClient(SYSADMIN, SYSADMIN_PASS_WORD, urls); TenantResponse tenantResp = rSys.path("/tenant") .get(TenantResponse.class); _rootTenantId = tenantResp.getTenant(); _rootToken = (String) _savedTokens.get("root"); updateADConfig(); updateRootTenantAttrs(); rTAdminGr = createHttpsClient(TENANTADMIN, AD_PASS_WORD, urls); } @Test public void testInternalTenantNamespace() throws Exception { long timestamp = System.currentTimeMillis(); // 1. CREATE subtenants String subtenant_url = "/tenants/" + _rootTenantId.toString() + "/subtenants"; TenantCreateParam tenantParam = new TenantCreateParam(); String subtenant_label = "subtenant" + String.valueOf(timestamp); tenantParam.setLabel(subtenant_label); tenantParam.setUserMappings(new ArrayList<UserMappingParam>()); UserMappingParam tenantMapping = new UserMappingParam(); // Add an domain to the mapping tenantMapping.setDomain("sanity.LOCAL"); // Add an attribute scope to the mapping UserMappingAttributeParam tenantAttr = new UserMappingAttributeParam(); tenantAttr.setKey("OU"); tenantAttr.setValues(Collections.singletonList(subtenant_label)); tenantMapping.setAttributes(Collections.singletonList(tenantAttr)); tenantParam.getUserMappings().add(tenantMapping); TenantOrgRestRep subtenant = rTAdminGr.path(subtenant_url) .header(RequestProcessingUtils.AUTH_TOKEN_HEADER, _rootToken) .post(TenantOrgRestRep.class, tenantParam); Assert.assertTrue(subtenant.getName().equals(subtenant_label)); Assert.assertEquals(1, subtenant.getUserMappings().size()); // 2. set namespace String sNamespace1 = "namespace1"; TenantOrgRestRep resp = _internalTenantClient.setTenantNamespace(subtenant.getId(), sNamespace1); Assert.assertTrue(resp != null); Assert.assertTrue(resp.getId().equals(subtenant.getId())); Assert.assertTrue(resp.getNamespace().equals(sNamespace1)); // 3. get tenant TenantOrgRestRep getTenantResp = rTAdminGr.path("/tenants/" + subtenant.getId().toString()) .header(RequestProcessingUtils.AUTH_TOKEN_HEADER, _rootToken) .get(TenantOrgRestRep.class); Assert.assertTrue(getTenantResp != null); Assert.assertTrue(resp.getId().equals(subtenant.getId())); Assert.assertTrue(getTenantResp.getNamespace().equals(sNamespace1)); // 4. try to delete tenant with namespace attached ClientResponse delTenantResp = rTAdminGr.path("/tenants/" + subtenant.getId().toString() + "/deactivate") .header(RequestProcessingUtils.AUTH_TOKEN_HEADER, _rootToken) .post(ClientResponse.class); Assert.assertTrue(delTenantResp != null); Assert.assertTrue(delTenantResp.getStatus() == 400); // 5. get tenant namespace via internal API TenantNamespaceInfo internalGetTenantResp = _internalTenantClient.getTenantNamespace(subtenant.getId()); Assert.assertTrue(internalGetTenantResp != null); Assert.assertTrue(internalGetTenantResp.getName().equals(sNamespace1)); // 6. unset namespace ClientResponse delResp = _internalTenantClient.unsetTenantNamespace(subtenant.getId()); Assert.assertTrue(delResp != null); Assert.assertTrue(delResp.getStatus() == 200); // 7. get tenant via internal API agin internalGetTenantResp = _internalTenantClient.getTenantNamespace(subtenant.getId()); Assert.assertTrue(internalGetTenantResp != null); Assert.assertTrue(internalGetTenantResp.getName().isEmpty()); // 8. delete tenant delTenantResp = rTAdminGr.path("/tenants/" + subtenant.getId().toString() + "/deactivate") .header(RequestProcessingUtils.AUTH_TOKEN_HEADER, _rootToken) .post(ClientResponse.class); Assert.assertTrue(delTenantResp != null); Assert.assertTrue(delTenantResp.getStatus() == 200); } @After public void teardown() throws Exception { } }