blob: b03967864e77f4f08a88c360e04c76544d308d62 [file] [log] [blame]
/*
* 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.axis2.jaxws.client.dispatch;
import junit.framework.TestCase;
import org.apache.axis2.jaxws.description.DescriptionTestUtils2;
import org.apache.axis2.jaxws.description.ServiceDescription;
import org.apache.axis2.jaxws.spi.ClientMetadataTest;
import org.apache.axis2.jaxws.spi.ServiceDelegate;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* Tests the caching and isolation of dynamic ports,i.e. those created with
* Service.addPort(...). Dynamic ports should
* 1) Only be visible to services on which an addPort was done
* 2) Share instances of the description objects (e.g. AxisService) for ports
* added to different instances of the same service that use the same client
* configuration
* 3) Identical ports on services using different client configuration should
* not be shared
*/
public class DynamicPortCachingTests extends TestCase {
static final String namespaceURI = "http://dispatch.client.jaxws.axis2.apache.org";
static final String svcLocalPart = "svcLocalPart";
static final String dynamicPort1 = "dynamicPort1";
static final String bindingID1 = null;
static final String epr1 = null;
/**
* Two different instances of the same service should share the same
* description information (e.g. AxisService) if the same port is added
* to both
*/
public void _testSamePortsSameService() {
try {
ClientMetadataTest.installCachingFactory();
QName svcQN = new QName(namespaceURI, svcLocalPart);
Service svc1 = Service.create(svcQN);
assertNotNull(svc1);
ServiceDelegate svcDlg1 = DescriptionTestUtils2.getServiceDelegate(svc1);
assertNotNull(svcDlg1);
ServiceDescription svcDesc1 = svcDlg1.getServiceDescription();
assertNotNull(svcDesc1);
Service svc2 = Service.create(svcQN);
assertNotNull(svc2);
ServiceDelegate svcDlg2 = DescriptionTestUtils2.getServiceDelegate(svc2);
assertNotNull(svcDlg2);
ServiceDescription svcDesc2 = svcDlg2.getServiceDescription();
assertNotNull(svcDesc2);
assertNotSame("Service instances should not be the same", svc1, svc2);
assertNotSame("Service delegates should not be the same", svcDlg1, svcDlg2);
assertSame("Instance of ServiceDescription should be the same", svcDesc1, svcDesc2);
// Add a port to 1st service, should not be visible under the 2nd service
svc1.addPort(new QName(namespaceURI, dynamicPort1),
bindingID1,
epr1);
assertEquals(1, getList(svc1.getPorts()).size());
assertEquals(0, getList(svc2.getPorts()).size());
// Add the same port to 2nd service, should now have same ports and description
// objects
svc2.addPort(new QName(namespaceURI, dynamicPort1),
bindingID1,
epr1);
assertEquals(1, getList(svc1.getPorts()).size());
assertEquals(1, getList(svc2.getPorts()).size());
} finally {
ClientMetadataTest.restoreOriginalFactory();
}
}
public void testAddPortOOM() {
QName svcQN = new QName(namespaceURI, svcLocalPart);
try {
ClientMetadataTest.installCachingFactory();
for (int i = 0; i < 5000 ; i++) {
Service svc1 = Service.create(svcQN);
System.out.println("Port number " + i);
svc1.addPort(new QName(namespaceURI, dynamicPort1 + "_" /*+ i*/),
bindingID1,
epr1);
}
} catch (Throwable t) {
fail("Caught throwable " + t);
} finally {
ClientMetadataTest.restoreOriginalFactory();
}
}
private List getList(Iterator it) {
List returnList = new ArrayList();
while (it != null && it.hasNext()) {
returnList.add(it.next());
}
return returnList;
}
}