/*
* Copyright (c) 2008, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
* 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.wso2.carbon.governance.api.test;
import org.apache.axiom.om.OMElement;
import org.wso2.carbon.governance.api.common.dataobjects.GovernanceArtifact;
import org.wso2.carbon.governance.api.endpoints.EndpointManager;
import org.wso2.carbon.governance.api.endpoints.dataobjects.Endpoint;
import org.wso2.carbon.governance.api.services.ServiceManager;
import org.wso2.carbon.governance.api.services.dataobjects.Service;
import org.wso2.carbon.governance.api.test.utils.BaseTestCase;
import org.wso2.carbon.governance.api.util.GovernanceUtils;
import org.wso2.carbon.governance.api.wsdls.WsdlManager;
import org.wso2.carbon.governance.api.wsdls.dataobjects.Wsdl;
import org.wso2.carbon.registry.extensions.utils.CommonConstants;
import javax.xml.namespace.QName;
import java.io.File;
import java.io.FileInputStream;
public class EndpointTest extends BaseTestCase {
public void testAddEndpoint() throws Exception {
// first add an endpoint, get it delete it, simply stuff like that.
EndpointManager endpointManager = new EndpointManager(registry);
Endpoint endpoint1 = endpointManager.newEndpoint("http://localhost/papapa/booom");
endpoint1.addAttribute("status", "QA");
endpointManager.addEndpoint(endpoint1);
assertEquals("/endpoints/localhost/papapa/ep-booom", endpoint1.getPath());
// now get the endpoint back.
Endpoint endpoint2 = endpointManager.getEndpoint(endpoint1.getId());
assertEquals("http://localhost/papapa/booom", endpoint2.getUrl());
assertEquals("QA", endpoint1.getAttribute("status"));
// so we will be deleting the endpoint
endpointManager.removeEndpoint(endpoint2.getId());
assertTrue(true);
endpoint2 = endpointManager.getEndpoint(endpoint2.getId());
assertNull(endpoint2);
}
public void testAddWsdlWithEndpoints() throws Exception {
WsdlManager wsdlManager = new WsdlManager(registry);
Wsdl wsdl = wsdlManager.newWsdl("http://svn.wso2.org/repos/wso2/trunk/carbon/components/governance/org.wso2.carbon.governance.api/src/test/resources/test-resources/wsdl/BizService.wsdl");
wsdlManager.addWsdl(wsdl);
Endpoint[] endpoints = wsdl.getAttachedEndpoints();
assertEquals(1, endpoints.length);
assertEquals("http://localhost:8080/axis2/services/BizService", endpoints[0].getUrl());
assertEquals(1, endpoints[0].getAttributeKeys().length);
assertEquals("true", endpoints[0].getAttribute(CommonConstants.SOAP11_ENDPOINT_ATTRIBUTE));
// now we are trying to remove the endpoint
EndpointManager endpointManager = new EndpointManager(registry);
try {
endpointManager.removeEndpoint(endpoints[0].getId());
assertTrue(false);
} catch (Exception e) {
assertTrue(true);
}
GovernanceArtifact[] artifacts = wsdl.getDependents();
// delete the wsdl
wsdlManager.removeWsdl(wsdl.getId());
ServiceManager serviceManager = new ServiceManager(registry);
for (GovernanceArtifact artifact: artifacts) {
if (artifact instanceof Service) {
// getting the service.
Service service2 = (Service)artifact;
serviceManager.removeService(service2.getId());
}
}
// now try to remove the endpoint
endpointManager.removeEndpoint(endpoints[0].getId());
assertTrue(true);
}
public void testAddServiceWithEndpoints() throws Exception {
ServiceManager serviceManager = new ServiceManager(registry);
Service service = serviceManager.newService(new QName("http://wso2.com/test/xxx", "myService"));
service.addAttribute("endpoints_entry", ":http://endpoint1");
service.addAttribute("endpoints_entry", "QA:http://endpoint2");
serviceManager.addService(service);
Endpoint[] endpoints = service.getAttachedEndpoints();
assertEquals(2, endpoints.length);
assertEquals("http://endpoint1", endpoints[0].getUrl());
assertEquals(0, endpoints[0].getAttributeKeys().length);
assertEquals("http://endpoint2", endpoints[1].getUrl());
assertEquals(1, endpoints[1].getAttributeKeys().length);
assertEquals("QA", endpoints[1].getAttribute(CommonConstants.ENDPOINT_ENVIRONMENT_ATTR));
// now update the endpoints in the service
service.setAttributes("endpoints_entry", new String[] {
"Dev:http://endpoint3",
"Production:http://endpoint4",
"QA:http://endpoint2",
});
serviceManager.updateService(service);
endpoints = service.getAttachedEndpoints();
assertEquals(3, endpoints.length);
assertEquals("http://endpoint3", endpoints[0].getUrl());
assertEquals(1, endpoints[0].getAttributeKeys().length);
assertEquals("Dev", endpoints[0].getAttribute(CommonConstants.ENDPOINT_ENVIRONMENT_ATTR));
assertEquals("http://endpoint4", endpoints[1].getUrl());
assertEquals(1, endpoints[1].getAttributeKeys().length);
assertEquals("Production", endpoints[1].getAttribute(CommonConstants.ENDPOINT_ENVIRONMENT_ATTR));
assertEquals("http://endpoint2", endpoints[2].getUrl());
assertEquals(1, endpoints[2].getAttributeKeys().length);
assertEquals("QA", endpoints[2].getAttribute(CommonConstants.ENDPOINT_ENVIRONMENT_ATTR));
}
// add endpoints as attachments
public void testAttachEndpointsToService() throws Exception {
ServiceManager serviceManager = new ServiceManager(registry);
Service service = serviceManager.newService(new QName("http://wso2.com/test234/xxxxx", "myServicxcde"));
serviceManager.addService(service);
EndpointManager endpointManager = new EndpointManager(registry);
Endpoint ep1 = endpointManager.newEndpoint("http://endpoint1xx");
endpointManager.addEndpoint(ep1);
Endpoint ep2 = endpointManager.newEndpoint("http://endpoint2xx");
ep2.setAttribute(CommonConstants.ENDPOINT_ENVIRONMENT_ATTR, "QA");
endpointManager.addEndpoint(ep2);
service.attachEndpoint(ep1);
service.attachEndpoint(ep2);
Endpoint[] endpoints = service.getAttachedEndpoints();
assertEquals(2, endpoints.length);
assertEquals("http://endpoint1xx", endpoints[0].getUrl());
assertEquals(0, endpoints[0].getAttributeKeys().length);
assertEquals("http://endpoint2xx", endpoints[1].getUrl());
assertEquals(1, endpoints[1].getAttributeKeys().length);
assertEquals("QA", endpoints[1].getAttribute(CommonConstants.ENDPOINT_ENVIRONMENT_ATTR));
service.detachEndpoint(ep1.getId());
endpoints = service.getAttachedEndpoints();
assertEquals(1, endpoints.length);
assertEquals("http://endpoint2xx", endpoints[0].getUrl());
assertEquals(1, endpoints[0].getAttributeKeys().length);
assertEquals("QA", endpoints[0].getAttribute(CommonConstants.ENDPOINT_ENVIRONMENT_ATTR));
// now update the endpoints in the service
service.setAttributes("endpoints_entry", new String[] {
"Dev:http://endpoint3",
"Production:http://endpoint4",
"QA:http://endpoint2xx",
});
serviceManager.updateService(service);
endpoints = service.getAttachedEndpoints();
assertEquals(3, endpoints.length);
assertEquals("http://endpoint3", endpoints[0].getUrl());
assertEquals(1, endpoints[0].getAttributeKeys().length);
assertEquals("Dev", endpoints[0].getAttribute(CommonConstants.ENDPOINT_ENVIRONMENT_ATTR));
assertEquals("http://endpoint4", endpoints[1].getUrl());
assertEquals(1, endpoints[1].getAttributeKeys().length);
assertEquals("Production", endpoints[1].getAttribute(CommonConstants.ENDPOINT_ENVIRONMENT_ATTR));
assertEquals("http://endpoint2xx", endpoints[2].getUrl());
assertEquals(1, endpoints[2].getAttributeKeys().length);
assertEquals("QA", endpoints[2].getAttribute(CommonConstants.ENDPOINT_ENVIRONMENT_ATTR));
Endpoint ep5 = endpointManager.getEndpointByUrl("http://endpoint2");
assertEquals("QA", ep5.getAttribute(CommonConstants.ENDPOINT_ENVIRONMENT_ATTR));
}
public void testAssociatingEndpoints() throws Exception {
ServiceManager serviceManager = new ServiceManager(registry);
Service service = serviceManager.newService(new QName("http://done.ding/dong/doodo", "bangService343"));
serviceManager.addService(service);
EndpointManager endpointManager = new EndpointManager(registry);
Endpoint endpoint = endpointManager.newEndpoint("http://dos.dis/doos/safdsf/ppeekk");
endpointManager.addEndpoint(endpoint);
service.attachEndpoint(endpoint);
// retrieve the service
Service service2 = serviceManager.getService(service.getId());
Endpoint[] endpoints = service2.getAttachedEndpoints();
assertEquals(1, endpoints.length);
assertEquals(":" + endpoints[0].getUrl(), service2.getAttribute("endpoints_entry"));
}
public void testServiceAddingEndpointsWithWsdl() throws Exception {
File file = new File("src/test/resources/service.metadata.xml");
FileInputStream fileInputStream = new FileInputStream(file);
byte[] fileContents = new byte[(int)file.length()];
fileInputStream.read(fileContents);
OMElement contentElement = GovernanceUtils.buildOMElement(fileContents);
ServiceManager serviceManager = new ServiceManager(registry);
Service service = serviceManager.newService(contentElement);
service.addAttribute("custom-attribute", "custom-value");
serviceManager.addService(service);
// so retrieve it back
String serviceId = service.getId();
Service newService = serviceManager.getService(serviceId);
assertEquals(newService.getAttribute("custom-attribute"), "custom-value");
assertEquals(newService.getAttribute("endpoints_entry"),
":http://localhost:8080/axis2/services/BizService");
// now we just add an endpoints
WsdlManager wsdlManager = new WsdlManager(registry);
Wsdl wsdl = wsdlManager.newWsdl("http://svn.wso2.org/repos/wso2/trunk/carbon/components/governance/org.wso2.carbon.governance.api/src/test/resources/test-resources/wsdl/MyChangedBizService.wsdl");
wsdl.addAttribute("boom", "hahahaha");
wsdlManager.addWsdl(wsdl);
GovernanceArtifact[] artifacts = wsdl.getDependents();
for (GovernanceArtifact artifact: artifacts) {
if (artifact instanceof Service) {
// getting the service.
Service service2 = (Service)artifact;
Endpoint[] endpoints = service2.getAttachedEndpoints();
assertEquals(1, endpoints.length);
assertEquals("http://localhost:8080/axis2/services/BizService-my-changes", endpoints[0].getUrl());
}
}
}
// detach endpoints
public void testDetachEndpointsToService() throws Exception {
ServiceManager serviceManager = new ServiceManager(registry);
Service service = serviceManager.newService(new QName("http://wso2.com/test234/xxxxx", "myServicxcde"));
serviceManager.addService(service);
EndpointManager endpointManager = new EndpointManager(registry);
Endpoint ep1 = endpointManager.newEndpoint("http://endpoint1");
endpointManager.addEndpoint(ep1);
Endpoint ep2 = endpointManager.newEndpoint("http://endpoint2");
ep2.setAttribute(CommonConstants.ENDPOINT_ENVIRONMENT_ATTR, "QA");
endpointManager.addEndpoint(ep2);
service.attachEndpoint(ep1);
service.attachEndpoint(ep2);
Endpoint[] endpoints = service.getAttachedEndpoints();
assertEquals(2, endpoints.length);
// get the updated service endpoints
service = serviceManager.getService(service.getId());
String[] endpointValues = service.getAttributes("endpoints_entry");
assertEquals(2, endpointValues.length);
}
// add non http endpoints as attachments
public void testNonHttpEndpointsToService() throws Exception {
ServiceManager serviceManager = new ServiceManager(registry);
Service service = serviceManager.newService(new QName("http://wso2.com/doadf/spidf", "myServisdfcxcde"));
serviceManager.addService(service);
EndpointManager endpointManager = new EndpointManager(registry);
Endpoint ep1 = endpointManager.newEndpoint("jms:/Service1");
endpointManager.addEndpoint(ep1);
Endpoint ep2 = endpointManager.newEndpoint("jms:/Service2");
ep2.setAttribute(CommonConstants.ENDPOINT_ENVIRONMENT_ATTR, "QA");
endpointManager.addEndpoint(ep2);
service.attachEndpoint(ep1);
service.attachEndpoint(ep2);
Endpoint[] endpoints = service.getAttachedEndpoints();
assertEquals(2, endpoints.length);
// get the updated service endpoints
service = serviceManager.getService(service.getId());
String[] endpointValues = service.getAttributes("endpoints_entry");
assertEquals(2, endpointValues.length);
}
}