You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by ad...@apache.org on 2016/01/18 11:18:16 UTC
svn commit: r1725214 [2/2] - in /james/project/trunk/server: ./
container/cassandra-guice/src/main/java/org/apache/james/jmap/
container/cassandra-guice/src/main/java/org/apache/james/modules/protocols/
container/cassandra-guice/src/test/java/org/apach...
Added: james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/BypassAuthOnRequestMethodTest.java
URL: http://svn.apache.org/viewvc/james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/BypassAuthOnRequestMethodTest.java?rev=1725214&view=auto
==============================================================================
--- james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/BypassAuthOnRequestMethodTest.java (added)
+++ james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/BypassAuthOnRequestMethodTest.java Mon Jan 18 10:18:15 2016
@@ -0,0 +1,107 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you 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.apache.james.jmap;
+
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import javax.servlet.FilterChain;
+import javax.servlet.http.HttpServletRequest;
+
+import org.junit.Before;
+import org.junit.Test;
+
+public class BypassAuthOnRequestMethodTest {
+
+ private HttpServletRequest mockedRequest;
+ private AuthenticationFilter nestedFilter;
+ private BypassAuthOnRequestMethod sut;
+ private FilterChain filterChain;
+
+ @Before
+ public void setup() throws Exception {
+ mockedRequest = mock(HttpServletRequest.class);
+ nestedFilter = mock(AuthenticationFilter.class);
+ sut = BypassAuthOnRequestMethod.bypass(nestedFilter).on("POST").and("OPTIONS").only();
+ filterChain = mock(FilterChain.class);
+ }
+
+ @Test
+ public void filterShouldCallNestedFilterOnGet() throws Exception {
+ when(mockedRequest.getMethod())
+ .thenReturn("GET");
+
+ sut.doFilter(mockedRequest, null, filterChain);
+
+ verify(nestedFilter).doFilter(mockedRequest, null, filterChain);
+ }
+
+ @Test
+ public void filterShouldNotCallDirectlyChainOnGet() throws Exception {
+ when(mockedRequest.getMethod())
+ .thenReturn("GET");
+
+ sut.doFilter(mockedRequest, null, filterChain);
+
+ verify(filterChain, never()).doFilter(mockedRequest, null);
+ }
+
+ @Test
+ public void filterShouldNotCallNestedFilterOnPost() throws Exception {
+ when(mockedRequest.getMethod())
+ .thenReturn("POST");
+
+ sut.doFilter(mockedRequest, null, filterChain);
+
+ verify(nestedFilter, never()).doFilter(mockedRequest, null, filterChain);
+ }
+
+ @Test
+ public void filterShouldCallChainOnPost() throws Exception {
+ when(mockedRequest.getMethod())
+ .thenReturn("POST");
+
+ sut.doFilter(mockedRequest, null, filterChain);
+
+ verify(filterChain).doFilter(mockedRequest, null);
+ }
+
+ @Test
+ public void filterShouldNotCallNestedFilterOnOptions() throws Exception {
+ when(mockedRequest.getMethod())
+ .thenReturn("OPTIONS");
+
+ sut.doFilter(mockedRequest, null, filterChain);
+
+ verify(nestedFilter, never()).doFilter(mockedRequest, null, filterChain);
+ }
+
+ @Test
+ public void filterShouldCallChainOnOptions() throws Exception {
+ when(mockedRequest.getMethod())
+ .thenReturn("OPTIONS");
+
+ sut.doFilter(mockedRequest, null, filterChain);
+
+ verify(filterChain).doFilter(mockedRequest, null);
+ }
+
+}
Added: james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/JWTAuthenticationStrategyTest.java
URL: http://svn.apache.org/viewvc/james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/JWTAuthenticationStrategyTest.java?rev=1725214&view=auto
==============================================================================
--- james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/JWTAuthenticationStrategyTest.java (added)
+++ james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/JWTAuthenticationStrategyTest.java Mon Jan 18 10:18:15 2016
@@ -0,0 +1,151 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you 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.apache.james.jmap;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.util.stream.Stream;
+
+import org.apache.james.jmap.crypto.JwtTokenVerifier;
+import org.apache.james.jmap.exceptions.MailboxSessionCreationException;
+import org.apache.james.jmap.exceptions.NoValidAuthHeaderException;
+import org.apache.james.mailbox.MailboxManager;
+import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.mailbox.exception.MailboxException;
+import org.junit.Before;
+import org.junit.Test;
+import org.slf4j.Logger;
+
+
+public class JWTAuthenticationStrategyTest {
+
+ private JWTAuthenticationStrategy testee;
+ private MailboxManager mockedMailboxManager;
+ private JwtTokenVerifier stubTokenVerifier;
+
+ @Before
+ public void setup() {
+ mockedMailboxManager = mock(MailboxManager.class);
+
+ stubTokenVerifier = mock(JwtTokenVerifier.class);
+
+ testee = new JWTAuthenticationStrategy(stubTokenVerifier, mockedMailboxManager);
+ }
+
+
+ @Test
+ public void createMailboxSessionShouldThrowWhenAuthHeaderIsEmpty() throws Exception {
+ assertThatThrownBy(() -> testee.createMailboxSession(Stream.empty()))
+ .isExactlyInstanceOf(NoValidAuthHeaderException.class);
+ }
+
+ @Test
+ public void createMailboxSessionShouldReturnEmptyWhenAuthHeaderIsInvalid() throws Exception {
+ assertThatThrownBy(() -> testee.createMailboxSession(Stream.of("bad")))
+ .isExactlyInstanceOf(NoValidAuthHeaderException.class);
+ }
+
+ @Test
+ public void createMailboxSessionShouldThrowWhenMailboxExceptionHasOccurred() throws Exception {
+ String username = "username";
+ String validAuthHeader = "valid";
+ String fakeAuthHeaderWithPrefix = JWTAuthenticationStrategy.AUTHORIZATION_HEADER_PREFIX + validAuthHeader;
+
+ when(stubTokenVerifier.verify(validAuthHeader)).thenReturn(true);
+ when(stubTokenVerifier.extractLogin(validAuthHeader)).thenReturn(username);
+ when(mockedMailboxManager.createSystemSession(eq(username), any(Logger.class)))
+ .thenThrow(new MailboxException());
+
+ assertThatThrownBy(() -> testee.createMailboxSession(Stream.of(fakeAuthHeaderWithPrefix)))
+ .isExactlyInstanceOf(MailboxSessionCreationException.class);
+ }
+
+ @Test
+ public void createMailboxSessionShouldReturnWhenAuthHeadersAreValid() throws Exception {
+ String username = "123456789";
+ String validAuthHeader = "valid";
+ String fakeAuthHeaderWithPrefix = JWTAuthenticationStrategy.AUTHORIZATION_HEADER_PREFIX + validAuthHeader;
+ MailboxSession fakeMailboxSession = mock(MailboxSession.class);
+
+ when(stubTokenVerifier.verify(validAuthHeader)).thenReturn(true);
+ when(stubTokenVerifier.extractLogin(validAuthHeader)).thenReturn(username);
+ when(mockedMailboxManager.createSystemSession(eq(username), any(Logger.class)))
+ .thenReturn(fakeMailboxSession);
+
+ MailboxSession result = testee.createMailboxSession(Stream.of(fakeAuthHeaderWithPrefix));
+ assertThat(result).isEqualTo(fakeMailboxSession);
+ }
+
+ @Test
+ public void checkAuthorizationHeaderShouldReturnFalsewWhenAuthHeaderIsEmpty() {
+ assertThat(testee.checkAuthorizationHeader(Stream.empty())).isFalse();
+ }
+
+ @Test
+ public void checkAuthorizationHeaderShouldReturnFalseWhenAuthHeaderIsInvalid() {
+ String wrongAuthHeader = "invalid";
+ String fakeAuthHeaderWithPrefix = JWTAuthenticationStrategy.AUTHORIZATION_HEADER_PREFIX + wrongAuthHeader;
+
+ when(stubTokenVerifier.verify(wrongAuthHeader)).thenReturn(false);
+
+ assertThat(testee.checkAuthorizationHeader(Stream.of(fakeAuthHeaderWithPrefix))).isFalse();
+ }
+
+ @Test
+ public void checkAuthorizationHeaderShouldReturnFalseWhenAuthHeadersAreInvalid() {
+ String wrongAuthHeader = "invalid";
+ String invalidAuthHeader = "INVALID";
+
+ when(stubTokenVerifier.verify(wrongAuthHeader)).thenReturn(false);
+ when(stubTokenVerifier.verify(invalidAuthHeader)).thenReturn(false);
+
+ Stream<String> authHeadersStream = Stream.of(wrongAuthHeader, invalidAuthHeader)
+ .map(h -> JWTAuthenticationStrategy.AUTHORIZATION_HEADER_PREFIX + h);
+ assertThat(testee.checkAuthorizationHeader(authHeadersStream)).isFalse();
+ }
+
+ @Test
+ public void checkAuthorizationHeaderShouldReturnTrueWhenAuthHeaderIsValid() {
+ String validAuthHeader = "valid";
+ String validAuthHeaderWithPrefix = JWTAuthenticationStrategy.AUTHORIZATION_HEADER_PREFIX + validAuthHeader;
+
+ when(stubTokenVerifier.verify(validAuthHeader)).thenReturn(true);
+
+ assertThat(testee.checkAuthorizationHeader(Stream.of(validAuthHeaderWithPrefix))).isTrue();
+ }
+
+ @Test
+ public void checkAuthorizationHeaderShouldReturnTrueWhenOneAuthHeaderIsValid() {
+ String dummyAuthHeader = "invalid";
+ String validAuthHeader = "correct";
+
+ when(stubTokenVerifier.verify(dummyAuthHeader)).thenReturn(false);
+ when(stubTokenVerifier.verify(validAuthHeader)).thenReturn(true);
+
+ Stream<String> authHeadersStream = Stream.of(dummyAuthHeader, validAuthHeader)
+ .map(h -> JWTAuthenticationStrategy.AUTHORIZATION_HEADER_PREFIX + h);
+ assertThat(testee.checkAuthorizationHeader(authHeadersStream)).isTrue();
+ }
+
+}
\ No newline at end of file
Added: james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/crypto/JwtTokenVerifierTest.java
URL: http://svn.apache.org/viewvc/james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/crypto/JwtTokenVerifierTest.java?rev=1725214&view=auto
==============================================================================
--- james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/crypto/JwtTokenVerifierTest.java (added)
+++ james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/crypto/JwtTokenVerifierTest.java Mon Jan 18 10:18:15 2016
@@ -0,0 +1,96 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you 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.apache.james.jmap.crypto;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+
+import java.security.Security;
+import java.util.Optional;
+
+import org.apache.james.jmap.JMAPConfiguration;
+import org.bouncycastle.jce.provider.BouncyCastleProvider;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import io.jsonwebtoken.SignatureException;
+
+public class JwtTokenVerifierTest {
+
+ private static final String PUBLIC_PEM_KEY = "-----BEGIN PUBLIC KEY-----\n" +
+ "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtlChO/nlVP27MpdkG0Bh\n" +
+ "16XrMRf6M4NeyGa7j5+1UKm42IKUf3lM28oe82MqIIRyvskPc11NuzSor8HmvH8H\n" +
+ "lhDs5DyJtx2qp35AT0zCqfwlaDnlDc/QDlZv1CoRZGpQk1Inyh6SbZwYpxxwh0fi\n" +
+ "+d/4RpE3LBVo8wgOaXPylOlHxsDizfkL8QwXItyakBfMO6jWQRrj7/9WDhGf4Hi+\n" +
+ "GQur1tPGZDl9mvCoRHjFrD5M/yypIPlfMGWFVEvV5jClNMLAQ9bYFuOc7H1fEWw6\n" +
+ "U1LZUUbJW9/CH45YXz82CYqkrfbnQxqRb2iVbVjs/sHopHd1NTiCfUtwvcYJiBVj\n" +
+ "kwIDAQAB\n" +
+ "-----END PUBLIC KEY-----";
+ private static final String VALID_TOKEN = "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIn0.T04BTk" +
+ "LXkJj24coSZkK13RfG25lpvmSl2MJ7N10KpBk9_-95EGYZdog-BDAn3PJzqVw52z-Bwjh4VOj1-j7cURu0cT4jXehhUrlCxS4n7QHZD" +
+ "N_bsEYGu7KzjWTpTsUiHe-rN7izXVFxDGG1TGwlmBCBnPW-EFCf9ylUsJi0r2BKNdaaPRfMIrHptH1zJBkkUziWpBN1RNLjmvlAUf49" +
+ "t1Tbv21ZqYM5Ht2vrhJWczFbuC-TD-8zJkXhjTmA1GVgomIX5dx1cH-dZX1wANNmshUJGHgepWlPU-5VIYxPEhb219RMLJIELMY2qN" +
+ "OR8Q31ydinyqzXvCSzVJOf6T60-w";
+
+ private JwtTokenVerifier sut;
+
+ @BeforeClass
+ public static void init() {
+ Security.addProvider(new BouncyCastleProvider());
+ }
+
+ @Before
+ public void setup() {
+ PublicKeyProvider pubKeyProvider = new PublicKeyProvider(getJWTConfiguration(), new PublicKeyReader());
+ sut = new JwtTokenVerifier(pubKeyProvider);
+ }
+
+ private JMAPConfiguration getJWTConfiguration() {
+
+ return JMAPConfiguration.builder()
+ .keystore(".")
+ .secret(".")
+ .jwtPublicKeyPem(Optional.ofNullable(PUBLIC_PEM_KEY))
+ .build();
+ }
+
+ @Test
+ public void shouldReturnTrueOnValidSignature() {
+
+ assertThat(sut.verify(VALID_TOKEN)).isTrue();
+ }
+
+ @Test
+ public void shouldThrowOnMismatchingSigningKey() {
+ String token = "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIn0.Pd6t82" +
+ "tPL3EZdkeYxw_DV2KimE1U2FvuLHmfR_mimJ5US3JFU4J2Gd94O7rwpSTGN1B9h-_lsTebo4ua4xHsTtmczZ9xa8a_kWKaSkqFjNFa" +
+ "Fp6zcoD6ivCu03SlRqsQzSRHXo6TKbnqOt9D6Y2rNa3C4igSwoS0jUE4BgpXbc0";
+
+ assertThatThrownBy(() -> sut.verify(token))
+ .isInstanceOf(SignatureException.class);
+ }
+
+ @Test
+ public void shouldReturnUserLoginFromValidToken() {
+
+ assertThat(sut.extractLogin(VALID_TOKEN)).isEqualTo("1234567890");
+ }
+
+}
Added: james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/crypto/PublicKeyProviderTest.java
URL: http://svn.apache.org/viewvc/james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/crypto/PublicKeyProviderTest.java?rev=1725214&view=auto
==============================================================================
--- james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/crypto/PublicKeyProviderTest.java (added)
+++ james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/crypto/PublicKeyProviderTest.java Mon Jan 18 10:18:15 2016
@@ -0,0 +1,74 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you 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.apache.james.jmap.crypto;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+
+import java.security.Security;
+import java.security.interfaces.RSAPublicKey;
+import java.util.Optional;
+
+import org.apache.james.jmap.JMAPConfiguration;
+import org.bouncycastle.jce.provider.BouncyCastleProvider;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+public class PublicKeyProviderTest {
+
+ private static final String PUBLIC_PEM_KEY = "-----BEGIN PUBLIC KEY-----\n" +
+ "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtlChO/nlVP27MpdkG0Bh\n" +
+ "16XrMRf6M4NeyGa7j5+1UKm42IKUf3lM28oe82MqIIRyvskPc11NuzSor8HmvH8H\n" +
+ "lhDs5DyJtx2qp35AT0zCqfwlaDnlDc/QDlZv1CoRZGpQk1Inyh6SbZwYpxxwh0fi\n" +
+ "+d/4RpE3LBVo8wgOaXPylOlHxsDizfkL8QwXItyakBfMO6jWQRrj7/9WDhGf4Hi+\n" +
+ "GQur1tPGZDl9mvCoRHjFrD5M/yypIPlfMGWFVEvV5jClNMLAQ9bYFuOc7H1fEWw6\n" +
+ "U1LZUUbJW9/CH45YXz82CYqkrfbnQxqRb2iVbVjs/sHopHd1NTiCfUtwvcYJiBVj\n" +
+ "kwIDAQAB\n" +
+ "-----END PUBLIC KEY-----";
+
+ @BeforeClass
+ public static void init() {
+ Security.addProvider(new BouncyCastleProvider());
+ }
+
+ @Test
+ public void getShouldNotThrowWhenPEMKeyProvided() {
+
+ JMAPConfiguration configWithPEMKey = JMAPConfiguration.builder()
+ .jwtPublicKeyPem(Optional.ofNullable(PUBLIC_PEM_KEY))
+ .keystore(".").secret(".")
+ .build();
+
+ PublicKeyProvider sut = new PublicKeyProvider(configWithPEMKey, new PublicKeyReader());
+
+ assertThat(sut.get()).isInstanceOf(RSAPublicKey.class);
+ }
+
+ @Test
+ public void getShouldThrowWhenPEMKeyNotProvided() {
+ JMAPConfiguration configWithPEMKey = JMAPConfiguration.builder()
+ .jwtPublicKeyPem(Optional.ofNullable(""))
+ .keystore(" ").secret(" ")
+ .build();
+
+ PublicKeyProvider sut = new PublicKeyProvider(configWithPEMKey, new PublicKeyReader());
+
+ assertThatThrownBy(() -> sut.get()).isExactlyInstanceOf(MissingOrInvalidKeyException.class);
+ }
+}
\ No newline at end of file
Added: james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/crypto/PublicKeyReaderTest.java
URL: http://svn.apache.org/viewvc/james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/crypto/PublicKeyReaderTest.java?rev=1725214&view=auto
==============================================================================
--- james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/crypto/PublicKeyReaderTest.java (added)
+++ james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/crypto/PublicKeyReaderTest.java Mon Jan 18 10:18:15 2016
@@ -0,0 +1,62 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you 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.apache.james.jmap.crypto;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import java.security.Security;
+import java.util.Optional;
+
+import org.bouncycastle.jce.provider.BouncyCastleProvider;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+public class PublicKeyReaderTest {
+
+ private static final String PUBLIC_PEM_KEY = "-----BEGIN PUBLIC KEY-----\n" +
+ "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtlChO/nlVP27MpdkG0Bh\n" +
+ "16XrMRf6M4NeyGa7j5+1UKm42IKUf3lM28oe82MqIIRyvskPc11NuzSor8HmvH8H\n" +
+ "lhDs5DyJtx2qp35AT0zCqfwlaDnlDc/QDlZv1CoRZGpQk1Inyh6SbZwYpxxwh0fi\n" +
+ "+d/4RpE3LBVo8wgOaXPylOlHxsDizfkL8QwXItyakBfMO6jWQRrj7/9WDhGf4Hi+\n" +
+ "GQur1tPGZDl9mvCoRHjFrD5M/yypIPlfMGWFVEvV5jClNMLAQ9bYFuOc7H1fEWw6\n" +
+ "U1LZUUbJW9/CH45YXz82CYqkrfbnQxqRb2iVbVjs/sHopHd1NTiCfUtwvcYJiBVj\n" +
+ "kwIDAQAB\n" +
+ "-----END PUBLIC KEY-----";
+
+ @BeforeClass
+ public static void init() {
+ Security.addProvider(new BouncyCastleProvider());
+ }
+
+ @Test
+ public void fromPEMShouldReturnEmptyWhenEmptyProvided() {
+ assertThat(new PublicKeyReader().fromPEM(Optional.empty())).isEmpty();
+ }
+
+ @Test
+ public void fromPEMShouldReturnEmptyWhenInvalidPEMKey() {
+ assertThat(new PublicKeyReader().fromPEM(Optional.of("blabla"))).isEmpty();
+ }
+
+ @Test
+ public void fromPEMShouldReturnRSAPublicKeyWhenValidPEMKey() {
+ assertThat(new PublicKeyReader().fromPEM(Optional.of(PUBLIC_PEM_KEY))).isPresent();
+ }
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org