mirror of
https://github.com/spring-projects/spring-security.git
synced 2025-07-05 10:12:36 +00:00
SEC-1009: removed additional container adapter specific code
This commit is contained in:
parent
09cc58d7ac
commit
e891b334e6
@ -1,131 +0,0 @@
|
|||||||
/* Copyright 2004, 2005, 2006 Acegi Technology Pty Limited
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.springframework.security.adapters;
|
|
||||||
|
|
||||||
import junit.framework.TestCase;
|
|
||||||
|
|
||||||
import org.springframework.security.GrantedAuthority;
|
|
||||||
import org.springframework.security.GrantedAuthorityImpl;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Tests {@link AbstractAdapterAuthenticationToken}.
|
|
||||||
*
|
|
||||||
* @author Ben Alex
|
|
||||||
* @version $Id$
|
|
||||||
*/
|
|
||||||
public class AbstractAdapterAuthenticationTokenTests extends TestCase {
|
|
||||||
//~ Constructors ===================================================================================================
|
|
||||||
|
|
||||||
public AbstractAdapterAuthenticationTokenTests() {
|
|
||||||
super();
|
|
||||||
}
|
|
||||||
|
|
||||||
public AbstractAdapterAuthenticationTokenTests(String arg0) {
|
|
||||||
super(arg0);
|
|
||||||
}
|
|
||||||
|
|
||||||
//~ Methods ========================================================================================================
|
|
||||||
|
|
||||||
public static void main(String[] args) {
|
|
||||||
junit.textui.TestRunner.run(AbstractAdapterAuthenticationTokenTests.class);
|
|
||||||
}
|
|
||||||
|
|
||||||
public final void setUp() throws Exception {
|
|
||||||
super.setUp();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testGetters() throws Exception {
|
|
||||||
MockDecisionManagerImpl token = new MockDecisionManagerImpl("my_password", "Test", "Password",
|
|
||||||
new GrantedAuthority[] {new GrantedAuthorityImpl("ROLE_ONE"), new GrantedAuthorityImpl("ROLE_TWO")});
|
|
||||||
assertEquals("Test", token.getPrincipal());
|
|
||||||
assertEquals("Password", token.getCredentials());
|
|
||||||
assertEquals("my_password".hashCode(), token.getKeyHash());
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testIsUserInRole() throws Exception {
|
|
||||||
MockDecisionManagerImpl token = new MockDecisionManagerImpl("my_password", "Test", "Password",
|
|
||||||
new GrantedAuthority[] {new GrantedAuthorityImpl("ROLE_ONE"), new GrantedAuthorityImpl("ROLE_TWO")});
|
|
||||||
assertTrue(token.isUserInRole("ROLE_ONE"));
|
|
||||||
assertTrue(token.isUserInRole("ROLE_TWO"));
|
|
||||||
assertTrue(!token.isUserInRole(""));
|
|
||||||
assertTrue(!token.isUserInRole("ROLE_ONE "));
|
|
||||||
assertTrue(!token.isUserInRole("role_one"));
|
|
||||||
assertTrue(!token.isUserInRole("ROLE_XXXX"));
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testObjectsEquals() throws Exception {
|
|
||||||
MockDecisionManagerImpl token1 = new MockDecisionManagerImpl("my_password", "Test", "Password",
|
|
||||||
new GrantedAuthority[] {new GrantedAuthorityImpl("ROLE_ONE"), new GrantedAuthorityImpl("ROLE_TWO")});
|
|
||||||
MockDecisionManagerImpl token2 = new MockDecisionManagerImpl("my_password", "Test", "Password",
|
|
||||||
new GrantedAuthority[] {new GrantedAuthorityImpl("ROLE_ONE"), new GrantedAuthorityImpl("ROLE_TWO")});
|
|
||||||
assertEquals(token1, token2);
|
|
||||||
|
|
||||||
MockDecisionManagerImpl token3 = new MockDecisionManagerImpl("my_password", "Test", "Password_Changed",
|
|
||||||
new GrantedAuthority[] {new GrantedAuthorityImpl("ROLE_ONE"), new GrantedAuthorityImpl("ROLE_TWO")});
|
|
||||||
assertTrue(!token1.equals(token3));
|
|
||||||
|
|
||||||
MockDecisionManagerImpl token4 = new MockDecisionManagerImpl("my_password", "Test_Changed", "Password",
|
|
||||||
new GrantedAuthority[] {new GrantedAuthorityImpl("ROLE_ONE"), new GrantedAuthorityImpl("ROLE_TWO")});
|
|
||||||
assertTrue(!token1.equals(token4));
|
|
||||||
|
|
||||||
MockDecisionManagerImpl token5 = new MockDecisionManagerImpl("password_changed", "Test", "Password",
|
|
||||||
new GrantedAuthority[] {new GrantedAuthorityImpl("ROLE_ONE"), new GrantedAuthorityImpl("ROLE_TWO")});
|
|
||||||
assertTrue(!token1.equals(token5));
|
|
||||||
|
|
||||||
MockDecisionManagerImpl token6 = new MockDecisionManagerImpl("my_password", "Test", "Password",
|
|
||||||
new GrantedAuthority[] {
|
|
||||||
new GrantedAuthorityImpl("ROLE_ONE"), new GrantedAuthorityImpl("ROLE_TWO_CHANGED")
|
|
||||||
});
|
|
||||||
assertTrue(!token1.equals(token6));
|
|
||||||
|
|
||||||
MockDecisionManagerImpl token7 = new MockDecisionManagerImpl("my_password", "Test", "Password",
|
|
||||||
new GrantedAuthority[] {new GrantedAuthorityImpl("ROLE_ONE")});
|
|
||||||
assertTrue(!token1.equals(token7));
|
|
||||||
|
|
||||||
assertTrue(!token1.equals(new Integer(100)));
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testSetAuthenticatedAlwaysReturnsTrue()
|
|
||||||
throws Exception {
|
|
||||||
MockDecisionManagerImpl token = new MockDecisionManagerImpl("my_password", "Test", "Password",
|
|
||||||
new GrantedAuthority[] {new GrantedAuthorityImpl("ROLE_ONE"), new GrantedAuthorityImpl("ROLE_TWO")});
|
|
||||||
assertTrue(token.isAuthenticated());
|
|
||||||
token.setAuthenticated(false);
|
|
||||||
assertTrue(token.isAuthenticated());
|
|
||||||
}
|
|
||||||
|
|
||||||
//~ Inner Classes ==================================================================================================
|
|
||||||
|
|
||||||
private class MockDecisionManagerImpl extends AbstractAdapterAuthenticationToken {
|
|
||||||
private String password;
|
|
||||||
private String username;
|
|
||||||
|
|
||||||
public MockDecisionManagerImpl(String key, String username, String password, GrantedAuthority[] authorities) {
|
|
||||||
super(key, authorities);
|
|
||||||
this.username = username;
|
|
||||||
this.password = password;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Object getCredentials() {
|
|
||||||
return this.password;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Object getPrincipal() {
|
|
||||||
return this.username;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,133 +0,0 @@
|
|||||||
/* Copyright 2004, 2005, 2006 Acegi Technology Pty Limited
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.springframework.security.adapters;
|
|
||||||
|
|
||||||
import junit.framework.TestCase;
|
|
||||||
|
|
||||||
import org.springframework.security.Authentication;
|
|
||||||
import org.springframework.security.BadCredentialsException;
|
|
||||||
import org.springframework.security.GrantedAuthority;
|
|
||||||
import org.springframework.security.GrantedAuthorityImpl;
|
|
||||||
|
|
||||||
import org.springframework.security.providers.UsernamePasswordAuthenticationToken;
|
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Tests {@link AuthByAdapterProvider}
|
|
||||||
*
|
|
||||||
* @author Ben Alex
|
|
||||||
* @version $Id$
|
|
||||||
*/
|
|
||||||
public class AuthByAdapterTests extends TestCase {
|
|
||||||
//~ Constructors ===================================================================================================
|
|
||||||
|
|
||||||
public AuthByAdapterTests() {
|
|
||||||
super();
|
|
||||||
}
|
|
||||||
|
|
||||||
public AuthByAdapterTests(String arg0) {
|
|
||||||
super(arg0);
|
|
||||||
}
|
|
||||||
|
|
||||||
//~ Methods ========================================================================================================
|
|
||||||
|
|
||||||
public static void main(String[] args) {
|
|
||||||
junit.textui.TestRunner.run(AuthByAdapterTests.class);
|
|
||||||
}
|
|
||||||
|
|
||||||
public final void setUp() throws Exception {
|
|
||||||
super.setUp();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testAuthByAdapterProviderCorrectAuthenticationOperation()
|
|
||||||
throws Exception {
|
|
||||||
AuthByAdapterProvider provider = new AuthByAdapterProvider();
|
|
||||||
provider.setKey("my_password");
|
|
||||||
|
|
||||||
PrincipalSpringSecurityUserToken token = new PrincipalSpringSecurityUserToken("my_password", "Test", "Password",
|
|
||||||
new GrantedAuthority[] {new GrantedAuthorityImpl("ROLE_ONE"), new GrantedAuthorityImpl("ROLE_TWO")},
|
|
||||||
null);
|
|
||||||
assertTrue(provider.supports(token.getClass()));
|
|
||||||
|
|
||||||
Authentication response = provider.authenticate(token);
|
|
||||||
assertTrue(true);
|
|
||||||
|
|
||||||
assertEquals(token.getCredentials(), response.getCredentials());
|
|
||||||
assertEquals(token.getPrincipal(), response.getPrincipal());
|
|
||||||
assertTrue(Arrays.equals(token.getAuthorities(), response.getAuthorities()));
|
|
||||||
|
|
||||||
if (!response.getClass().equals(token.getClass())) {
|
|
||||||
fail("Should have returned same type of object it was given");
|
|
||||||
}
|
|
||||||
|
|
||||||
PrincipalSpringSecurityUserToken castResponse = (PrincipalSpringSecurityUserToken) response;
|
|
||||||
assertEquals(token.getName(), castResponse.getName());
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testAuthByAdapterProviderNonAuthenticationMethods()
|
|
||||||
throws Exception {
|
|
||||||
AuthByAdapterProvider provider = new AuthByAdapterProvider();
|
|
||||||
|
|
||||||
try {
|
|
||||||
provider.afterPropertiesSet();
|
|
||||||
fail("Should have thrown IllegalArgumentException as key not set");
|
|
||||||
} catch (IllegalArgumentException expected) {
|
|
||||||
assertTrue(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
provider.setKey("my_password");
|
|
||||||
provider.afterPropertiesSet();
|
|
||||||
assertTrue(true);
|
|
||||||
|
|
||||||
assertEquals("my_password", provider.getKey());
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testAuthByAdapterProviderOnlyAcceptsAuthByAdapterImplementations()
|
|
||||||
throws Exception {
|
|
||||||
AuthByAdapterProvider provider = new AuthByAdapterProvider();
|
|
||||||
provider.setKey("my_password");
|
|
||||||
|
|
||||||
// Should fail as UsernamePassword is not interface of AuthByAdapter
|
|
||||||
UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken("Test", "Password");
|
|
||||||
|
|
||||||
assertTrue(!provider.supports(token.getClass()));
|
|
||||||
|
|
||||||
try {
|
|
||||||
provider.authenticate(token);
|
|
||||||
fail("Should have thrown ClassCastException (supports() false response was ignored)");
|
|
||||||
} catch (ClassCastException expected) {
|
|
||||||
assertTrue(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testAuthByAdapterProviderRequiresCorrectKey()
|
|
||||||
throws Exception {
|
|
||||||
AuthByAdapterProvider provider = new AuthByAdapterProvider();
|
|
||||||
provider.setKey("my_password");
|
|
||||||
|
|
||||||
// Should fail as PrincipalSpringSecurityUserToken has different key
|
|
||||||
PrincipalSpringSecurityUserToken token = new PrincipalSpringSecurityUserToken("wrong_password", "Test", "Password", null, null);
|
|
||||||
|
|
||||||
try {
|
|
||||||
provider.authenticate(token);
|
|
||||||
fail("Should have thrown BadCredentialsException");
|
|
||||||
} catch (BadCredentialsException expected) {
|
|
||||||
assertTrue(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,104 +0,0 @@
|
|||||||
/* Copyright 2004, 2005, 2006 Acegi Technology Pty Limited
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.springframework.security.adapters;
|
|
||||||
|
|
||||||
import junit.framework.TestCase;
|
|
||||||
|
|
||||||
import org.springframework.security.GrantedAuthority;
|
|
||||||
import org.springframework.security.GrantedAuthorityImpl;
|
|
||||||
|
|
||||||
import org.springframework.security.context.SecurityContextHolder;
|
|
||||||
|
|
||||||
import org.springframework.security.util.MockFilterChain;
|
|
||||||
|
|
||||||
import org.springframework.mock.web.MockHttpServletRequest;
|
|
||||||
import org.springframework.mock.web.MockHttpServletResponse;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Tests {@link HttpRequestIntegrationFilter}.
|
|
||||||
*
|
|
||||||
* @author Ben Alex
|
|
||||||
* @version $Id$
|
|
||||||
*/
|
|
||||||
public class HttpRequestIntegrationFilterTests extends TestCase {
|
|
||||||
//~ Constructors ===================================================================================================
|
|
||||||
|
|
||||||
public HttpRequestIntegrationFilterTests() {
|
|
||||||
}
|
|
||||||
|
|
||||||
public HttpRequestIntegrationFilterTests(String arg0) {
|
|
||||||
super(arg0);
|
|
||||||
}
|
|
||||||
|
|
||||||
//~ Methods ========================================================================================================
|
|
||||||
|
|
||||||
protected void setUp() throws Exception {
|
|
||||||
super.setUp();
|
|
||||||
SecurityContextHolder.clearContext();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void tearDown() throws Exception {
|
|
||||||
super.tearDown();
|
|
||||||
SecurityContextHolder.clearContext();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testCorrectOperation() throws Exception {
|
|
||||||
HttpRequestIntegrationFilter filter = new HttpRequestIntegrationFilter();
|
|
||||||
PrincipalSpringSecurityUserToken principal = new PrincipalSpringSecurityUserToken("key", "someone", "password",
|
|
||||||
new GrantedAuthority[] {new GrantedAuthorityImpl("SOME_ROLE")}, null);
|
|
||||||
|
|
||||||
MockHttpServletRequest request = new MockHttpServletRequest();
|
|
||||||
request.setUserPrincipal(principal);
|
|
||||||
|
|
||||||
MockHttpServletResponse response = new MockHttpServletResponse();
|
|
||||||
MockFilterChain chain = new MockFilterChain(true);
|
|
||||||
|
|
||||||
filter.doFilter(request, response, chain);
|
|
||||||
|
|
||||||
if (!(SecurityContextHolder.getContext().getAuthentication() instanceof PrincipalSpringSecurityUserToken)) {
|
|
||||||
System.out.println(SecurityContextHolder.getContext().getAuthentication());
|
|
||||||
fail("Should have returned PrincipalSpringSecurityUserToken");
|
|
||||||
}
|
|
||||||
|
|
||||||
PrincipalSpringSecurityUserToken castResult = (PrincipalSpringSecurityUserToken) SecurityContextHolder.getContext()
|
|
||||||
.getAuthentication();
|
|
||||||
assertEquals(principal, castResult);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testHandlesIfHttpRequestIsNullForSomeReason()
|
|
||||||
throws Exception {
|
|
||||||
HttpRequestIntegrationFilter filter = new HttpRequestIntegrationFilter();
|
|
||||||
|
|
||||||
try {
|
|
||||||
filter.doFilter(null, null, null);
|
|
||||||
fail("Should have thrown IllegalArgumentException");
|
|
||||||
} catch (IllegalArgumentException expected) {
|
|
||||||
assertTrue(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testHandlesIfThereIsNoPrincipal() throws Exception {
|
|
||||||
HttpRequestIntegrationFilter filter = new HttpRequestIntegrationFilter();
|
|
||||||
MockHttpServletRequest request = new MockHttpServletRequest();
|
|
||||||
MockHttpServletResponse response = new MockHttpServletResponse();
|
|
||||||
MockFilterChain chain = new MockFilterChain(true);
|
|
||||||
|
|
||||||
assertNull(SecurityContextHolder.getContext().getAuthentication());
|
|
||||||
filter.doFilter(request, response, chain);
|
|
||||||
assertNull(SecurityContextHolder.getContext().getAuthentication());
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,33 +0,0 @@
|
|||||||
/* Copyright 2004, 2005, 2006 Acegi Technology Pty Limited
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.springframework.security.adapters;
|
|
||||||
|
|
||||||
import java.security.Principal;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Mocks a <code>Principal</code>.
|
|
||||||
*
|
|
||||||
* @author Ben Alex
|
|
||||||
* @version $Id$
|
|
||||||
*/
|
|
||||||
public class MockPrincipal implements Principal {
|
|
||||||
//~ Methods ========================================================================================================
|
|
||||||
|
|
||||||
public String getName() {
|
|
||||||
return "MockPrincipal";
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,62 +0,0 @@
|
|||||||
/* Copyright 2004, 2005, 2006 Acegi Technology Pty Limited
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.springframework.security.adapters;
|
|
||||||
|
|
||||||
import junit.framework.TestCase;
|
|
||||||
|
|
||||||
import org.springframework.security.GrantedAuthority;
|
|
||||||
import org.springframework.security.GrantedAuthorityImpl;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Tests {@link PrincipalSpringSecurityUserToken}.
|
|
||||||
*
|
|
||||||
* @author Ben Alex
|
|
||||||
* @version $Id$
|
|
||||||
*/
|
|
||||||
public class PrincipalSpringSecurityUserTokenTests extends TestCase {
|
|
||||||
//~ Constructors ===================================================================================================
|
|
||||||
|
|
||||||
public PrincipalSpringSecurityUserTokenTests() {
|
|
||||||
}
|
|
||||||
|
|
||||||
public PrincipalSpringSecurityUserTokenTests(String arg0) {
|
|
||||||
super(arg0);
|
|
||||||
}
|
|
||||||
|
|
||||||
//~ Methods ========================================================================================================
|
|
||||||
|
|
||||||
public void testGetters() throws Exception {
|
|
||||||
PrincipalSpringSecurityUserToken token = new PrincipalSpringSecurityUserToken("my_password", "Test", "Password",
|
|
||||||
new GrantedAuthority[] {new GrantedAuthorityImpl("ROLE_ONE"), new GrantedAuthorityImpl("ROLE_TWO")},
|
|
||||||
null);
|
|
||||||
assertEquals("Test", token.getPrincipal());
|
|
||||||
assertEquals("Password", token.getCredentials());
|
|
||||||
assertEquals("my_password".hashCode(), token.getKeyHash());
|
|
||||||
assertEquals("Test", token.getName());
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testNoArgConstructorDoesntExist() {
|
|
||||||
Class clazz = PrincipalSpringSecurityUserToken.class;
|
|
||||||
|
|
||||||
try {
|
|
||||||
clazz.getDeclaredConstructor((Class[]) null);
|
|
||||||
fail("Should have thrown NoSuchMethodException");
|
|
||||||
} catch (NoSuchMethodException expected) {
|
|
||||||
assertTrue(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
x
Reference in New Issue
Block a user