Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import java.util.Set;

import javax.servlet.http.HttpServletResponse;

import org.ihtsdo.rvf.entity.Assertion;
import org.ihtsdo.rvf.entity.AssertionGroup;
import org.ihtsdo.rvf.execution.service.config.MysqlExecutionConfig;
Expand Down Expand Up @@ -41,10 +42,10 @@ public class AssertionGroupController {

@Autowired
private AssertionService assertionService;

@Autowired
private AssertionGroupRepository assertionGroupRepository;

@Autowired
private AssertionHelper assertionHelper;
private final ObjectMapper objectMapper = new ObjectMapper();
Expand All @@ -68,7 +69,7 @@ public List<AssertionGroup> getGroups() {
@ApiOperation(value = "Get all assertions for a given assertion group", notes = "Retrieves all assertions for a given assertion group identified by the group id.")
public List<Assertion> getAssertionsForGroup(@ApiParam(value = "Assertion group id") @PathVariable final Long id) {

AssertionGroup group = (AssertionGroup) assertionGroupRepository.getOne(id);
AssertionGroup group = assertionGroupRepository.getOne(id);
return new ArrayList<>(group.getAssertions());
}

Expand All @@ -79,7 +80,7 @@ public AssertionGroup addAssertionsToGroup(@PathVariable final Long id,
@RequestBody(required = false) final List<String> assertionsList,
final HttpServletResponse response) {

final AssertionGroup group = (AssertionGroup) assertionGroupRepository.getOne(id);
final AssertionGroup group = assertionGroupRepository.getOne(id);
// Do we have anything to add?
if (assertionsList == null || assertionsList.size() == 0) {
response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
Expand All @@ -101,7 +102,7 @@ public AssertionGroup addAssertionsToGroup(@PathVariable final Long id,
+ " This api may only be used when user desires to add all assertion found in the system to an assertion group"
+ " otherwise use {id}/assertions api as post call.")
public AssertionGroup addAllAssertions(@PathVariable final Long id) {
AssertionGroup group = (AssertionGroup) assertionGroupRepository.getOne(id);
AssertionGroup group = assertionGroupRepository.getOne(id);
List<Assertion> assertionList = assertionService.findAll();
group.setAssertions(new HashSet<>(assertionList));
return assertionGroupRepository.save(group);
Expand All @@ -114,7 +115,7 @@ public AssertionGroup addAllAssertions(@PathVariable final Long id) {
public AssertionGroup removeAssertionsFromGroup(
@PathVariable final Long id,
@ApiParam(value = "Only assertion id is required") @RequestBody final List<Assertion> assertions) {
AssertionGroup group = (AssertionGroup) assertionGroupRepository.getOne(id);
AssertionGroup group = assertionGroupRepository.getOne(id);
for (final Assertion assertion : group.getAssertions()) {
group = assertionService.removeAssertionFromGroup(assertion, group);
}
Expand All @@ -128,10 +129,10 @@ public AssertionGroup removeAssertionsFromGroup(
public AssertionGroup setAsAssertionsInGroup(@PathVariable final Long id,
@RequestBody(required = false) final Set<Assertion> assertions) {

final AssertionGroup group = (AssertionGroup) assertionGroupRepository.getOne(id);
final AssertionGroup group = assertionGroupRepository.getOne(id);
// replace all existing assertions with current list
group.setAssertions(assertions);
return (AssertionGroup) assertionGroupRepository.save(group);
return assertionGroupRepository.save(group);
}

@RequestMapping(value = "{id}", method = RequestMethod.GET)
Expand All @@ -142,15 +143,15 @@ public AssertionGroup getAssertionGroup(@PathVariable final Long id) {
if (!assertionGroupRepository.existsById(id)) {
throw new EntityNotFoundException(id);
}
return (AssertionGroup) assertionGroupRepository.getOne(id);
return assertionGroupRepository.getOne(id);
}

@RequestMapping(value = "{id}", method = RequestMethod.DELETE)
@ResponseBody
@ResponseStatus(HttpStatus.OK)
@ApiOperation(value = "Delete an assertion group", notes = "Deletes an assertion group from the system")
public AssertionGroup deleteAssertionGroup(@ApiParam(value="Assertion group id") @PathVariable final Long id) {
final AssertionGroup group = (AssertionGroup) assertionGroupRepository.getOne(id);
final AssertionGroup group = assertionGroupRepository.getOne(id);
group.removeAllAssertionsFromGroup();
assertionGroupRepository.delete(group);
return group;
Expand All @@ -172,7 +173,7 @@ public AssertionGroup createAssertionGroupWithName(@RequestParam final String na
@ApiOperation(value = "Update an assertion group", notes = "Updates the group name for the assertion group identified by the group id.")
public AssertionGroup updateAssertionGroup(@PathVariable final Long id,
@ApiParam(value = "Assertion group name") @RequestParam final String name) {
AssertionGroup group = (AssertionGroup) assertionGroupRepository.getOne(id);
AssertionGroup group = assertionGroupRepository.getOne(id);
group.setName(name);
return assertionGroupRepository.save(group);
}
Expand All @@ -184,9 +185,9 @@ public AssertionGroup updateAssertionGroup(@PathVariable final Long id,
public Map<String, Object> executeAssertions(@ApiParam(value="Assertion group id")@PathVariable final Long id,
@ApiParam(value="Unique number") @RequestParam final Long runId,
@ApiParam(value="Prospective version") @RequestParam final String prospectiveReleaseVersion,
@ApiParam(value="Previous release version") @RequestParam final String previousReleaseVersion) {
@ApiParam(value="Previous release version", required = false) @RequestParam final String previousReleaseVersion) {

AssertionGroup group = (AssertionGroup) assertionGroupRepository.getOne(id);
AssertionGroup group = assertionGroupRepository.getOne(id);
MysqlExecutionConfig config = new MysqlExecutionConfig(runId);
config.setPreviousVersion(previousReleaseVersion);
config.setProspectiveVersion(prospectiveReleaseVersion);
Expand Down
2 changes: 2 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ services:
container_name: rvf
depends_on:
- db
environment:
- rvf.assertion.import.required=true
entrypoint: java -Xms512m -Xmx4g -DrvfConfigLocation=/app/config -jar api.jar --server.port=8081 --server.servlet.context-path=/api
ports:
- 8081:8081
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import org.ihtsdo.rvf.entity.Test;
import org.ihtsdo.rvf.entity.TestRunItem;
import org.ihtsdo.rvf.execution.service.config.MysqlExecutionConfig;
import org.ihtsdo.rvf.importer.AssertionGroupImporter.ProductName;
import org.ihtsdo.rvf.service.AssertionService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand All @@ -49,7 +50,7 @@ public class AssertionExecutionService {
private String deltaTableSuffix = "d";
private String snapshotTableSuffix = "s";
private String fullTableSuffix = "f";

private ExecutorService executorService = Executors.newCachedThreadPool();

private final Logger logger = LoggerFactory.getLogger(AssertionExecutionService.class);
Expand Down Expand Up @@ -88,9 +89,9 @@ public Collection<TestRunItem> executeAssertions(final Collection<Assertion> ass

return items;
}

public List<TestRunItem> executeAssertionsConcurrently(List<Assertion> assertions, final MysqlExecutionConfig executionConfig) {

final List<Future<Collection<TestRunItem>>> concurrentTasks = new ArrayList<>();
final List<TestRunItem> results = new ArrayList<>();
int counter = 1;
Expand All @@ -116,7 +117,7 @@ public Collection<TestRunItem> call() throws Exception {
}
counter++;
}

// Wait for all concurrent tasks to finish
for (final Future<Collection<TestRunItem>> concurrentTask : concurrentTasks) {
try {
Expand Down Expand Up @@ -165,12 +166,12 @@ public TestRunItem executeTest(final Assertion assertion, final Test test, final
logger.warn("Failed to excute command {},Nested exception is : " + e.fillInStackTrace(), command.toString());
runItem.setFailureMessage("Error executing SQL command object Nested exception : " + e.fillInStackTrace());
return runItem;
}
}
} else {
runItem.setFailureMessage("Test does not have any associated execution command:" + test);
return runItem;
}

try {
long extractTimeStart = System.currentTimeMillis();
extractTestResult(assertion, runItem, config);
Expand Down Expand Up @@ -249,13 +250,16 @@ private List<String> transformSql(String[] parts, Assertion assertion, MysqlExec
List<String> result = new ArrayList<>();
String defaultCatalog = dataSource.getDefaultCatalog();
String prospectiveSchema = config.getProspectiveVersion();
final String[] nameParts = config.getProspectiveVersion().split("_");
String moduleId = ProductName.toModuleId(nameParts[1]);
String version = nameParts[2];
String previousReleaseSchema = config.getPreviousVersion();

//We need both these schemas to exist
if (prospectiveSchema == null) {
throw new ConfigurationException (FAILED_TO_FIND_RVF_DB_SCHEMA + prospectiveSchema);
}

if (config.isReleaseValidation() && !config.isFirstTimeRelease() && previousReleaseSchema == null) {
throw new ConfigurationException (FAILED_TO_FIND_RVF_DB_SCHEMA + previousReleaseSchema);
}
Expand All @@ -267,6 +271,8 @@ private List<String> transformSql(String[] parts, Assertion assertion, MysqlExec
// replace all substitutions for exec
part = part.replaceAll("<RUNID>", String.valueOf(config.getExecutionId()));
part = part.replaceAll("<ASSERTIONUUID>", String.valueOf(assertion.getAssertionId()));
part = part.replaceAll("<MODULEID>", moduleId);
part = part.replaceAll("<VERSION>", version);
// watch out for any 's that users might have introduced
part = part.replaceAll("qa_result", defaultCatalog+ "." + qaResulTableName);
part = part.replaceAll("<PROSPECTIVE>", prospectiveSchema);
Expand Down Expand Up @@ -315,7 +321,7 @@ private void extractTestResult(final Assertion assertion, final TestRunItem runI
}
}
}

if ( counter < config.getFailureExportMax() ) {
runItem.setFailureCount(counter);
} else {
Expand Down
Loading