Commit abb5cd6e6ae9e23134be36fc51b2e9b4ac31677f

Authored by Cleverson Sacramento
2 parents 8a8436fe c5c7b636
Exists in master

Merge branch '2.4.0' of git@github.com:demoiselle/framework.git into

2.4.0

Conflicts:
	impl/extension/jpa/src/test/resources/arquillian.xml
Showing 45 changed files with 2220 additions and 1164 deletions   Show diff stats
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/ManagementBootstrap.java
@@ -21,7 +21,6 @@ import br.gov.frameworkdemoiselle.internal.context.ContextManager; @@ -21,7 +21,6 @@ import br.gov.frameworkdemoiselle.internal.context.ContextManager;
21 import br.gov.frameworkdemoiselle.internal.context.ManagedContext; 21 import br.gov.frameworkdemoiselle.internal.context.ManagedContext;
22 import br.gov.frameworkdemoiselle.internal.management.ManagedType; 22 import br.gov.frameworkdemoiselle.internal.management.ManagedType;
23 import br.gov.frameworkdemoiselle.internal.management.Management; 23 import br.gov.frameworkdemoiselle.internal.management.Management;
24 -import br.gov.frameworkdemoiselle.internal.producer.ResourceBundleProducer;  
25 import br.gov.frameworkdemoiselle.lifecycle.AfterShutdownProccess; 24 import br.gov.frameworkdemoiselle.lifecycle.AfterShutdownProccess;
26 import br.gov.frameworkdemoiselle.lifecycle.ManagementExtension; 25 import br.gov.frameworkdemoiselle.lifecycle.ManagementExtension;
27 import br.gov.frameworkdemoiselle.stereotype.ManagementController; 26 import br.gov.frameworkdemoiselle.stereotype.ManagementController;
@@ -48,7 +47,7 @@ public class ManagementBootstrap implements Extension { @@ -48,7 +47,7 @@ public class ManagementBootstrap implements Extension {
48 47
49 @SuppressWarnings("unchecked") 48 @SuppressWarnings("unchecked")
50 public void registerAvailableManagedTypes(@Observes final AfterDeploymentValidation event, BeanManager beanManager) { 49 public void registerAvailableManagedTypes(@Observes final AfterDeploymentValidation event, BeanManager beanManager) {
51 - ResourceBundle bundle = new ResourceBundleProducer().create("demoiselle-core-bundle", Locale.getDefault()); 50 + ResourceBundle bundle = new ResourceBundle("demoiselle-core-bundle", Locale.getDefault());
52 51
53 Management monitoringManager = Beans.getReference(Management.class); 52 Management monitoringManager = Beans.getReference(Management.class);
54 for (AnnotatedType<?> type : types) { 53 for (AnnotatedType<?> type : types) {
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/management/ManagedType.java
@@ -40,6 +40,7 @@ import java.lang.annotation.Annotation; @@ -40,6 +40,7 @@ import java.lang.annotation.Annotation;
40 import java.lang.reflect.Field; 40 import java.lang.reflect.Field;
41 import java.lang.reflect.Method; 41 import java.lang.reflect.Method;
42 import java.util.ArrayList; 42 import java.util.ArrayList;
  43 +import java.util.Locale;
43 import java.util.TreeMap; 44 import java.util.TreeMap;
44 45
45 import javax.inject.Qualifier; 46 import javax.inject.Qualifier;
@@ -47,10 +48,9 @@ import javax.inject.Qualifier; @@ -47,10 +48,9 @@ import javax.inject.Qualifier;
47 import br.gov.frameworkdemoiselle.DemoiselleException; 48 import br.gov.frameworkdemoiselle.DemoiselleException;
48 import br.gov.frameworkdemoiselle.annotation.ManagedOperation; 49 import br.gov.frameworkdemoiselle.annotation.ManagedOperation;
49 import br.gov.frameworkdemoiselle.annotation.ManagedProperty; 50 import br.gov.frameworkdemoiselle.annotation.ManagedProperty;
50 -import br.gov.frameworkdemoiselle.annotation.OperationType;  
51 import br.gov.frameworkdemoiselle.annotation.ManagedProperty.ManagedPropertyAccess; 51 import br.gov.frameworkdemoiselle.annotation.ManagedProperty.ManagedPropertyAccess;
52 import br.gov.frameworkdemoiselle.annotation.OperationParameter; 52 import br.gov.frameworkdemoiselle.annotation.OperationParameter;
53 -import br.gov.frameworkdemoiselle.internal.producer.ResourceBundleProducer; 53 +import br.gov.frameworkdemoiselle.annotation.OperationType;
54 import br.gov.frameworkdemoiselle.stereotype.ManagementController; 54 import br.gov.frameworkdemoiselle.stereotype.ManagementController;
55 import br.gov.frameworkdemoiselle.util.ResourceBundle; 55 import br.gov.frameworkdemoiselle.util.ResourceBundle;
56 56
@@ -77,7 +77,7 @@ public class ManagedType { @@ -77,7 +77,7 @@ public class ManagedType {
77 private String description; 77 private String description;
78 78
79 public ManagedType(Class<?> type) { 79 public ManagedType(Class<?> type) {
80 - bundle = new ResourceBundleProducer().create("demoiselle-core-bundle"); 80 + bundle = new ResourceBundle("demoiselle-core-bundle",Locale.getDefault());
81 81
82 if (type == null) { 82 if (type == null) {
83 throw new DemoiselleException(bundle.getString("management-null-class-defined")); 83 throw new DemoiselleException(bundle.getString("management-null-class-defined"));
impl/core/src/main/java/br/gov/frameworkdemoiselle/security/AuthenticationException.java
@@ -37,7 +37,7 @@ @@ -37,7 +37,7 @@
37 package br.gov.frameworkdemoiselle.security; 37 package br.gov.frameworkdemoiselle.security;
38 38
39 /** 39 /**
40 - * Thrown when the authorization process fails. 40 + * Thrown when the authentication process fails.
41 * 41 *
42 * @author SERPRO 42 * @author SERPRO
43 */ 43 */
impl/core/src/main/java/br/gov/frameworkdemoiselle/security/Authenticator.java
@@ -52,7 +52,7 @@ public interface Authenticator extends Serializable { @@ -52,7 +52,7 @@ public interface Authenticator extends Serializable {
52 * @throws AuthenticationException 52 * @throws AuthenticationException
53 * When the authentication process fails, this exception is thrown. 53 * When the authentication process fails, this exception is thrown.
54 */ 54 */
55 - void authenticate() throws AuthenticationException; 55 + void authenticate();
56 56
57 /** 57 /**
58 * Executes the necessary steps to unauthenticate an user. 58 * Executes the necessary steps to unauthenticate an user.
impl/core/src/main/java/br/gov/frameworkdemoiselle/security/SecurityContext.java
@@ -49,10 +49,10 @@ public interface SecurityContext extends Serializable { @@ -49,10 +49,10 @@ public interface SecurityContext extends Serializable {
49 /** 49 /**
50 * Executes the login of a user to the application. 50 * Executes the login of a user to the application.
51 * 51 *
52 - * @throws AuthorizationException 52 + * @throws AuthenticationException
53 * When the logon process fails, this exception is thrown. 53 * When the logon process fails, this exception is thrown.
54 */ 54 */
55 - void login() throws AuthorizationException; 55 + void login();
56 56
57 /** 57 /**
58 * Executes the logout of a user. 58 * Executes the logout of a user.
@@ -60,7 +60,7 @@ public interface SecurityContext extends Serializable { @@ -60,7 +60,7 @@ public interface SecurityContext extends Serializable {
60 * @throws NotLoggedInException 60 * @throws NotLoggedInException
61 * if there is no user logged in a specific session 61 * if there is no user logged in a specific session
62 */ 62 */
63 - void logout() throws NotLoggedInException; 63 + void logout();
64 64
65 /** 65 /**
66 * Checks if a specific user is logged in. 66 * Checks if a specific user is logged in.
@@ -69,7 +69,11 @@ public interface SecurityContext extends Serializable { @@ -69,7 +69,11 @@ public interface SecurityContext extends Serializable {
69 */ 69 */
70 boolean isLoggedIn(); 70 boolean isLoggedIn();
71 71
72 - void checkLoggedIn() throws NotLoggedInException; 72 + /**
  73 + * @throws NotLoggedInException
  74 + * if there is no user logged in a specific session
  75 + */
  76 + void checkLoggedIn();
73 77
74 /** 78 /**
75 * Checks if the logged user has permission to execute an specific operation on a specific resource. 79 * Checks if the logged user has permission to execute an specific operation on a specific resource.
@@ -79,10 +83,11 @@ public interface SecurityContext extends Serializable { @@ -79,10 +83,11 @@ public interface SecurityContext extends Serializable {
79 * @param operation 83 * @param operation
80 * operation to be checked 84 * operation to be checked
81 * @return {@code true} if the user has the permission 85 * @return {@code true} if the user has the permission
  86 + *
82 * @throws NotLoggedInException 87 * @throws NotLoggedInException
83 * if there is no user logged in a specific session. 88 * if there is no user logged in a specific session.
84 */ 89 */
85 - boolean hasPermission(String resource, String operation) throws NotLoggedInException; 90 + boolean hasPermission(String resource, String operation);
86 91
87 /** 92 /**
88 * Checks if the logged user has an specific role 93 * Checks if the logged user has an specific role
@@ -90,10 +95,11 @@ public interface SecurityContext extends Serializable { @@ -90,10 +95,11 @@ public interface SecurityContext extends Serializable {
90 * @param role 95 * @param role
91 * role to be checked 96 * role to be checked
92 * @return {@code true} if the user has the role 97 * @return {@code true} if the user has the role
  98 + *
93 * @throws NotLoggedInException 99 * @throws NotLoggedInException
94 * if there is no user logged in a specific session. 100 * if there is no user logged in a specific session.
95 */ 101 */
96 - boolean hasRole(String role) throws NotLoggedInException; 102 + boolean hasRole(String role);
97 103
98 /** 104 /**
99 * Return the user logged in the session. 105 * Return the user logged in the session.
impl/core/src/test/java/management/AnnotationTestCase.java
@@ -1,99 +0,0 @@ @@ -1,99 +0,0 @@
1 -/*  
2 - * Demoiselle Framework  
3 - * Copyright (C) 2010 SERPRO  
4 - * ----------------------------------------------------------------------------  
5 - * This file is part of Demoiselle Framework.  
6 - *  
7 - * Demoiselle Framework is free software; you can redistribute it and/or  
8 - * modify it under the terms of the GNU Lesser General Public License version 3  
9 - * as published by the Free Software Foundation.  
10 - *  
11 - * This program is distributed in the hope that it will be useful,  
12 - * but WITHOUT ANY WARRANTY; without even the implied warranty of  
13 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the  
14 - * GNU General Public License for more details.  
15 - *  
16 - * You should have received a copy of the GNU Lesser General Public License version 3  
17 - * along with this program; if not, see <http://www.gnu.org/licenses/>  
18 - * or write to the Free Software Foundation, Inc., 51 Franklin Street,  
19 - * Fifth Floor, Boston, MA 02110-1301, USA.  
20 - * ----------------------------------------------------------------------------  
21 - * Este arquivo é parte do Framework Demoiselle.  
22 - *  
23 - * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou  
24 - * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação  
25 - * do Software Livre (FSF).  
26 - *  
27 - * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA  
28 - * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou  
29 - * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português  
30 - * para maiores detalhes.  
31 - *  
32 - * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título  
33 - * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>  
34 - * ou escreva para a Fundação do Software Livre (FSF) Inc.,  
35 - * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.  
36 - */  
37 -package management;  
38 -  
39 -import java.io.File;  
40 -  
41 -import management.testclasses.DummyManagementExtension;  
42 -import management.testclasses.ManagedClassStore;  
43 -  
44 -import org.jboss.arquillian.container.test.api.Deployer;  
45 -import org.jboss.arquillian.container.test.api.Deployment;  
46 -import org.jboss.arquillian.junit.Arquillian;  
47 -import org.jboss.arquillian.test.api.ArquillianResource;  
48 -import org.jboss.shrinkwrap.api.ShrinkWrap;  
49 -import org.jboss.shrinkwrap.api.asset.FileAsset;  
50 -import org.jboss.shrinkwrap.api.spec.JavaArchive;  
51 -import org.junit.Assert;  
52 -import org.junit.Ignore;  
53 -import org.junit.Test;  
54 -import org.junit.runner.RunWith;  
55 -  
56 -import test.Tests;  
57 -  
58 -//TODO O arquillian está com um problema onde, embora os testes rodem todos individualmente,  
59 -//ao pedir para rodar todos este teste individual causa todos os testes executados após esse  
60 -//falharem. Até este problema ser resolvido este teste será ignorado.  
61 -@RunWith(Arquillian.class)  
62 -@Ignore  
63 -public class AnnotationTestCase {  
64 -  
65 - /**  
66 - * Deployment containing a malformed managed class. Tests using this deployment will check if deployment fails (it  
67 - * has to).  
68 - */  
69 - @Deployment(name = "wrong_annotation", managed = false)  
70 - public static JavaArchive createWrongAnnotationDeployment() {  
71 - return ShrinkWrap  
72 - .create(JavaArchive.class)  
73 - .addClass(Tests.class)  
74 - .addPackages(true, "br")  
75 - .addAsResource(new FileAsset(new File("src/test/resources/beans.xml")), "beans.xml")  
76 - .addAsManifestResource(  
77 - new File("src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension"),  
78 - "services/javax.enterprise.inject.spi.Extension")  
79 - .addPackages(false, ManagementBootstrapTestCase.class.getPackage())  
80 - //.addClasses(DummyManagementExtension.class, DummyManagedClassPropertyError.class, ManagedClassStore.class);  
81 - .addClasses(DummyManagementExtension.class, ManagedClassStore.class);  
82 - }  
83 -  
84 - @Test  
85 - public void testWrongAnnotation(@ArquillianResource Deployer deployer) {  
86 -  
87 - try {  
88 - deployer.deploy("wrong_annotation");  
89 -  
90 - // O processo de deploy precisa falhar, pois temos uma classe anotada com falhas.  
91 - Assert.fail();  
92 - } catch (Exception e) {  
93 - //SUCCESS  
94 - } finally {  
95 - deployer.undeploy("wrong_annotation");  
96 - }  
97 - }  
98 -  
99 -}  
impl/core/src/test/java/management/ManagementBootstrapTestCase.java
@@ -1,136 +0,0 @@ @@ -1,136 +0,0 @@
1 -/*  
2 - * Demoiselle Framework  
3 - * Copyright (C) 2010 SERPRO  
4 - * ----------------------------------------------------------------------------  
5 - * This file is part of Demoiselle Framework.  
6 - *  
7 - * Demoiselle Framework is free software; you can redistribute it and/or  
8 - * modify it under the terms of the GNU Lesser General Public License version 3  
9 - * as published by the Free Software Foundation.  
10 - *  
11 - * This program is distributed in the hope that it will be useful,  
12 - * but WITHOUT ANY WARRANTY; without even the implied warranty of  
13 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the  
14 - * GNU General Public License for more details.  
15 - *  
16 - * You should have received a copy of the GNU Lesser General Public License version 3  
17 - * along with this program; if not, see <http://www.gnu.org/licenses/>  
18 - * or write to the Free Software Foundation, Inc., 51 Franklin Street,  
19 - * Fifth Floor, Boston, MA 02110-1301, USA.  
20 - * ----------------------------------------------------------------------------  
21 - * Este arquivo é parte do Framework Demoiselle.  
22 - *  
23 - * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou  
24 - * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação  
25 - * do Software Livre (FSF).  
26 - *  
27 - * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA  
28 - * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou  
29 - * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português  
30 - * para maiores detalhes.  
31 - *  
32 - * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título  
33 - * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>  
34 - * ou escreva para a Fundação do Software Livre (FSF) Inc.,  
35 - * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.  
36 - */  
37 -package management;  
38 -  
39 -import java.io.File;  
40 -import java.util.List;  
41 -  
42 -import javax.enterprise.inject.spi.BeforeShutdown;  
43 -  
44 -import management.testclasses.DummyManagedClass;  
45 -import management.testclasses.DummyManagementExtension;  
46 -import management.testclasses.ManagedClassStore;  
47 -  
48 -import org.jboss.arquillian.container.test.api.Deployment;  
49 -import org.jboss.arquillian.junit.Arquillian;  
50 -import org.jboss.shrinkwrap.api.ShrinkWrap;  
51 -import org.jboss.shrinkwrap.api.asset.FileAsset;  
52 -import org.jboss.shrinkwrap.api.spec.JavaArchive;  
53 -import org.junit.Assert;  
54 -import org.junit.Ignore;  
55 -import org.junit.Test;  
56 -import org.junit.runner.RunWith;  
57 -  
58 -import test.Tests;  
59 -import br.gov.frameworkdemoiselle.internal.management.ManagedType;  
60 -import br.gov.frameworkdemoiselle.lifecycle.ManagementExtension;  
61 -import br.gov.frameworkdemoiselle.util.Beans;  
62 -  
63 -@RunWith(Arquillian.class)  
64 -@Ignore  
65 -public class ManagementBootstrapTestCase {  
66 -  
67 - /**  
68 - * Deployment to test normal deployment behaviour  
69 - *  
70 - */  
71 - @Deployment  
72 - public static JavaArchive createDeployment() {  
73 - return ShrinkWrap  
74 - .create(JavaArchive.class)  
75 - .addClass(Tests.class)  
76 - .addPackages(true, "br")  
77 - .addAsResource(  
78 - new FileAsset(new File(  
79 - "src/test/resources/beans.xml")),  
80 - "beans.xml")  
81 - .addAsManifestResource(  
82 - new File(  
83 - "src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension"),  
84 - "services/javax.enterprise.inject.spi.Extension")  
85 - .addPackages(false,  
86 - ManagementBootstrapTestCase.class.getPackage())  
87 - .addClasses(DummyManagementExtension.class,  
88 - DummyManagedClass.class, ManagedClassStore.class);  
89 - }  
90 -  
91 - /**  
92 - * Test if a a management extension (a library that implements  
93 - * {@link ManagementExtension}) is correctly detected.  
94 - */  
95 - @Test  
96 - public void testManagementExtensionRegistration() {  
97 - // "store" é application scoped e é usado pelo DummyManagementExtension  
98 - // para  
99 - // armazenar todos os beans anotados com @ManagementController. Se o  
100 - // bootstrap rodou corretamente,  
101 - // ele chamou DummyManagementExtension.initialize e este store conterá o  
102 - // bean de teste que anotamos.  
103 - ManagedClassStore store = Beans.getReference(ManagedClassStore.class);  
104 -  
105 - Assert.assertEquals(1, store.getManagedTypes().size());  
106 - }  
107 -  
108 - /**  
109 - * Test if a a management extension's shutdown method is correctly called  
110 - * upon application shutdown.  
111 - */  
112 - @Test  
113 - public void testManagementExtensionShutdown() {  
114 - // "store" é application scoped e é usado pelo DummyManagementExtension  
115 - // para  
116 - // armazenar todos os beans anotados com @ManagementController. Se o  
117 - // bootstrap rodou corretamente,  
118 - // ele chamou DummyManagementExtension.initialize e este store conterá o  
119 - // bean de teste que anotamos.  
120 - // Nós então disparamos o evento de shutdown onde ele deverá limpar o  
121 - // store.  
122 - ManagedClassStore store = Beans.getReference(ManagedClassStore.class);  
123 -  
124 - // Detecta se a classe anotada foi detectada  
125 - List<ManagedType> managedTypes = store.getManagedTypes();  
126 - Assert.assertEquals(1, managedTypes.size());  
127 -  
128 - Beans.getBeanManager().fireEvent(new BeforeShutdown() {  
129 - });  
130 -  
131 - // Após o "undeploy", o ciclo de vida precisa ter removido a classe  
132 - // gerenciada da lista.  
133 - Assert.assertEquals(0, managedTypes.size());  
134 - }  
135 -  
136 -}  
impl/core/src/test/java/management/ManagementTestCase.java
@@ -1,195 +0,0 @@ @@ -1,195 +0,0 @@
1 -/*  
2 - * Demoiselle Framework  
3 - * Copyright (C) 2010 SERPRO  
4 - * ----------------------------------------------------------------------------  
5 - * This file is part of Demoiselle Framework.  
6 - *  
7 - * Demoiselle Framework is free software; you can redistribute it and/or  
8 - * modify it under the terms of the GNU Lesser General Public License version 3  
9 - * as published by the Free Software Foundation.  
10 - *  
11 - * This program is distributed in the hope that it will be useful,  
12 - * but WITHOUT ANY WARRANTY; without even the implied warranty of  
13 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the  
14 - * GNU General Public License for more details.  
15 - *  
16 - * You should have received a copy of the GNU Lesser General Public License version 3  
17 - * along with this program; if not, see <http://www.gnu.org/licenses/>  
18 - * or write to the Free Software Foundation, Inc., 51 Franklin Street,  
19 - * Fifth Floor, Boston, MA 02110-1301, USA.  
20 - * ----------------------------------------------------------------------------  
21 - * Este arquivo é parte do Framework Demoiselle.  
22 - *  
23 - * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou  
24 - * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação  
25 - * do Software Livre (FSF).  
26 - *  
27 - * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA  
28 - * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou  
29 - * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português  
30 - * para maiores detalhes.  
31 - *  
32 - * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título  
33 - * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>  
34 - * ou escreva para a Fundação do Software Livre (FSF) Inc.,  
35 - * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.  
36 - */  
37 -package management;  
38 -  
39 -import java.io.File;  
40 -  
41 -import junit.framework.Assert;  
42 -import management.testclasses.DummyManagedClass;  
43 -import management.testclasses.DummyManagementExtension;  
44 -import management.testclasses.ManagedClassStore;  
45 -import management.testclasses.RequestScopeBeanClient;  
46 -import management.testclasses.RequestScopedClass;  
47 -  
48 -import org.jboss.arquillian.container.test.api.Deployment;  
49 -import org.jboss.arquillian.junit.Arquillian;  
50 -import org.jboss.shrinkwrap.api.ShrinkWrap;  
51 -import org.jboss.shrinkwrap.api.asset.FileAsset;  
52 -import org.jboss.shrinkwrap.api.spec.JavaArchive;  
53 -import org.junit.Test;  
54 -import org.junit.runner.RunWith;  
55 -  
56 -import test.Tests;  
57 -import br.gov.frameworkdemoiselle.DemoiselleException;  
58 -import br.gov.frameworkdemoiselle.util.Beans;  
59 -  
60 -/**  
61 - * Test case that simulates a management extension and tests if properties and operations on a managed class can be  
62 - * easily accessed and invoked.  
63 - *  
64 - * @author serpro  
65 - */  
66 -@RunWith(Arquillian.class)  
67 -public class ManagementTestCase {  
68 -  
69 - @Deployment  
70 - public static JavaArchive createMultithreadedDeployment() {  
71 - return ShrinkWrap  
72 - .create(JavaArchive.class)  
73 - .addClass(Tests.class)  
74 - .addPackages(true, "br")  
75 - .addAsResource(new FileAsset(new File("src/test/resources/beans.xml")), "beans.xml")  
76 - .addAsManifestResource(  
77 - new File("src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension"),  
78 - "services/javax.enterprise.inject.spi.Extension")  
79 - .addPackages(false, ManagementTestCase.class.getPackage())  
80 - .addClasses(DummyManagementExtension.class, DummyManagedClass.class, ManagedClassStore.class,  
81 - RequestScopeBeanClient.class, RequestScopedClass.class);  
82 - }  
83 -  
84 - @Test  
85 - public void testReadProperty() {  
86 - DummyManagedClass managedClass = Beans.getReference(DummyManagedClass.class);  
87 - managedClass.setName("Test Name");  
88 -  
89 - // store é nossa extensão de gerenciamento falsa, então estamos testando um "cliente" acessando  
90 - // nosso tipo gerenciado DummyManagedClass remotamente.  
91 - ManagedClassStore store = Beans.getReference(ManagedClassStore.class);  
92 - Object name = store.getProperty(DummyManagedClass.class, "name");  
93 - Assert.assertEquals("Test Name", name);  
94 - }  
95 -  
96 - @Test  
97 - public void testWriteProperty() {  
98 - // store é nossa extensão de gerenciamento falsa, então estamos testando um "cliente" definindo  
99 - // um novo valor em uma propriedade de nosso tipo gerenciado DummyManagedClass remotamente.  
100 - ManagedClassStore store = Beans.getReference(ManagedClassStore.class);  
101 - store.setProperty(DummyManagedClass.class, "name", "Test Name");  
102 -  
103 - DummyManagedClass managedClass = Beans.getReference(DummyManagedClass.class);  
104 - Assert.assertEquals("Test Name", managedClass.getName());  
105 - }  
106 -  
107 - @Test  
108 - public void testReadAWriteOnly() {  
109 -  
110 - ManagedClassStore store = Beans.getReference(ManagedClassStore.class);  
111 -  
112 - try {  
113 - store.getProperty(DummyManagedClass.class, "writeOnlyProperty");  
114 - Assert.fail();  
115 - } catch (DemoiselleException de) {  
116 - // SUCCESS  
117 - }  
118 -  
119 - }  
120 -  
121 - @Test  
122 - public void testWriteAReadOnly() {  
123 -  
124 - ManagedClassStore store = Beans.getReference(ManagedClassStore.class);  
125 -  
126 - try {  
127 - store.setProperty(DummyManagedClass.class, "readOnlyProperty", "New Value");  
128 - Assert.fail();  
129 - } catch (DemoiselleException de) {  
130 - // SUCCESS  
131 - }  
132 -  
133 - }  
134 -  
135 - @Test  
136 - public void testInvokeOperation() {  
137 -  
138 - ManagedClassStore store = Beans.getReference(ManagedClassStore.class);  
139 -  
140 - try {  
141 - store.setProperty(DummyManagedClass.class, "firstFactor", new Integer(10));  
142 - store.setProperty(DummyManagedClass.class, "secondFactor", new Integer(15));  
143 - Integer response = (Integer) store.invoke(DummyManagedClass.class, "sumFactors");  
144 - Assert.assertEquals(new Integer(25), response);  
145 - } catch (DemoiselleException de) {  
146 - Assert.fail(de.getMessage());  
147 - }  
148 -  
149 - }  
150 -  
151 - @Test  
152 - public void testInvokeNonAnnotatedOperation() {  
153 -  
154 - ManagedClassStore store = Beans.getReference(ManagedClassStore.class);  
155 -  
156 - try {  
157 - // O método "nonOperationAnnotatedMethod" existe na classe DummyManagedClass, mas não está anotado como  
158 - // "@ManagedOperation", então  
159 - // ela não pode ser exposta para extensões.  
160 - store.invoke(DummyManagedClass.class, "nonOperationAnnotatedMethod");  
161 - Assert.fail();  
162 - } catch (DemoiselleException de) {  
163 - // SUCCESS  
164 - }  
165 -  
166 - }  
167 -  
168 - @Test  
169 - public void testAccessLevelControl() {  
170 - // tentamos escrever em uma propriedade que, apesar de ter método setter, está marcada como read-only.  
171 - ManagedClassStore store = Beans.getReference(ManagedClassStore.class);  
172 -  
173 - try {  
174 - store.setProperty(DummyManagedClass.class, "readOnlyPropertyWithSetMethod", "A Value");  
175 - Assert.fail();  
176 - } catch (DemoiselleException de) {  
177 - System.out.println(de.getMessage());  
178 - // success  
179 - }  
180 - }  
181 -  
182 - @Test  
183 - public void testRequestScopedOperation() {  
184 - ManagedClassStore store = Beans.getReference(ManagedClassStore.class);  
185 -  
186 - // Esta operação faz multiplos acessos a um bean RequestScoped. Durante a operação todos os acessos devem  
187 - // operar sob a mesma instância, mas uma segunda invocação deve operar em uma instância nova  
188 - Object info = store.invoke(DummyManagedClass.class, "requestScopedOperation");  
189 - Assert.assertEquals("-OPERATION ONE CALLED--OPERATION TWO CALLED-", info);  
190 -  
191 - // Segunda invocação para testar se uma nova instância é criada, já que esse é um novo request.  
192 - info = store.invoke(DummyManagedClass.class, "requestScopedOperation");  
193 - Assert.assertEquals("-OPERATION ONE CALLED--OPERATION TWO CALLED-", info);  
194 - }  
195 -}  
impl/core/src/test/java/management/NotificationTestCase.java
@@ -1,136 +0,0 @@ @@ -1,136 +0,0 @@
1 -/*  
2 - * Demoiselle Framework  
3 - * Copyright (C) 2010 SERPRO  
4 - * ----------------------------------------------------------------------------  
5 - * This file is part of Demoiselle Framework.  
6 - *  
7 - * Demoiselle Framework is free software; you can redistribute it and/or  
8 - * modify it under the terms of the GNU Lesser General Public License version 3  
9 - * as published by the Free Software Foundation.  
10 - *  
11 - * This program is distributed in the hope that it will be useful,  
12 - * but WITHOUT ANY WARRANTY; without even the implied warranty of  
13 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the  
14 - * GNU General Public License for more details.  
15 - *  
16 - * You should have received a copy of the GNU Lesser General Public License version 3  
17 - * along with this program; if not, see <http://www.gnu.org/licenses/>  
18 - * or write to the Free Software Foundation, Inc., 51 Franklin Street,  
19 - * Fifth Floor, Boston, MA 02110-1301, USA.  
20 - * ----------------------------------------------------------------------------  
21 - * Este arquivo é parte do Framework Demoiselle.  
22 - *  
23 - * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou  
24 - * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação  
25 - * do Software Livre (FSF).  
26 - *  
27 - * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA  
28 - * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou  
29 - * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português  
30 - * para maiores detalhes.  
31 - *  
32 - * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título  
33 - * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>  
34 - * ou escreva para a Fundação do Software Livre (FSF) Inc.,  
35 - * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.  
36 - */  
37 -package management;  
38 -  
39 -import java.io.File;  
40 -  
41 -import javax.inject.Inject;  
42 -  
43 -import junit.framework.Assert;  
44 -import management.testclasses.DummyManagedClass;  
45 -import management.testclasses.DummyNotificationListener;  
46 -  
47 -import org.jboss.arquillian.container.test.api.Deployment;  
48 -import org.jboss.arquillian.junit.Arquillian;  
49 -import org.jboss.shrinkwrap.api.ShrinkWrap;  
50 -import org.jboss.shrinkwrap.api.asset.FileAsset;  
51 -import org.jboss.shrinkwrap.api.spec.JavaArchive;  
52 -import org.junit.Test;  
53 -import org.junit.runner.RunWith;  
54 -  
55 -import test.Tests;  
56 -import br.gov.frameworkdemoiselle.annotation.Name;  
57 -import br.gov.frameworkdemoiselle.internal.management.ManagedType;  
58 -import br.gov.frameworkdemoiselle.internal.management.Management;  
59 -import br.gov.frameworkdemoiselle.management.AttributeChangeNotification;  
60 -import br.gov.frameworkdemoiselle.management.GenericNotification;  
61 -import br.gov.frameworkdemoiselle.management.NotificationManager;  
62 -import br.gov.frameworkdemoiselle.util.Beans;  
63 -import br.gov.frameworkdemoiselle.util.ResourceBundle;  
64 -  
65 -/**  
66 - * Test the {@link NotificationManager} with a dummy extension to check if notifications are correctly propagated  
67 - *  
68 - * @author serpro  
69 - */  
70 -@RunWith(Arquillian.class)  
71 -public class NotificationTestCase {  
72 -  
73 - @Inject  
74 - private NotificationManager manager;  
75 -  
76 - @Inject  
77 - @Name("demoiselle-core-bundle")  
78 - private ResourceBundle bundle;  
79 -  
80 - @Deployment  
81 - public static JavaArchive createDeployment() {  
82 - return ShrinkWrap  
83 - .create(JavaArchive.class)  
84 - .addClass(Tests.class)  
85 - .addPackages(true, "br")  
86 - .addAsResource(new FileAsset(new File("src/test/resources/beans.xml")), "beans.xml")  
87 - .addAsManifestResource(  
88 - new File("src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension"),  
89 - "services/javax.enterprise.inject.spi.Extension")  
90 - .addPackages(false, NotificationTestCase.class.getPackage())  
91 - .addClasses(DummyNotificationListener.class, DummyManagedClass.class);  
92 - }  
93 -  
94 - /**  
95 - * Test sending a normal notification  
96 - */  
97 - @Test  
98 - public void testSendGenericNotification() {  
99 - manager.sendNotification(new GenericNotification("Test Message"));  
100 - DummyNotificationListener listener = Beans.getReference(DummyNotificationListener.class);  
101 - Assert.assertEquals("Test Message", listener.getMessage());  
102 - }  
103 -  
104 - /**  
105 - * Test sending a notification of change in attribute  
106 - */  
107 - @Test  
108 - public void testSendAttributeChangeNotification() {  
109 - manager.sendNotification(new AttributeChangeNotification("Test Message", "attribute", String.class, "old",  
110 - "new"));  
111 - DummyNotificationListener listener = Beans.getReference(DummyNotificationListener.class);  
112 - Assert.assertEquals("Test Message - attribute", listener.getMessage());  
113 - }  
114 -  
115 - /**  
116 - * Test if notifications are automatically sent when an attribute from a managed class change values  
117 - */  
118 - @Test  
119 - public void testNotifyChangeManagedClass() {  
120 - Management manager = Beans.getReference(Management.class);  
121 -  
122 - for (ManagedType type : manager.getManagedTypes()) {  
123 - if (type.getType().equals(DummyManagedClass.class)) {  
124 - manager.setProperty(type, "id", new Integer(10));  
125 - break;  
126 - }  
127 - }  
128 -  
129 - DummyNotificationListener listener = Beans.getReference(DummyNotificationListener.class);  
130 - Assert.assertEquals(  
131 - bundle.getString("management-notification-attribute-changed", "id",  
132 - DummyManagedClass.class.getCanonicalName())  
133 - + " - id", listener.getMessage());  
134 - }  
135 -  
136 -}  
impl/core/src/test/java/management/ValidationTestCase.java
@@ -1,92 +0,0 @@ @@ -1,92 +0,0 @@
1 -package management;  
2 -  
3 -import java.io.File;  
4 -  
5 -import management.testclasses.DummyManagedClass;  
6 -import management.testclasses.DummyManagementExtension;  
7 -import management.testclasses.DummyValidator;  
8 -import management.testclasses.DummyValidatorAnnotation;  
9 -import management.testclasses.ManagedClassStore;  
10 -  
11 -import org.jboss.arquillian.container.test.api.Deployment;  
12 -import org.jboss.arquillian.junit.Arquillian;  
13 -import org.jboss.shrinkwrap.api.ShrinkWrap;  
14 -import org.jboss.shrinkwrap.api.asset.FileAsset;  
15 -import org.jboss.shrinkwrap.api.spec.JavaArchive;  
16 -import org.junit.Assert;  
17 -import org.junit.Test;  
18 -import org.junit.runner.RunWith;  
19 -  
20 -import test.Tests;  
21 -import br.gov.frameworkdemoiselle.DemoiselleException;  
22 -import br.gov.frameworkdemoiselle.util.Beans;  
23 -  
24 -@RunWith(Arquillian.class)  
25 -public class ValidationTestCase {  
26 -  
27 - @Deployment  
28 - public static JavaArchive createDeployment() {  
29 - return ShrinkWrap  
30 - .create(JavaArchive.class)  
31 - .addClass(Tests.class)  
32 - .addPackages(true, "br")  
33 - .addAsResource(new FileAsset(new File("src/test/resources/beans.xml")), "beans.xml")  
34 - .addAsManifestResource(  
35 - new File("src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension"),  
36 - "services/javax.enterprise.inject.spi.Extension")  
37 - .addPackages(false, NotificationTestCase.class.getPackage())  
38 - .addClasses(DummyManagementExtension.class, ManagedClassStore.class, DummyManagedClass.class,  
39 - DummyValidator.class, DummyValidatorAnnotation.class);  
40 - }  
41 -  
42 - /**  
43 - * Test if a management controller accepts a valid value annotated with a core validation (from javax.validation)  
44 - * when a property is being set by a management client  
45 - */  
46 - @Test  
47 - public void testSetValidValue() {  
48 - // Testa se é possível definir um valor válido para uma propriedade.  
49 - ManagedClassStore store = Beans.getReference(ManagedClassStore.class);  
50 - store.setProperty(DummyManagedClass.class, "id", new Integer(1));  
51 - Assert.assertEquals(new Integer(1), store.getProperty(DummyManagedClass.class, "id"));  
52 - }  
53 -  
54 - /**  
55 - * Test if a management controller refuses a valid value annotated with a core validation (from javax.validation)  
56 - * when a property is being set by a management client  
57 - */  
58 - @Test  
59 - public void testSetInvalidValue() {  
60 - // Testa se é possível definir um valor válido para uma propriedade.  
61 - try {  
62 - ManagedClassStore store = Beans.getReference(ManagedClassStore.class);  
63 - store.setProperty(DummyManagedClass.class, "id", (Integer) null);  
64 -  
65 - Assert.fail();  
66 - } catch (DemoiselleException de) {  
67 - // Classes de gerenciamento disparam Demoiselle Exception quando uma validação falha  
68 - }  
69 - }  
70 -  
71 - /**  
72 - * Tests if custom validators (outside the javax.validation package) run as normal  
73 - */  
74 - @Test  
75 - public void testCustomValidation() {  
76 -  
77 - try {  
78 - ManagedClassStore store = Beans.getReference(ManagedClassStore.class);  
79 -  
80 - // Atributo "gender" deve aceitar apenas "M" ou "F", tanto maiúsculo quanto minúsculo. A anotação  
81 - // customizada DummyValidatorAnnotation é uma simples validação que testa se uma string passada está  
82 - // na lista de strings aceitas.  
83 - store.setProperty(DummyManagedClass.class, "gender", "J");  
84 -  
85 - Assert.fail();  
86 - } catch (DemoiselleException e) {  
87 - Assert.assertTrue(e.getMessage().contains("Test Message"));  
88 - }  
89 -  
90 - }  
91 -  
92 -}  
impl/core/src/test/java/management/annotation/AnnotationTest.java 0 → 100644
@@ -0,0 +1,89 @@ @@ -0,0 +1,89 @@
  1 +/*
  2 + * Demoiselle Framework
  3 + * Copyright (C) 2010 SERPRO
  4 + * ----------------------------------------------------------------------------
  5 + * This file is part of Demoiselle Framework.
  6 + *
  7 + * Demoiselle Framework is free software; you can redistribute it and/or
  8 + * modify it under the terms of the GNU Lesser General Public License version 3
  9 + * as published by the Free Software Foundation.
  10 + *
  11 + * This program is distributed in the hope that it will be useful,
  12 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14 + * GNU General Public License for more details.
  15 + *
  16 + * You should have received a copy of the GNU Lesser General Public License version 3
  17 + * along with this program; if not, see <http://www.gnu.org/licenses/>
  18 + * or write to the Free Software Foundation, Inc., 51 Franklin Street,
  19 + * Fifth Floor, Boston, MA 02110-1301, USA.
  20 + * ----------------------------------------------------------------------------
  21 + * Este arquivo é parte do Framework Demoiselle.
  22 + *
  23 + * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou
  24 + * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação
  25 + * do Software Livre (FSF).
  26 + *
  27 + * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA
  28 + * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou
  29 + * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português
  30 + * para maiores detalhes.
  31 + *
  32 + * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título
  33 + * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>
  34 + * ou escreva para a Fundação do Software Livre (FSF) Inc.,
  35 + * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.
  36 + */
  37 +package management.annotation;
  38 +
  39 +import management.testclasses.DummyManagedClassPropertyError;
  40 +import management.testclasses.DummyManagementExtension;
  41 +import management.testclasses.ManagedClassStore;
  42 +
  43 +import org.jboss.arquillian.container.test.api.Deployer;
  44 +import org.jboss.arquillian.container.test.api.Deployment;
  45 +import org.jboss.arquillian.junit.Arquillian;
  46 +import org.jboss.arquillian.test.api.ArquillianResource;
  47 +import org.jboss.shrinkwrap.api.spec.JavaArchive;
  48 +import org.junit.Assert;
  49 +import org.junit.Ignore;
  50 +import org.junit.Test;
  51 +import org.junit.runner.RunWith;
  52 +
  53 +import test.Tests;
  54 +
  55 +/*
  56 + * TODO Esse teste está impedindo outros de rodarem por fazer um deployment manual pelo arquillian (após esse teste nenhum mais roda).
  57 + * Por enquanto ele fica marcado como @Ignore, até esse problema ser resolvido.
  58 + */
  59 +@RunWith(Arquillian.class)
  60 +@Ignore
  61 +public class AnnotationTest {
  62 +
  63 + /**
  64 + * Deployment containing a malformed managed class. Tests using this deployment will check if deployment fails (it
  65 + * has to).
  66 + */
  67 + @Deployment(name = "wrong_annotation", managed = false)
  68 + public static JavaArchive createWrongAnnotationDeployment() {
  69 +
  70 + return Tests.createDeployment(AnnotationTest.class)
  71 + .addClasses(DummyManagementExtension.class, ManagedClassStore.class,DummyManagedClassPropertyError.class);
  72 + }
  73 +
  74 + @Test
  75 + public void wrongAnnotation(@ArquillianResource Deployer deployer) {
  76 +
  77 + try {
  78 + deployer.deploy("wrong_annotation");
  79 +
  80 + // O processo de deploy precisa falhar, pois temos uma classe anotada com falhas.
  81 + Assert.fail();
  82 + } catch (Exception e) {
  83 + //SUCCESS
  84 + } finally {
  85 + deployer.undeploy("wrong_annotation");
  86 + }
  87 + }
  88 +
  89 +}
impl/core/src/test/java/management/basic/ManagementTest.java 0 → 100644
@@ -0,0 +1,183 @@ @@ -0,0 +1,183 @@
  1 +/*
  2 + * Demoiselle Framework
  3 + * Copyright (C) 2010 SERPRO
  4 + * ----------------------------------------------------------------------------
  5 + * This file is part of Demoiselle Framework.
  6 + *
  7 + * Demoiselle Framework is free software; you can redistribute it and/or
  8 + * modify it under the terms of the GNU Lesser General Public License version 3
  9 + * as published by the Free Software Foundation.
  10 + *
  11 + * This program is distributed in the hope that it will be useful,
  12 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14 + * GNU General Public License for more details.
  15 + *
  16 + * You should have received a copy of the GNU Lesser General Public License version 3
  17 + * along with this program; if not, see <http://www.gnu.org/licenses/>
  18 + * or write to the Free Software Foundation, Inc., 51 Franklin Street,
  19 + * Fifth Floor, Boston, MA 02110-1301, USA.
  20 + * ----------------------------------------------------------------------------
  21 + * Este arquivo é parte do Framework Demoiselle.
  22 + *
  23 + * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou
  24 + * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação
  25 + * do Software Livre (FSF).
  26 + *
  27 + * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA
  28 + * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou
  29 + * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português
  30 + * para maiores detalhes.
  31 + *
  32 + * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título
  33 + * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>
  34 + * ou escreva para a Fundação do Software Livre (FSF) Inc.,
  35 + * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.
  36 + */
  37 +package management.basic;
  38 +
  39 +import junit.framework.Assert;
  40 +import management.testclasses.DummyManagedClass;
  41 +import management.testclasses.DummyManagementExtension;
  42 +import management.testclasses.ManagedClassStore;
  43 +import management.testclasses.RequestScopeBeanClient;
  44 +import management.testclasses.RequestScopedClass;
  45 +
  46 +import org.jboss.arquillian.container.test.api.Deployment;
  47 +import org.jboss.arquillian.junit.Arquillian;
  48 +import org.jboss.shrinkwrap.api.spec.JavaArchive;
  49 +import org.junit.Test;
  50 +import org.junit.runner.RunWith;
  51 +
  52 +import test.Tests;
  53 +import br.gov.frameworkdemoiselle.DemoiselleException;
  54 +import br.gov.frameworkdemoiselle.util.Beans;
  55 +
  56 +/**
  57 + * Test case that simulates a management extension and tests if properties and operations on a managed class can be
  58 + * easily accessed and invoked.
  59 + *
  60 + * @author serpro
  61 + */
  62 +@RunWith(Arquillian.class)
  63 +public class ManagementTest {
  64 +
  65 + @Deployment
  66 + public static JavaArchive createMultithreadedDeployment() {
  67 +
  68 + return Tests.createDeployment(ManagementTest.class)
  69 + .addClasses(DummyManagementExtension.class, DummyManagedClass.class, ManagedClassStore.class,RequestScopeBeanClient.class, RequestScopedClass.class);
  70 + }
  71 +
  72 + @Test
  73 + public void readProperty() {
  74 + DummyManagedClass managedClass = Beans.getReference(DummyManagedClass.class);
  75 + managedClass.setName("Test Name");
  76 +
  77 + // store é nossa extensão de gerenciamento falsa, então estamos testando um "cliente" acessando
  78 + // nosso tipo gerenciado DummyManagedClass remotamente.
  79 + ManagedClassStore store = Beans.getReference(ManagedClassStore.class);
  80 + Object name = store.getProperty(DummyManagedClass.class, "name");
  81 + Assert.assertEquals("Test Name", name);
  82 + }
  83 +
  84 + @Test
  85 + public void writeProperty() {
  86 + // store é nossa extensão de gerenciamento falsa, então estamos testando um "cliente" definindo
  87 + // um novo valor em uma propriedade de nosso tipo gerenciado DummyManagedClass remotamente.
  88 + ManagedClassStore store = Beans.getReference(ManagedClassStore.class);
  89 + store.setProperty(DummyManagedClass.class, "name", "Test Name");
  90 +
  91 + DummyManagedClass managedClass = Beans.getReference(DummyManagedClass.class);
  92 + Assert.assertEquals("Test Name", managedClass.getName());
  93 + }
  94 +
  95 + @Test
  96 + public void readAWriteOnly() {
  97 +
  98 + ManagedClassStore store = Beans.getReference(ManagedClassStore.class);
  99 +
  100 + try {
  101 + store.getProperty(DummyManagedClass.class, "writeOnlyProperty");
  102 + Assert.fail();
  103 + } catch (DemoiselleException de) {
  104 + // SUCCESS
  105 + }
  106 +
  107 + }
  108 +
  109 + @Test
  110 + public void writeAReadOnly() {
  111 +
  112 + ManagedClassStore store = Beans.getReference(ManagedClassStore.class);
  113 +
  114 + try {
  115 + store.setProperty(DummyManagedClass.class, "readOnlyProperty", "New Value");
  116 + Assert.fail();
  117 + } catch (DemoiselleException de) {
  118 + // SUCCESS
  119 + }
  120 +
  121 + }
  122 +
  123 + @Test
  124 + public void invokeOperation() {
  125 +
  126 + ManagedClassStore store = Beans.getReference(ManagedClassStore.class);
  127 +
  128 + try {
  129 + store.setProperty(DummyManagedClass.class, "firstFactor", new Integer(10));
  130 + store.setProperty(DummyManagedClass.class, "secondFactor", new Integer(15));
  131 + Integer response = (Integer) store.invoke(DummyManagedClass.class, "sumFactors");
  132 + Assert.assertEquals(new Integer(25), response);
  133 + } catch (DemoiselleException de) {
  134 + Assert.fail(de.getMessage());
  135 + }
  136 +
  137 + }
  138 +
  139 + @Test
  140 + public void invokeNonAnnotatedOperation() {
  141 +
  142 + ManagedClassStore store = Beans.getReference(ManagedClassStore.class);
  143 +
  144 + try {
  145 + // O método "nonOperationAnnotatedMethod" existe na classe DummyManagedClass, mas não está anotado como
  146 + // "@ManagedOperation", então
  147 + // ela não pode ser exposta para extensões.
  148 + store.invoke(DummyManagedClass.class, "nonOperationAnnotatedMethod");
  149 + Assert.fail();
  150 + } catch (DemoiselleException de) {
  151 + // SUCCESS
  152 + }
  153 +
  154 + }
  155 +
  156 + @Test
  157 + public void accessLevelControl() {
  158 + // tentamos escrever em uma propriedade que, apesar de ter método setter, está marcada como read-only.
  159 + ManagedClassStore store = Beans.getReference(ManagedClassStore.class);
  160 +
  161 + try {
  162 + store.setProperty(DummyManagedClass.class, "readOnlyPropertyWithSetMethod", "A Value");
  163 + Assert.fail();
  164 + } catch (DemoiselleException de) {
  165 + System.out.println(de.getMessage());
  166 + // success
  167 + }
  168 + }
  169 +
  170 + @Test
  171 + public void requestScopedOperation() {
  172 + ManagedClassStore store = Beans.getReference(ManagedClassStore.class);
  173 +
  174 + // Esta operação faz multiplos acessos a um bean RequestScoped. Durante a operação todos os acessos devem
  175 + // operar sob a mesma instância, mas uma segunda invocação deve operar em uma instância nova
  176 + Object info = store.invoke(DummyManagedClass.class, "requestScopedOperation");
  177 + Assert.assertEquals("-OPERATION ONE CALLED--OPERATION TWO CALLED-", info);
  178 +
  179 + // Segunda invocação para testar se uma nova instância é criada, já que esse é um novo request.
  180 + info = store.invoke(DummyManagedClass.class, "requestScopedOperation");
  181 + Assert.assertEquals("-OPERATION ONE CALLED--OPERATION TWO CALLED-", info);
  182 + }
  183 +}
impl/core/src/test/java/management/bootstrap/ManagementBootstrapTest.java 0 → 100644
@@ -0,0 +1,117 @@ @@ -0,0 +1,117 @@
  1 +/*
  2 + * Demoiselle Framework
  3 + * Copyright (C) 2010 SERPRO
  4 + * ----------------------------------------------------------------------------
  5 + * This file is part of Demoiselle Framework.
  6 + *
  7 + * Demoiselle Framework is free software; you can redistribute it and/or
  8 + * modify it under the terms of the GNU Lesser General Public License version 3
  9 + * as published by the Free Software Foundation.
  10 + *
  11 + * This program is distributed in the hope that it will be useful,
  12 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14 + * GNU General Public License for more details.
  15 + *
  16 + * You should have received a copy of the GNU Lesser General Public License version 3
  17 + * along with this program; if not, see <http://www.gnu.org/licenses/>
  18 + * or write to the Free Software Foundation, Inc., 51 Franklin Street,
  19 + * Fifth Floor, Boston, MA 02110-1301, USA.
  20 + * ----------------------------------------------------------------------------
  21 + * Este arquivo é parte do Framework Demoiselle.
  22 + *
  23 + * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou
  24 + * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação
  25 + * do Software Livre (FSF).
  26 + *
  27 + * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA
  28 + * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou
  29 + * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português
  30 + * para maiores detalhes.
  31 + *
  32 + * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título
  33 + * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>
  34 + * ou escreva para a Fundação do Software Livre (FSF) Inc.,
  35 + * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.
  36 + */
  37 +package management.bootstrap;
  38 +
  39 +import java.util.List;
  40 +
  41 +import management.testclasses.DummyManagedClass;
  42 +import management.testclasses.DummyManagementExtension;
  43 +import management.testclasses.ManagedClassStore;
  44 +
  45 +import org.jboss.arquillian.container.test.api.Deployment;
  46 +import org.jboss.arquillian.junit.Arquillian;
  47 +import org.jboss.shrinkwrap.api.spec.JavaArchive;
  48 +import org.junit.Assert;
  49 +import org.junit.Test;
  50 +import org.junit.runner.RunWith;
  51 +
  52 +import test.Tests;
  53 +import br.gov.frameworkdemoiselle.internal.management.ManagedType;
  54 +import br.gov.frameworkdemoiselle.lifecycle.AfterShutdownProccess;
  55 +import br.gov.frameworkdemoiselle.lifecycle.ManagementExtension;
  56 +import br.gov.frameworkdemoiselle.util.Beans;
  57 +
  58 +@RunWith(Arquillian.class)
  59 +public class ManagementBootstrapTest {
  60 +
  61 + /**
  62 + * Deployment to test normal deployment behaviour
  63 + *
  64 + */
  65 + @Deployment
  66 + public static JavaArchive createDeployment() {
  67 + return Tests.createDeployment(ManagementBootstrapTest.class)
  68 + .addClasses(DummyManagementExtension.class,
  69 + DummyManagedClass.class, ManagedClassStore.class);
  70 + }
  71 +
  72 + /**
  73 + * Test if a a management extension (a library that implements
  74 + * {@link ManagementExtension}) is correctly detected.
  75 + */
  76 + @Test
  77 + public void managementExtensionRegistration() {
  78 + // "store" é application scoped e é usado pelo DummyManagementExtension
  79 + // para
  80 + // armazenar todos os beans anotados com @ManagementController. Se o
  81 + // bootstrap rodou corretamente,
  82 + // ele chamou DummyManagementExtension.initialize e este store conterá o
  83 + // bean de teste que anotamos.
  84 + ManagedClassStore store = Beans.getReference(ManagedClassStore.class);
  85 +
  86 + Assert.assertEquals(1, store.getManagedTypes().size());
  87 + }
  88 +
  89 + /**
  90 + * Test if a a management extension's shutdown method is correctly called
  91 + * upon application shutdown.
  92 + */
  93 + @Test
  94 + public void managementExtensionShutdown() {
  95 + // "store" é application scoped e é usado pelo DummyManagementExtension
  96 + // para
  97 + // armazenar todos os beans anotados com @ManagementController. Se o
  98 + // bootstrap rodou corretamente,
  99 + // ele chamou DummyManagementExtension.initialize e este store conterá o
  100 + // bean de teste que anotamos.
  101 + // Nós então disparamos o evento de shutdown onde ele deverá limpar o
  102 + // store.
  103 + ManagedClassStore store = Beans.getReference(ManagedClassStore.class);
  104 +
  105 + // Detecta se a classe anotada foi detectada
  106 + List<ManagedType> managedTypes = store.getManagedTypes();
  107 + Assert.assertEquals(1, managedTypes.size());
  108 +
  109 + Beans.getBeanManager().fireEvent(new AfterShutdownProccess() {
  110 + });
  111 +
  112 + // Após o "undeploy", o ciclo de vida precisa ter removido a classe
  113 + // gerenciada da lista.
  114 + Assert.assertEquals(0, managedTypes.size());
  115 + }
  116 +
  117 +}
impl/core/src/test/java/management/notification/NotificationTest.java 0 → 100644
@@ -0,0 +1,124 @@ @@ -0,0 +1,124 @@
  1 +/*
  2 + * Demoiselle Framework
  3 + * Copyright (C) 2010 SERPRO
  4 + * ----------------------------------------------------------------------------
  5 + * This file is part of Demoiselle Framework.
  6 + *
  7 + * Demoiselle Framework is free software; you can redistribute it and/or
  8 + * modify it under the terms of the GNU Lesser General Public License version 3
  9 + * as published by the Free Software Foundation.
  10 + *
  11 + * This program is distributed in the hope that it will be useful,
  12 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14 + * GNU General Public License for more details.
  15 + *
  16 + * You should have received a copy of the GNU Lesser General Public License version 3
  17 + * along with this program; if not, see <http://www.gnu.org/licenses/>
  18 + * or write to the Free Software Foundation, Inc., 51 Franklin Street,
  19 + * Fifth Floor, Boston, MA 02110-1301, USA.
  20 + * ----------------------------------------------------------------------------
  21 + * Este arquivo é parte do Framework Demoiselle.
  22 + *
  23 + * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou
  24 + * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação
  25 + * do Software Livre (FSF).
  26 + *
  27 + * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA
  28 + * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou
  29 + * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português
  30 + * para maiores detalhes.
  31 + *
  32 + * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título
  33 + * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>
  34 + * ou escreva para a Fundação do Software Livre (FSF) Inc.,
  35 + * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.
  36 + */
  37 +package management.notification;
  38 +
  39 +import javax.inject.Inject;
  40 +
  41 +import junit.framework.Assert;
  42 +import management.testclasses.DummyManagedClass;
  43 +import management.testclasses.DummyNotificationListener;
  44 +
  45 +import org.jboss.arquillian.container.test.api.Deployment;
  46 +import org.jboss.arquillian.junit.Arquillian;
  47 +import org.jboss.shrinkwrap.api.spec.JavaArchive;
  48 +import org.junit.Test;
  49 +import org.junit.runner.RunWith;
  50 +
  51 +import test.Tests;
  52 +import br.gov.frameworkdemoiselle.annotation.Name;
  53 +import br.gov.frameworkdemoiselle.internal.management.ManagedType;
  54 +import br.gov.frameworkdemoiselle.internal.management.Management;
  55 +import br.gov.frameworkdemoiselle.management.AttributeChangeNotification;
  56 +import br.gov.frameworkdemoiselle.management.GenericNotification;
  57 +import br.gov.frameworkdemoiselle.management.NotificationManager;
  58 +import br.gov.frameworkdemoiselle.util.Beans;
  59 +import br.gov.frameworkdemoiselle.util.ResourceBundle;
  60 +
  61 +/**
  62 + * Test the {@link NotificationManager} with a dummy extension to check if notifications are correctly propagated
  63 + *
  64 + * @author serpro
  65 + */
  66 +@RunWith(Arquillian.class)
  67 +public class NotificationTest {
  68 +
  69 + @Inject
  70 + private NotificationManager manager;
  71 +
  72 + @Inject
  73 + @Name("demoiselle-core-bundle")
  74 + private ResourceBundle bundle;
  75 +
  76 + @Deployment
  77 + public static JavaArchive createDeployment() {
  78 + return Tests.createDeployment(NotificationTest.class)
  79 + .addClasses(DummyNotificationListener.class, DummyManagedClass.class);
  80 + }
  81 +
  82 + /**
  83 + * Test sending a normal notification
  84 + */
  85 + @Test
  86 + public void sendGenericNotification() {
  87 + manager.sendNotification(new GenericNotification("Test Message"));
  88 + DummyNotificationListener listener = Beans.getReference(DummyNotificationListener.class);
  89 + Assert.assertEquals("Test Message", listener.getMessage());
  90 + }
  91 +
  92 + /**
  93 + * Test sending a notification of change in attribute
  94 + */
  95 + @Test
  96 + public void sendAttributeChangeNotification() {
  97 + manager.sendNotification(new AttributeChangeNotification("Test Message", "attribute", String.class, "old",
  98 + "new"));
  99 + DummyNotificationListener listener = Beans.getReference(DummyNotificationListener.class);
  100 + Assert.assertEquals("Test Message - attribute", listener.getMessage());
  101 + }
  102 +
  103 + /**
  104 + * Test if notifications are automatically sent when an attribute from a managed class change values
  105 + */
  106 + @Test
  107 + public void notifyChangeManagedClass() {
  108 + Management manager = Beans.getReference(Management.class);
  109 +
  110 + for (ManagedType type : manager.getManagedTypes()) {
  111 + if (type.getType().equals(DummyManagedClass.class)) {
  112 + manager.setProperty(type, "id", new Integer(10));
  113 + break;
  114 + }
  115 + }
  116 +
  117 + DummyNotificationListener listener = Beans.getReference(DummyNotificationListener.class);
  118 + Assert.assertEquals(
  119 + bundle.getString("management-notification-attribute-changed", "id",
  120 + DummyManagedClass.class.getCanonicalName())
  121 + + " - id", listener.getMessage());
  122 + }
  123 +
  124 +}
impl/core/src/test/java/management/validation/ValidationTest.java 0 → 100644
@@ -0,0 +1,81 @@ @@ -0,0 +1,81 @@
  1 +package management.validation;
  2 +
  3 +import management.testclasses.DummyManagedClass;
  4 +import management.testclasses.DummyManagementExtension;
  5 +import management.testclasses.DummyValidator;
  6 +import management.testclasses.DummyValidatorAnnotation;
  7 +import management.testclasses.ManagedClassStore;
  8 +
  9 +import org.jboss.arquillian.container.test.api.Deployment;
  10 +import org.jboss.arquillian.junit.Arquillian;
  11 +import org.jboss.shrinkwrap.api.spec.JavaArchive;
  12 +import org.junit.Assert;
  13 +import org.junit.Test;
  14 +import org.junit.runner.RunWith;
  15 +
  16 +import test.Tests;
  17 +import br.gov.frameworkdemoiselle.DemoiselleException;
  18 +import br.gov.frameworkdemoiselle.util.Beans;
  19 +
  20 +@RunWith(Arquillian.class)
  21 +public class ValidationTest {
  22 +
  23 + @Deployment
  24 + public static JavaArchive createDeployment() {
  25 +
  26 + return Tests.createDeployment(ValidationTest.class)
  27 + .addClasses(DummyManagementExtension.class, ManagedClassStore.class, DummyManagedClass.class,DummyValidator.class, DummyValidatorAnnotation.class);
  28 +
  29 + }
  30 +
  31 + /**
  32 + * Test if a management controller accepts a valid value annotated with a core validation (from javax.validation)
  33 + * when a property is being set by a management client
  34 + */
  35 + @Test
  36 + public void setValidValue() {
  37 + // Testa se é possível definir um valor válido para uma propriedade.
  38 + ManagedClassStore store = Beans.getReference(ManagedClassStore.class);
  39 + store.setProperty(DummyManagedClass.class, "id", new Integer(1));
  40 + Assert.assertEquals(new Integer(1), store.getProperty(DummyManagedClass.class, "id"));
  41 + }
  42 +
  43 + /**
  44 + * Test if a management controller refuses a valid value annotated with a core validation (from javax.validation)
  45 + * when a property is being set by a management client
  46 + */
  47 + @Test
  48 + public void setInvalidValue() {
  49 + // Testa se é possível definir um valor válido para uma propriedade.
  50 + try {
  51 + ManagedClassStore store = Beans.getReference(ManagedClassStore.class);
  52 + store.setProperty(DummyManagedClass.class, "id", (Integer) null);
  53 +
  54 + Assert.fail();
  55 + } catch (DemoiselleException de) {
  56 + // Classes de gerenciamento disparam Demoiselle Exception quando uma validação falha
  57 + }
  58 + }
  59 +
  60 + /**
  61 + * Tests if custom validators (outside the javax.validation package) run as normal
  62 + */
  63 + @Test
  64 + public void customValidation() {
  65 +
  66 + try {
  67 + ManagedClassStore store = Beans.getReference(ManagedClassStore.class);
  68 +
  69 + // Atributo "gender" deve aceitar apenas "M" ou "F", tanto maiúsculo quanto minúsculo. A anotação
  70 + // customizada DummyValidatorAnnotation é uma simples validação que testa se uma string passada está
  71 + // na lista de strings aceitas.
  72 + store.setProperty(DummyManagedClass.class, "gender", "J");
  73 +
  74 + Assert.fail();
  75 + } catch (DemoiselleException e) {
  76 + Assert.assertTrue(e.getMessage().contains("Test Message"));
  77 + }
  78 +
  79 + }
  80 +
  81 +}
impl/core/src/test/java/security/athentication/credentials/AcceptOrDenyCredentialsTest.java 0 → 100644
@@ -0,0 +1,111 @@ @@ -0,0 +1,111 @@
  1 +/*
  2 + * Demoiselle Framework
  3 + * Copyright (C) 2010 SERPRO
  4 + * ----------------------------------------------------------------------------
  5 + * This file is part of Demoiselle Framework.
  6 + *
  7 + * Demoiselle Framework is free software; you can redistribute it and/or
  8 + * modify it under the terms of the GNU Lesser General Public License version 3
  9 + * as published by the Free Software Foundation.
  10 + *
  11 + * This program is distributed in the hope that it will be useful,
  12 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14 + * GNU General Public License for more details.
  15 + *
  16 + * You should have received a copy of the GNU Lesser General Public License version 3
  17 + * along with this program; if not, see <http://www.gnu.org/licenses/>
  18 + * or write to the Free Software Foundation, Inc., 51 Franklin Street,
  19 + * Fifth Floor, Boston, MA 02110-1301, USA.
  20 + * ----------------------------------------------------------------------------
  21 + * Este arquivo é parte do Framework Demoiselle.
  22 + *
  23 + * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou
  24 + * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação
  25 + * do Software Livre (FSF).
  26 + *
  27 + * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA
  28 + * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou
  29 + * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português
  30 + * para maiores detalhes.
  31 + *
  32 + * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título
  33 + * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>
  34 + * ou escreva para a Fundação do Software Livre (FSF) Inc.,
  35 + * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.
  36 + */
  37 +package security.athentication.credentials;
  38 +
  39 +import javax.enterprise.context.RequestScoped;
  40 +import javax.inject.Inject;
  41 +
  42 +import junit.framework.Assert;
  43 +
  44 +import org.jboss.arquillian.container.test.api.Deployment;
  45 +import org.jboss.arquillian.junit.Arquillian;
  46 +import org.jboss.shrinkwrap.api.spec.JavaArchive;
  47 +import org.junit.Test;
  48 +import org.junit.runner.RunWith;
  49 +
  50 +import test.Tests;
  51 +import br.gov.frameworkdemoiselle.internal.context.ContextManager;
  52 +import br.gov.frameworkdemoiselle.internal.context.ThreadLocalContext;
  53 +import br.gov.frameworkdemoiselle.security.AuthenticationException;
  54 +import br.gov.frameworkdemoiselle.security.SecurityContext;
  55 +import br.gov.frameworkdemoiselle.util.Beans;
  56 +import configuration.resource.ConfigurationResourceTest;
  57 +
  58 +@RunWith(Arquillian.class)
  59 +public class AcceptOrDenyCredentialsTest {
  60 +
  61 + @Inject
  62 + private SecurityContext context;
  63 +
  64 + @Deployment
  65 + public static JavaArchive createDeployment() {
  66 + JavaArchive deployment = Tests.createDeployment(ConfigurationResourceTest.class);
  67 + deployment.addClass(StrictAuthenticator.class);
  68 + deployment.addClass(Credentials.class);
  69 + return deployment;
  70 + }
  71 +
  72 + @Test
  73 + public void denyWrongCredentials() {
  74 + ContextManager.activate(ThreadLocalContext.class, RequestScoped.class);
  75 +
  76 + Credentials credentials = Beans.getReference(Credentials.class);
  77 + credentials.setLogin("wronglogin");
  78 +
  79 + try{
  80 + context.login();
  81 + Assert.fail("Authenticator aceitou credenciais erradas");
  82 + }
  83 + catch(AuthenticationException ae){
  84 + //Erro esperado
  85 + }
  86 + finally{
  87 + ContextManager.deactivate(ThreadLocalContext.class, RequestScoped.class);
  88 + }
  89 +
  90 + }
  91 +
  92 + @Test
  93 + public void acceptRightCredentials() {
  94 + ContextManager.activate(ThreadLocalContext.class, RequestScoped.class);
  95 +
  96 + Credentials credentials = Beans.getReference(Credentials.class);
  97 + credentials.setLogin("demoiselle");
  98 +
  99 + try{
  100 + context.login();
  101 + }
  102 + catch(AuthenticationException ae){
  103 + Assert.fail("Authenticator negou credenciais corretas");
  104 + }
  105 + finally{
  106 + ContextManager.deactivate(ThreadLocalContext.class, RequestScoped.class);
  107 + }
  108 +
  109 + }
  110 +
  111 +}
impl/core/src/test/java/security/athentication/credentials/Credentials.java 0 → 100644
@@ -0,0 +1,25 @@ @@ -0,0 +1,25 @@
  1 +package security.athentication.credentials;
  2 +
  3 +import java.io.Serializable;
  4 +
  5 +import javax.enterprise.context.RequestScoped;
  6 +
  7 +@RequestScoped
  8 +public class Credentials implements Serializable {
  9 +
  10 + private static final long serialVersionUID = 1L;
  11 + private String login;
  12 +
  13 +
  14 + public String getLogin() {
  15 + return login;
  16 + }
  17 +
  18 +
  19 + public void setLogin(String login) {
  20 + this.login = login;
  21 + }
  22 +
  23 +
  24 +
  25 +}
impl/core/src/test/java/security/athentication/credentials/StrictAuthenticator.java 0 → 100644
@@ -0,0 +1,77 @@ @@ -0,0 +1,77 @@
  1 +/*
  2 + * Demoiselle Framework
  3 + * Copyright (C) 2010 SERPRO
  4 + * ----------------------------------------------------------------------------
  5 + * This file is part of Demoiselle Framework.
  6 + *
  7 + * Demoiselle Framework is free software; you can redistribute it and/or
  8 + * modify it under the terms of the GNU Lesser General Public License version 3
  9 + * as published by the Free Software Foundation.
  10 + *
  11 + * This program is distributed in the hope that it will be useful,
  12 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14 + * GNU General Public License for more details.
  15 + *
  16 + * You should have received a copy of the GNU Lesser General Public License version 3
  17 + * along with this program; if not, see <http://www.gnu.org/licenses/>
  18 + * or write to the Free Software Foundation, Inc., 51 Franklin Street,
  19 + * Fifth Floor, Boston, MA 02110-1301, USA.
  20 + * ----------------------------------------------------------------------------
  21 + * Este arquivo é parte do Framework Demoiselle.
  22 + *
  23 + * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou
  24 + * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação
  25 + * do Software Livre (FSF).
  26 + *
  27 + * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA
  28 + * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou
  29 + * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português
  30 + * para maiores detalhes.
  31 + *
  32 + * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título
  33 + * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>
  34 + * ou escreva para a Fundação do Software Livre (FSF) Inc.,
  35 + * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.
  36 + */
  37 +package security.athentication.credentials;
  38 +
  39 +import java.security.Principal;
  40 +
  41 +import br.gov.frameworkdemoiselle.security.AuthenticationException;
  42 +import br.gov.frameworkdemoiselle.security.Authenticator;
  43 +import br.gov.frameworkdemoiselle.util.Beans;
  44 +
  45 +public class StrictAuthenticator implements Authenticator {
  46 +
  47 + private static final long serialVersionUID = 1L;
  48 +
  49 + private Principal currentUser;
  50 +
  51 + @Override
  52 + public void authenticate() throws AuthenticationException {
  53 +
  54 + Credentials c = Beans.getReference(Credentials.class);
  55 + if ("demoiselle".equals(c.getLogin())){
  56 + this.currentUser = new Principal() {
  57 +
  58 + public String getName() {
  59 + return "demoiselle";
  60 + }
  61 + };
  62 + }
  63 + else{
  64 + throw new AuthenticationException("As credenciais fornecidas não são válidas");
  65 + }
  66 + }
  67 +
  68 + @Override
  69 + public void unAuthenticate() {
  70 + this.currentUser = null;
  71 + }
  72 +
  73 + @Override
  74 + public Principal getUser() {
  75 + return this.currentUser;
  76 + }
  77 +}
impl/core/src/test/java/security/athentication/error/ErrorAuthenticator.java 0 → 100644
@@ -0,0 +1,64 @@ @@ -0,0 +1,64 @@
  1 +/*
  2 + * Demoiselle Framework
  3 + * Copyright (C) 2010 SERPRO
  4 + * ----------------------------------------------------------------------------
  5 + * This file is part of Demoiselle Framework.
  6 + *
  7 + * Demoiselle Framework is free software; you can redistribute it and/or
  8 + * modify it under the terms of the GNU Lesser General Public License version 3
  9 + * as published by the Free Software Foundation.
  10 + *
  11 + * This program is distributed in the hope that it will be useful,
  12 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14 + * GNU General Public License for more details.
  15 + *
  16 + * You should have received a copy of the GNU Lesser General Public License version 3
  17 + * along with this program; if not, see <http://www.gnu.org/licenses/>
  18 + * or write to the Free Software Foundation, Inc., 51 Franklin Street,
  19 + * Fifth Floor, Boston, MA 02110-1301, USA.
  20 + * ----------------------------------------------------------------------------
  21 + * Este arquivo é parte do Framework Demoiselle.
  22 + *
  23 + * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou
  24 + * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação
  25 + * do Software Livre (FSF).
  26 + *
  27 + * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA
  28 + * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou
  29 + * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português
  30 + * para maiores detalhes.
  31 + *
  32 + * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título
  33 + * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>
  34 + * ou escreva para a Fundação do Software Livre (FSF) Inc.,
  35 + * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.
  36 + */
  37 +package security.athentication.error;
  38 +
  39 +import java.security.Principal;
  40 +
  41 +import br.gov.frameworkdemoiselle.security.AuthenticationException;
  42 +import br.gov.frameworkdemoiselle.security.Authenticator;
  43 +
  44 +public class ErrorAuthenticator implements Authenticator {
  45 +
  46 + private static final long serialVersionUID = 1L;
  47 +
  48 + @Override
  49 + public void authenticate() throws AuthenticationException {
  50 + throw new RuntimeException();
  51 + }
  52 +
  53 + @Override
  54 + public void unAuthenticate() {
  55 + throw new RuntimeException();
  56 + }
  57 +
  58 + @Override
  59 + public Principal getUser() {
  60 + return null;
  61 + }
  62 +
  63 +
  64 +}
impl/core/src/test/java/security/athentication/error/ErrorAuthenticatorTest.java 0 → 100644
@@ -0,0 +1,95 @@ @@ -0,0 +1,95 @@
  1 +/*
  2 + * Demoiselle Framework
  3 + * Copyright (C) 2010 SERPRO
  4 + * ----------------------------------------------------------------------------
  5 + * This file is part of Demoiselle Framework.
  6 + *
  7 + * Demoiselle Framework is free software; you can redistribute it and/or
  8 + * modify it under the terms of the GNU Lesser General Public License version 3
  9 + * as published by the Free Software Foundation.
  10 + *
  11 + * This program is distributed in the hope that it will be useful,
  12 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14 + * GNU General Public License for more details.
  15 + *
  16 + * You should have received a copy of the GNU Lesser General Public License version 3
  17 + * along with this program; if not, see <http://www.gnu.org/licenses/>
  18 + * or write to the Free Software Foundation, Inc., 51 Franklin Street,
  19 + * Fifth Floor, Boston, MA 02110-1301, USA.
  20 + * ----------------------------------------------------------------------------
  21 + * Este arquivo é parte do Framework Demoiselle.
  22 + *
  23 + * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou
  24 + * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação
  25 + * do Software Livre (FSF).
  26 + *
  27 + * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA
  28 + * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou
  29 + * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português
  30 + * para maiores detalhes.
  31 + *
  32 + * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título
  33 + * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>
  34 + * ou escreva para a Fundação do Software Livre (FSF) Inc.,
  35 + * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.
  36 + */
  37 +package security.athentication.error;
  38 +
  39 +import javax.inject.Inject;
  40 +
  41 +import junit.framework.Assert;
  42 +
  43 +import org.jboss.arquillian.container.test.api.Deployment;
  44 +import org.jboss.arquillian.junit.Arquillian;
  45 +import org.jboss.shrinkwrap.api.spec.JavaArchive;
  46 +import org.junit.Test;
  47 +import org.junit.runner.RunWith;
  48 +
  49 +import test.Tests;
  50 +import br.gov.frameworkdemoiselle.security.AuthenticationException;
  51 +import br.gov.frameworkdemoiselle.security.SecurityContext;
  52 +import configuration.resource.ConfigurationResourceTest;
  53 +
  54 +@RunWith(Arquillian.class)
  55 +public class ErrorAuthenticatorTest {
  56 +
  57 + @Inject
  58 + private SecurityContext context;
  59 +
  60 + @Deployment
  61 + public static JavaArchive createDeployment() {
  62 + JavaArchive deployment = Tests.createDeployment(ConfigurationResourceTest.class);
  63 + deployment.addClass(ErrorAuthenticator.class);
  64 + return deployment;
  65 + }
  66 +
  67 + @Test
  68 + public void errorDuringLogin(){
  69 + try{
  70 + context.login();
  71 + Assert.fail("Login deveria disparar exceção de runtime");
  72 + }
  73 + catch(AuthenticationException ae){
  74 + Assert.fail("A exceção disparada não foi a esperada");
  75 + }
  76 + catch(RuntimeException e){
  77 + //PASS
  78 + }
  79 + }
  80 +
  81 + @Test
  82 + public void errorDuringLogout(){
  83 + try{
  84 + context.login();
  85 + Assert.fail("Logout deveria disparar exceção de runtime");
  86 + }
  87 + catch(AuthenticationException ae){
  88 + Assert.fail("A exceção disparada não foi a esperada");
  89 + }
  90 + catch(RuntimeException e){
  91 + //PASS
  92 + }
  93 + }
  94 +
  95 +}
impl/core/src/test/java/security/authorization/ambiguity/AmbiguousAuthorizerTest.java 0 → 100644
@@ -0,0 +1,92 @@ @@ -0,0 +1,92 @@
  1 +/*
  2 + * Demoiselle Framework
  3 + * Copyright (C) 2010 SERPRO
  4 + * ----------------------------------------------------------------------------
  5 + * This file is part of Demoiselle Framework.
  6 + *
  7 + * Demoiselle Framework is free software; you can redistribute it and/or
  8 + * modify it under the terms of the GNU Lesser General Public License version 3
  9 + * as published by the Free Software Foundation.
  10 + *
  11 + * This program is distributed in the hope that it will be useful,
  12 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14 + * GNU General Public License for more details.
  15 + *
  16 + * You should have received a copy of the GNU Lesser General Public License version 3
  17 + * along with this program; if not, see <http://www.gnu.org/licenses/>
  18 + * or write to the Free Software Foundation, Inc., 51 Franklin Street,
  19 + * Fifth Floor, Boston, MA 02110-1301, USA.
  20 + * ----------------------------------------------------------------------------
  21 + * Este arquivo é parte do Framework Demoiselle.
  22 + *
  23 + * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou
  24 + * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação
  25 + * do Software Livre (FSF).
  26 + *
  27 + * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA
  28 + * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou
  29 + * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português
  30 + * para maiores detalhes.
  31 + *
  32 + * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título
  33 + * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>
  34 + * ou escreva para a Fundação do Software Livre (FSF) Inc.,
  35 + * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.
  36 + */
  37 +package security.authorization.ambiguity;
  38 +
  39 +import static junit.framework.Assert.assertEquals;
  40 +
  41 +import javax.enterprise.inject.AmbiguousResolutionException;
  42 +import javax.inject.Inject;
  43 +
  44 +import org.jboss.arquillian.container.test.api.Deployment;
  45 +import org.jboss.arquillian.junit.Arquillian;
  46 +import org.jboss.shrinkwrap.api.spec.JavaArchive;
  47 +import org.junit.After;
  48 +import org.junit.Before;
  49 +import org.junit.Test;
  50 +import org.junit.runner.RunWith;
  51 +
  52 +import security.athentication.custom.CustomAuthenticator;
  53 +import security.authorization.custom.CustomAuthorizer;
  54 +import test.Tests;
  55 +import br.gov.frameworkdemoiselle.DemoiselleException;
  56 +import br.gov.frameworkdemoiselle.security.SecurityContext;
  57 +import configuration.resource.ConfigurationResourceTest;
  58 +
  59 +@RunWith(Arquillian.class)
  60 +public class AmbiguousAuthorizerTest {
  61 +
  62 + @Inject
  63 + private SecurityContext context;
  64 +
  65 + @Deployment
  66 + public static JavaArchive createDeployment() {
  67 + JavaArchive deployment = Tests.createDeployment(ConfigurationResourceTest.class);
  68 + deployment.addClass(CustomAuthenticator.class);
  69 + deployment.addClass(CustomAuthorizer.class);
  70 + deployment.addClass(DuplicatedCustomAuthorizer.class);
  71 + return deployment;
  72 + }
  73 +
  74 + @Before
  75 + public void loginToTest(){
  76 + context.login();
  77 + }
  78 +
  79 + @Test
  80 + public void ambiguousAuthorizerStrategy() {
  81 + try {
  82 + context.hasRole("role");
  83 + } catch (DemoiselleException cause) {
  84 + assertEquals(AmbiguousResolutionException.class, cause.getCause().getClass());
  85 + }
  86 + }
  87 +
  88 + @After
  89 + public void logoutAfterTest(){
  90 + context.logout();
  91 + }
  92 +}
impl/core/src/test/java/security/authorization/ambiguity/DuplicatedCustomAuthorizer.java 0 → 100644
@@ -0,0 +1,54 @@ @@ -0,0 +1,54 @@
  1 +/*
  2 + * Demoiselle Framework
  3 + * Copyright (C) 2010 SERPRO
  4 + * ----------------------------------------------------------------------------
  5 + * This file is part of Demoiselle Framework.
  6 + *
  7 + * Demoiselle Framework is free software; you can redistribute it and/or
  8 + * modify it under the terms of the GNU Lesser General Public License version 3
  9 + * as published by the Free Software Foundation.
  10 + *
  11 + * This program is distributed in the hope that it will be useful,
  12 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14 + * GNU General Public License for more details.
  15 + *
  16 + * You should have received a copy of the GNU Lesser General Public License version 3
  17 + * along with this program; if not, see <http://www.gnu.org/licenses/>
  18 + * or write to the Free Software Foundation, Inc., 51 Franklin Street,
  19 + * Fifth Floor, Boston, MA 02110-1301, USA.
  20 + * ----------------------------------------------------------------------------
  21 + * Este arquivo é parte do Framework Demoiselle.
  22 + *
  23 + * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou
  24 + * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação
  25 + * do Software Livre (FSF).
  26 + *
  27 + * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA
  28 + * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou
  29 + * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português
  30 + * para maiores detalhes.
  31 + *
  32 + * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título
  33 + * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>
  34 + * ou escreva para a Fundação do Software Livre (FSF) Inc.,
  35 + * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.
  36 + */
  37 +package security.authorization.ambiguity;
  38 +
  39 +import br.gov.frameworkdemoiselle.security.Authorizer;
  40 +
  41 +public class DuplicatedCustomAuthorizer implements Authorizer {
  42 +
  43 + private static final long serialVersionUID = 1L;
  44 +
  45 + @Override
  46 + public boolean hasRole(String role) {
  47 + return true;
  48 + }
  49 +
  50 + @Override
  51 + public boolean hasPermission(String resource, String operation) {
  52 + return true;
  53 + }
  54 +}
impl/core/src/test/java/security/authorization/custom/CustomAuthorizer.java 0 → 100644
@@ -0,0 +1,57 @@ @@ -0,0 +1,57 @@
  1 +/*
  2 + * Demoiselle Framework
  3 + * Copyright (C) 2010 SERPRO
  4 + * ----------------------------------------------------------------------------
  5 + * This file is part of Demoiselle Framework.
  6 + *
  7 + * Demoiselle Framework is free software; you can redistribute it and/or
  8 + * modify it under the terms of the GNU Lesser General Public License version 3
  9 + * as published by the Free Software Foundation.
  10 + *
  11 + * This program is distributed in the hope that it will be useful,
  12 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14 + * GNU General Public License for more details.
  15 + *
  16 + * You should have received a copy of the GNU Lesser General Public License version 3
  17 + * along with this program; if not, see <http://www.gnu.org/licenses/>
  18 + * or write to the Free Software Foundation, Inc., 51 Franklin Street,
  19 + * Fifth Floor, Boston, MA 02110-1301, USA.
  20 + * ----------------------------------------------------------------------------
  21 + * Este arquivo é parte do Framework Demoiselle.
  22 + *
  23 + * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou
  24 + * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação
  25 + * do Software Livre (FSF).
  26 + *
  27 + * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA
  28 + * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou
  29 + * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português
  30 + * para maiores detalhes.
  31 + *
  32 + * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título
  33 + * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>
  34 + * ou escreva para a Fundação do Software Livre (FSF) Inc.,
  35 + * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.
  36 + */
  37 +package security.authorization.custom;
  38 +
  39 +import br.gov.frameworkdemoiselle.security.Authorizer;
  40 +
  41 +public class CustomAuthorizer implements Authorizer {
  42 +
  43 + private static final long serialVersionUID = 1L;
  44 +
  45 + @Override
  46 + public boolean hasRole(String role) {
  47 + return "role".equals(role);
  48 + }
  49 +
  50 + @Override
  51 + public boolean hasPermission(String resource, String operation) {
  52 + return "resource".equals(resource);
  53 + }
  54 +
  55 +
  56 +
  57 +}
impl/core/src/test/java/security/authorization/custom/CustomAuthorizerTest.java 0 → 100644
@@ -0,0 +1,100 @@ @@ -0,0 +1,100 @@
  1 +/*
  2 + * Demoiselle Framework
  3 + * Copyright (C) 2010 SERPRO
  4 + * ----------------------------------------------------------------------------
  5 + * This file is part of Demoiselle Framework.
  6 + *
  7 + * Demoiselle Framework is free software; you can redistribute it and/or
  8 + * modify it under the terms of the GNU Lesser General Public License version 3
  9 + * as published by the Free Software Foundation.
  10 + *
  11 + * This program is distributed in the hope that it will be useful,
  12 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14 + * GNU General Public License for more details.
  15 + *
  16 + * You should have received a copy of the GNU Lesser General Public License version 3
  17 + * along with this program; if not, see <http://www.gnu.org/licenses/>
  18 + * or write to the Free Software Foundation, Inc., 51 Franklin Street,
  19 + * Fifth Floor, Boston, MA 02110-1301, USA.
  20 + * ----------------------------------------------------------------------------
  21 + * Este arquivo é parte do Framework Demoiselle.
  22 + *
  23 + * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou
  24 + * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação
  25 + * do Software Livre (FSF).
  26 + *
  27 + * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA
  28 + * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou
  29 + * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português
  30 + * para maiores detalhes.
  31 + *
  32 + * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título
  33 + * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>
  34 + * ou escreva para a Fundação do Software Livre (FSF) Inc.,
  35 + * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.
  36 + */
  37 +package security.authorization.custom;
  38 +
  39 +import javax.inject.Inject;
  40 +
  41 +import junit.framework.Assert;
  42 +
  43 +import org.jboss.arquillian.container.test.api.Deployment;
  44 +import org.jboss.arquillian.junit.Arquillian;
  45 +import org.jboss.shrinkwrap.api.spec.JavaArchive;
  46 +import org.junit.After;
  47 +import org.junit.Before;
  48 +import org.junit.Test;
  49 +import org.junit.runner.RunWith;
  50 +
  51 +import security.athentication.custom.CustomAuthenticator;
  52 +import test.Tests;
  53 +import br.gov.frameworkdemoiselle.security.SecurityContext;
  54 +import configuration.resource.ConfigurationResourceTest;
  55 +
  56 +@RunWith(Arquillian.class)
  57 +public class CustomAuthorizerTest {
  58 +
  59 + @Inject
  60 + private SecurityContext context;
  61 +
  62 + @Deployment
  63 + public static JavaArchive createDeployment() {
  64 + JavaArchive deployment = Tests.createDeployment(ConfigurationResourceTest.class);
  65 + deployment.addClass(CustomAuthenticator.class);
  66 + deployment.addClass(CustomAuthorizer.class);
  67 + return deployment;
  68 + }
  69 +
  70 + @Before
  71 + public void loginToTest(){
  72 + context.login();
  73 + }
  74 +
  75 + @Test
  76 + public void hasPermission(){
  77 + Assert.assertTrue(context.hasPermission("resource", "operation"));
  78 + }
  79 +
  80 + @Test
  81 + public void hasRole(){
  82 + Assert.assertTrue(context.hasRole("role"));
  83 + }
  84 +
  85 + @Test
  86 + public void denyPermission(){
  87 + Assert.assertFalse(context.hasPermission("falseresource", "falseoperation"));
  88 + }
  89 +
  90 + @Test
  91 + public void denyRole(){
  92 + Assert.assertFalse(context.hasRole("falserole"));
  93 + }
  94 +
  95 + @After
  96 + public void logoutAfterTest(){
  97 + context.logout();
  98 + }
  99 +
  100 +}
impl/core/src/test/java/security/authorization/error/ErrorAuthorizer.java 0 → 100644
@@ -0,0 +1,57 @@ @@ -0,0 +1,57 @@
  1 +/*
  2 + * Demoiselle Framework
  3 + * Copyright (C) 2010 SERPRO
  4 + * ----------------------------------------------------------------------------
  5 + * This file is part of Demoiselle Framework.
  6 + *
  7 + * Demoiselle Framework is free software; you can redistribute it and/or
  8 + * modify it under the terms of the GNU Lesser General Public License version 3
  9 + * as published by the Free Software Foundation.
  10 + *
  11 + * This program is distributed in the hope that it will be useful,
  12 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14 + * GNU General Public License for more details.
  15 + *
  16 + * You should have received a copy of the GNU Lesser General Public License version 3
  17 + * along with this program; if not, see <http://www.gnu.org/licenses/>
  18 + * or write to the Free Software Foundation, Inc., 51 Franklin Street,
  19 + * Fifth Floor, Boston, MA 02110-1301, USA.
  20 + * ----------------------------------------------------------------------------
  21 + * Este arquivo é parte do Framework Demoiselle.
  22 + *
  23 + * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou
  24 + * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação
  25 + * do Software Livre (FSF).
  26 + *
  27 + * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA
  28 + * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou
  29 + * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português
  30 + * para maiores detalhes.
  31 + *
  32 + * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título
  33 + * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>
  34 + * ou escreva para a Fundação do Software Livre (FSF) Inc.,
  35 + * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.
  36 + */
  37 +package security.authorization.error;
  38 +
  39 +import br.gov.frameworkdemoiselle.security.Authorizer;
  40 +
  41 +public class ErrorAuthorizer implements Authorizer {
  42 +
  43 + private static final long serialVersionUID = 1L;
  44 +
  45 + @Override
  46 + public boolean hasRole(String role) {
  47 + throw new RuntimeException("Erro desconhecido ao obter papeis");
  48 + }
  49 +
  50 + @Override
  51 + public boolean hasPermission(String resource, String operation) {
  52 + throw new RuntimeException("Erro desconhecido ao obter permissões");
  53 + }
  54 +
  55 +
  56 +
  57 +}
impl/core/src/test/java/security/authorization/error/ErrorAuthorizerTest.java 0 → 100644
@@ -0,0 +1,110 @@ @@ -0,0 +1,110 @@
  1 +/*
  2 + * Demoiselle Framework
  3 + * Copyright (C) 2010 SERPRO
  4 + * ----------------------------------------------------------------------------
  5 + * This file is part of Demoiselle Framework.
  6 + *
  7 + * Demoiselle Framework is free software; you can redistribute it and/or
  8 + * modify it under the terms of the GNU Lesser General Public License version 3
  9 + * as published by the Free Software Foundation.
  10 + *
  11 + * This program is distributed in the hope that it will be useful,
  12 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14 + * GNU General Public License for more details.
  15 + *
  16 + * You should have received a copy of the GNU Lesser General Public License version 3
  17 + * along with this program; if not, see <http://www.gnu.org/licenses/>
  18 + * or write to the Free Software Foundation, Inc., 51 Franklin Street,
  19 + * Fifth Floor, Boston, MA 02110-1301, USA.
  20 + * ----------------------------------------------------------------------------
  21 + * Este arquivo é parte do Framework Demoiselle.
  22 + *
  23 + * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou
  24 + * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação
  25 + * do Software Livre (FSF).
  26 + *
  27 + * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA
  28 + * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou
  29 + * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português
  30 + * para maiores detalhes.
  31 + *
  32 + * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título
  33 + * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>
  34 + * ou escreva para a Fundação do Software Livre (FSF) Inc.,
  35 + * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.
  36 + */
  37 +package security.authorization.error;
  38 +
  39 +import javax.inject.Inject;
  40 +
  41 +import junit.framework.Assert;
  42 +
  43 +import org.jboss.arquillian.container.test.api.Deployment;
  44 +import org.jboss.arquillian.junit.Arquillian;
  45 +import org.jboss.shrinkwrap.api.spec.JavaArchive;
  46 +import org.junit.After;
  47 +import org.junit.Before;
  48 +import org.junit.Test;
  49 +import org.junit.runner.RunWith;
  50 +
  51 +import security.athentication.custom.CustomAuthenticator;
  52 +import test.Tests;
  53 +import br.gov.frameworkdemoiselle.security.AuthorizationException;
  54 +import br.gov.frameworkdemoiselle.security.NotLoggedInException;
  55 +import br.gov.frameworkdemoiselle.security.SecurityContext;
  56 +import configuration.resource.ConfigurationResourceTest;
  57 +
  58 +@RunWith(Arquillian.class)
  59 +public class ErrorAuthorizerTest {
  60 +
  61 + @Inject
  62 + private SecurityContext context;
  63 +
  64 + @Deployment
  65 + public static JavaArchive createDeployment() {
  66 + JavaArchive deployment = Tests.createDeployment(ConfigurationResourceTest.class);
  67 + deployment.addClass(CustomAuthenticator.class);
  68 + deployment.addClass(ErrorAuthorizer.class);
  69 + return deployment;
  70 + }
  71 +
  72 + @Before
  73 + public void loginToTest(){
  74 + context.login();
  75 + }
  76 +
  77 + @Test
  78 + public void errorDuringCheckPermission(){
  79 + try{
  80 + context.hasPermission("resource", "operation");
  81 + Assert.fail("Verificar permissão deveria disparar exceção de runtime");
  82 + }
  83 + catch(NotLoggedInException ae){
  84 + Assert.fail("A exceção disparada não foi a esperada");
  85 + }
  86 + catch(RuntimeException e){
  87 + //PASS
  88 + }
  89 + }
  90 +
  91 + @Test
  92 + public void errorDuringCheckRole(){
  93 + try{
  94 + context.hasRole("role");
  95 + Assert.fail("Verificar papel deveria disparar exceção de runtime");
  96 + }
  97 + catch(AuthorizationException ae){
  98 + Assert.fail("A exceção disparada não foi a esperada");
  99 + }
  100 + catch(RuntimeException e){
  101 + //PASS
  102 + }
  103 + }
  104 +
  105 + @After
  106 + public void logoutAfterTest(){
  107 + context.logout();
  108 + }
  109 +
  110 +}
impl/core/src/test/java/security/authorization/selection/SelectedAuthorizerTest.java 0 → 100644
@@ -0,0 +1,90 @@ @@ -0,0 +1,90 @@
  1 +/*
  2 + * Demoiselle Framework
  3 + * Copyright (C) 2010 SERPRO
  4 + * ----------------------------------------------------------------------------
  5 + * This file is part of Demoiselle Framework.
  6 + *
  7 + * Demoiselle Framework is free software; you can redistribute it and/or
  8 + * modify it under the terms of the GNU Lesser General Public License version 3
  9 + * as published by the Free Software Foundation.
  10 + *
  11 + * This program is distributed in the hope that it will be useful,
  12 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14 + * GNU General Public License for more details.
  15 + *
  16 + * You should have received a copy of the GNU Lesser General Public License version 3
  17 + * along with this program; if not, see <http://www.gnu.org/licenses/>
  18 + * or write to the Free Software Foundation, Inc., 51 Franklin Street,
  19 + * Fifth Floor, Boston, MA 02110-1301, USA.
  20 + * ----------------------------------------------------------------------------
  21 + * Este arquivo é parte do Framework Demoiselle.
  22 + *
  23 + * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou
  24 + * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação
  25 + * do Software Livre (FSF).
  26 + *
  27 + * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA
  28 + * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou
  29 + * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português
  30 + * para maiores detalhes.
  31 + *
  32 + * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título
  33 + * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>
  34 + * ou escreva para a Fundação do Software Livre (FSF) Inc.,
  35 + * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.
  36 + */
  37 +package security.authorization.selection;
  38 +
  39 +import javax.inject.Inject;
  40 +
  41 +import org.jboss.arquillian.container.test.api.Deployment;
  42 +import org.jboss.arquillian.junit.Arquillian;
  43 +import org.jboss.shrinkwrap.api.spec.JavaArchive;
  44 +import org.junit.After;
  45 +import org.junit.Assert;
  46 +import org.junit.Before;
  47 +import org.junit.Test;
  48 +import org.junit.runner.RunWith;
  49 +
  50 +import security.athentication.custom.CustomAuthenticator;
  51 +import security.authorization.ambiguity.DuplicatedCustomAuthorizer;
  52 +import security.authorization.custom.CustomAuthorizer;
  53 +import test.Tests;
  54 +import br.gov.frameworkdemoiselle.security.SecurityContext;
  55 +import configuration.resource.ConfigurationResourceTest;
  56 +
  57 +@RunWith(Arquillian.class)
  58 +public class SelectedAuthorizerTest {
  59 +
  60 + private static final String PATH = "src/test/resources/security/authorization/selection";
  61 +
  62 + @Inject
  63 + private SecurityContext context;
  64 +
  65 + @Deployment
  66 + public static JavaArchive createDeployment() {
  67 + JavaArchive deployment = Tests.createDeployment(ConfigurationResourceTest.class);
  68 + deployment.addClass(CustomAuthenticator.class);
  69 + deployment.addClass(CustomAuthorizer.class);
  70 + deployment.addClass(DuplicatedCustomAuthorizer.class);
  71 + deployment.addAsResource(Tests.createFileAsset(PATH + "/demoiselle.properties"), "demoiselle.properties");
  72 + return deployment;
  73 + }
  74 +
  75 + @Before
  76 + public void loginToTest(){
  77 + context.login();
  78 + }
  79 +
  80 + @Test
  81 + public void selectedAuthorizerStrategy() {
  82 + context.login();
  83 + Assert.assertTrue(context.hasRole("role"));
  84 + }
  85 +
  86 + @After
  87 + public void logoutAfterTest(){
  88 + context.logout();
  89 + }
  90 +}
impl/core/src/test/java/security/authorization/undefined/UndefinedAuthorizerTest.java 0 → 100644
@@ -0,0 +1,72 @@ @@ -0,0 +1,72 @@
  1 +/*
  2 + * Demoiselle Framework
  3 + * Copyright (C) 2010 SERPRO
  4 + * ----------------------------------------------------------------------------
  5 + * This file is part of Demoiselle Framework.
  6 + *
  7 + * Demoiselle Framework is free software; you can redistribute it and/or
  8 + * modify it under the terms of the GNU Lesser General Public License version 3
  9 + * as published by the Free Software Foundation.
  10 + *
  11 + * This program is distributed in the hope that it will be useful,
  12 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14 + * GNU General Public License for more details.
  15 + *
  16 + * You should have received a copy of the GNU Lesser General Public License version 3
  17 + * along with this program; if not, see <http://www.gnu.org/licenses/>
  18 + * or write to the Free Software Foundation, Inc., 51 Franklin Street,
  19 + * Fifth Floor, Boston, MA 02110-1301, USA.
  20 + * ----------------------------------------------------------------------------
  21 + * Este arquivo é parte do Framework Demoiselle.
  22 + *
  23 + * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou
  24 + * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação
  25 + * do Software Livre (FSF).
  26 + *
  27 + * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA
  28 + * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou
  29 + * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português
  30 + * para maiores detalhes.
  31 + *
  32 + * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título
  33 + * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>
  34 + * ou escreva para a Fundação do Software Livre (FSF) Inc.,
  35 + * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.
  36 + */
  37 +package security.authorization.undefined;
  38 +
  39 +import static junit.framework.Assert.assertEquals;
  40 +
  41 +import javax.inject.Inject;
  42 +
  43 +import org.jboss.arquillian.container.test.api.Deployment;
  44 +import org.jboss.arquillian.junit.Arquillian;
  45 +import org.jboss.shrinkwrap.api.spec.JavaArchive;
  46 +import org.junit.Test;
  47 +import org.junit.runner.RunWith;
  48 +
  49 +import test.Tests;
  50 +import br.gov.frameworkdemoiselle.security.AuthenticationException;
  51 +import br.gov.frameworkdemoiselle.security.SecurityContext;
  52 +
  53 +@RunWith(Arquillian.class)
  54 +public class UndefinedAuthorizerTest {
  55 +
  56 + @Inject
  57 + private SecurityContext context;
  58 +
  59 + @Deployment
  60 + public static JavaArchive createDeployment() {
  61 + return Tests.createDeployment();
  62 + }
  63 +
  64 + @Test
  65 + public void undefinedAuthorizerStrategy() {
  66 + try {
  67 + context.hasRole("role");
  68 + } catch (AuthenticationException cause) {
  69 + assertEquals(ClassNotFoundException.class, cause.getCause().getClass());
  70 + }
  71 + }
  72 +}
impl/core/src/test/resources/security/authorization/selection/demoiselle.properties 0 → 100644
@@ -0,0 +1,36 @@ @@ -0,0 +1,36 @@
  1 +# Demoiselle Framework
  2 +# Copyright (C) 2010 SERPRO
  3 +# ----------------------------------------------------------------------------
  4 +# This file is part of Demoiselle Framework.
  5 +#
  6 +# Demoiselle Framework is free software; you can redistribute it and/or
  7 +# modify it under the terms of the GNU Lesser General Public License version 3
  8 +# as published by the Free Software Foundation.
  9 +#
  10 +# This program is distributed in the hope that it will be useful,
  11 +# but WITHOUT ANY WARRANTY; without even the implied warranty of
  12 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13 +# GNU General Public License for more details.
  14 +#
  15 +# You should have received a copy of the GNU Lesser General Public License version 3
  16 +# along with this program; if not, see <http://www.gnu.org/licenses/>
  17 +# or write to the Free Software Foundation, Inc., 51 Franklin Street,
  18 +# Fifth Floor, Boston, MA 02110-1301, USA.
  19 +# ----------------------------------------------------------------------------
  20 +# Este arquivo é parte do Framework Demoiselle.
  21 +#
  22 +# O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou
  23 +# modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação
  24 +# do Software Livre (FSF).
  25 +#
  26 +# Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA
  27 +# GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou
  28 +# APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português
  29 +# para maiores detalhes.
  30 +#
  31 +# Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título
  32 +# "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>
  33 +# ou escreva para a Fundação do Software Livre (FSF) Inc.,
  34 +# 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.
  35 +
  36 +frameworkdemoiselle.security.authorizer.class=security.authorization.custom.CustomAuthorizer
0 \ No newline at end of file 37 \ No newline at end of file
impl/extension/jdbc/src/main/java/br/gov/frameworkdemoiselle/internal/configuration/JDBCConfig.java
@@ -41,7 +41,12 @@ import java.util.Map; @@ -41,7 +41,12 @@ import java.util.Map;
41 41
42 import br.gov.frameworkdemoiselle.annotation.Name; 42 import br.gov.frameworkdemoiselle.annotation.Name;
43 import br.gov.frameworkdemoiselle.configuration.Configuration; 43 import br.gov.frameworkdemoiselle.configuration.Configuration;
44 - 44 +/**
  45 + * Provide used to access the configurations of the JDBC connection
  46 + *
  47 + * @author SERPRO
  48 + *
  49 + */
45 @Configuration(prefix = "frameworkdemoiselle.persistence.") 50 @Configuration(prefix = "frameworkdemoiselle.persistence.")
46 public class JDBCConfig implements Serializable { 51 public class JDBCConfig implements Serializable {
47 52
impl/extension/jdbc/src/main/java/br/gov/frameworkdemoiselle/transaction/JDBCTransaction.java
@@ -51,7 +51,7 @@ import br.gov.frameworkdemoiselle.internal.producer.ConnectionProducer; @@ -51,7 +51,7 @@ import br.gov.frameworkdemoiselle.internal.producer.ConnectionProducer;
51 import br.gov.frameworkdemoiselle.util.Beans; 51 import br.gov.frameworkdemoiselle.util.Beans;
52 52
53 /** 53 /**
54 - * Represents the strategy destinated to manage JPA transactions. 54 + * Represents the strategy destinated to manage JDBC transactions.
55 * 55 *
56 * @author SERPRO 56 * @author SERPRO
57 * @see Transaction 57 * @see Transaction
@@ -79,7 +79,7 @@ public class JDBCTransaction implements Transaction { @@ -79,7 +79,7 @@ public class JDBCTransaction implements Transaction {
79 return producer; 79 return producer;
80 } 80 }
81 81
82 - public Collection<Connection> getDelegate() { 82 + private Collection<Connection> getDelegate() {
83 return getProducer().getCache().values(); 83 return getProducer().getCache().values();
84 } 84 }
85 85
@@ -92,6 +92,9 @@ public class JDBCTransaction implements Transaction { @@ -92,6 +92,9 @@ public class JDBCTransaction implements Transaction {
92 } 92 }
93 } 93 }
94 94
  95 + /**
  96 + * @throws DemoiselleException
  97 + */
95 @Override 98 @Override
96 public void commit() { 99 public void commit() {
97 for (Connection connection : getDelegate()) { 100 for (Connection connection : getDelegate()) {
@@ -103,6 +106,9 @@ public class JDBCTransaction implements Transaction { @@ -103,6 +106,9 @@ public class JDBCTransaction implements Transaction {
103 } 106 }
104 } 107 }
105 108
  109 + /**
  110 + * @throws DemoiselleException
  111 + */
106 @Override 112 @Override
107 public void rollback() { 113 public void rollback() {
108 for (Connection connection : getDelegate()) { 114 for (Connection connection : getDelegate()) {
impl/extension/jmx/pom.xml
@@ -69,7 +69,6 @@ @@ -69,7 +69,6 @@
69 <dependency> 69 <dependency>
70 <groupId>org.jboss.shrinkwrap.resolver</groupId> 70 <groupId>org.jboss.shrinkwrap.resolver</groupId>
71 <artifactId>shrinkwrap-resolver-impl-maven</artifactId> 71 <artifactId>shrinkwrap-resolver-impl-maven</artifactId>
72 - <version>2.0.0-beta-3</version>  
73 <scope>test</scope> 72 <scope>test</scope>
74 </dependency> 73 </dependency>
75 <dependency> 74 <dependency>
@@ -87,6 +86,11 @@ @@ -87,6 +86,11 @@
87 <artifactId>hibernate-validator</artifactId> 86 <artifactId>hibernate-validator</artifactId>
88 <scope>test</scope> 87 <scope>test</scope>
89 </dependency> 88 </dependency>
  89 + <dependency>
  90 + <groupId>org.slf4j</groupId>
  91 + <artifactId>slf4j-log4j12</artifactId>
  92 + <scope>test</scope>
  93 + </dependency>
90 </dependencies> 94 </dependencies>
91 95
92 <repositories> 96 <repositories>
impl/extension/jmx/src/main/java/br/gov/frameworkdemoiselle/jmx/internal/DynamicMBeanProxy.java
@@ -58,7 +58,6 @@ import br.gov.frameworkdemoiselle.internal.management.ManagedType.FieldDetail; @@ -58,7 +58,6 @@ import br.gov.frameworkdemoiselle.internal.management.ManagedType.FieldDetail;
58 import br.gov.frameworkdemoiselle.internal.management.ManagedType.MethodDetail; 58 import br.gov.frameworkdemoiselle.internal.management.ManagedType.MethodDetail;
59 import br.gov.frameworkdemoiselle.internal.management.ManagedType.ParameterDetail; 59 import br.gov.frameworkdemoiselle.internal.management.ManagedType.ParameterDetail;
60 import br.gov.frameworkdemoiselle.internal.management.Management; 60 import br.gov.frameworkdemoiselle.internal.management.Management;
61 -import br.gov.frameworkdemoiselle.internal.producer.ResourceBundleProducer;  
62 import br.gov.frameworkdemoiselle.stereotype.ManagementController; 61 import br.gov.frameworkdemoiselle.stereotype.ManagementController;
63 import br.gov.frameworkdemoiselle.util.Beans; 62 import br.gov.frameworkdemoiselle.util.Beans;
64 import br.gov.frameworkdemoiselle.util.ResourceBundle; 63 import br.gov.frameworkdemoiselle.util.ResourceBundle;
@@ -79,11 +78,11 @@ public class DynamicMBeanProxy implements DynamicMBean { @@ -79,11 +78,11 @@ public class DynamicMBeanProxy implements DynamicMBean {
79 78
80 private ManagedType managedType; 79 private ManagedType managedType;
81 80
82 - private ResourceBundle bundle = new ResourceBundleProducer().create("demoiselle-jmx-bundle", Locale.getDefault()); 81 + private ResourceBundle bundle;
83 82
84 public DynamicMBeanProxy(ManagedType type) { 83 public DynamicMBeanProxy(ManagedType type) {
85 if (type == null) { 84 if (type == null) {
86 - throw new NullPointerException(bundle.getString("mbean-null-type-defined")); 85 + throw new NullPointerException(getBundle().getString("mbean-null-type-defined"));
87 } 86 }
88 managedType = type; 87 managedType = type;
89 } 88 }
@@ -186,7 +185,7 @@ public class DynamicMBeanProxy implements DynamicMBean { @@ -186,7 +185,7 @@ public class DynamicMBeanProxy implements DynamicMBean {
186 attributes.add(attributeInfo); 185 attributes.add(attributeInfo);
187 186
188 } catch (javax.management.IntrospectionException e) { 187 } catch (javax.management.IntrospectionException e) {
189 - throw new DemoiselleException(bundle.getString("mbean-introspection-error", managedType.getType() 188 + throw new DemoiselleException(getBundle().getString("mbean-introspection-error", managedType.getType()
190 .getSimpleName())); 189 .getSimpleName()));
191 } 190 }
192 } 191 }
@@ -253,5 +252,13 @@ public class DynamicMBeanProxy implements DynamicMBean { @@ -253,5 +252,13 @@ public class DynamicMBeanProxy implements DynamicMBean {
253 252
254 return delegateInfo; 253 return delegateInfo;
255 } 254 }
  255 +
  256 + public ResourceBundle getBundle(){
  257 + if (bundle==null){
  258 + bundle = new ResourceBundle("demoiselle-jmx-bundle", Locale.getDefault());
  259 + }
  260 +
  261 + return bundle;
  262 + }
256 263
257 } 264 }
impl/extension/jmx/src/main/java/br/gov/frameworkdemoiselle/jmx/internal/MBeanHelper.java
@@ -47,7 +47,6 @@ import org.slf4j.Logger; @@ -47,7 +47,6 @@ import org.slf4j.Logger;
47 47
48 import br.gov.frameworkdemoiselle.DemoiselleException; 48 import br.gov.frameworkdemoiselle.DemoiselleException;
49 import br.gov.frameworkdemoiselle.internal.producer.LoggerProducer; 49 import br.gov.frameworkdemoiselle.internal.producer.LoggerProducer;
50 -import br.gov.frameworkdemoiselle.internal.producer.ResourceBundleProducer;  
51 import br.gov.frameworkdemoiselle.util.ResourceBundle; 50 import br.gov.frameworkdemoiselle.util.ResourceBundle;
52 51
53 /** 52 /**
@@ -59,7 +58,7 @@ public class MBeanHelper { @@ -59,7 +58,7 @@ public class MBeanHelper {
59 58
60 private static final Logger logger = LoggerProducer.create(MBeanHelper.class); 59 private static final Logger logger = LoggerProducer.create(MBeanHelper.class);
61 60
62 - private static ResourceBundle bundle = new ResourceBundleProducer().create("demoiselle-jmx-bundle", Locale.getDefault()); 61 + private static ResourceBundle bundle = new ResourceBundle("demoiselle-jmx-bundle", Locale.getDefault());
63 62
64 private static final MBeanServer server = ManagementFactory.getPlatformMBeanServer(); 63 private static final MBeanServer server = ManagementFactory.getPlatformMBeanServer();
65 64
impl/extension/jmx/src/test/java/management/LocaleProducer.java
@@ -1,51 +0,0 @@ @@ -1,51 +0,0 @@
1 -/*  
2 - * Demoiselle Framework  
3 - * Copyright (C) 2010 SERPRO  
4 - * ----------------------------------------------------------------------------  
5 - * This file is part of Demoiselle Framework.  
6 - *  
7 - * Demoiselle Framework is free software; you can redistribute it and/or  
8 - * modify it under the terms of the GNU Lesser General Public License version 3  
9 - * as published by the Free Software Foundation.  
10 - *  
11 - * This program is distributed in the hope that it will be useful,  
12 - * but WITHOUT ANY WARRANTY; without even the implied warranty of  
13 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the  
14 - * GNU General Public License for more details.  
15 - *  
16 - * You should have received a copy of the GNU Lesser General Public License version 3  
17 - * along with this program; if not, see <http://www.gnu.org/licenses/>  
18 - * or write to the Free Software Foundation, Inc., 51 Franklin Street,  
19 - * Fifth Floor, Boston, MA 02110-1301, USA.  
20 - * ----------------------------------------------------------------------------  
21 - * Este arquivo é parte do Framework Demoiselle.  
22 - *  
23 - * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou  
24 - * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação  
25 - * do Software Livre (FSF).  
26 - *  
27 - * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA  
28 - * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou  
29 - * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português  
30 - * para maiores detalhes.  
31 - *  
32 - * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título  
33 - * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>  
34 - * ou escreva para a Fundação do Software Livre (FSF) Inc.,  
35 - * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.  
36 - */  
37 -package management;  
38 -  
39 -import java.util.Locale;  
40 -  
41 -import javax.enterprise.inject.Default;  
42 -import javax.enterprise.inject.Produces;  
43 -  
44 -public class LocaleProducer {  
45 -  
46 - @Default  
47 - @Produces  
48 - public Locale create() {  
49 - return Locale.getDefault();  
50 - }  
51 -}  
impl/extension/jmx/src/test/java/management/tests/Tests.java 0 → 100644
@@ -0,0 +1,84 @@ @@ -0,0 +1,84 @@
  1 +/*
  2 + * Demoiselle Framework
  3 + * Copyright (C) 2010 SERPRO
  4 + * ----------------------------------------------------------------------------
  5 + * This file is part of Demoiselle Framework.
  6 + *
  7 + * Demoiselle Framework is free software; you can redistribute it and/or
  8 + * modify it under the terms of the GNU Lesser General Public License version 3
  9 + * as published by the Free Software Foundation.
  10 + *
  11 + * This program is distributed in the hope that it will be useful,
  12 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14 + * GNU General Public License for more details.
  15 + *
  16 + * You should have received a copy of the GNU Lesser General Public License version 3
  17 + * along with this program; if not, see <http://www.gnu.org/licenses/>
  18 + * or write to the Free Software Foundation, Inc., 51 Franklin Street,
  19 + * Fifth Floor, Boston, MA 02110-1301, USA.
  20 + * ----------------------------------------------------------------------------
  21 + * Este arquivo é parte do Framework Demoiselle.
  22 + *
  23 + * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou
  24 + * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação
  25 + * do Software Livre (FSF).
  26 + *
  27 + * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA
  28 + * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou
  29 + * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português
  30 + * para maiores detalhes.
  31 + *
  32 + * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título
  33 + * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>
  34 + * ou escreva para a Fundação do Software Livre (FSF) Inc.,
  35 + * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.
  36 + */
  37 +
  38 +package management.tests;
  39 +
  40 +import java.io.File;
  41 +import java.util.Locale;
  42 +
  43 +import javax.enterprise.inject.Default;
  44 +import javax.enterprise.inject.Produces;
  45 +
  46 +import org.jboss.shrinkwrap.api.ShrinkWrap;
  47 +import org.jboss.shrinkwrap.api.asset.FileAsset;
  48 +import org.jboss.shrinkwrap.api.spec.JavaArchive;
  49 +import org.junit.Ignore;
  50 +
  51 +@Ignore
  52 +public final class Tests {
  53 +
  54 + private Tests() {
  55 + }
  56 +
  57 + public static JavaArchive createDeployment(final Class<?> baseClass) {
  58 + return createDeployment().addPackages(true, baseClass.getPackage());
  59 + }
  60 +
  61 + public static JavaArchive createDeployment() {
  62 + return ShrinkWrap
  63 + .create(JavaArchive.class)
  64 + .addClass(Tests.class)
  65 + .addPackages(true, "br")
  66 + .addAsResource(Tests.createFileAsset("src/main/resources/demoiselle-jmx-bundle.properties") , "demoiselle-jmx-bundle.properties")
  67 + .addAsResource(Tests.createFileAsset("src/test/resources/log4j.properties"),"log4j.properties")
  68 + .addAsResource(Tests.createFileAsset("src/test/resources/configuration/demoiselle.properties"),"demoiselle.properties")
  69 + .addAsManifestResource(Tests.createFileAsset("src/test/resources/beans.xml"), "beans.xml")
  70 + .addAsManifestResource(
  71 + new File("src/test/resources/javax.enterprise.inject.spi.Extension"),
  72 + "services/javax.enterprise.inject.spi.Extension");
  73 + }
  74 +
  75 + public static FileAsset createFileAsset(final String pathname) {
  76 + return new FileAsset(new File(pathname));
  77 + }
  78 +
  79 + @Default
  80 + @Produces
  81 + public Locale create() {
  82 + return Locale.getDefault();
  83 + }
  84 +}
impl/extension/jmx/src/test/java/management/tests/basic/DynamicMBeanProxyTest.java 0 → 100644
@@ -0,0 +1,187 @@ @@ -0,0 +1,187 @@
  1 +/*
  2 + * Demoiselle Framework
  3 + * Copyright (C) 2010 SERPRO
  4 + * ----------------------------------------------------------------------------
  5 + * This file is part of Demoiselle Framework.
  6 + *
  7 + * Demoiselle Framework is free software; you can redistribute it and/or
  8 + * modify it under the terms of the GNU Lesser General Public License version 3
  9 + * as published by the Free Software Foundation.
  10 + *
  11 + * This program is distributed in the hope that it will be useful,
  12 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14 + * GNU General Public License for more details.
  15 + *
  16 + * You should have received a copy of the GNU Lesser General Public License version 3
  17 + * along with this program; if not, see <http://www.gnu.org/licenses/>
  18 + * or write to the Free Software Foundation, Inc., 51 Franklin Street,
  19 + * Fifth Floor, Boston, MA 02110-1301, USA.
  20 + * ----------------------------------------------------------------------------
  21 + * Este arquivo é parte do Framework Demoiselle.
  22 + *
  23 + * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou
  24 + * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação
  25 + * do Software Livre (FSF).
  26 + *
  27 + * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA
  28 + * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou
  29 + * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português
  30 + * para maiores detalhes.
  31 + *
  32 + * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título
  33 + * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>
  34 + * ou escreva para a Fundação do Software Livre (FSF) Inc.,
  35 + * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.
  36 + */
  37 +package management.tests.basic;
  38 +
  39 +import java.lang.management.ManagementFactory;
  40 +
  41 +import javax.management.Attribute;
  42 +import javax.management.MBeanServer;
  43 +import javax.management.MalformedObjectNameException;
  44 +import javax.management.ObjectName;
  45 +
  46 +import junit.framework.Assert;
  47 +import management.domain.ManagedTestClass;
  48 +import management.tests.Tests;
  49 +
  50 +import org.jboss.arquillian.container.test.api.Deployment;
  51 +import org.jboss.arquillian.junit.Arquillian;
  52 +import org.jboss.shrinkwrap.api.spec.JavaArchive;
  53 +import org.junit.AfterClass;
  54 +import org.junit.BeforeClass;
  55 +import org.junit.Test;
  56 +import org.junit.runner.RunWith;
  57 +
  58 +import br.gov.frameworkdemoiselle.jmx.internal.MBeanManager;
  59 +import br.gov.frameworkdemoiselle.lifecycle.AfterShutdownProccess;
  60 +import br.gov.frameworkdemoiselle.lifecycle.AfterStartupProccess;
  61 +import br.gov.frameworkdemoiselle.util.Beans;
  62 +
  63 +@RunWith(Arquillian.class)
  64 +public class DynamicMBeanProxyTest {
  65 +
  66 + @Deployment
  67 + public static JavaArchive createDeployment() {
  68 + return Tests.createDeployment(DynamicMBeanProxyTest.class)
  69 + .addClasses(ManagedTestClass.class);
  70 + }
  71 +
  72 + @BeforeClass
  73 + public static void fireEventStartupProccess() {
  74 + Beans.getBeanManager().fireEvent(new AfterStartupProccess() {
  75 + });
  76 + }
  77 +
  78 + @AfterClass
  79 + public static void fireEventShutdownProccess() {
  80 + Beans.getBeanManager().fireEvent(new AfterShutdownProccess() {
  81 + });
  82 + }
  83 +
  84 + /**
  85 + * Testa se o bootstrap está corretamente carregando e registrando classes anotadas com {@link Managed} como MBeans.
  86 + */
  87 + @Test
  88 + public void initializeMBean() {
  89 + MBeanManager manager = Beans.getReference(MBeanManager.class);
  90 +
  91 + Assert.assertNotNull(manager);
  92 + Assert.assertNotNull(manager.listRegisteredMBeans());
  93 +
  94 + // O componente demoiselle-jmx sempre tem pelo menos um MBean, que é
  95 + // o NotificationBroadcaster. Qualquer classe gerenciada criada pelo usuário
  96 + // será adicionada a ela, então esperamos 2 MBeans aqui.
  97 + Assert.assertEquals(2, manager.listRegisteredMBeans().size());
  98 +
  99 + }
  100 +
  101 + @Test
  102 + public void attributeWrite() {
  103 +
  104 + MBeanServer server = ManagementFactory.getPlatformMBeanServer();
  105 +
  106 + ObjectName name = null;
  107 + try {
  108 + name = new ObjectName("br.gov.frameworkdemoiselle.jmx.domain:name=ManagedTest");
  109 + } catch (MalformedObjectNameException e) {
  110 + Assert.fail();
  111 + }
  112 +
  113 + try {
  114 + server.setAttribute(name, new Attribute("attribute", "New Value"));
  115 + } catch (Exception e) {
  116 + Assert.fail(e.getMessage());
  117 + }
  118 +
  119 + }
  120 +
  121 + @Test
  122 + public void attributeRead() {
  123 +
  124 + MBeanServer server = ManagementFactory.getPlatformMBeanServer();
  125 +
  126 + ObjectName name = null;
  127 + try {
  128 + name = new ObjectName("br.gov.frameworkdemoiselle.jmx.domain:name=ManagedTest");
  129 + } catch (MalformedObjectNameException e) {
  130 + Assert.fail();
  131 + }
  132 +
  133 + try {
  134 + server.setAttribute(name, new Attribute("attribute", "New Value"));
  135 +
  136 + Object info = server.getAttribute(name, "attribute");
  137 +
  138 + Assert.assertEquals("New Value", info);
  139 + } catch (Exception e) {
  140 + Assert.fail();
  141 + }
  142 +
  143 + }
  144 +
  145 + @Test
  146 + public void operationInvocation() {
  147 +
  148 + MBeanServer server = ManagementFactory.getPlatformMBeanServer();
  149 +
  150 + ObjectName name = null;
  151 + try {
  152 + name = new ObjectName("br.gov.frameworkdemoiselle.jmx.domain:name=ManagedTest");
  153 + } catch (MalformedObjectNameException e) {
  154 + Assert.fail();
  155 + }
  156 +
  157 + try {
  158 + server.setAttribute(name, new Attribute("attribute", "Defined Value"));
  159 +
  160 + Object info = server.invoke(name, "operation", new Object[] { "Test" }, new String[] { "String" });
  161 + Assert.assertEquals("Operation called with parameter=Test. Current attribute value is Defined Value", info);
  162 + } catch (Exception e) {
  163 + Assert.fail();
  164 + }
  165 +
  166 + }
  167 +
  168 + @Test
  169 + public void tryWriteOverReadOnly() {
  170 +
  171 + MBeanServer server = ManagementFactory.getPlatformMBeanServer();
  172 +
  173 + ObjectName name = null;
  174 + try {
  175 + name = new ObjectName("br.gov.frameworkdemoiselle.jmx.domain:name=ManagedTest");
  176 + } catch (MalformedObjectNameException e) {
  177 + Assert.fail();
  178 + }
  179 +
  180 + try {
  181 + server.setAttribute(name, new Attribute("attribute", "New Value"));
  182 + } catch (Exception e) {
  183 + Assert.fail(e.getMessage());
  184 + }
  185 +
  186 + }
  187 +}
impl/extension/jmx/src/test/java/management/tests/internal/DynamicMBeanProxyTestCase.java
@@ -1,197 +0,0 @@ @@ -1,197 +0,0 @@
1 -/*  
2 - * Demoiselle Framework  
3 - * Copyright (C) 2010 SERPRO  
4 - * ----------------------------------------------------------------------------  
5 - * This file is part of Demoiselle Framework.  
6 - *  
7 - * Demoiselle Framework is free software; you can redistribute it and/or  
8 - * modify it under the terms of the GNU Lesser General Public License version 3  
9 - * as published by the Free Software Foundation.  
10 - *  
11 - * This program is distributed in the hope that it will be useful,  
12 - * but WITHOUT ANY WARRANTY; without even the implied warranty of  
13 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the  
14 - * GNU General Public License for more details.  
15 - *  
16 - * You should have received a copy of the GNU Lesser General Public License version 3  
17 - * along with this program; if not, see <http://www.gnu.org/licenses/>  
18 - * or write to the Free Software Foundation, Inc., 51 Franklin Street,  
19 - * Fifth Floor, Boston, MA 02110-1301, USA.  
20 - * ----------------------------------------------------------------------------  
21 - * Este arquivo é parte do Framework Demoiselle.  
22 - *  
23 - * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou  
24 - * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação  
25 - * do Software Livre (FSF).  
26 - *  
27 - * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA  
28 - * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou  
29 - * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português  
30 - * para maiores detalhes.  
31 - *  
32 - * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título  
33 - * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>  
34 - * ou escreva para a Fundação do Software Livre (FSF) Inc.,  
35 - * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.  
36 - */  
37 -package management.tests.internal;  
38 -  
39 -import java.io.File;  
40 -import java.lang.management.ManagementFactory;  
41 -  
42 -import javax.management.Attribute;  
43 -import javax.management.MBeanServer;  
44 -import javax.management.MalformedObjectNameException;  
45 -import javax.management.ObjectName;  
46 -  
47 -import junit.framework.Assert;  
48 -import management.LocaleProducer;  
49 -import management.domain.ManagedTestClass;  
50 -  
51 -import org.jboss.arquillian.container.test.api.Deployment;  
52 -import org.jboss.arquillian.junit.Arquillian;  
53 -import org.jboss.shrinkwrap.api.ShrinkWrap;  
54 -import org.jboss.shrinkwrap.api.asset.FileAsset;  
55 -import org.jboss.shrinkwrap.api.spec.JavaArchive;  
56 -import org.junit.AfterClass;  
57 -import org.junit.BeforeClass;  
58 -import org.junit.Test;  
59 -import org.junit.runner.RunWith;  
60 -  
61 -import br.gov.frameworkdemoiselle.jmx.internal.MBeanManager;  
62 -import br.gov.frameworkdemoiselle.lifecycle.AfterShutdownProccess;  
63 -import br.gov.frameworkdemoiselle.lifecycle.AfterStartupProccess;  
64 -import br.gov.frameworkdemoiselle.util.Beans;  
65 -  
66 -@RunWith(Arquillian.class)  
67 -public class DynamicMBeanProxyTestCase {  
68 -  
69 - @Deployment  
70 - public static JavaArchive createDeployment() {  
71 - JavaArchive mainDeployment = ShrinkWrap.create(JavaArchive.class);  
72 - mainDeployment  
73 - .addPackages(true, "br")  
74 - .addAsResource(new FileAsset(new File("src/test/resources/test/beans.xml")), "beans.xml")  
75 - .addAsResource(new FileAsset(new File("src/test/resources/configuration/demoiselle.properties")),"demoiselle.properties")  
76 - .addPackages(false, DynamicMBeanProxyTestCase.class.getPackage())  
77 - .addClasses(LocaleProducer.class, ManagedTestClass.class);  
78 -  
79 - return mainDeployment;  
80 - }  
81 -  
82 - @BeforeClass  
83 - public static void fireEventStartupProccess() {  
84 - Beans.getBeanManager().fireEvent(new AfterStartupProccess() {  
85 - });  
86 - }  
87 -  
88 - @AfterClass  
89 - public static void fireEventShutdownProccess() {  
90 - Beans.getBeanManager().fireEvent(new AfterShutdownProccess() {  
91 - });  
92 - }  
93 -  
94 - /**  
95 - * Testa se o bootstrap está corretamente carregando e registrando classes anotadas com {@link Managed} como MBeans.  
96 - */  
97 - @Test  
98 - public void testMBeanInitialization() {  
99 - MBeanManager manager = Beans.getReference(MBeanManager.class);  
100 -  
101 - Assert.assertNotNull(manager);  
102 - Assert.assertNotNull(manager.listRegisteredMBeans());  
103 -  
104 - // O componente demoiselle-jmx sempre tem pelo menos um MBean, que é  
105 - // o NotificationBroadcaster. Qualquer classe gerenciada criada pelo usuário  
106 - // será adicionada a ela, então esperamos 2 MBeans aqui.  
107 - Assert.assertEquals(2, manager.listRegisteredMBeans().size());  
108 -  
109 - }  
110 -  
111 - @Test  
112 - public void testAttributeWrite() {  
113 -  
114 - MBeanServer server = ManagementFactory.getPlatformMBeanServer();  
115 -  
116 - ObjectName name = null;  
117 - try {  
118 - name = new ObjectName("br.gov.frameworkdemoiselle.jmx.domain:name=ManagedTest");  
119 - } catch (MalformedObjectNameException e) {  
120 - Assert.fail();  
121 - }  
122 -  
123 - try {  
124 - server.setAttribute(name, new Attribute("attribute", "New Value"));  
125 - } catch (Exception e) {  
126 - Assert.fail(e.getMessage());  
127 - }  
128 -  
129 - }  
130 -  
131 - @Test  
132 - public void testAttributeRead() {  
133 -  
134 - MBeanServer server = ManagementFactory.getPlatformMBeanServer();  
135 -  
136 - ObjectName name = null;  
137 - try {  
138 - name = new ObjectName("br.gov.frameworkdemoiselle.jmx.domain:name=ManagedTest");  
139 - } catch (MalformedObjectNameException e) {  
140 - Assert.fail();  
141 - }  
142 -  
143 - try {  
144 - server.setAttribute(name, new Attribute("attribute", "New Value"));  
145 -  
146 - Object info = server.getAttribute(name, "attribute");  
147 -  
148 - Assert.assertEquals("New Value", info);  
149 - } catch (Exception e) {  
150 - Assert.fail();  
151 - }  
152 -  
153 - }  
154 -  
155 - @Test  
156 - public void testOperationInvocation() {  
157 -  
158 - MBeanServer server = ManagementFactory.getPlatformMBeanServer();  
159 -  
160 - ObjectName name = null;  
161 - try {  
162 - name = new ObjectName("br.gov.frameworkdemoiselle.jmx.domain:name=ManagedTest");  
163 - } catch (MalformedObjectNameException e) {  
164 - Assert.fail();  
165 - }  
166 -  
167 - try {  
168 - server.setAttribute(name, new Attribute("attribute", "Defined Value"));  
169 -  
170 - Object info = server.invoke(name, "operation", new Object[] { "Test" }, new String[] { "String" });  
171 - Assert.assertEquals("Operation called with parameter=Test. Current attribute value is Defined Value", info);  
172 - } catch (Exception e) {  
173 - Assert.fail();  
174 - }  
175 -  
176 - }  
177 -  
178 - @Test  
179 - public void testTryWriteOverReadOnly() {  
180 -  
181 - MBeanServer server = ManagementFactory.getPlatformMBeanServer();  
182 -  
183 - ObjectName name = null;  
184 - try {  
185 - name = new ObjectName("br.gov.frameworkdemoiselle.jmx.domain:name=ManagedTest");  
186 - } catch (MalformedObjectNameException e) {  
187 - Assert.fail();  
188 - }  
189 -  
190 - try {  
191 - server.setAttribute(name, new Attribute("attribute", "New Value"));  
192 - } catch (Exception e) {  
193 - Assert.fail(e.getMessage());  
194 - }  
195 -  
196 - }  
197 -}  
impl/extension/jmx/src/test/java/management/tests/internal/NotificationBroadcasterTestCase.java
@@ -1,223 +0,0 @@ @@ -1,223 +0,0 @@
1 -/*  
2 - * Demoiselle Framework  
3 - * Copyright (C) 2010 SERPRO  
4 - * ----------------------------------------------------------------------------  
5 - * This file is part of Demoiselle Framework.  
6 - *  
7 - * Demoiselle Framework is free software; you can redistribute it and/or  
8 - * modify it under the terms of the GNU Lesser General Public License version 3  
9 - * as published by the Free Software Foundation.  
10 - *  
11 - * This program is distributed in the hope that it will be useful,  
12 - * but WITHOUT ANY WARRANTY; without even the implied warranty of  
13 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the  
14 - * GNU General Public License for more details.  
15 - *  
16 - * You should have received a copy of the GNU Lesser General Public License version 3  
17 - * along with this program; if not, see <http://www.gnu.org/licenses/>  
18 - * or write to the Free Software Foundation, Inc., 51 Franklin Street,  
19 - * Fifth Floor, Boston, MA 02110-1301, USA.  
20 - * ----------------------------------------------------------------------------  
21 - * Este arquivo é parte do Framework Demoiselle.  
22 - *  
23 - * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou  
24 - * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação  
25 - * do Software Livre (FSF).  
26 - *  
27 - * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA  
28 - * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou  
29 - * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português  
30 - * para maiores detalhes.  
31 - *  
32 - * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título  
33 - * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>  
34 - * ou escreva para a Fundação do Software Livre (FSF) Inc.,  
35 - * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.  
36 - */  
37 -package management.tests.internal;  
38 -  
39 -import java.io.File;  
40 -import java.lang.management.ManagementFactory;  
41 -  
42 -import javax.management.InstanceNotFoundException;  
43 -import javax.management.MBeanServer;  
44 -import javax.management.MalformedObjectNameException;  
45 -import javax.management.NotificationListener;  
46 -import javax.management.ObjectInstance;  
47 -import javax.management.ObjectName;  
48 -  
49 -import junit.framework.Assert;  
50 -import management.LocaleProducer;  
51 -import management.domain.ManagedTestClass;  
52 -  
53 -import org.jboss.arquillian.container.test.api.Deployment;  
54 -import org.jboss.arquillian.junit.Arquillian;  
55 -import org.jboss.shrinkwrap.api.ShrinkWrap;  
56 -import org.jboss.shrinkwrap.api.asset.FileAsset;  
57 -import org.jboss.shrinkwrap.api.spec.JavaArchive;  
58 -import org.junit.AfterClass;  
59 -import org.junit.BeforeClass;  
60 -import org.junit.Test;  
61 -import org.junit.runner.RunWith;  
62 -  
63 -import br.gov.frameworkdemoiselle.jmx.configuration.JMXConfig;  
64 -import br.gov.frameworkdemoiselle.jmx.internal.MBeanManager;  
65 -import br.gov.frameworkdemoiselle.lifecycle.AfterShutdownProccess;  
66 -import br.gov.frameworkdemoiselle.lifecycle.AfterStartupProccess;  
67 -import br.gov.frameworkdemoiselle.management.AttributeChangeNotification;  
68 -import br.gov.frameworkdemoiselle.management.GenericNotification;  
69 -import br.gov.frameworkdemoiselle.management.NotificationManager;  
70 -import br.gov.frameworkdemoiselle.util.Beans;  
71 -  
72 -@RunWith(Arquillian.class)  
73 -public class NotificationBroadcasterTestCase {  
74 -  
75 - @Deployment  
76 - public static JavaArchive createDeployment() {  
77 - JavaArchive mainDeployment = ShrinkWrap.create(JavaArchive.class);  
78 - mainDeployment  
79 - .addPackages(true, "br")  
80 - .addAsResource(new FileAsset(new File("src/test/resources/test/beans.xml")), "beans.xml")  
81 - .addAsResource(new FileAsset(new File("src/test/resources/configuration/demoiselle.properties")),  
82 - "demoiselle.properties").addPackages(false, DynamicMBeanProxyTestCase.class.getPackage())  
83 - .addClasses(LocaleProducer.class, ManagedTestClass.class);  
84 -  
85 - return mainDeployment;  
86 - }  
87 -  
88 - @BeforeClass  
89 - public static void fireEventStartupProccess() {  
90 - Beans.getBeanManager().fireEvent(new AfterStartupProccess() {  
91 - });  
92 - }  
93 -  
94 - @AfterClass  
95 - public static void fireEventShutdownProccess() {  
96 - Beans.getBeanManager().fireEvent(new AfterShutdownProccess() {  
97 - });  
98 - }  
99 -  
100 - /**  
101 - * Testa o envio de uma mensagem para clientes conectados  
102 - */  
103 - @Test  
104 - public void sendMessageTest() {  
105 - JMXConfig config = Beans.getReference(JMXConfig.class);  
106 -  
107 - // Este será o lado cliente. Este manager é usado para enviar notificações a partir do código da aplicação  
108 - NotificationManager notificationManager = Beans.getReference(NotificationManager.class);  
109 -  
110 - // Obtém o servidor MBean onde anexaremos um listener para a notificação  
111 - MBeanServer server = ManagementFactory.getPlatformMBeanServer();  
112 -  
113 - // Aqui obtemos o MBean de notificações já registrado pelo bootstrap  
114 - StringBuffer notificationMBeanName = new StringBuffer()  
115 - .append(config.getNotificationDomain() != null ? config.getNotificationDomain()  
116 - : "br.gov.frameworkdemoiselle.jmx").append(":name=").append(config.getNotificationMBeanName());  
117 -  
118 - ObjectName name = null;  
119 - try {  
120 - name = new ObjectName(notificationMBeanName.toString());  
121 - } catch (MalformedObjectNameException e) {  
122 - Assert.fail();  
123 - }  
124 -  
125 - // StringBuffer vazio  
126 - StringBuffer notificationBuffer = new StringBuffer();  
127 -  
128 - // Este notification listener será chamado quando o Demoiselle enviar a notificação e vai colocar  
129 - // a mensagem enviada em "notificationBuffer"  
130 - NotificationListener listener = new TestNotificationListener(notificationBuffer);  
131 -  
132 - try {  
133 - // Anexa o listener no servidor MBean  
134 - server.addNotificationListener(name, listener, null, null);  
135 - } catch (InstanceNotFoundException e) {  
136 - Assert.fail();  
137 - }  
138 -  
139 - // Manda a notificação pelo Demoiselle  
140 - GenericNotification n = new GenericNotification("Notification test successful");  
141 - notificationManager.sendNotification(n);  
142 -  
143 - // Se o componente funcionou, o Demoiselle propagou a notificação para o servidor MBean e o listener preencheu  
144 - // o StringBuffer com nossa mensagem.  
145 - Assert.assertEquals("Notification test successful", notificationBuffer.toString());  
146 -  
147 - }  
148 -  
149 - /**  
150 - * Testa o envio de uma mensagem de mudança de atributo para clientes conectados  
151 - */  
152 - @Test  
153 - public void sendAttributeChangedMessageTest() {  
154 - JMXConfig config = Beans.getReference(JMXConfig.class);  
155 -  
156 - // Obtém o servidor MBean onde anexaremos um listener para a notificação  
157 - MBeanServer server = ManagementFactory.getPlatformMBeanServer();  
158 -  
159 - NotificationManager notificationManager = Beans.getReference(NotificationManager.class);  
160 - MBeanManager mBeanManager = Beans.getReference(MBeanManager.class);  
161 -  
162 - // Aqui obtemos o MBean de notificações já registrado pelo bootstrap  
163 - StringBuffer notificationMBeanName = new StringBuffer()  
164 - .append(config.getNotificationDomain() != null ? config.getNotificationDomain()  
165 - : "br.gov.frameworkdemoiselle.jmx").append(":name=").append(config.getNotificationMBeanName());  
166 - ObjectInstance instance = mBeanManager.findMBeanInstance(notificationMBeanName.toString());  
167 -  
168 - // StringBuffer vazio  
169 - StringBuffer notificationBuffer = new StringBuffer();  
170 -  
171 - // Este notification listener será chamado quando o Demoiselle enviar a notificação e vai colocar  
172 - // a mensagem enviada em "notificationBuffer"  
173 - NotificationListener listener = new TestNotificationListener(notificationBuffer);  
174 -  
175 - try {  
176 - // Anexa o listener no servidor MBean  
177 - server.addNotificationListener(instance.getObjectName(), listener, null, null);  
178 - } catch (InstanceNotFoundException e) {  
179 - Assert.fail();  
180 - }  
181 -  
182 - // Manda a notificação pelo Demoiselle  
183 - AttributeChangeNotification notification = new AttributeChangeNotification("Attribute Changed", "name",  
184 - String.class, "Demoiselle 1", "Demoiselle 2");  
185 - notificationManager.sendNotification(notification);  
186 -  
187 - // Se o componente funcionou, o Demoiselle propagou a notificação para o servidor MBean e o listener preencheu  
188 - // o StringBuffer com nossa mensagem.  
189 - Assert.assertEquals("Attribute Changed: name = Demoiselle 2", notificationBuffer.toString());  
190 -  
191 - }  
192 -  
193 - /**  
194 - * Implementação do {@link NotificationListener} do Java que vai por qualquer notificação recebida em um  
195 - * StringBuffer.  
196 - *  
197 - * @author serpro  
198 - */  
199 - class TestNotificationListener implements NotificationListener {  
200 -  
201 - StringBuffer message;  
202 -  
203 - public TestNotificationListener(StringBuffer testMessage) {  
204 - this.message = testMessage;  
205 - }  
206 -  
207 - @Override  
208 - public void handleNotification(javax.management.Notification notification, Object handback) {  
209 - if (message != null) {  
210 - message.append(notification.getMessage());  
211 -  
212 - if (notification instanceof javax.management.AttributeChangeNotification) {  
213 - message.append(": ")  
214 - .append(((javax.management.AttributeChangeNotification) notification).getAttributeName())  
215 - .append(" = ")  
216 - .append(((javax.management.AttributeChangeNotification) notification).getNewValue());  
217 - }  
218 - }  
219 - }  
220 -  
221 - }  
222 -  
223 -}  
impl/extension/jmx/src/test/java/management/tests/notification/NotificationBroadcasterTest.java 0 → 100644
@@ -0,0 +1,214 @@ @@ -0,0 +1,214 @@
  1 +/*
  2 + * Demoiselle Framework
  3 + * Copyright (C) 2010 SERPRO
  4 + * ----------------------------------------------------------------------------
  5 + * This file is part of Demoiselle Framework.
  6 + *
  7 + * Demoiselle Framework is free software; you can redistribute it and/or
  8 + * modify it under the terms of the GNU Lesser General Public License version 3
  9 + * as published by the Free Software Foundation.
  10 + *
  11 + * This program is distributed in the hope that it will be useful,
  12 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14 + * GNU General Public License for more details.
  15 + *
  16 + * You should have received a copy of the GNU Lesser General Public License version 3
  17 + * along with this program; if not, see <http://www.gnu.org/licenses/>
  18 + * or write to the Free Software Foundation, Inc., 51 Franklin Street,
  19 + * Fifth Floor, Boston, MA 02110-1301, USA.
  20 + * ----------------------------------------------------------------------------
  21 + * Este arquivo é parte do Framework Demoiselle.
  22 + *
  23 + * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou
  24 + * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação
  25 + * do Software Livre (FSF).
  26 + *
  27 + * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA
  28 + * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou
  29 + * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português
  30 + * para maiores detalhes.
  31 + *
  32 + * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título
  33 + * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>
  34 + * ou escreva para a Fundação do Software Livre (FSF) Inc.,
  35 + * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.
  36 + */
  37 +package management.tests.notification;
  38 +
  39 +import java.lang.management.ManagementFactory;
  40 +
  41 +import javax.management.InstanceNotFoundException;
  42 +import javax.management.MBeanServer;
  43 +import javax.management.MalformedObjectNameException;
  44 +import javax.management.NotificationListener;
  45 +import javax.management.ObjectInstance;
  46 +import javax.management.ObjectName;
  47 +
  48 +import junit.framework.Assert;
  49 +import management.domain.ManagedTestClass;
  50 +import management.tests.Tests;
  51 +
  52 +import org.jboss.arquillian.container.test.api.Deployment;
  53 +import org.jboss.arquillian.junit.Arquillian;
  54 +import org.jboss.shrinkwrap.api.spec.JavaArchive;
  55 +import org.junit.AfterClass;
  56 +import org.junit.BeforeClass;
  57 +import org.junit.Test;
  58 +import org.junit.runner.RunWith;
  59 +
  60 +import br.gov.frameworkdemoiselle.jmx.configuration.JMXConfig;
  61 +import br.gov.frameworkdemoiselle.jmx.internal.MBeanManager;
  62 +import br.gov.frameworkdemoiselle.lifecycle.AfterShutdownProccess;
  63 +import br.gov.frameworkdemoiselle.lifecycle.AfterStartupProccess;
  64 +import br.gov.frameworkdemoiselle.management.AttributeChangeNotification;
  65 +import br.gov.frameworkdemoiselle.management.GenericNotification;
  66 +import br.gov.frameworkdemoiselle.management.NotificationManager;
  67 +import br.gov.frameworkdemoiselle.util.Beans;
  68 +
  69 +@RunWith(Arquillian.class)
  70 +public class NotificationBroadcasterTest {
  71 +
  72 + @Deployment
  73 + public static JavaArchive createDeployment() {
  74 + return Tests.createDeployment(NotificationBroadcasterTest.class)
  75 + .addClasses(ManagedTestClass.class);
  76 + }
  77 +
  78 + @BeforeClass
  79 + public static void fireEventStartupProccess() {
  80 + Beans.getBeanManager().fireEvent(new AfterStartupProccess() {
  81 + });
  82 + }
  83 +
  84 + @AfterClass
  85 + public static void fireEventShutdownProccess() {
  86 + Beans.getBeanManager().fireEvent(new AfterShutdownProccess() {
  87 + });
  88 + }
  89 +
  90 + /**
  91 + * Testa o envio de uma mensagem para clientes conectados
  92 + */
  93 + @Test
  94 + public void sendMessage() {
  95 + JMXConfig config = Beans.getReference(JMXConfig.class);
  96 +
  97 + // Este será o lado cliente. Este manager é usado para enviar notificações a partir do código da aplicação
  98 + NotificationManager notificationManager = Beans.getReference(NotificationManager.class);
  99 +
  100 + // Obtém o servidor MBean onde anexaremos um listener para a notificação
  101 + MBeanServer server = ManagementFactory.getPlatformMBeanServer();
  102 +
  103 + // Aqui obtemos o MBean de notificações já registrado pelo bootstrap
  104 + StringBuffer notificationMBeanName = new StringBuffer()
  105 + .append(config.getNotificationDomain() != null ? config.getNotificationDomain()
  106 + : "br.gov.frameworkdemoiselle.jmx").append(":name=").append(config.getNotificationMBeanName());
  107 +
  108 + ObjectName name = null;
  109 + try {
  110 + name = new ObjectName(notificationMBeanName.toString());
  111 + } catch (MalformedObjectNameException e) {
  112 + Assert.fail();
  113 + }
  114 +
  115 + // StringBuffer vazio
  116 + StringBuffer notificationBuffer = new StringBuffer();
  117 +
  118 + // Este notification listener será chamado quando o Demoiselle enviar a notificação e vai colocar
  119 + // a mensagem enviada em "notificationBuffer"
  120 + NotificationListener listener = new TestNotificationListener(notificationBuffer);
  121 +
  122 + try {
  123 + // Anexa o listener no servidor MBean
  124 + server.addNotificationListener(name, listener, null, null);
  125 + } catch (InstanceNotFoundException e) {
  126 + Assert.fail();
  127 + }
  128 +
  129 + // Manda a notificação pelo Demoiselle
  130 + GenericNotification n = new GenericNotification("Notification test successful");
  131 + notificationManager.sendNotification(n);
  132 +
  133 + // Se o componente funcionou, o Demoiselle propagou a notificação para o servidor MBean e o listener preencheu
  134 + // o StringBuffer com nossa mensagem.
  135 + Assert.assertEquals("Notification test successful", notificationBuffer.toString());
  136 +
  137 + }
  138 +
  139 + /**
  140 + * Testa o envio de uma mensagem de mudança de atributo para clientes conectados
  141 + */
  142 + @Test
  143 + public void sendAttributeChangedMessage() {
  144 +
  145 + JMXConfig config = Beans.getReference(JMXConfig.class);
  146 +
  147 + // Obtém o servidor MBean onde anexaremos um listener para a notificação
  148 + MBeanServer server = ManagementFactory.getPlatformMBeanServer();
  149 +
  150 + NotificationManager notificationManager = Beans.getReference(NotificationManager.class);
  151 + MBeanManager mBeanManager = Beans.getReference(MBeanManager.class);
  152 +
  153 + // Aqui obtemos o MBean de notificações já registrado pelo bootstrap
  154 + StringBuffer notificationMBeanName = new StringBuffer()
  155 + .append(config.getNotificationDomain() != null ? config.getNotificationDomain()
  156 + : "br.gov.frameworkdemoiselle.jmx").append(":name=").append(config.getNotificationMBeanName());
  157 + ObjectInstance instance = mBeanManager.findMBeanInstance(notificationMBeanName.toString());
  158 +
  159 + // StringBuffer vazio
  160 + StringBuffer notificationBuffer = new StringBuffer();
  161 +
  162 + // Este notification listener será chamado quando o Demoiselle enviar a notificação e vai colocar
  163 + // a mensagem enviada em "notificationBuffer"
  164 + NotificationListener listener = new TestNotificationListener(notificationBuffer);
  165 +
  166 + try {
  167 + // Anexa o listener no servidor MBean
  168 + server.addNotificationListener(instance.getObjectName(), listener, null, null);
  169 + } catch (InstanceNotFoundException e) {
  170 + Assert.fail();
  171 + }
  172 +
  173 + // Manda a notificação pelo Demoiselle
  174 + AttributeChangeNotification notification = new AttributeChangeNotification("Attribute Changed", "name",
  175 + String.class, "Demoiselle 1", "Demoiselle 2");
  176 + notificationManager.sendNotification(notification);
  177 +
  178 + // Se o componente funcionou, o Demoiselle propagou a notificação para o servidor MBean e o listener preencheu
  179 + // o StringBuffer com nossa mensagem.
  180 + Assert.assertEquals("Attribute Changed: name = Demoiselle 2", notificationBuffer.toString());
  181 +
  182 + }
  183 +
  184 + /**
  185 + * Implementação do {@link NotificationListener} do Java que vai por qualquer notificação recebida em um
  186 + * StringBuffer.
  187 + *
  188 + * @author serpro
  189 + */
  190 + class TestNotificationListener implements NotificationListener {
  191 +
  192 + StringBuffer message;
  193 +
  194 + public TestNotificationListener(StringBuffer testMessage) {
  195 + this.message = testMessage;
  196 + }
  197 +
  198 + @Override
  199 + public void handleNotification(javax.management.Notification notification, Object handback) {
  200 + if (message != null) {
  201 + message.append(notification.getMessage());
  202 +
  203 + if (notification instanceof javax.management.AttributeChangeNotification) {
  204 + message.append(": ")
  205 + .append(((javax.management.AttributeChangeNotification) notification).getAttributeName())
  206 + .append(" = ")
  207 + .append(((javax.management.AttributeChangeNotification) notification).getNewValue());
  208 + }
  209 + }
  210 + }
  211 +
  212 + }
  213 +
  214 +}
impl/extension/jmx/src/test/resources/META-INF/beans.xml
@@ -1,11 +0,0 @@ @@ -1,11 +0,0 @@
1 -<beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
2 - xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">  
3 -  
4 - <interceptors>  
5 - <class>br.gov.frameworkdemoiselle.transaction.TransactionalInterceptor</class>  
6 - <class>br.gov.frameworkdemoiselle.security.RequiredPermissionInterceptor</class>  
7 - <class>br.gov.frameworkdemoiselle.security.RequiredRoleInterceptor</class>  
8 - <class>br.gov.frameworkdemoiselle.exception.ExceptionHandlerInterceptor</class>  
9 - </interceptors>  
10 -  
11 -</beans>  
impl/extension/jmx/src/test/resources/beans.xml 0 → 100644
@@ -0,0 +1,11 @@ @@ -0,0 +1,11 @@
  1 +<beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2 + xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
  3 +
  4 + <interceptors>
  5 + <class>br.gov.frameworkdemoiselle.transaction.TransactionalInterceptor</class>
  6 + <class>br.gov.frameworkdemoiselle.security.RequiredPermissionInterceptor</class>
  7 + <class>br.gov.frameworkdemoiselle.security.RequiredRoleInterceptor</class>
  8 + <class>br.gov.frameworkdemoiselle.exception.ExceptionHandlerInterceptor</class>
  9 + </interceptors>
  10 +
  11 +</beans>
impl/extension/jmx/src/test/resources/javax.enterprise.inject.spi.Extension 0 → 100644
@@ -0,0 +1,5 @@ @@ -0,0 +1,5 @@
  1 +br.gov.frameworkdemoiselle.internal.bootstrap.CoreBootstrap
  2 +br.gov.frameworkdemoiselle.internal.bootstrap.ConfigurationBootstrap
  3 +br.gov.frameworkdemoiselle.internal.bootstrap.ManagementBootstrap
  4 +br.gov.frameworkdemoiselle.internal.bootstrap.StartupBootstrap
  5 +br.gov.frameworkdemoiselle.internal.bootstrap.ShutdownBootstrap
impl/extension/jpa/pom.xml
@@ -170,6 +170,41 @@ @@ -170,6 +170,41 @@
170 <version>2.16</version> 170 <version>2.16</version>
171 </plugin> 171 </plugin>
172 </plugins> 172 </plugins>
  173 + <pluginManagement>
  174 + <plugins>
  175 + <!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
  176 + <plugin>
  177 + <groupId>org.eclipse.m2e</groupId>
  178 + <artifactId>lifecycle-mapping</artifactId>
  179 + <version>1.0.0</version>
  180 + <configuration>
  181 + <lifecycleMappingMetadata>
  182 + <pluginExecutions>
  183 + <pluginExecution>
  184 + <pluginExecutionFilter>
  185 + <groupId>
  186 + org.apache.maven.plugins
  187 + </groupId>
  188 + <artifactId>
  189 + maven-dependency-plugin
  190 + </artifactId>
  191 + <versionRange>
  192 + [2.1,)
  193 + </versionRange>
  194 + <goals>
  195 + <goal>unpack</goal>
  196 + </goals>
  197 + </pluginExecutionFilter>
  198 + <action>
  199 + <ignore></ignore>
  200 + </action>
  201 + </pluginExecution>
  202 + </pluginExecutions>
  203 + </lifecycleMappingMetadata>
  204 + </configuration>
  205 + </plugin>
  206 + </plugins>
  207 + </pluginManagement>
173 </build> 208 </build>
174 209
175 <dependencies> 210 <dependencies>
impl/extension/jpa/src/test/resources/arquillian.xml
@@ -93,4 +93,4 @@ @@ -93,4 +93,4 @@
93 </container> 93 </container>
94 --> 94 -->
95 95
96 -</arquillian>  
97 \ No newline at end of file 96 \ No newline at end of file
  97 +</arquillian>