Commit abb5cd6e6ae9e23134be36fc51b2e9b4ac31677f
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> |
@@ -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> |