/*
*
* * Copyright 2013-2016 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.cloud.netflix.ribbon.support;
import java.net.URI;
import java.util.Arrays;
import java.util.Collections;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.cloud.netflix.zuul.filters.route.RibbonCommandContext;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
/**
* @author Ryan Baxter
*/
public class ContextAwareRequestTest {
private RibbonCommandContext context;
private ContextAwareRequest request;
@Before
public void setUp() throws Exception {
context = mock(RibbonCommandContext.class);
doReturn("GET").when(context).getMethod();
MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
headers.put("header1", Collections.<String>emptyList());
headers.put("header2", Arrays.asList("value1", "value2"));
headers.put("header3", Arrays.asList("value1"));
doReturn(headers).when(context).getHeaders();
doReturn(new URI("http://foo")).when(context).uri();
doReturn("foo").when(context).getServiceId();
doReturn(new LinkedMultiValueMap<>()).when(context).getParams();
request = new TestContextAwareRequest(context);
}
@After
public void tearDown() throws Exception {
context = null;
request = null;
}
@Test
public void getContext() throws Exception {
assertEquals(context, request.getContext());
}
@Test
public void getMethod() throws Exception {
assertEquals(HttpMethod.GET, request.getMethod());
}
@Test
public void getURI() throws Exception {
assertEquals(new URI("http://foo"), request.getURI());
RibbonCommandContext badUriContext = mock(RibbonCommandContext.class);
doReturn(new LinkedMultiValueMap()).when(badUriContext).getHeaders();
doReturn("foobar").when(badUriContext).getUri();
ContextAwareRequest badUriRequest = new TestContextAwareRequest(badUriContext);
assertNull(badUriRequest.getURI());
}
@Test
public void getHeaders() throws Exception {
HttpHeaders headers = new HttpHeaders();
headers.put("header1", Collections.<String>emptyList());
headers.put("header2", Arrays.asList("value1", "value2"));
headers.put("header3", Arrays.asList("value1"));
assertEquals(headers, request.getHeaders());
}
static class TestContextAwareRequest extends ContextAwareRequest {
public TestContextAwareRequest(RibbonCommandContext context) {
super(context);
}
}
}