Skip to content

Commit

Permalink
Remove long running test (is tested elsewhere) + clean up code
Browse files Browse the repository at this point in the history
  • Loading branch information
dotasek committed Aug 27, 2024
1 parent 47a13e3 commit 041b6e8
Showing 1 changed file with 12 additions and 122 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -24,24 +24,19 @@
import java.util.Arrays;
import java.util.List;
import java.util.Set;
import java.util.concurrent.atomic.AtomicInteger;

import org.apache.commons.io.IOUtils;
import org.hl7.fhir.r5.context.SimpleWorkerContext;
import org.hl7.fhir.r5.elementmodel.Manager;
import org.hl7.fhir.r5.model.StructureDefinition;
import org.hl7.fhir.r5.test.utils.TestingUtilities;
import org.hl7.fhir.utilities.FhirPublication;
import org.hl7.fhir.utilities.TimeTracker;
import org.hl7.fhir.utilities.VersionUtil;
import org.hl7.fhir.utilities.VersionUtilities;
import org.hl7.fhir.utilities.settings.FhirSettings;
import org.hl7.fhir.validation.IgLoader;
import org.hl7.fhir.validation.ValidationEngine;
import org.hl7.fhir.validation.cli.model.CliContext;
import org.hl7.fhir.validation.cli.model.FileInfo;
import org.hl7.fhir.validation.cli.model.ValidationRequest;
import org.hl7.fhir.validation.cli.utils.Common;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.mockito.ArgumentMatchers;
Expand Down Expand Up @@ -153,30 +148,26 @@ public void convertSingleSource() throws Exception {

@Test
@DisplayName("Test that conversion throws an Exception when no -output or -outputSuffix params are set")
public void convertSingleSourceNoOutput() throws Exception {
public void convertSingleSourceNoOutput() {
SessionCache sessionCache = mock(SessionCache.class);
ValidationService validationService = new ValidationService(sessionCache);
ValidationEngine validationEngine = mock(ValidationEngine.class);

CliContext cliContext = getCliContextSingleSource();
Exception exception = assertThrows( Exception.class, () -> {
validationService.convertSources(cliContext,validationEngine);
});
assertThrows( Exception.class, () -> validationService.convertSources(cliContext,validationEngine));
}



@Test
@DisplayName("Test that conversion throws an Exception when multiple sources are set and an -output param is set")
public void convertMultipleSourceOnlyOutput() throws Exception {
public void convertMultipleSourceOnlyOutput() {
SessionCache sessionCache = mock(SessionCache.class);
ValidationService validationService = new ValidationService(sessionCache);
ValidationEngine validationEngine = mock(ValidationEngine.class);

CliContext cliContext = getCliContextMultipleSource();
assertThrows( Exception.class, () -> {
validationService.convertSources(cliContext,validationEngine);
}
assertThrows( Exception.class, () -> validationService.convertSources(cliContext,validationEngine)
);
}

Expand Down Expand Up @@ -211,28 +202,24 @@ public void generateSnapshotSingleSource() throws Exception {

@Test
@DisplayName("Test that snapshot generation throws an Exception when no -output or -outputSuffix params are set")
public void generateSnapshotSingleSourceNoOutput() throws Exception {
public void generateSnapshotSingleSourceNoOutput() {
SessionCache sessionCache = mock(SessionCache.class);
ValidationService validationService = new ValidationService(sessionCache);
ValidationEngine validationEngine = mock(ValidationEngine.class);

CliContext cliContext = getCliContextSingleSource();
Exception exception = assertThrows( Exception.class, () -> {
validationService.generateSnapshot(cliContext.setSv(DUMMY_SV),validationEngine);
});
assertThrows( Exception.class, () -> validationService.generateSnapshot(cliContext.setSv(DUMMY_SV),validationEngine));
}

@Test
@DisplayName("Test that snapshot generation throws an Exception when multiple sources are set and an -output param is set")
public void generateSnapshotMultipleSourceOnlyOutput() throws Exception {
public void generateSnapshotMultipleSourceOnlyOutput() {
SessionCache sessionCache = mock(SessionCache.class);
ValidationService validationService = new ValidationService(sessionCache);
ValidationEngine validationEngine = mock(ValidationEngine.class);

CliContext cliContext = getCliContextMultipleSource();
assertThrows( Exception.class, () -> {
validationService.generateSnapshot(cliContext.setOutput(DUMMY_OUTPUT).setSv(DUMMY_SV),validationEngine);
}
assertThrows( Exception.class, () -> validationService.generateSnapshot(cliContext.setOutput(DUMMY_OUTPUT).setSv(DUMMY_SV),validationEngine)
);
}

Expand Down Expand Up @@ -287,7 +274,7 @@ public void buildValidationEngineTest() throws IOException, URISyntaxException {
final ValidationEngine mockValidationEngine = mock(ValidationEngine.class);
when(mockValidationEngine.getContext()).thenReturn(workerContext);

final ValidationEngine.ValidationEngineBuilder mockValidationEngineBuilder = mock(ValidationEngine.ValidationEngineBuilder.class);;
final ValidationEngine.ValidationEngineBuilder mockValidationEngineBuilder = mock(ValidationEngine.ValidationEngineBuilder.class);
final ValidationService validationService = createFakeValidationService(mockValidationEngineBuilder, mockValidationEngine);

CliContext cliContext = new CliContext();
Expand All @@ -305,7 +292,7 @@ public void buildValidationEngineDisableDefaultResourceFetcherTest() throws IOEx
final ValidationEngine mockValidationEngine = mock(ValidationEngine.class);
when(mockValidationEngine.getContext()).thenReturn(workerContext);

final ValidationEngine.ValidationEngineBuilder mockValidationEngineBuilder = mock(ValidationEngine.ValidationEngineBuilder.class);;
final ValidationEngine.ValidationEngineBuilder mockValidationEngineBuilder = mock(ValidationEngine.ValidationEngineBuilder.class);
final ValidationService validationService = createFakeValidationService(mockValidationEngineBuilder, mockValidationEngine);

CliContext cliContext = new CliContext();
Expand All @@ -316,101 +303,6 @@ public void buildValidationEngineDisableDefaultResourceFetcherTest() throws IOEx
verify(mockValidationEngineBuilder).withUserAgent(eq("fhir/validator/" + VersionUtil.getVersion()));
}


final String[] multithreadTestPackages = {
"hl7.fhir.us.core#3.1.1",
"hl7.fhir.us.core#4.0.0",
"hl7.fhir.us.core#5.0.1",
"hl7.fhir.us.core#6.1.0",
"hl7.fhir.us.core#7.0.0"
};

@Test
public void multithreadingTest() throws IOException {
ValidationService myService = new ValidationService();
final AtomicInteger totalSuccessful = new AtomicInteger();

List<Thread> threads = new ArrayList<>();
int i = 0;
for (String currentPackage : multithreadTestPackages) {
final int index = i++;
Thread t = new Thread(() -> {
try {
myService.initializeValidator(
new CliContext().setTxServer(null).setIgs(List.of(currentPackage)),
"hl7.fhir.r4.core",
new TimeTracker(),
null
);

totalSuccessful.incrementAndGet();
System.out.println("Thread " + index + " completed");
} catch (Throwable e) {
e.printStackTrace();
System.err.println("Thread " + index + " failed");
}
});
t.start();
threads.add(t);
}
threads.forEach(t -> {
try {
t.join();
} catch (InterruptedException e) {

}
});
assertEquals(multithreadTestPackages.length, totalSuccessful.get());
}
@Test
public void multithreadingTestMinimal() throws IOException {

final AtomicInteger totalSuccessful = new AtomicInteger();

String definitions = "hl7.fhir.r4.core";

List<Thread> threads = new ArrayList<>();

int i = 0;
for (String currentPackage : multithreadTestPackages) {
final int index = i++;
Thread t = new Thread(() -> {
try {
List<String> igs = List.of(currentPackage);
CliContext cliContext = new CliContext();
ValidationEngine validationEngine = new ValidationEngine.ValidationEngineBuilder().withTHO(false).withVersion("4.0.1").withTimeTracker(new TimeTracker()).withUserAgent(Common.getValidatorUserAgent()).fromSource(definitions);

FhirPublication ver = FhirPublication.fromCode(cliContext.getSv());
IgLoader igLoader = new IgLoader(validationEngine.getPcm(), validationEngine.getContext(), validationEngine.getVersion(), validationEngine.isDebug());
igLoader.loadIg(validationEngine.getIgs(), validationEngine.getBinaries(), "hl7.terminology", false);
if (!VersionUtilities.isR5Ver(validationEngine.getContext().getVersion())) {
igLoader.loadIg(validationEngine.getIgs(), validationEngine.getBinaries(), "hl7.fhir.uv.extensions", false);
}

for (String src : igs) {
igLoader.loadIg(validationEngine.getIgs(), validationEngine.getBinaries(), src, cliContext.isRecursive());
}

totalSuccessful.incrementAndGet();
System.out.println("Thread " + index + " completed");
} catch (Throwable e) {
e.printStackTrace();
System.err.println("Thread " + index + " failed");
}
});
t.start();
threads.add(t);
}
threads.forEach(t -> {
try {
t.join();
} catch (InterruptedException e) {

}
});
assertEquals(multithreadTestPackages.length, totalSuccessful.get());
}

private static ValidationService createFakeValidationService(ValidationEngine.ValidationEngineBuilder validationEngineBuilder, ValidationEngine validationEngine) {
return new ValidationService() {
@Override
Expand All @@ -421,16 +313,14 @@ protected ValidationEngine.ValidationEngineBuilder getValidationEngineBuilder()
when(validationEngineBuilder.withUserAgent(anyString())).thenReturn(validationEngineBuilder);
try {
when(validationEngineBuilder.fromSource(isNull())).thenReturn(validationEngine);
} catch (IOException e) {
throw new RuntimeException(e);
} catch (URISyntaxException e) {
} catch (IOException | URISyntaxException e) {
throw new RuntimeException(e);
}
return validationEngineBuilder;
}

@Override
protected void loadIgsAndExtensions(ValidationEngine validationEngine, CliContext cliContext, TimeTracker timeTracker) throws IOException, URISyntaxException {
protected void loadIgsAndExtensions(ValidationEngine validationEngine, CliContext cliContext, TimeTracker timeTracker) {
//Don't care. Do nothing.
}
};
Expand Down

0 comments on commit 041b6e8

Please sign in to comment.