package egovframework.rte.itl.webservice;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.fail;
import java.util.Calendar;
import egovframework.rte.itl.integration.EgovIntegrationMessage;
import egovframework.rte.itl.integration.EgovIntegrationMessageHeader;
import egovframework.rte.itl.integration.EgovIntegrationMessageHeader.ResultCode;
import egovframework.rte.itl.integration.metadata.IntegrationDefinition;
import egovframework.rte.itl.integration.metadata.OrganizationDefinition;
import egovframework.rte.itl.integration.metadata.ServiceDefinition;
import egovframework.rte.itl.integration.metadata.SystemDefinition;
import egovframework.rte.itl.webservice.service.EgovWebServiceClient;
import org.junit.Test;
public class EgovWebServiceTest
{
private final OrganizationDefinition providerOrganization =
new OrganizationDefinition("org0", "provider organization");
private final SystemDefinition providerSystem =
new SystemDefinition("sys0", providerOrganization, "sys0", "provider system", true);
private final ServiceDefinition providerService =
new ServiceDefinition("srv0", providerSystem, "srv0", "provider service", "req", "res", "providerBean", true, true);
private final OrganizationDefinition consumerOrganization =
new OrganizationDefinition("org1", "consumer organization");
private final SystemDefinition consumerSystem =
new SystemDefinition("sys1", consumerOrganization, "sys0", "consumer system", true);
private final IntegrationDefinition integrationDefinition =
new IntegrationDefinition("test", providerService, consumerSystem, 5000, true, null, null);
private final EgovWebServiceClient echoClient = new EchoEgovWebServiceClient(0, ResultCode.OK);
@Test
public void testCreationSucceeds() throws Exception
{
try
{
new EgovWebService("test", 5000, integrationDefinition, echoClient);
}
catch (Throwable e)
{
fail();
}
}
@Test
public void testCreationFailsWithIllegalArgument() throws Exception
{
// id
try
{
new EgovWebService(" ", 5000, integrationDefinition, echoClient);
fail();
}
catch (IllegalArgumentException e)
{
}
// integrationDefinition
try
{
new EgovWebService("test", 5000, null, echoClient);
fail();
}
catch (IllegalArgumentException e)
{
}
// integrationDefinition.provider
try
{
new EgovWebService("test", 5000,
new IntegrationDefinition("test", null, consumerSystem, 5000, true, null, null),
echoClient);
fail();
}
catch (IllegalArgumentException e)
{
}
// integrationDefinition.provider.system
try
{
new EgovWebService("test", 5000,
new IntegrationDefinition("test",
new ServiceDefinition("test", null, "test", "test", "req", "rse", null, false, false),
consumerSystem, 5000, true, null, null),
echoClient);
fail();
}
catch (IllegalArgumentException e)
{
}
// integrationDefinition.provider.system.organization
try
{
new EgovWebService("test", 5000,
new IntegrationDefinition("test",
new ServiceDefinition("test",
new SystemDefinition("test", null, "test", "test", true),
"test", "test", "req", "rse", null, false, false),
consumerSystem, 5000, true, null, null),
echoClient);
fail();
}
catch (IllegalArgumentException e)
{
}
// integrationDefinition.consumer
try
{
new EgovWebService("test", 5000,
new IntegrationDefinition("test", providerService, null, 5000, true, null, null),
echoClient);
fail();
}
catch (IllegalArgumentException e)
{
}
// integrationDefinition.consumer.organization
try
{
new EgovWebService("test", 5000,
new IntegrationDefinition("test", providerService,
new SystemDefinition("test", null, "test", "test", true),
5000, true, null, null),
echoClient);
fail();
}
catch (IllegalArgumentException e)
{
}
// client
try
{
new EgovWebService("test", 5000, integrationDefinition, null);
fail();
}
catch (IllegalArgumentException e)
{
}
}
@Test
public void testCreateRequestMessageSucceeds() throws Exception
{
EgovWebService service =
new EgovWebService("test", 5000, integrationDefinition, echoClient);
EgovIntegrationMessage requestMessage = service.createRequestMessage();
assertNotNull(requestMessage);
assertNotNull(requestMessage.getHeader());
EgovIntegrationMessageHeader header = requestMessage.getHeader();
assertEquals(integrationDefinition.getId(), header.getIntegrationId());
assertEquals(providerOrganization.getId(), header.getProviderOrganizationId());
assertEquals(providerSystem.getId(), header.getProviderSystemId());
assertEquals(providerService.getId(), header.getProviderServiceId());
assertEquals(consumerOrganization.getId(), header.getConsumerOrganizationId());
assertEquals(consumerSystem.getId(), header.getConsumerSystemId());
assertNotNull(requestMessage.getBody());
assertEquals(0, requestMessage.getBody().size());
}
@Test
public void testDoSendSucceeds() throws Exception
{
EgovWebService service =
new EgovWebService("test", 5000, integrationDefinition, echoClient);
EgovIntegrationMessage requestMessage = service.createRequestMessage();
EgovIntegrationMessage responseMessage = service.doSend(requestMessage);
assertNotNull(responseMessage);
assertNotNull(responseMessage.getHeader());
EgovIntegrationMessageHeader requestHeader = requestMessage.getHeader();
EgovIntegrationMessageHeader responseHeader = responseMessage.getHeader();
assertEquals(requestHeader.getIntegrationId(), responseHeader.getIntegrationId());
assertEquals(requestHeader.getProviderOrganizationId(), responseHeader.getProviderOrganizationId());
assertEquals(requestHeader.getProviderSystemId(), responseHeader.getProviderSystemId());
assertEquals(requestHeader.getProviderServiceId(), responseHeader.getProviderServiceId());
assertEquals(requestHeader.getConsumerOrganizationId(), responseHeader.getConsumerOrganizationId());
assertEquals(requestHeader.getConsumerSystemId(), responseHeader.getConsumerSystemId());
assertEquals(requestHeader.getRequestSendTime(), responseHeader.getRequestSendTime());
assertNotNull(responseHeader.getRequestReceiveTime());
assertNotNull(responseHeader.getResponseSendTime());
assertNotNull(responseHeader.getResponseReceiveTime());
assertEquals(ResultCode.OK, responseHeader.getResultCode());
}
@Test
public void testDoSendFailsWithIntegrationIsNotUsable() throws Exception
{
EgovWebService service =
new EgovWebService("test", 5000,
new IntegrationDefinition("test", providerService, consumerSystem, 5000, false, null, null),
echoClient);
EgovIntegrationMessage requestMessage = service.createRequestMessage();
EgovIntegrationMessage responseMessage = service.doSend(requestMessage);
assertNotNull(responseMessage);
assertNotNull(responseMessage.getHeader());
assertEquals(ResultCode.NOT_USABLE_INTEGRATION, responseMessage.getHeader().getResultCode());
}
@Test
public void testDoSendFailsWithInvalidTime() throws Exception
{
IntegrationDefinition integrationDefinition = new IntegrationDefinition("test", providerService, consumerSystem, 5000, true, null, null);
EgovWebService service =
new EgovWebService("test", 5000, integrationDefinition, echoClient);
Calendar from = Calendar.getInstance();
from.add(Calendar.YEAR, 1);
Calendar to = Calendar.getInstance();
to.add(Calendar.YEAR, -1);
// from
integrationDefinition.setValidateFrom(from);
integrationDefinition.setValidateTo(null);
EgovIntegrationMessage requestMessage = service.createRequestMessage();
EgovIntegrationMessage responseMessage = service.doSend(requestMessage);
assertNotNull(responseMessage);
assertNotNull(responseMessage.getHeader());
assertEquals(ResultCode.INVALID_TIME, responseMessage.getHeader().getResultCode());
// to
integrationDefinition.setValidateFrom(null);
integrationDefinition.setValidateTo(to);
requestMessage = service.createRequestMessage();
responseMessage = service.doSend(requestMessage);
assertNotNull(responseMessage);
assertNotNull(responseMessage.getHeader());
assertEquals(ResultCode.INVALID_TIME, responseMessage.getHeader().getResultCode());
}
@Test
public void testDoSendFailsWithServiceIsNotUsable() throws Exception
{
EgovWebService service =
new EgovWebService("test", 5000,
new IntegrationDefinition("test",
new ServiceDefinition("srv", providerSystem, "srv", "srv", "req", "res", null, true, false),
consumerSystem, 5000, true, null, null),
echoClient);
EgovIntegrationMessage requestMessage = service.createRequestMessage();
EgovIntegrationMessage responseMessage = service.doSend(requestMessage);
assertNotNull(responseMessage);
assertNotNull(responseMessage.getHeader());
assertEquals(ResultCode.NOT_USABLE_SERVICE, responseMessage.getHeader().getResultCode());
}
}
class EchoEgovWebServiceClient implements EgovWebServiceClient
{
private long waitTime;
private ResultCode resultCode;
public EchoEgovWebServiceClient(long waitTime, ResultCode resultCode)
{
super();
this.waitTime = waitTime;
this.resultCode = resultCode;
}
public EgovIntegrationMessage service(
EgovIntegrationMessage requestMessage)
{
EgovWebServiceMessageHeader responseHeader =
new EgovWebServiceMessageHeader(requestMessage.getHeader());
responseHeader.setRequestReceiveTime(Calendar.getInstance());
try
{
Thread.sleep(waitTime);
}
catch (InterruptedException e)
{
}
responseHeader.setResponseSendTime(Calendar.getInstance());
responseHeader.setResultCode(resultCode);
return new EgovWebServiceMessage(responseHeader);
}
};