package server.mcsv1002;
import org.junit.Assert;
import org.junit.Test;
import ru.codeinside.gws.api.InfoSystem;
import ru.codeinside.gws.api.Packet;
import ru.codeinside.gws.api.Revision;
import ru.codeinside.gws.api.ServerRequest;
import ru.codeinside.gws.api.ServerResponse;
import ru.codeinside.gws.api.ServiceDefinition;
import ru.codeinside.gws.core.sproto.R111111;
import ru.codeinside.gws.core.sproto.R120315;
import ru.codeinside.gws.crypto.cryptopro.CryptoProvider;
import ru.codeinside.gws.wsdl.ServiceDefinitionParser;
import javax.xml.namespace.QName;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPMessage;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Date;
public class DeclarerTest extends Assert {
static final QName serviceName;
static final QName portName;
static final ServiceDefinition.Port portDef;
static {
ServiceDefinition definition = new ServiceDefinitionParser().parseServiceDefinition(DeclarerTest.class.getClassLoader().getResource("mvvact/mvvact.wsdl"));
serviceName = definition.services.keySet().iterator().next();
ServiceDefinition.Service service = definition.services.get(serviceName);
portName = service.ports.keySet().iterator().next();
portDef = service.ports.get(portName);
}
@Test
public void testGetRevision() throws Exception {
assertEquals(Revision.rev111111, new Declarer().getRevision());
}
@Test
public void testGetWsdlUrl() throws Exception {
final URL wsdlUrl = new Declarer().getWsdlUrl();
assertNotNull("Ссылка на wsdl обязательна", wsdlUrl);
assertTrue("WSDL должен быть ресурсом", wsdlUrl.toExternalForm().contains("/target/classes/"));
}
@Test
public void putData_ping() throws Exception {
Declarer declarer = new Declarer();
DummyRequestContext requestContext = new DummyRequestContext();
requestContext.result = new ServerResponse();
requestContext.result.packet = new Packet();
requestContext.request = new ServerRequest();
requestContext.request.packet = new Packet();
requestContext.request.packet.oktmo = "71875000";
requestContext.request.packet.status = Packet.Status.PING;
requestContext.request.action = new QName("http://canonicalRequests.gov.ru", "processCanonicalService");
ServerResponse response = declarer.processRequest(requestContext);
assertSame(requestContext.result, response);
assertEquals("71875000", response.packet.oktmo);
}
@Test
public void putData_other() throws Exception {
Declarer declarer = new Declarer();
DummyRequestContext requestContext = new DummyRequestContext();
requestContext.request = new ServerRequest();
requestContext.request.packet = new Packet();
requestContext.request.packet.status = Packet.Status.REQUEST;
requestContext.request.action = new QName("http://canonicalRequests.gov.ru", "processCanonicalService");
requestContext.request.packet.oktmo = "test";
try {
assertSame(requestContext.request.packet.oktmo, declarer.processRequest(requestContext).packet.oktmo);
fail();
} catch (IllegalStateException e) {
assertEquals("Illegal status REQUEST", e.getMessage());
}
}
@Test
public void updateStatus_other() throws Exception {
Declarer declarer = new Declarer();
DummyRequestContext requestContext = new DummyRequestContext();
requestContext.state = new ServerResponse();
requestContext.request = new ServerRequest();
requestContext.request.packet = new Packet();
requestContext.request.packet.status = Packet.Status.STATE;
requestContext.request.action = new QName("http://canonicalRequests.gov.ru", "processCanonicalService");
requestContext.request.packet.oktmo = "test";
try {
assertSame(requestContext.request.packet.oktmo, declarer.processRequest(requestContext).packet.oktmo);
fail();
} catch (IllegalStateException e) {
assertEquals("Illegal status STATE", e.getMessage());
}
}
// @Test
// public void testProcessStatus() throws Exception {
// Declarer declarer = new Declarer();
// DummyContext ctx = new DummyContext();
// ServerResponse response = declarer.processStatus("x1x", ctx);
// assertEquals(new QName("http://mvv.oep.com/", "updateStatus"), response.action);
// assertTrue(response.appData.startsWith("<oep:result xmlns:oep=\"http://oep-penza.ru/com/oep\"><oep:params>"));
// Result result = new XmlTypes(Result.class).fromXml(Result.class, response.appData);
// assertEquals("x1x", result.getParams().getStatusCode());
// assertMessage(response);
// }
// @Test
// public void testProcessResult() throws Exception {
// Declarer declarer = new Declarer();
// DummyContext ctx = new DummyContext();
// ctx.vars.put("r1x", "zxx");
// ServerResponse response = declarer.processResult("xxx", ctx);
// assertEquals(new QName("http://mvv.oep.com/", "updateStatus"), response.action);
// assertTrue(response.appData.startsWith(
// "<oep:result xmlns:oep=\"http://oep-penza.ru/com/oep\">" +
// "<oep:dataRow><oep:name>r1x</oep:name><oep:value>zxx</oep:value></oep:dataRow>"));
// Result result = new XmlTypes(Result.class).fromXml(Result.class, response.appData);
// assertEquals("xxx", result.getParams().getStatusCode());
// assertMessage(response);
// }
@Test
public void testRealRequest() throws SOAPException, IOException {
Declarer declarer = new Declarer();
DummyRequestContext context = new DummyRequestContext();
context.request = parseRequest("request-1.xml");
context.first = true;
context.procedureCode = 5000000000000001002L;
final DeclarerContextStub declarerContextStub = new DeclarerContextStub();
context.declarerContext = declarerContextStub;
ServerResponse response = declarer.processRequest(context);
assertMessage(response);
assertEquals("71875000", response.packet.oktmo);
assertEquals("4000", declarerContextStub.values.get("result_regionCode"));
assertEquals("Санкт-Петербург", declarerContextStub.values.get("result_objectCity"));
assertEquals("Ленинский пр.", declarerContextStub.values.get("result_objectStreet"));
assertEquals("140", declarerContextStub.values.get("result_objectHouse"));
assertEquals("2", declarerContextStub.values.get("result_objectCorpus"));
assertEquals("А", declarerContextStub.values.get("result_objectBuilding"));
assertEquals("16", declarerContextStub.values.get("result_objectFlat"));
assertEquals("09:06:0120221:50", declarerContextStub.values.get("result_objectCadastrNumber"));
}
private ServerRequest parseRequest(String name) throws IOException, SOAPException {
final InputStream stream = getClass().getClassLoader().getResourceAsStream(name);
final SOAPMessage message = MessageFactory.newInstance().createMessage(null, stream);
CryptoProvider cryptoProvider = new CryptoProvider();
final R111111 r111111 = new R111111(cryptoProvider, null, null);
return r111111.processRequest(message, serviceName, portDef);
}
private void assertMessage(ServerResponse response) {
CryptoProvider cryptoProvider = new CryptoProvider();
R120315 r120315 = new R120315(cryptoProvider,null, null);
response.packet.sender = response.packet.recipient = new InfoSystem("x", "y");
response.packet.date = new Date();
assertNotNull(r120315.processResponse(null, response, serviceName, portDef, null));
}
}