/**
* 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.cxf.transport.http.policy;
import org.apache.cxf.transport.http.policy.impl.ClientPolicyCalculator;
import org.apache.cxf.transports.http.configuration.HTTPClientPolicy;
import org.junit.Assert;
import org.junit.Test;
public class ClientPolicyCalculatorTest extends Assert {
@Test
public void testCompatibleClientPolicies() {
ClientPolicyCalculator calc = new ClientPolicyCalculator();
HTTPClientPolicy p1 = new HTTPClientPolicy();
assertTrue("Policy is not compatible with itself.", calc.compatible(p1, p1));
HTTPClientPolicy p2 = new HTTPClientPolicy();
assertTrue("Policies are not compatible.", calc.compatible(p1, p2));
p1.setBrowserType("browser");
assertTrue("Policies are not compatible.", calc.compatible(p1, p2));
p1.setBrowserType(null);
p1.setConnectionTimeout(10000);
assertTrue("Policies are not compatible.", calc.compatible(p1, p2));
p1.setAllowChunking(false);
p2.setAllowChunking(true);
assertTrue("Policies are compatible.", !calc.compatible(p1, p2));
p2.setAllowChunking(false);
assertTrue("Policies are compatible.", calc.compatible(p1, p2));
}
@Test
public void testIntersectClientPolicies() {
ClientPolicyCalculator calc = new ClientPolicyCalculator();
HTTPClientPolicy p1 = new HTTPClientPolicy();
HTTPClientPolicy p2 = new HTTPClientPolicy();
HTTPClientPolicy p = null;
p1.setBrowserType("browser");
p = calc.intersect(p1, p2);
assertEquals("browser", p.getBrowserType());
p1.setBrowserType(null);
p1.setConnectionTimeout(10000L);
p = calc.intersect(p1, p2);
assertEquals(10000L, p.getConnectionTimeout());
p1.setAllowChunking(false);
p2.setAllowChunking(false);
p = calc.intersect(p1, p2);
assertTrue(!p.isAllowChunking());
}
@Test
public void testEqualClientPolicies() {
ClientPolicyCalculator calc = new ClientPolicyCalculator();
HTTPClientPolicy p1 = new HTTPClientPolicy();
assertTrue(calc.equals(p1, p1));
HTTPClientPolicy p2 = new HTTPClientPolicy();
assertTrue(calc.equals(p1, p2));
p1.setDecoupledEndpoint("http://localhost:8080/decoupled");
assertTrue(!calc.equals(p1, p2));
p2.setDecoupledEndpoint("http://localhost:8080/decoupled");
assertTrue(calc.equals(p1, p2));
p1.setReceiveTimeout(10000L);
assertTrue(!calc.equals(p1, p2));
}
@Test
public void testLongTimeouts() {
ClientPolicyCalculator calc = new ClientPolicyCalculator();
HTTPClientPolicy p1 = new HTTPClientPolicy();
HTTPClientPolicy p2 = new HTTPClientPolicy();
p2.setReceiveTimeout(120000);
p2.setConnectionTimeout(60000);
HTTPClientPolicy p = calc.intersect(p1, p2);
assertEquals(120000, p.getReceiveTimeout());
assertEquals(60000, p.getConnectionTimeout());
p1 = new HTTPClientPolicy();
p2 = new HTTPClientPolicy();
p1.setReceiveTimeout(120000);
p1.setConnectionTimeout(60000);
p = calc.intersect(p1, p2);
assertEquals(120000, p.getReceiveTimeout());
assertEquals(60000, p.getConnectionTimeout());
p2.setReceiveTimeout(50000);
p2.setConnectionTimeout(20000);
p = calc.intersect(p1, p2);
//p1 should have priority
assertEquals(120000, p.getReceiveTimeout());
assertEquals(60000, p.getConnectionTimeout());
//reverse intersect
p = calc.intersect(p2, p1);
//p2 should have priority
assertEquals(50000, p.getReceiveTimeout());
assertEquals(20000, p.getConnectionTimeout());
}
}