@Before
  public void setUp() throws Exception {

    manager = new MockBackingRepositoryLifecycleManager(new MockSecurityHelper());
    repo = context.mock(IUnifiedRepository.class);

    booter = new MicroPlatform("test-res/solution1");
    booter.define(IPasswordService.class, Base64PasswordService.class, Scope.GLOBAL);
    booter.define(IDatabaseConnection.class, DatabaseConnection.class, Scope.GLOBAL);
    booter.define(IDatabaseDialectService.class, DatabaseDialectService.class, Scope.GLOBAL);
    booter.define(IMondrianCatalogService.class, MondrianCatalogHelper.class, Scope.GLOBAL);
    booter.define(ICacheManager.class, CacheManager.class, Scope.GLOBAL);
    booter.defineInstance(IUserRoleListService.class, context.mock(IUserRoleListService.class));
    final IAuthorizationPolicy policy = context.mock(IAuthorizationPolicy.class);
    booter.defineInstance(IAuthorizationPolicy.class, policy);
    booter.defineInstance(IUnifiedRepository.class, repo);
    booter.setSettingsProvider(new SystemSettings());
    booter.start();

    context.checking(
        new Expectations() {
          {
            oneOf(policy);
            will(returnValue(false));
            oneOf(policy);
            will(returnValue(false));
            oneOf(policy);
            will(returnValue(false));
          }
        });

    PentahoSessionHolder.setStrategyName(PentahoSessionHolder.MODE_GLOBAL);
    SecurityContextHolder.setStrategyName(SecurityContextHolder.MODE_GLOBAL);
  }
  @SuppressWarnings("deprecation")
  @Test(expected = PlatformPluginRegistrationException.class)
  public void testLoad_BadSolutionPath() throws PlatformPluginRegistrationException {
    MicroPlatform mp = new MicroPlatform("plugin-mgr/test-res/SystemPathPluginProviderTest/system");
    mp.define(ISolutionEngine.class, SolutionEngine.class);
    mp.define(ISolutionRepository.class, FileBasedSolutionRepository.class);
    mp.init();

    provider.getPlugins(new StandaloneSession());
  }
  @Before
  public void beforeTest() throws PlatformInitializationException {
    System.setProperty(SYSTEM_PROPERTY, "MODE_INHERITABLETHREADLOCAL");
    mp = new MicroPlatform();
    File path = new File(".", "test-res/PluginResourceTest/system/test-plugin");
    mp.setFilePath(path.getAbsolutePath());
    // used by DefaultPentahoJackrabbitAccessControlHelper
    mp.define(IPluginManager.class, DefaultPluginManager.class, Scope.GLOBAL);
    mp.defineInstance(
        IPluginResourceLoader.class,
        new PluginResourceLoader() {
          protected PluginClassLoader getOverrideClassloader() {
            return new PluginClassLoader(
                new File(".", "test-res/PluginResourceTest/system/test-plugin"), this);
          }
        });
    mp.define(IPluginProvider.class, TestPlugin.class, Scope.GLOBAL);

    mp.defineInstance(IAuthorizationPolicy.class, authorizationPolicy);
    mp.defineInstance(ITenantManager.class, tenantManager);
    mp.define(ITenant.class, Tenant.class);
    mp.defineInstance("roleAuthorizationPolicyRoleBindingDaoTarget", roleBindingDaoTarget);
    mp.defineInstance(IRoleAuthorizationPolicyRoleBindingDao.class, roleBindingDaoTarget);
    mp.defineInstance("tenantedUserNameUtils", tenantedUserNameUtils);
    mp.defineInstance("repositoryAdminUsername", repositoryAdminUsername);
    UserRoleDaoUserDetailsService userDetailsService = new UserRoleDaoUserDetailsService();
    userDetailsService.setUserRoleDao(userRoleDao);
    List<String> systemRoles = new ArrayList<String>();
    systemRoles.add("Admin");
    List<String> extraRoles = Arrays.asList(new String[] {"Authenticated", "Anonymous"});
    String adminRole = "Admin";

    userRoleListService =
        new UserRoleDaoUserRoleListService(
            userRoleDao,
            userDetailsService,
            tenantedUserNameUtils,
            systemRoles,
            extraRoles,
            adminRole);
    ((UserRoleDaoUserRoleListService) userRoleListService).setUserRoleDao(userRoleDao);
    ((UserRoleDaoUserRoleListService) userRoleListService)
        .setUserDetailsService(userDetailsService);

    mp.defineInstance(IUserRoleListService.class, userRoleListService);
    mp.start();
    PentahoSystem.get(IPluginManager.class).reload();
    logout();
    startupCalled = true;
  }
  @SuppressWarnings("deprecation")
  @Test
  public void testLoad_Good() throws PlatformPluginRegistrationException {
    microPlatform.define(ISolutionRepository.class, FileBasedSolutionRepository.class).init();

    PluginMessageLogger.clear();

    List<IPlatformPlugin> plugins = provider.getPlugins(new StandaloneSession());

    // should successfully load good-plugin1 and good-plugin2 and not load bad-plugin.  The fact
    // that bad-plugin does not load should not prevent the good ones from being loaded
    assertTrue(
        "plugin1 was not found",
        CollectionUtils.exists(plugins, new PluginNameMatcherPredicate("Plugin 1")));
    assertTrue(
        "plugin2 was not found",
        CollectionUtils.exists(plugins, new PluginNameMatcherPredicate("Plugin 2")));

    // make sure that the bad plugin caused an error message to be logged
    assertEquals(
        "bad plugin did not log an error message",
        1,
        PluginMessageLogger.count("SystemPathXmlPluginProvider.ERROR_0001"));

    for (String msg : PluginMessageLogger.getAll()) {
      System.err.println(msg);
    }
  }
  @Before
  public void init() {
    microPlatform = new MicroPlatform("plugin-mgr/test-res/SystemPathPluginProviderTest/");
    microPlatform.define(ISolutionEngine.class, SolutionEngine.class);

    provider = new SystemPathXmlPluginProvider();
  }
  @SuppressWarnings("deprecation")
  @Test
  public void tesLoadtLifecycleListener() throws PlatformPluginRegistrationException {
    microPlatform.define(ISolutionRepository.class, FileBasedSolutionRepository.class).init();

    PluginMessageLogger.clear();

    List<IPlatformPlugin> plugins = provider.getPlugins(new StandaloneSession());

    // first make sure Plugin 1 was loaded, otherwise our check for lifcycle class will never happen
    assertTrue(
        "plugin1 was not found",
        CollectionUtils.exists(plugins, new PluginNameMatcherPredicate("Plugin 1")));

    for (IPlatformPlugin plugin : plugins) {
      if (plugin.getId().equals("Plugin 1")) {
        assertEquals(
            "org.pentaho.test.platform.plugin.pluginmgr.FooInitializer",
            plugin.getLifecycleListenerClassname());
      }
      if (plugin.getId().equals("Plugin 2")) {
        // no listener defined to for Plugin 2
        assertNull(plugin.getLifecycleListenerClassname());
      }
    }
  }
  @Before
  public void beforeTest() throws PlatformInitializationException {
    mp = new MicroPlatform();
    // used by DefaultPentahoJackrabbitAccessControlHelper
    mp.defineInstance(IAuthorizationPolicy.class, authorizationPolicy);
    mp.defineInstance(ITenantManager.class, tenantManager);
    mp.define(ITenant.class, Tenant.class);
    mp.defineInstance("roleAuthorizationPolicyRoleBindingDaoTarget", roleBindingDaoTarget);
    mp.defineInstance(IRoleAuthorizationPolicyRoleBindingDao.class, roleBindingDaoTarget);
    mp.defineInstance("tenantedUserNameUtils", tenantedUserNameUtils);
    mp.defineInstance("tenantedRoleNameUtils", tenantedRoleNameUtils);
    mp.defineInstance("repositoryAdminUsername", repositoryAdminUsername);
    mp.define(
        IRoleAuthorizationPolicyRoleBindingDao.class, RoleAuthorizationPolicy.class, Scope.GLOBAL);
    mp.define(ITenantManager.class, RepositoryTenantManager.class, Scope.GLOBAL);
    mp.defineInstance("singleTenantAdminAuthorityName", new String("Administrator"));
    mp.defineInstance(
        "RepositoryFileProxyFactory",
        new RepositoryFileProxyFactory(this.testJcrTemplate, this.repositoryFileDao));

    UserRoleDaoUserDetailsService userDetailsService = new UserRoleDaoUserDetailsService();
    userDetailsService.setUserRoleDao(userRoleDao);
    List<String> systemRoles = new ArrayList<String>();
    systemRoles.add("Admin");
    List<String> extraRoles = Arrays.asList(new String[] {"Authenticated", "Anonymous"});
    String adminRole = "Admin";

    userRoleListService =
        new UserRoleDaoUserRoleListService(
            userRoleDao,
            userDetailsService,
            tenantedUserNameUtils,
            systemRoles,
            extraRoles,
            adminRole);
    ((UserRoleDaoUserRoleListService) userRoleListService).setUserRoleDao(userRoleDao);
    ((UserRoleDaoUserRoleListService) userRoleListService)
        .setUserDetailsService(userDetailsService);

    mp.defineInstance(IUserRoleListService.class, userRoleListService);
    mp.start();
    logout();
    startupCalled = true;
    SecurityContextHolder.setStrategyName(SecurityContextHolder.MODE_GLOBAL);
  }
  @Before
  public void init0() {
    microPlatform = new MicroPlatform("test-src/solution");
    microPlatform.define(ISolutionEngine.class, SolutionEngine.class);
    microPlatform.define(
        IUnifiedRepository.class, FileSystemBackedUnifiedRepository.class, Scope.GLOBAL);
    microPlatform.define(IMondrianCatalogService.class, MondrianCatalogHelper.class, Scope.GLOBAL);
    microPlatform.define("connection-SQL", SQLConnection.class);
    microPlatform.define("connection-MDX", MDXConnection.class);
    microPlatform.define(IDBDatasourceService.class, JndiDatasourceService.class, Scope.GLOBAL);
    microPlatform.define(IUserRoleListService.class, TestUserRoleListService.class, Scope.GLOBAL);
    microPlatform.define(UserDetailsService.class, TestUserDetailsService.class, Scope.GLOBAL);
    FileSystemBackedUnifiedRepository repo =
        (FileSystemBackedUnifiedRepository) PentahoSystem.get(IUnifiedRepository.class);
    repo.setRootDir(new File("test-src/solution"));
    try {
      microPlatform.start();
    } catch (PlatformInitializationException ex) {
      Assert.fail();
    }

    MondrianCatalogHelper catalogService =
        (MondrianCatalogHelper) PentahoSystem.get(IMondrianCatalogService.class);
    catalogService.setDataSourcesConfig(
        "file:"
            + PentahoSystem.getApplicationContext()
                .getSolutionPath("test/analysis/test-datasources.xml"));

    // JNDI
    System.setProperty("java.naming.factory.initial", "org.osjava.sj.SimpleContextFactory");
    System.setProperty("org.osjava.sj.root", "test-src/solution/system/simple-jndi");
    System.setProperty("org.osjava.sj.delimiter", "/");
  }
 @Before
 public void beforeTest() throws PlatformInitializationException {
   System.setProperty(SYSTEM_PROPERTY, "MODE_INHERITABLETHREADLOCAL");
   mp = new MicroPlatform();
   mp.defineInstance("tenantedUserNameUtils", tenantedUserNameUtils);
   mp.define(IPluginManager.class, DefaultPluginManager.class, Scope.GLOBAL);
   mp.defineInstance(IAuthorizationPolicy.class, authorizationPolicy);
   mp.defineInstance(ITenantManager.class, tenantManager);
   mp.define(ITenant.class, Tenant.class);
   mp.defineInstance("roleAuthorizationPolicyRoleBindingDaoTarget", roleBindingDaoTarget);
   mp.defineInstance(IRoleAuthorizationPolicyRoleBindingDao.class, roleBindingDaoTarget);
   mp.defineInstance("tenantedUserNameUtils", tenantedUserNameUtils);
   mp.defineInstance("tenantedRoleNameUtils", tenantedRoleNameUtils);
   mp.defineInstance("repositoryAdminUsername", repositoryAdminUsername);
   mp.define(IConfiguration.class, SystemConfig.class);
   mp.defineInstance(
       "RepositoryFileProxyFactory",
       new RepositoryFileProxyFactory(this.jcrTemplate, this.repositoryFileDao));
   UserRoleDaoUserDetailsService userDetailsService = new UserRoleDaoUserDetailsService();
   userDetailsService.setUserRoleDao(userRoleDao);
   List<String> systemRoles = new ArrayList<String>();
   systemRoles.add("Administrator");
   List<String> extraRoles = Arrays.asList(new String[] {"Authenticated", "Anonymous"});
   String adminRole = "Admin";
   userRoleListService =
       new UserRoleDaoUserRoleListService(
           userRoleDao,
           userDetailsService,
           tenantedUserNameUtils,
           systemRoles,
           extraRoles,
           adminRole);
   ((UserRoleDaoUserRoleListService) userRoleListService).setUserRoleDao(userRoleDao);
   ((UserRoleDaoUserRoleListService) userRoleListService)
       .setUserDetailsService(userDetailsService);
   mp.defineInstance(IUserRoleListService.class, userRoleListService);
   mp.start();
   loginAsRepositoryAdmin();
   setAclManagement();
   logout();
   startupCalled = true;
 }
  /** @throws java.lang.Exception */
  @SuppressWarnings("deprecation")
  @Before
  public void setUp() throws Exception {

    String solutionsRelativePath = "test-src/org/pentaho/test/platform/plugin/chartbeans/solutions";
    MicroPlatform mp = new MicroPlatform(solutionsRelativePath);
    mp.define(ISolutionEngine.class, Object.class);
    ISystemSettings settings = new XmlSimpleSystemSettings();
    mp.setSettingsProvider(settings);
    mp.init();
  }
  @SuppressWarnings("deprecation")
  @Test
  public void testLoadContentGenerators() throws PlatformPluginRegistrationException {
    microPlatform.define(ISolutionRepository.class, FileBasedSolutionRepository.class).init();
    List<IPlatformPlugin> plugins = provider.getPlugins(new StandaloneSession());

    IPlatformPlugin plugin =
        (IPlatformPlugin)
            CollectionUtils.find(
                plugins, new PluginNameMatcherPredicate("content-generator-plugin"));
    assertNotNull("content-generator-plugin should have been found", plugin);

    List<IContentInfo> contentTypes = plugin.getContentInfos();

    Object contentType =
        CollectionUtils.find(
            contentTypes,
            new Predicate() {
              public boolean evaluate(Object object) {
                IContentInfo type = (IContentInfo) object;
                return type.getTitle().equals("Good Test Type");
              }
            });
    assertNotNull("\"Good Test Type\" should have been loaded", contentType);
    assertNotNull(
        "\"Good Test Type\" extension definition is incorrect",
        ((IContentInfo) contentType).getExtension().equals("good-content-type"));

    assertEquals(
        "\"Test Type Missing type\" should not have been loaded",
        0,
        CollectionUtils.countMatches(
            contentTypes,
            new Predicate() {
              public boolean evaluate(Object object) {
                IContentInfo contentType = (IContentInfo) object;
                return contentType.getTitle().equals("Test Type Missing type");
              }
            }));

    assertEquals(
        "\"test-type-missing-title\" should not have been loaded",
        0,
        CollectionUtils.countMatches(
            contentTypes,
            new Predicate() {
              public boolean evaluate(Object object) {
                IContentInfo contentType = (IContentInfo) object;
                return contentType.getExtension().equals("test-type-missing-title");
              }
            }));
  }
  @SuppressWarnings("deprecation")
  @Test
  public void testLoadLifeCycleListener() throws PlatformPluginRegistrationException {
    microPlatform.define(ISolutionRepository.class, FileBasedSolutionRepository.class).init();
    List<IPlatformPlugin> plugins = provider.getPlugins(new StandaloneSession());

    IPlatformPlugin plugin =
        (IPlatformPlugin) CollectionUtils.find(plugins, new PluginNameMatcherPredicate("Plugin 1"));
    assertNotNull("Plugin 1 should have been found", plugin);

    assertEquals(
        "org.pentaho.test.platform.plugin.pluginmgr.FooInitializer",
        plugin.getLifecycleListenerClassname());
  }
  @Before
  public void setUp() throws Exception {
    mp = new MicroPlatform();
    // used by DefaultPentahoJackrabbitAccessControlHelper
    mp.defineInstance("tenantedUserNameUtils", tenantedUserNameUtils);
    mp.defineInstance("tenantedRoleNameUtils", tenantedRoleNameUtils);
    mp.defineInstance(IAuthorizationPolicy.class, authorizationPolicy);
    mp.defineInstance(ITenantManager.class, tenantManager);
    mp.define(ITenant.class, Tenant.class);
    mp.defineInstance(
        "roleAuthorizationPolicyRoleBindingDaoTarget", roleAuthorizationPolicyRoleBindingDao);
    mp.defineInstance("repositoryAdminUsername", repositoryAdminUsername);

    // Start the micro-platform
    mp.start();
    logout();
    startupCalled = true;
  }
  @SuppressWarnings("deprecation")
  @Test
  public void testLoadBeanDefinition() throws PlatformPluginRegistrationException {
    microPlatform.define(ISolutionRepository.class, FileBasedSolutionRepository.class).init();

    List<IPlatformPlugin> plugins = provider.getPlugins(new StandaloneSession());

    IPlatformPlugin plugin =
        (IPlatformPlugin) CollectionUtils.find(plugins, new PluginNameMatcherPredicate("Plugin 1"));
    assertNotNull("Plugin 1 should have been found", plugin);

    Collection<PluginBeanDefinition> beans = plugin.getBeans();

    assertEquals(
        "FooComponent was not loaded",
        1,
        CollectionUtils.countMatches(
            beans,
            new Predicate() {
              public boolean evaluate(Object object) {
                PluginBeanDefinition bean = (PluginBeanDefinition) object;
                return bean.getBeanId().equals("FooComponent")
                    && bean.getClassname()
                        .equals("org.pentaho.test.platform.plugin.pluginmgr.FooComponent");
              }
            }));
    assertEquals(
        "genericBean was not loaded",
        1,
        CollectionUtils.countMatches(
            beans,
            new Predicate() {
              public boolean evaluate(Object object) {
                PluginBeanDefinition bean = (PluginBeanDefinition) object;
                return bean.getBeanId().equals("genericBean")
                    && bean.getClassname().equals("java.lang.Object");
              }
            }));
  }
  @SuppressWarnings("deprecation")
  @Test
  public void testLoadWebservices() throws PlatformPluginRegistrationException {
    microPlatform.define(ISolutionRepository.class, FileBasedSolutionRepository.class).init();
    List<IPlatformPlugin> plugins = provider.getPlugins(new StandaloneSession());

    System.out.println(PluginMessageLogger.getAll());

    IPlatformPlugin plugin =
        (IPlatformPlugin) CollectionUtils.find(plugins, new PluginNameMatcherPredicate("Plugin 1"));
    assertNotNull("Plugin 1 should have been found", plugin);

    Collection<PluginServiceDefinition> webservices = plugin.getServices();

    Object wsobj =
        CollectionUtils.find(
            webservices,
            new Predicate() {
              public boolean evaluate(Object object) {
                PluginServiceDefinition ws = (PluginServiceDefinition) object;
                boolean ret = ws.getTitle().equals("%TestWS1.TITLE%");
                return ret;
              }
            });

    assertNotNull("Webservice \"%TestWS1.TITLE%\" should have been loaded", wsobj);

    PluginServiceDefinition wsDfn = (PluginServiceDefinition) wsobj;

    assertEquals("org.pentaho.test.platform.engine.core.EchoServiceBean", wsDfn.getServiceClass());
    assertEquals("xml", wsDfn.getTypes()[0]);
    assertEquals("gwt", wsDfn.getTypes()[1]);
    assertEquals("A test webservice", wsDfn.getDescription());
    assertEquals(1, wsDfn.getExtraClasses().size());
    assertEquals("java.lang.String", wsDfn.getExtraClasses().iterator().next());
  }
  @BeforeClass
  public static void setUp() throws Exception {
    System.setProperty(
        "org.osjava.sj.root", "test-res/solution1/system/simple-jndi"); // $NON-NLS-1$ //$NON-NLS-2$
    mp = new MicroPlatform("test-res/solution1");

    IAuthorizationPolicy mockAuthorizationPolicy = mock(IAuthorizationPolicy.class);
    when(mockAuthorizationPolicy.isAllowed(anyString())).thenReturn(true);

    IUserRoleListService mockUserRoleListService = mock(IUserRoleListService.class);

    IDataAccessPermissionHandler mockDataAccessPermHandler =
        mock(IDataAccessPermissionHandler.class);
    when(mockDataAccessPermHandler.hasDataAccessPermission(any(IPentahoSession.class)))
        .thenReturn(true);

    mp.define(
        ISolutionEngine.class, SolutionEngine.class, IPentahoDefinableObjectFactory.Scope.GLOBAL);
    mp.define(
        IUnifiedRepository.class,
        TestFileSystemBackedUnifiedRepository.class,
        IPentahoDefinableObjectFactory.Scope.GLOBAL);
    mp.define(
        IMondrianCatalogService.class,
        MondrianCatalogHelper.class,
        IPentahoDefinableObjectFactory.Scope.GLOBAL);
    mp.define("connection-SQL", SQLConnection.class);
    mp.define("connection-MDX", MDXConnection.class);
    mp.define("connection-MDXOlap4j", MDXOlap4jConnection.class);
    mp.define(
        IDBDatasourceService.class,
        JndiDatasourceService.class,
        IPentahoDefinableObjectFactory.Scope.GLOBAL);
    mp.define(
        MDXConnection.MDX_CONNECTION_MAPPER_KEY,
        MondrianOneToOneUserRoleListMapper.class,
        IPentahoDefinableObjectFactory.Scope.GLOBAL);
    mp.define(IDatasourceMgmtService.class, MockDatasourceMgmtService.class);
    mp.define(IClientRepositoryPathsStrategy.class, MockClientRepositoryPathsStrategy.class);
    mp.define(ISecurityHelper.class, MockSecurityHelper.class);
    mp.define(UserDetailsService.class, MockUserDetailService.class);
    mp.define("singleTenantAdminUserName", "admin");
    mp.defineInstance(IMetadataDomainRepository.class, createMetadataDomainRepository());
    mp.defineInstance(IAuthorizationPolicy.class, mockAuthorizationPolicy);
    mp.defineInstance(
        IPluginResourceLoader.class,
        new PluginResourceLoader() {
          protected PluginClassLoader getOverrideClassloader() {
            return new PluginClassLoader(
                new File(".", "test-res/solution1/system/simple-jndi"), this);
          }
        });
    mp.defineInstance(IUserRoleListService.class, mockUserRoleListService);
    mp.defineInstance(IDataAccessPermissionHandler.class, mockDataAccessPermHandler);

    mp.setSettingsProvider(new SystemSettings());
    mp.start();

    PentahoSessionHolder.setStrategyName(PentahoSessionHolder.MODE_GLOBAL);
    SecurityContextHolder.setStrategyName(SecurityContextHolder.MODE_GLOBAL);
  }