/* * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * Copyright (c) 2013, MPL CodeInside http://codeinside.ru */ package ru.codeinside.gws.core.cproto; import org.junit.Assert; import org.junit.Test; import ru.codeinside.gws.api.ClientRequest; import ru.codeinside.gws.api.ClientResponse; import ru.codeinside.gws.api.Enclosure; import ru.codeinside.gws.api.InfoSystem; import ru.codeinside.gws.api.Revision; import ru.codeinside.gws.stubs.DummyContext; import ru.codeinside.gws.stubs.DummyProvider; import ru.codeinside.gws.stubs.MultiPartItem; import ru.codeinside.gws.stubs.MultiPartServer; import ru.codeinside.gws.stubs.R; import ru.codeinside.gws.stubs.TestServer; import ru.codeinside.gws.wsdl.ServiceDefinitionParser; import ru.codeinside.gws.xml.normalizer.XmlNormalizerImpl; import ru.codeinside.gws3417c.FssClient; import javax.xml.bind.DatatypeConverter; import java.security.MessageDigest; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; import static ru.codeinside.gws.stubs.R.getRequiredResourceStream; import static ru.codeinside.gws.stubs.Streams.toBytes; public class ClientRev111111Test extends Assert { static { R.init(); } @Test public void testGetRevision() throws Exception { ClientRev111111 rev111111 = new ClientRev111111(new ServiceDefinitionParser(), new DummyProvider(), new XmlNormalizerImpl(), null); assertEquals(Revision.rev111111, rev111111.getRevision()); } @Test public void testBadPort() throws Exception { ClientRev111111 rev111111 = new ClientRev111111(new ServiceDefinitionParser(), new DummyProvider(), new XmlNormalizerImpl(), null); DummyContext ctx = new DummyContext(); FssClient fssClient = new FssClient(); ClientRequest request = fssClient.createClientRequest(ctx); request.portAddress = "http://127.0.0.1:99999"; request.packet.sender = request.packet.originator = new InfoSystem("test", "test"); try { ClientResponse response = rev111111.send(fssClient.getWsdlUrl(), request, null); fail("Порт не правильный"); } catch (IllegalArgumentException e) { assertEquals("port out of range:99999", e.getMessage()); } } @Test public void test() throws Exception { final TestServer testServer = new TestServer(); testServer.start(7777); try { ClientRev111111 rev111111 = new ClientRev111111(new ServiceDefinitionParser(), new DummyProvider(), new XmlNormalizerImpl(), null); DummyContext ctx = new DummyContext(); FssClient fssClient = new FssClient(); ClientRequest request = fssClient.createClientRequest(ctx); request.portAddress = "http://127.0.0.1:7777"; request.packet.sender = request.packet.originator = new InfoSystem("test", "test"); request.enclosureDescriptor = "xxx123"; List<Enclosure> enclosures = new ArrayList<Enclosure>(); Enclosure enclosure = new Enclosure("path1.txt", "12345".getBytes()); enclosure.fileName = "text.txt"; enclosure.mimeType = "text/pain; charset=utf-8"; enclosure.code = "1"; enclosure.id = "1"; enclosures.add(enclosure); request.enclosures = enclosures.toArray(new Enclosure[enclosures.size()]); testServer.setResponseBody("fss1.xml"); ClientResponse response = rev111111.send(fssClient.getWsdlUrl(), request, null); } finally { testServer.stop(); } Map<String, List<String>> headers = testServer.getHeaderMap(); assertEquals("text/xml; charset=UTF-8", headers.get("Content-Type").get(0)); assertEquals("\"\"", headers.get("SOAPAction").get(0)); assertNotNull(testServer.getRequestBody()); assertTrue(testServer.getParameterMap().isEmpty()); } @Test public void testFaultContent() throws Exception { final TestServer testServer = new TestServer(); testServer.start(7778); try { ClientRev111111 rev111111 = new ClientRev111111(new ServiceDefinitionParser(), new DummyProvider(), new XmlNormalizerImpl(), null); DummyContext ctx = new DummyContext(); FssClient fssClient = new FssClient(); ClientRequest request = fssClient.createClientRequest(ctx); request.portAddress = "http://127.0.0.1:7778"; request.packet.sender = request.packet.originator = new InfoSystem("test", "test"); testServer.setResponseBody("logback.xml"); //testServer.setResponseStatus(HttpServletResponse.SC_NOT_FOUND); ClientResponse response = rev111111.send(fssClient.getWsdlUrl(), request, null); fail(); } catch (Exception e) { assertTrue(e.getMessage().contains("unexpected XML tag")); // TODO: тут должен быть assert на то что реально было в ответе !!! } finally { testServer.stop(); } } @Test public void testAttachment() throws Exception { final TestServer testServer = new TestServer(); testServer.start(7779); try { ClientRev111111 rev111111 = new ClientRev111111(new ServiceDefinitionParser(), new DummyProvider(), new XmlNormalizerImpl(), null); DummyContext ctx = new DummyContext(); FssClient fssClient = new FssClient(); ClientRequest request = fssClient.createClientRequest(ctx); request.portAddress = "http://127.0.0.1:7779"; request.packet.sender = request.packet.originator = new InfoSystem("test", "test"); testServer.setResponseBody("rr2-response.xml"); ClientResponse response = rev111111.send(fssClient.getWsdlUrl(), request, null); assertNull("Нет ответа роутера", response.routerPacket); assertEquals("req_ee0b4ef0-f1b3-4353-993a-368a33bc6435", response.enclosureDescriptor); assertEquals(1, response.enclosures.length); Enclosure enclosure = response.enclosures[0]; assertEquals(18152, enclosure.content.length); assertEquals("doc197264.xml", enclosure.fileName); assertTrue(new String(enclosure.content).contains("Region_Cadastr_Vidimus_KP")); } finally { testServer.stop(); } } @Test public void testReject() throws Exception { final TestServer testServer = new TestServer(); testServer.start(7771); try { ClientRev111111 rev111111 = new ClientRev111111(new ServiceDefinitionParser(), new DummyProvider(), new XmlNormalizerImpl(), null); DummyContext ctx = new DummyContext(); FssClient fssClient = new FssClient(); ClientRequest request = fssClient.createClientRequest(ctx); request.portAddress = "http://127.0.0.1:7771"; request.packet.sender = request.packet.originator = new InfoSystem("test", "test"); testServer.setResponseBody("fss-response-2.xml"); ClientResponse response = rev111111.send(fssClient.getWsdlUrl(), request, null); assertNotNull(response.appData); fssClient.processClientResponse(response, ctx); assertEquals("Ошибка", ctx.getVariable("status")); assertEquals("Запрос с таким origRequestIdRef не найден!", ctx.getVariable("hint")); assertEquals("Ошибка в запросе: Запрос с таким origRequestIdRef не найден!", ctx.getVariable("smevError")); } finally { testServer.stop(); } } @Test public void testMtomAttachment() throws Exception { MultiPartItem msg = new MultiPartItem(toBytes(getRequiredResourceStream("rr2-response-mtom.xml"))); msg.addHeader("Content-Type", "text/xml"); MultiPartItem zip = new MultiPartItem(toBytes(getRequiredResourceStream("enclosure.zip"))); zip.addHeader("Content-Type", "application/zip"); zip.addHeader("Content-Transfer-Encoding", "binary"); zip.addHeader("Content-Id", "<CHANGES_EGRUL_2011-06-09.ZIP>"); MultiPartServer server = new MultiPartServer(); server.setResponseItems(Arrays.asList(msg, zip)); server.start(7770); try { ClientRev111111 rev111111 = new ClientRev111111(new ServiceDefinitionParser(), new DummyProvider(), new XmlNormalizerImpl(), null); DummyContext ctx = new DummyContext(); FssClient fssClient = new FssClient(); ClientRequest request = fssClient.createClientRequest(ctx); request.portAddress = "http://127.0.0.1:7770"; request.packet.sender = request.packet.originator = new InfoSystem("test", "test"); ClientResponse response = rev111111.send(fssClient.getWsdlUrl(), request, null); assertNull("Нет ответа роутера", response.routerPacket); assertEquals("Не проверяем целостность", null, response.verifyResult.error); assertEquals("req_ee0b4ef0-f1b3-4353-993a-368a33bc6435", response.enclosureDescriptor); assertEquals(1, response.enclosures.length); Enclosure enclosure = response.enclosures[0]; assertEquals(18152, enclosure.content.length); assertEquals("doc197264.xml", enclosure.fileName); assertTrue(new String(enclosure.content).contains("Region_Cadastr_Vidimus_KP")); } finally { server.stop(); } } @Test public void testHash() throws Exception { MessageDigest digest = MessageDigest.getInstance("GOST3411"); digest.update(DatatypeConverter.printBase64Binary(toBytes(getRequiredResourceStream("enclosure.zip"))).getBytes()); String base64 = DatatypeConverter.printBase64Binary(digest.digest()); assertEquals("qV9FKT+mNKS15wbsg0i0N6PzB5zfR3rpCiuaH+6Q0Dk=", base64); } }