VersionRouterTest.java revision f960939937129342299f260d606817b22da8d035
e9458b1a7a19a63aa4c179f9ab20f4d50681c168Jens Elkner * The contents of this file are subject to the terms of the Common Development and
f33f8ec33a87a0eaee746cb7355054f2c0469579Ewaryst Schulz * Distribution License (the License). You may not use this file except in compliance with the
f33f8ec33a87a0eaee746cb7355054f2c0469579Ewaryst Schulz * You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the
f33f8ec33a87a0eaee746cb7355054f2c0469579Ewaryst Schulz * specific language governing permission and limitations under the License.
f33f8ec33a87a0eaee746cb7355054f2c0469579Ewaryst Schulz * When distributing Covered Software, include this CDDL Header Notice in each file and include
f33f8ec33a87a0eaee746cb7355054f2c0469579Ewaryst Schulz * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
f33f8ec33a87a0eaee746cb7355054f2c0469579Ewaryst Schulz * Header, with the fields enclosed by brackets [] replaced by your own identifying
f33f8ec33a87a0eaee746cb7355054f2c0469579Ewaryst Schulz * information: "Portions copyright [year] [name of copyright owner]".
f33f8ec33a87a0eaee746cb7355054f2c0469579Ewaryst Schulz * Copyright 2014 ForgeRock AS.
f33f8ec33a87a0eaee746cb7355054f2c0469579Ewaryst Schulzimport org.forgerock.json.resource.VersionSelector;
f33f8ec33a87a0eaee746cb7355054f2c0469579Ewaryst Schulzimport static org.mockito.Mockito.verifyZeroInteractions;
f33f8ec33a87a0eaee746cb7355054f2c0469579Ewaryst Schulzimport static org.forgerock.openam.rest.service.VersionRouter.HEADER_X_VERSION_API;
f33f8ec33a87a0eaee746cb7355054f2c0469579Ewaryst Schulz public void setUpClass() {
f33f8ec33a87a0eaee746cb7355054f2c0469579Ewaryst Schulz public void setUp() {
f33f8ec33a87a0eaee746cb7355054f2c0469579Ewaryst Schulz router = new VersionRouter(new VersionSelector()) {
f33f8ec33a87a0eaee746cb7355054f2c0469579Ewaryst Schulz HttpServletRequest getHttpRequest(Request request) {
f33f8ec33a87a0eaee746cb7355054f2c0469579Ewaryst Schulz httpRequest = mock(HttpServletRequest.class);
f33f8ec33a87a0eaee746cb7355054f2c0469579Ewaryst Schulz return new Object[][]{
dde363c92873e122a139e2db23862dfd7d265b73Ewaryst Schulz public void shouldHandleVersionRoute(String requestedVersion, boolean expectedException, Restlet handler) {
dde363c92873e122a139e2db23862dfd7d265b73Ewaryst Schulz given(httpRequest.getHeader(HEADER_X_VERSION_API)).willReturn(requestedVersion);
dde363c92873e122a139e2db23862dfd7d265b73Ewaryst Schulz Reference resourceRef = mock(Reference.class);
dde363c92873e122a139e2db23862dfd7d265b73Ewaryst Schulz given(request.getResourceRef()).willReturn(resourceRef);
dde363c92873e122a139e2db23862dfd7d265b73Ewaryst Schulz verify(response).setStatus(eq(Status.CLIENT_ERROR_NOT_FOUND), anyString());
dde363c92873e122a139e2db23862dfd7d265b73Ewaryst Schulz verifyZeroInteractions(handlerOne, handlerTwo, handlerThree);
dde363c92873e122a139e2db23862dfd7d265b73Ewaryst Schulz public void shouldNotHandleVersionRouteWithNewerProtocolMinorVersion() {
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder given(httpRequest.getHeader(HEADER_X_VERSION_API)).willReturn("protocol=1.1,resource=1.0");
dde363c92873e122a139e2db23862dfd7d265b73Ewaryst Schulz verify(response).setStatus(eq(Status.CLIENT_ERROR_BAD_REQUEST), anyString());
dde363c92873e122a139e2db23862dfd7d265b73Ewaryst Schulz verifyZeroInteractions(handlerOne, handlerTwo, handlerThree);
dde363c92873e122a139e2db23862dfd7d265b73Ewaryst Schulz public void shouldNotHandleVersionRouteWithNewerProtocolMajorVersion() {
dde363c92873e122a139e2db23862dfd7d265b73Ewaryst Schulz given(httpRequest.getHeader(HEADER_X_VERSION_API)).willReturn("protocol=2.0,resource=1.0");
@Test
public void shouldHandleVersionRouteWithOldestBehaviour() {