/* * 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.Test; import ru.codeinside.gws.api.Client; import ru.codeinside.gws.api.ClientRequest; import ru.codeinside.gws.api.ClientResponse; import ru.codeinside.gws.api.Enclosure; import ru.codeinside.gws.api.ExchangeContext; 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.R; import ru.codeinside.gws.stubs.TestServer; import ru.codeinside.gws.wsdl.ServiceDefinitionParser; import ru.codeinside.gws.xml.normalizer.XmlNormalizerImpl; import ru.codeinside.gws3970c.UniversalClient; import javax.xml.namespace.QName; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; /* * логика работы сервиса: * 1. если переменная smevPool не установлена * 1.1 отправить запрос putData с параметрами * 1.2 получить от сервера ответ: * - ошибка * - запрос принят на обработку * 1.3 установить переменную smevPool * 1.4 установить параметр internalRequestId в контекст * 2. если переменная smevPool установлена * 2.1 отправить запрос updateStatus с параметром internalRequestId * 2.2 получить от сервера ответ: * - ошибка * - получить все параметры из ответа и установить их в контекст с их именами */ public class ClientRev120315Test { static { R.init(); ClientRev120315.validate = false;// в универсальном клиенет cхема чуть не по СМЭВ. } @Test public void testGetRevision() throws Exception { ClientRev120315 rev120315 = new ClientRev120315(new ServiceDefinitionParser(), new DummyProvider(), new XmlNormalizerImpl(), null); assertEquals(Revision.rev120315, rev120315.getRevision()); } @Test public void testPutData() throws Exception { final int PORT = 7777; final String PORT_ADDRES = "http://127.0.0.1:" + PORT; final TestServer testServer = new TestServer(); testServer.start(PORT); UniversalClient universalClient = new UniversalClient(); try { ClientRev120315 rev120315 = new ClientRev120315(new ServiceDefinitionParser(), new DummyProvider(), new XmlNormalizerImpl(), null); DummyContext ctx = new DummyContext(); //отправить первый запрос ClientRequest request = createRequest(PORT_ADDRES, universalClient, ctx); { Enclosure enc = new Enclosure("req_xxx.txt", "12345".getBytes()); request.enclosureDescriptor = "123"; request.enclosures = new Enclosure[]{enc}; } assertEquals(new QName("http://mvv.oep.com/", "putData"), request.action); testServer.setResponseBody("mvvact/putData/response.xml"); ClientResponse response = rev120315.send(universalClient.getWsdlUrl(), request, null); universalClient.processClientResponse(response, ctx); //проверить реакцию на успешный ответ на вызов putData assertEquals(true, ctx.getVariable("smevPool")); assertEquals("506d40ab5532d72a4003b511", ctx.getVariable("internalRequestId")); assertEquals(0L, ctx.getVariable("app_id")); assertEquals("В очереди", ctx.getVariable("status_title")); assertEquals("1", ctx.getVariable("status_pgu")); assertEquals("040", ctx.getVariable("status_code")); //отправить следующий запрос testServer.setResponseBody("mvvact/updateStatus/UpdateStatus_response.xml"); request = createRequest(PORT_ADDRES, universalClient, ctx); assertEquals(new QName("http://mvv.oep.com/", "updateStatus"), request.action); response = rev120315.send(universalClient.getWsdlUrl(), request, null); universalClient.processClientResponse(response, ctx); // ответ с вложением testServer.setResponseBody("mvvact/updateStatus/response2.xml"); request = createRequest(PORT_ADDRES, universalClient, ctx); assertEquals(new QName("http://mvv.oep.com/", "updateStatus"), request.action); response = rev120315.send(universalClient.getWsdlUrl(), request, null); assertEquals("xxxxx", response.enclosureDescriptor); assertEquals(1, response.enclosures.length); Enclosure enclosure = response.enclosures[0]; assertEquals("req_f73251fa-6030-4ca0-b944-9394be769c3a.xml", enclosure.fileName); assertEquals(2332, enclosure.content.length); assertNotNull(enclosure.signature); assertTrue(enclosure.signature.valid); assertEquals(64, enclosure.signature.sign.length); assertEquals("T=Генеральный директор, CN=Семенкин Максим Викторович, O=ООО КодИнсайд, " + "L=Пенза, ST=58 Пензенская область, C=RU, EMAILADDRESS=maxim.semenkin@gmail.ru, " + "OID.1.2.643.3.131.1.1=5837040135, OID.1.2.643.100.1=1095837000929", enclosure.signature.certificate.getSubjectDN().getName()); universalClient.processClientResponse(response, ctx); } finally { testServer.stop(); } } private ClientRequest createRequest(String port, Client client, ExchangeContext ctx) { ClientRequest request = client.createClientRequest(ctx); request.portAddress = port; request.packet.sender = request.packet.originator = new InfoSystem("test", "test"); return request; } }