Commit e15114f6 authored by d.maklakov's avatar d.maklakov
Browse files

Add test with thousand cargo places travelled through three instances.

parent 5e621608
Showing with 2144 additions and 12 deletions
+2144 -12
package com.cdek.transport.model.cargoplace.sync;
import java.util.List;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* Класс для хранения и передачи uuid'ов грузомест, связанных с консолидированным грузоместом
*/
public class ConsolidationUuidsTO {
public class ConsolidationUuidsTO implements Serializable {
/**
* uuid консолидированного грузоместа
*/
......
......@@ -7,6 +7,9 @@ import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import ru.cdek.warehouse.web.test.CargoPlaceCommandExecutor;
import java.util.ArrayList;
import java.util.List;
/**
* Контроллер для выполнения запросов в тестах
*/
......@@ -33,6 +36,47 @@ public class TestController extends BaseController {
cargoPlaceCommandExecutor.accept(consolidationUuidsTO);
}
@RequestMapping(value = "/cargoplace/multiple_ship/{count}/{waybillUuid}/{waybillItemUuid}", method = RequestMethod.POST)
@ResponseBody
public List<ConsolidationUuidsTO> multipleShip(@PathVariable("count") Integer count, @PathVariable("waybillUuid") String waybillUuid, @PathVariable("waybillItemUuid") String waybillItemUuid) {
List<ConsolidationUuidsTO> result = new ArrayList<>(count);
for (int index = 0; index < count; ++index) {
result.add(cargoPlaceCommandExecutor.ship(waybillUuid, generateUuid(waybillItemUuid, index)));
}
return result;
}
@RequestMapping(value = "/cargoplace/multiple_transit", method = RequestMethod.POST)
@ResponseBody
public List<ConsolidationUuidsTO> transit(@RequestBody List<ConsolidationUuidsTO> consolidationUuidsTOs) {
List<ConsolidationUuidsTO> result = new ArrayList<>(consolidationUuidsTOs.size());
for (ConsolidationUuidsTO uuidsTO: consolidationUuidsTOs) {
result.add(cargoPlaceCommandExecutor.transit(uuidsTO));
}
return result;
}
@RequestMapping(value = "/cargoplace/multiple_accept", method = RequestMethod.POST)
@ResponseStatus(value = HttpStatus.OK)
public void accept(@RequestBody List<ConsolidationUuidsTO> consolidationUuidsTOs) {
for (ConsolidationUuidsTO uuidsTO: consolidationUuidsTOs) {
cargoPlaceCommandExecutor.accept(uuidsTO);
}
}
private static String generateUuid(String baseUuid, int addIndex) {
String[] parts = baseUuid.split("-");
int lastIndex = parts.length - 1;
String modifiedPart = parts[lastIndex];
Long longPresentation = Long.parseLong(modifiedPart, 16);
longPresentation += addIndex;
modifiedPart = Long.toHexString(longPresentation);
parts[lastIndex] = modifiedPart;
return String.join("-", parts);
}
@Required
public void setCargoPlaceCommandExecutor(CargoPlaceCommandExecutor cargoPlaceCommandExecutor) {
this.cargoPlaceCommandExecutor = cargoPlaceCommandExecutor;
......
package ru.cdek.warehouse.web.sync;
import com.cdek.transport.model.cargoplace.sync.ConsolidationUuidsTO;
import com.github.springtestdbunit.DbUnitTestExecutionListener;
import com.github.springtestdbunit.annotation.DatabaseSetup;
import com.github.springtestdbunit.annotation.DatabaseTearDown;
import com.github.springtestdbunit.annotation.DbUnitConfiguration;
......@@ -7,7 +9,8 @@ import org.flywaydb.test.junit.FlywayTestExecutionListener;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import com.github.springtestdbunit.DbUnitTestExecutionListener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.ContextConfiguration;
......@@ -16,16 +19,14 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.support.DependencyInjectionTestExecutionListener;
import org.springframework.test.context.support.DirtiesContextTestExecutionListener;
import org.springframework.test.context.transaction.TransactionalTestExecutionListener;
import ru.cdek.warehouse.web.sync.support.WebServerWrapper;
import ru.cdek.warehouse.web.sync.support.RestCargoPlaceCommandClient;
import com.cdek.transport.model.cargoplace.sync.ConsolidationUuidsTO;
import ru.cdek.warehouse.web.sync.support.WebServerWrapper;
import java.util.List;
import java.util.Arrays;
import java.util.List;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.springframework.test.annotation.DirtiesContext.ClassMode.AFTER_CLASS;
/**
......@@ -55,6 +56,7 @@ import static org.springframework.test.annotation.DirtiesContext.ClassMode.AFTER
@DatabaseTearDown(connection="aux2DatabaseConnection", value="/entries/cleaning.xml")
@DirtiesContext(classMode = AFTER_CLASS)
public class CargoPlaceSyncDocumentsTest {
private static final Logger LOG = LoggerFactory.getLogger(CargoPlaceSyncDocumentsTest.class);
private static final String AUX0_URL = "http://localhost:7072";
private static final String AUX1_URL = "http://localhost:7074";
......@@ -67,7 +69,9 @@ public class CargoPlaceSyncDocumentsTest {
private static final Integer CENTRAL_SERVER = 3;
private static String WAYBILL_UUID = "02528380-819d-4c0e-8f78-017b1caa1717";
private static String WAYBILL_ITEM_UUID = "baca8bda-6bd1-41b7-866c-01c5a49204ee";
private static String WAYBILL_ITEM_UUID = "baca8bda-6bd1-41b7-866c-11c5a49204ee";
private static final Integer HIGH_LOAD_TEST_CARGO_PLACES_COUNT = 1000;
@Autowired
private RestCargoPlaceCommandClient cargoPlaceCommandClient;
......@@ -103,6 +107,38 @@ public class CargoPlaceSyncDocumentsTest {
stopWebServers(servers);
}
@Test
@Ignore
public void testPhase15HighLoad_Ok() throws InterruptedException {
List<WebServerWrapper> servers = getWebServers();
assertTrue(servers.get(CENTRAL_SERVER).start());
assertTrue(servers.get(AUX0_SERVER).start());
assertTrue(servers.get(AUX1_SERVER).start());
assertTrue(servers.get(AUX2_SERVER).start());
long startTime = System.currentTimeMillis();
List<ConsolidationUuidsTO> consolidationUuids = cargoPlaceCommandClient.multipleShip(AUX0_URL, HIGH_LOAD_TEST_CARGO_PLACES_COUNT,
WAYBILL_UUID, WAYBILL_ITEM_UUID);
waitToSyncWebServers();
assertNotNull(consolidationUuids);
assertTrue(consolidationUuids.size() == HIGH_LOAD_TEST_CARGO_PLACES_COUNT);
consolidationUuids = cargoPlaceCommandClient.multipleTransit(AUX1_URL, consolidationUuids);
waitToSyncWebServers();
assertNotNull(consolidationUuids);
assertTrue(consolidationUuids.size() == HIGH_LOAD_TEST_CARGO_PLACES_COUNT);
assertTrue(cargoPlaceCommandClient.multipleAccept(AUX2_URL, consolidationUuids));
waitToSyncWebServers();
LOG.info(String.format("Processing of %d cargo places took %d ms",
HIGH_LOAD_TEST_CARGO_PLACES_COUNT, System.currentTimeMillis() - startTime));
stopWebServers(servers);
}
private List<WebServerWrapper> getWebServers() {
WebServerWrapper[] servers = {
new WebServerWrapper(".\\src\\test\\resources\\test-aux0-config.properties"),
......
......@@ -11,6 +11,9 @@ import org.springframework.beans.factory.annotation.Required;
import org.springframework.util.DigestUtils;
import org.springframework.web.client.RestTemplate;
import java.util.Arrays;
import java.util.List;
/**
* Клиент удаленного запуска эмуляций действий персонала склада
*/
......@@ -26,8 +29,8 @@ public class RestCargoPlaceCommandClient implements InitializingBean {
private RestTemplateFactory restTemplateFactory = new RestTemplateFactory();
public void afterPropertiesSet() throws Exception {
restTemplateFactory.setReadTimeout(60000);
restTemplateFactory.setConnectTimeout(60000);
restTemplateFactory.setReadTimeout(300000);
restTemplateFactory.setConnectTimeout(300000);
restTemplateFactory.setUserProvider(testUserProvider);
}
......@@ -45,6 +48,22 @@ public class RestCargoPlaceCommandClient implements InitializingBean {
}
}
public List<ConsolidationUuidsTO> multipleShip(String url, Integer count, String waybillUuid, String startWaybillItemUuid) {
testUserProvider.getCurrentUser().token = generateToken(url, testUserProvider.getCurrentUser());
try {
String path = createUrl(url, CARGO_PLACE_API_URL + "/multiple_ship/{count}/{waybillUuid}/{startWaybillItemUuid}");
RestTemplate requestTemplate = restTemplateFactory.getObject();
ConsolidationUuidsTO[] uuids = requestTemplate.postForObject(path, null, ConsolidationUuidsTO[].class,
count, waybillUuid, startWaybillItemUuid);
return Arrays.asList(uuids);
} catch (Exception ex) {
LOG.error("Fails to ship multiple cargo place(s).", ex);
return null;
}
}
public ConsolidationUuidsTO transit(String url, ConsolidationUuidsTO consolidationUuidsTO) {
testUserProvider.getCurrentUser().token = generateToken(url, testUserProvider.getCurrentUser());
......@@ -59,6 +78,21 @@ public class RestCargoPlaceCommandClient implements InitializingBean {
}
}
public List<ConsolidationUuidsTO> multipleTransit(String url, List<ConsolidationUuidsTO> consolidationUuidsTOs) {
testUserProvider.getCurrentUser().token = generateToken(url, testUserProvider.getCurrentUser());
try {
String path = createUrl(url,CARGO_PLACE_API_URL + "/multiple_transit");
RestTemplate requestTemplate = restTemplateFactory.getObject();
ConsolidationUuidsTO[] uuids = requestTemplate.postForObject(path, consolidationUuidsTOs, ConsolidationUuidsTO[].class);
return Arrays.asList(uuids);
} catch (Exception ex) {
LOG.error("Fails to transit multiple cargo place(s).", ex);
return null;
}
}
public boolean accept(String url, ConsolidationUuidsTO consolidationUuidsTO) {
testUserProvider.getCurrentUser().token = generateToken(url, testUserProvider.getCurrentUser());
......@@ -72,6 +106,19 @@ public class RestCargoPlaceCommandClient implements InitializingBean {
}
}
public boolean multipleAccept(String url, List<ConsolidationUuidsTO> consolidationUuidsTOs) {
testUserProvider.getCurrentUser().token = generateToken(url, testUserProvider.getCurrentUser());
try {
RestTemplate requestTemplate = restTemplateFactory.getObject();
requestTemplate.postForLocation(createUrl(url, CARGO_PLACE_API_URL + "/multiple_accept"), consolidationUuidsTOs);
return true;
} catch (Exception ex) {
LOG.error("Fails to accept multiple cargo place(s).", ex);
return false;
}
}
private String createUrl(String url, String path) {
return url + '/' + path;
}
......
......@@ -25,7 +25,10 @@
<document_consolidation />
<document_acceptance />
<document_deconsolidation />
<document_delivery />
<document_return_undelivered />
<shipment />
<document_sorter_income />
<cargo_place />
<cargo_place_status />
......@@ -34,6 +37,7 @@
<cargo_place_problem_lnk />
<correction_cargo_place_lnk />
<document_sorter_item_lnk />
<document_cargo_place_lnk />
<document_seal_lnk />
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment