/* * Copyright 2011 the original author or authors. * * 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.oauth2.common; import com.fasterxml.jackson.core.JsonGenerationException; import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.Before; import org.junit.Test; import org.powermock.core.classloader.annotations.PrepareForTest; import java.io.IOException; import java.util.Date; import java.util.HashSet; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; /** * Tests deserialization of an {@link org.springframework.security.oauth2.common.OAuth2AccessToken} using jackson. * * @author Rob Winch */ @PrepareForTest(OAuth2AccessTokenJackson2Deserializer.class) public class TestOAuth2AccessTokenJackson2Deserializer extends BaseOAuth2AccessTokenJacksonTest { protected ObjectMapper mapper; @Before public void createObjectMapper() { mapper = new ObjectMapper(); } @Test public void readValueNoRefresh() throws JsonGenerationException, JsonMappingException, IOException { accessToken.setRefreshToken(null); accessToken.setScope(null); OAuth2AccessToken actual = mapper.readValue(ACCESS_TOKEN_NOREFRESH, OAuth2AccessToken.class); assertTokenEquals(accessToken,actual); } @Test public void readValueWithRefresh() throws JsonGenerationException, JsonMappingException, IOException { accessToken.setScope(null); OAuth2AccessToken actual = mapper.readValue(ACCESS_TOKEN_NOSCOPE, OAuth2AccessToken.class); assertTokenEquals(accessToken,actual); } @Test public void readValueWithSingleScopes() throws JsonGenerationException, JsonMappingException, IOException { accessToken.getScope().remove(accessToken.getScope().iterator().next()); OAuth2AccessToken actual = mapper.readValue(ACCESS_TOKEN_SINGLESCOPE, OAuth2AccessToken.class); assertTokenEquals(accessToken,actual); } @Test public void readValueWithEmptyStringScope() throws JsonGenerationException, JsonMappingException, IOException { accessToken.setScope(new HashSet<String>()); OAuth2AccessToken actual = mapper.readValue(ACCESS_TOKEN_EMPTYSCOPE, OAuth2AccessToken.class); assertTokenEquals(accessToken, actual); } @Test public void readValueWithMultiScopes() throws Exception { OAuth2AccessToken actual = mapper.readValue(ACCESS_TOKEN_MULTISCOPE, OAuth2AccessToken.class); assertTokenEquals(accessToken,actual); } @Test public void readValueWithMac() throws Exception { accessToken.setTokenType("mac"); String encodedToken = ACCESS_TOKEN_MULTISCOPE.replace("bearer", accessToken.getTokenType()); OAuth2AccessToken actual = mapper.readValue(encodedToken, OAuth2AccessToken.class); assertTokenEquals(accessToken,actual); } @Test public void readValueWithAdditionalInformation() throws Exception { OAuth2AccessToken actual = mapper.readValue(ACCESS_TOKEN_ADDITIONAL_INFO, OAuth2AccessToken.class); accessToken.setAdditionalInformation(additionalInformation); accessToken.setRefreshToken(null); accessToken.setScope(null); accessToken.setExpiration(null); assertTokenEquals(accessToken,actual); } private static void assertTokenEquals(OAuth2AccessToken expected, OAuth2AccessToken actual) { assertEquals(expected.getTokenType(), actual.getTokenType()); assertEquals(expected.getValue(), actual.getValue()); OAuth2RefreshToken expectedRefreshToken = expected.getRefreshToken(); if (expectedRefreshToken == null) { assertNull(actual.getRefreshToken()); } else { assertEquals(expectedRefreshToken.getValue(), actual.getRefreshToken().getValue()); } assertEquals(expected.getScope(), actual.getScope()); Date expectedExpiration = expected.getExpiration(); if (expectedExpiration == null) { assertNull(actual.getExpiration()); } else { assertEquals(expectedExpiration.getTime(), actual.getExpiration().getTime()); } assertEquals(expected.getAdditionalInformation(), actual.getAdditionalInformation()); } }