/*
* JBoss, Home of Professional Open Source.
* Copyright 2008, Red Hat Middleware LLC, and individual contributors
* as indicated by the @author tags. See the copyright.txt file in the
* distribution for a full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software 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.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jboss.test.server.profileservice.test;
import java.io.File;
import java.net.URI;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.jboss.dependency.plugins.AbstractController;
import org.jboss.profileservice.spi.NoSuchProfileException;
import org.jboss.profileservice.spi.Profile;
import org.jboss.profileservice.spi.ProfileKey;
import org.jboss.profileservice.spi.ProfileService;
import org.jboss.system.server.profileservice.repository.AbstractBootstrapProfileFactory;
import org.jboss.system.server.profileservice.repository.AbstractProfileService;
import org.jboss.system.server.profileservice.repository.MainDeployerAdapter;
import org.jboss.test.server.profileservice.support.MockAttachmentStore;
import org.jboss.test.server.profileservice.support.MockMainDeployer;
import org.jboss.test.server.profileservice.support.XmlProfileFactory;
import org.jboss.virtual.plugins.context.jar.JarUtils;
/**
* @author <a href="mailto:emuckenh@redhat.com">Emanuel Muckenhuber</a>
* @version $Revision: 86218 $
*/
public class ProfileServiceUnitTestCase extends AbstractProfileServiceTestBase
{
private ProfileService profileService;
public ProfileServiceUnitTestCase(String name)
{
super(name);
}
protected void setUp() throws Exception
{
super.setUp();
// Create profile service
MockMainDeployer mainDeployer = new MockMainDeployer();
MainDeployerAdapter adapter = new MainDeployerAdapter();
adapter.setMainDeployer(mainDeployer);
adapter.setAttachmentStore(new MockAttachmentStore());
AbstractController parentController = new AbstractController();
AbstractProfileService profileService = new AbstractProfileService(parentController);
profileService.setDeployer(adapter);
//
profileService.create();
this.profileService = profileService;
}
public void testProfileService() throws Exception
{
// Set the server base url as system property for the repository generation.
File serverBaseDir = new File("src/resources/server-root/");
System.setProperty("jboss.server.base.url", serverBaseDir.toURL().toExternalForm());
// Setup profile locations
File f = new File("src/resources/parsing-tests/");
File one = new File(f, "config/profiles");
File two = new File(f, "common/profiles");
//
AbstractBootstrapProfileFactory profileFactory = new XmlProfileFactory(
new URI[] { one.toURI(), two.toURI() });
profileFactory.setProfileFactory(createProfileFactory());
// Clear jar suffixes.
JarUtils.clearSuffixes();
// A list of profile keys
List<ProfileKey> keys = new ArrayList<ProfileKey>();
// Parse
Collection<Profile> profiles = profileFactory.createProfiles(new ProfileKey("default"), null);
for(Profile profile : profiles)
{
// Register
profileService.registerProfile(profile);
ProfileKey key = profile.getKey();
keys.add(key);
try
{
// This is the default behavior. For custom profiles this could be different
profileService.getActiveProfile(key);
fail("profile already registered "+ key);
}
catch(NoSuchProfileException e)
{
// ok
}
}
// All profiles should be registered now
for(ProfileKey key : keys)
profileService.getProfile(key);
try
{
// Activate profile
ProfileKey key = new ProfileKey("default");
profileService.activateProfile(key);
profileService.validateProfile(key);
}
catch(Exception e)
{
getLog().error("failed to activate: ", e);
throw e;
}
// Test the default profile
Profile active = profileService.getActiveProfile(new ProfileKey("default"));
assertNotNull(active);
// All profiles should be active now
for(ProfileKey key : keys)
profileService.getActiveProfile(key);
// Assert default profile
assertActive("default");
// Assert bootstrap profile
assertActive("bootstrap");
// Assert seam profile
assertActive("seam-deployers");
// Assert ejb3-deployers profile
assertActive("ejb3-deployers");
// Assert ejb3-runtime profile
assertActive("ejb3-runtime");
// Assert web-deployers profile
assertActive("jboss-web-deployers");
// Assert web-runtime profile
assertActive("jboss-web-runtime");
// Assert clustering-deployers
assertActive("clustering-deployers");
// Assert hasingleton
assertActive("clustering-runtime");
// Assert metadata-deployers profile
assertActive("metadata-deployer-beans");
for(ProfileKey key : profileService.getActiveProfileKeys())
{
profileService.deactivateProfile(key);
try
{
profileService.getActiveProfile(key);
fail("profile still active. " + key);
}
catch(NoSuchProfileException e)
{
// OK
}
}
// No active profiles
assertTrue(profileService.getActiveProfileKeys().isEmpty());
for(ProfileKey key : profileService.getProfileKeys())
{
profileService.unregisterProfile(key);
try
{
profileService.getProfile(key);
fail("profile not unregistered " + key);
}
catch(NoSuchProfileException e)
{
// OK
}
}
// No registred profiles
assertTrue(profileService.getProfileKeys().isEmpty());
}
protected void assertActive(String profile) throws Exception
{
assertNotNull(profileService.getActiveProfile(new ProfileKey(profile)));
}
}