Package org.pentaho.test.platform.repository2.mt

Source Code of org.pentaho.test.platform.repository2.mt.RepositoryTenantManagerTest

/*!
* This program is free software; you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software
* Foundation.
*
* You should have received a copy of the GNU Lesser General Public License along with this
* program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html
* or from the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Lesser General Public License for more details.
*
* Copyright (c) 2002-2013 Pentaho Corporation..  All rights reserved.
*/

package org.pentaho.test.platform.repository2.mt;

import org.apache.jackrabbit.spi.Name;
import org.apache.jackrabbit.spi.NameFactory;
import org.apache.jackrabbit.spi.commons.name.NameFactoryImpl;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.pentaho.platform.api.mt.ITenant;
import org.pentaho.platform.engine.core.system.TenantUtils;
import org.pentaho.platform.repository2.unified.DefaultUnifiedRepositoryBase;
import org.pentaho.platform.repository2.unified.ServerRepositoryPaths;
import org.pentaho.platform.repository2.unified.jcr.JcrRepositoryDumpToFile;
import org.pentaho.platform.repository2.unified.jcr.JcrRepositoryDumpToFile.Mode;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import java.util.List;

import static org.junit.Assert.*;

/**
* @author mlowery
*/
@RunWith( SpringJUnit4ClassRunner.class )
@SuppressWarnings( "nls" )
public class RepositoryTenantManagerTest extends DefaultUnifiedRepositoryBase {

  private final String TENANT_ID_APPLE = "apple";

  private final String TENANT_ID_MICROSOFT = "microsoft";

  private final String TENANT_ID_SUN = "sun";

  public static final String MAIN_TENANT_1 = "maintenant1";

  public static final String SUB_TENANT1_1 = "subtenant11";

  public static final String SUB_TENANT1_1_1 = "subtenant111";

  public static final String SUB_TENANT1_1_2 = "subtenant112";

  public static final String SUB_TENANT1_2 = "subtenant12";

  public static final String SUB_TENANT1_2_1 = "subtenant121";

  public static final String SUB_TENANT1_2_2 = "subtenant122";

  public static final String MAIN_TENANT_2 = "maintenant2";

  public static final String SUB_TENANT2_1 = "subtenant21";

  public static final String SUB_TENANT2_1_1 = "subtenant211";

  public static final String SUB_TENANT2_1_2 = "subtenant212";

  public static final String SUB_TENANT2_2 = "subtenant22";

  public static final String SUB_TENANT2_2_1 = "subtenant221";

  public static final String SUB_TENANT2_2_2 = "subtenant222";

  NameFactory NF = NameFactoryImpl.getInstance();

  Name P_PRINCIPAL_NAME = NF.create( Name.NS_REP_URI, "principalName" ); //$NON-NLS-1$

  String pPrincipalName;

  private void assertTenantNotNull( ITenant tenant ) {
    assertNotNull( tenant );
    assertNotNull( tenant.getId() );
    assertNotNull( tenant.getName() );
  }

  @Test
  public void testCreateSystemTenant() {
    loginAsRepositoryAdmin();
    ITenant duplicateTenant =
      tenantManager.createTenant( null, ServerRepositoryPaths.getPentahoRootFolderName(), tenantAdminRoleName,
        tenantAuthenticatedRoleName, ANONYMOUS_ROLE_NAME );
    assertNull( duplicateTenant );
  }

  @Test
  public void testCreateTenant() {
    loginAsSysTenantAdmin();
    assertNotNull( systemTenant );
    assertTrue( systemTenant.isEnabled() );

    ITenant tenantRoot =
      tenantManager.createTenant( systemTenant, TenantUtils.TENANTID_SINGLE_TENANT, tenantAdminRoleName,
        tenantAuthenticatedRoleName, ANONYMOUS_ROLE_NAME );
    userRoleDao.createUser( tenantRoot, USERNAME_ADMIN, PASSWORD, "", new String[]{ tenantAdminRoleName } );
    assertNotNull( tenantRoot );
    assertTrue( tenantRoot.isEnabled() );
    ITenant subTenantRoot =
      tenantManager.createTenant( tenantRoot, TENANT_ID_APPLE, tenantAdminRoleName,
        tenantAuthenticatedRoleName, ANONYMOUS_ROLE_NAME );
    userRoleDao.createUser( subTenantRoot, USERNAME_ADMIN, PASSWORD, "", new String[]{ tenantAdminRoleName } );
    assertNotNull( subTenantRoot );
    assertTrue( subTenantRoot.isEnabled() );
    List<ITenant> childTenants = tenantManager.getChildTenants( tenantRoot );
    assertTrue( childTenants.size() == 1 );
    assertTrue( childTenants.get( 0 ).equals( subTenantRoot ) );

    cleanupUserAndRoles( tenantRoot );
    cleanupUserAndRoles( subTenantRoot );
  }

  @Test
  public void testEnableDisableTenant() {
    loginAsSysTenantAdmin();
    assertTenantNotNull( systemTenant );
    ITenant tenantRoot =
      tenantManager.createTenant( systemTenant, TENANT_ID_ACME, tenantAdminRoleName,
        tenantAuthenticatedRoleName, ANONYMOUS_ROLE_NAME );
    userRoleDao.createUser( tenantRoot, USERNAME_ADMIN, PASSWORD, "", new String[]{ tenantAdminRoleName } );
    assertTenantNotNull( tenantRoot );
    assertTrue( tenantRoot.isEnabled() );
    tenantManager.enableTenant( tenantRoot, false );
    tenantRoot = tenantManager.getTenant( tenantRoot.getRootFolderAbsolutePath() );
    assertTrue( !tenantRoot.isEnabled() );
    tenantManager.enableTenant( tenantRoot, true );
    tenantRoot = tenantManager.getTenant( tenantRoot.getRootFolderAbsolutePath() );
    assertTrue( tenantRoot.isEnabled() );
    cleanupUserAndRoles( tenantRoot );
  }

  @Test
  public void testIsTenantRoot() {
    loginAsSysTenantAdmin();
    assertTenantNotNull( systemTenant );
    assertTrue( systemTenant.isEnabled() );
    ITenant tenantRoot =
      tenantManager.createTenant( systemTenant, TENANT_ID_ACME, tenantAdminRoleName,
        tenantAuthenticatedRoleName, ANONYMOUS_ROLE_NAME );
    userRoleDao.createUser( tenantRoot, USERNAME_ADMIN, PASSWORD, "", new String[]{ tenantAdminRoleName } );
    assertTenantNotNull( tenantRoot );

    cleanupUserAndRoles( tenantRoot );
  }

  @Test
  public void testIsSubTenant() {
    loginAsSysTenantAdmin();
    ITenant mainTenant_1 =
      tenantManager.createTenant( systemTenant, MAIN_TENANT_1, tenantAdminRoleName,
        tenantAuthenticatedRoleName, ANONYMOUS_ROLE_NAME );
    userRoleDao.createUser( mainTenant_1, USERNAME_ADMIN, PASSWORD, "", new String[]{ tenantAdminRoleName } );
    ITenant mainTenant_2 =
      tenantManager.createTenant( systemTenant, MAIN_TENANT_2, tenantAdminRoleName,
        tenantAuthenticatedRoleName, ANONYMOUS_ROLE_NAME );
    userRoleDao.createUser( mainTenant_2, USERNAME_ADMIN, PASSWORD, "", new String[]{ tenantAdminRoleName } );
    ITenant subTenant1_1 =
      tenantManager.createTenant( mainTenant_1, SUB_TENANT1_1, tenantAdminRoleName,
        tenantAuthenticatedRoleName, ANONYMOUS_ROLE_NAME );
    userRoleDao.createUser( subTenant1_1, USERNAME_ADMIN, PASSWORD, "", new String[]{ tenantAdminRoleName } );
    ITenant subTenant1_2 =
      tenantManager.createTenant( mainTenant_1, SUB_TENANT1_2, tenantAdminRoleName,
        tenantAuthenticatedRoleName, ANONYMOUS_ROLE_NAME );
    userRoleDao.createUser( subTenant1_2, USERNAME_ADMIN, PASSWORD, "", new String[]{ tenantAdminRoleName } );
    ITenant subTenant2_1 =
      tenantManager.createTenant( mainTenant_2, SUB_TENANT2_1, tenantAdminRoleName,
        tenantAuthenticatedRoleName, ANONYMOUS_ROLE_NAME );
    userRoleDao.createUser( subTenant2_1, USERNAME_ADMIN, PASSWORD, "", new String[]{ tenantAdminRoleName } );
    ITenant subTenant2_2 =
      tenantManager.createTenant( mainTenant_2, SUB_TENANT2_2, tenantAdminRoleName,
        tenantAuthenticatedRoleName, ANONYMOUS_ROLE_NAME );
    userRoleDao.createUser( subTenant2_2, USERNAME_ADMIN, PASSWORD, "", new String[]{ tenantAdminRoleName } );
    assertTrue( tenantManager.isSubTenant( mainTenant_1, mainTenant_1 ) );
    assertTrue( tenantManager.isSubTenant( mainTenant_2, mainTenant_2 ) );
    assertTrue( tenantManager.isSubTenant( mainTenant_1, subTenant1_2 ) );
    assertTrue( tenantManager.isSubTenant( mainTenant_1, subTenant1_1 ) );
    assertFalse( tenantManager.isSubTenant( mainTenant_1, subTenant2_1 ) );
    assertFalse( tenantManager.isSubTenant( mainTenant_1, subTenant2_2 ) );
    assertFalse( tenantManager.isSubTenant( mainTenant_2, subTenant1_2 ) );
    assertFalse( tenantManager.isSubTenant( mainTenant_2, subTenant1_1 ) );
    assertTrue( tenantManager.isSubTenant( mainTenant_2, subTenant2_1 ) );
    assertTrue( tenantManager.isSubTenant( mainTenant_2, subTenant2_2 ) );
    assertTrue( tenantManager.isSubTenant( subTenant2_2, subTenant2_2 ) );
    assertTrue( tenantManager.isSubTenant( subTenant1_2, subTenant1_2 ) );

    JcrRepositoryDumpToFile dumpToFile =
      new JcrRepositoryDumpToFile( testJcrTemplate, jcrTransactionTemplate, repositoryAdminUsername,
        "c:/tmp/testdump122", Mode.CUSTOM );
    dumpToFile.execute();
    cleanupUserAndRoles( mainTenant_1 );
    cleanupUserAndRoles( mainTenant_2 );
    cleanupUserAndRoles( subTenant1_1 );
    cleanupUserAndRoles( subTenant1_2 );
    cleanupUserAndRoles( subTenant2_1 );
    cleanupUserAndRoles( subTenant2_2 );
  }

  @Test
  public void testGetChildrenTenants() {
    loginAsSysTenantAdmin();
    ITenant tenantRoot =
      tenantManager.createTenant( systemTenant, TENANT_ID_ACME, tenantAdminRoleName,
        tenantAuthenticatedRoleName, ANONYMOUS_ROLE_NAME );
    userRoleDao.createUser( tenantRoot, USERNAME_ADMIN, PASSWORD, "", new String[]{ tenantAdminRoleName } );
    assertNotNull( tenantRoot );
    assertTrue( tenantRoot.isEnabled() );

    ITenant subTenantRoot1 =
      tenantManager.createTenant( tenantRoot, TENANT_ID_APPLE, tenantAdminRoleName,
        tenantAuthenticatedRoleName, ANONYMOUS_ROLE_NAME );
    userRoleDao.createUser( subTenantRoot1, USERNAME_ADMIN, PASSWORD, "", new String[]{ tenantAdminRoleName } );
    assertTrue( subTenantRoot1.isEnabled() );

    ITenant subTenantRoot2 =
      tenantManager.createTenant( tenantRoot, TENANT_ID_MICROSOFT, tenantAdminRoleName,
        tenantAuthenticatedRoleName, ANONYMOUS_ROLE_NAME );
    userRoleDao.createUser( subTenantRoot2, USERNAME_ADMIN, PASSWORD, "", new String[]{ tenantAdminRoleName } );
    assertTrue( subTenantRoot2.isEnabled() );

    List<ITenant> tenantChildren = tenantManager.getChildTenants( tenantRoot );
    assertTrue( tenantChildren.size() == 2 );
    List<ITenant> tenantChildrenId = tenantManager.getChildTenants( tenantRoot );
    assertTrue( tenantChildrenId.size() == 2 );
    cleanupUserAndRoles( tenantRoot );
    cleanupUserAndRoles( subTenantRoot1 );
    cleanupUserAndRoles( subTenantRoot2 );
  }

  @Test
  public void testDeleteTenant() {
    loginAsSysTenantAdmin();
    ITenant mainTenant_1 =
      tenantManager.createTenant( systemTenant, MAIN_TENANT_1, tenantAdminRoleName,
        tenantAuthenticatedRoleName, ANONYMOUS_ROLE_NAME );
    userRoleDao.createUser( mainTenant_1, USERNAME_ADMIN, PASSWORD, "", new String[]{ tenantAdminRoleName } );
    ITenant mainTenant_2 =
      tenantManager.createTenant( systemTenant, MAIN_TENANT_2, tenantAdminRoleName,
        tenantAuthenticatedRoleName, ANONYMOUS_ROLE_NAME );
    userRoleDao.createUser( mainTenant_2, USERNAME_ADMIN, PASSWORD, "", new String[]{ tenantAdminRoleName } );
    ITenant subTenant1_1 = null;
    // Testing SubTenant1_1 as a TenantAdmin of MainTenant2. This should fail
    login( USERNAME_ADMIN, mainTenant_2, new String[]{ tenantAdminRoleName, tenantAuthenticatedRoleName } );
    try {
      subTenant1_1 =
        tenantManager.createTenant( mainTenant_1, SUB_TENANT1_1, tenantAdminRoleName,
          tenantAuthenticatedRoleName, ANONYMOUS_ROLE_NAME );
      fail( "should have thrown an exception" );
    } catch ( Throwable th ) {
      assertNotNull( th );
    }
    logout();
    login( USERNAME_ADMIN, mainTenant_1, new String[]{ tenantAdminRoleName, tenantAuthenticatedRoleName } );
    subTenant1_1 =
      tenantManager.createTenant( mainTenant_1, SUB_TENANT1_1, tenantAdminRoleName,
        tenantAuthenticatedRoleName, ANONYMOUS_ROLE_NAME );
    userRoleDao.createUser( subTenant1_1, USERNAME_ADMIN, PASSWORD, "", new String[]{ tenantAdminRoleName } );

    ITenant subTenant1_1_1 =
      tenantManager.createTenant( subTenant1_1, SUB_TENANT1_1_1, tenantAdminRoleName,
        tenantAuthenticatedRoleName, ANONYMOUS_ROLE_NAME );
    userRoleDao.createUser( subTenant1_1_1, USERNAME_ADMIN, PASSWORD, "", new String[]{ tenantAdminRoleName } );

    ITenant subTenant1_1_2 =
      tenantManager.createTenant( subTenant1_1, SUB_TENANT1_1_2, tenantAdminRoleName,
        tenantAuthenticatedRoleName, ANONYMOUS_ROLE_NAME );
    userRoleDao.createUser( subTenant1_1_2, USERNAME_ADMIN, PASSWORD, "", new String[]{ tenantAdminRoleName } );
    logout();
    // Testing SubTenant1_2 as a TenantAdmin of MainTenant2. This should fail
    login( USERNAME_ADMIN, mainTenant_2, new String[]{ tenantAdminRoleName, tenantAuthenticatedRoleName } );
    ITenant subTenant1_2 = null;
    try {
      subTenant1_2 =
        tenantManager.createTenant( mainTenant_1, SUB_TENANT1_2, tenantAdminRoleName,
          tenantAuthenticatedRoleName, ANONYMOUS_ROLE_NAME );
      fail( "should have thrown an exception" );
    } catch ( Throwable th ) {
      assertNotNull( th );
    }
    logout();
    login( USERNAME_ADMIN, mainTenant_1, new String[]{ tenantAdminRoleName, tenantAuthenticatedRoleName } );
    subTenant1_2 =
      tenantManager.createTenant( mainTenant_1, SUB_TENANT1_2, tenantAdminRoleName,
        tenantAuthenticatedRoleName, ANONYMOUS_ROLE_NAME );
    userRoleDao.createUser( subTenant1_2, USERNAME_ADMIN, PASSWORD, "", new String[]{ tenantAdminRoleName } );
    logout();
    login( USERNAME_ADMIN, subTenant1_2, new String[]{ tenantAdminRoleName, tenantAuthenticatedRoleName } );
    ITenant subTenant1_2_1 =
      tenantManager.createTenant( subTenant1_2, SUB_TENANT1_2_1, tenantAdminRoleName,
        tenantAuthenticatedRoleName, ANONYMOUS_ROLE_NAME );
    userRoleDao.createUser( subTenant1_2_1, USERNAME_ADMIN, PASSWORD, "", new String[]{ tenantAdminRoleName } );

    ITenant subTenant1_2_2 =
      tenantManager.createTenant( subTenant1_2, SUB_TENANT1_2_2, tenantAdminRoleName,
        tenantAuthenticatedRoleName, ANONYMOUS_ROLE_NAME );
    userRoleDao.createUser( subTenant1_2_2, USERNAME_ADMIN, PASSWORD, "", new String[]{ tenantAdminRoleName } );
    logout();
    login( USERNAME_ADMIN, mainTenant_2, new String[]{ tenantAdminRoleName, tenantAuthenticatedRoleName } );
    ITenant subTenant2_1 =
      tenantManager.createTenant( mainTenant_2, SUB_TENANT2_1, tenantAdminRoleName,
        tenantAuthenticatedRoleName, ANONYMOUS_ROLE_NAME );
    userRoleDao.createUser( subTenant2_1, USERNAME_ADMIN, PASSWORD, "", new String[]{ tenantAdminRoleName } );
    ITenant subTenant2_1_1 =
      tenantManager.createTenant( subTenant2_1, SUB_TENANT2_1_1, tenantAdminRoleName,
        tenantAuthenticatedRoleName, ANONYMOUS_ROLE_NAME );
    userRoleDao.createUser( subTenant2_1_1, USERNAME_ADMIN, PASSWORD, "", new String[]{ tenantAdminRoleName } );

    ITenant subTenant2_1_2 =
      tenantManager.createTenant( subTenant2_1, SUB_TENANT2_1_2, tenantAdminRoleName,
        tenantAuthenticatedRoleName, ANONYMOUS_ROLE_NAME );
    userRoleDao.createUser( subTenant2_1_2, USERNAME_ADMIN, PASSWORD, "", new String[]{ tenantAdminRoleName } );
    logout();
    login( USERNAME_ADMIN, mainTenant_1, new String[]{ tenantAdminRoleName, tenantAuthenticatedRoleName } );
    ITenant subTenant2_2 = null;
    try {
      subTenant2_2 =
        tenantManager.createTenant( mainTenant_2, SUB_TENANT2_2, tenantAdminRoleName,
          tenantAuthenticatedRoleName, ANONYMOUS_ROLE_NAME );
      fail( "should have thrown an exception" );
    } catch ( Throwable th ) {
      assertNotNull( th );
    }
    logout();
    login( USERNAME_ADMIN, mainTenant_2, new String[]{ tenantAdminRoleName, tenantAuthenticatedRoleName } );
    subTenant2_2 =
      tenantManager.createTenant( mainTenant_2, SUB_TENANT2_2, tenantAdminRoleName,
        tenantAuthenticatedRoleName, ANONYMOUS_ROLE_NAME );
    userRoleDao.createUser( subTenant2_2, USERNAME_ADMIN, PASSWORD, "", new String[]{ tenantAdminRoleName } );

    logout();
    login( USERNAME_ADMIN, subTenant2_2, new String[]{ tenantAdminRoleName, tenantAuthenticatedRoleName } );

    ITenant subTenant2_2_1 =
      tenantManager.createTenant( subTenant2_2, SUB_TENANT2_2_1, tenantAdminRoleName,
        tenantAuthenticatedRoleName, ANONYMOUS_ROLE_NAME );
    userRoleDao.createUser( subTenant2_2_1, USERNAME_ADMIN, PASSWORD, "", new String[]{ tenantAdminRoleName } );

    ITenant subTenant2_2_2 =
      tenantManager.createTenant( subTenant2_2, SUB_TENANT2_2_2, tenantAdminRoleName,
        tenantAuthenticatedRoleName, ANONYMOUS_ROLE_NAME );
    userRoleDao.createUser( subTenant2_2_2, USERNAME_ADMIN, PASSWORD, "", new String[]{ tenantAdminRoleName } );

    // Delete Tenants

    login( USERNAME_ADMIN, subTenant2_1, new String[]{ tenantAdminRoleName, tenantAuthenticatedRoleName } );
    try {
      tenantManager.deleteTenant( subTenant2_1 );
      fail( "should have thrown an exception" );
    } catch ( Throwable th ) {
      assertNotNull( th );
    }
    logout();

    login( USERNAME_ADMIN, mainTenant_2, new String[]{ tenantAdminRoleName, tenantAuthenticatedRoleName } );
    tenantManager.deleteTenant( subTenant2_1 );
    ITenant tenant = tenantManager.getTenant( subTenant2_1.getRootFolderAbsolutePath() );
    assertNull( tenant );
    tenant = tenantManager.getTenant( subTenant2_1_1.getRootFolderAbsolutePath() );
    assertNull( tenant );
    tenant = tenantManager.getTenant( subTenant2_1_2.getRootFolderAbsolutePath() );
    assertNull( tenant );
    logout();

    login( USERNAME_ADMIN, subTenant2_2, new String[]{ tenantAdminRoleName, tenantAuthenticatedRoleName } );
    try {
      tenantManager.deleteTenant( subTenant2_2 );
      fail( "should have thrown an exception" );
    } catch ( Throwable th ) {
      assertNotNull( th );
    }
    logout();

    login( USERNAME_ADMIN, mainTenant_2, new String[]{ tenantAdminRoleName, tenantAuthenticatedRoleName } );
    tenantManager.deleteTenant( subTenant2_2 );
    tenant = tenantManager.getTenant( subTenant2_2.getRootFolderAbsolutePath() );
    assertNull( tenant );
    tenant = tenantManager.getTenant( subTenant2_2_1.getRootFolderAbsolutePath() );
    assertNull( tenant );
    tenant = tenantManager.getTenant( subTenant2_2_2.getRootFolderAbsolutePath() );
    assertNull( tenant );
    logout();

    login( USERNAME_ADMIN, mainTenant_1, new String[]{ tenantAdminRoleName, tenantAuthenticatedRoleName } );
    tenantManager.deleteTenant( subTenant1_1 );
    tenantManager.deleteTenant( subTenant1_2 );
    logout();

    loginAsSysTenantAdmin();
    tenantManager.deleteTenant( mainTenant_1 );
    tenantManager.deleteTenant( mainTenant_2 );
    logout();
  }
}
TOP

Related Classes of org.pentaho.test.platform.repository2.mt.RepositoryTenantManagerTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.