Merge remote-tracking branch 'origin/master'
This commit is contained in:
commit
fbfd81532d
|
@ -5,7 +5,7 @@
|
|||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>org.hl7.fhir.core</artifactId>
|
||||
<version>6.3.25-SNAPSHOT</version>
|
||||
<version>6.3.26-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>org.hl7.fhir.core</artifactId>
|
||||
<version>6.3.25-SNAPSHOT</version>
|
||||
<version>6.3.26-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>org.hl7.fhir.core</artifactId>
|
||||
<version>6.3.25-SNAPSHOT</version>
|
||||
<version>6.3.26-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>org.hl7.fhir.core</artifactId>
|
||||
<version>6.3.25-SNAPSHOT</version>
|
||||
<version>6.3.26-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>org.hl7.fhir.core</artifactId>
|
||||
<version>6.3.25-SNAPSHOT</version>
|
||||
<version>6.3.26-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>org.hl7.fhir.core</artifactId>
|
||||
<version>6.3.25-SNAPSHOT</version>
|
||||
<version>6.3.26-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>org.hl7.fhir.core</artifactId>
|
||||
<version>6.3.25-SNAPSHOT</version>
|
||||
<version>6.3.26-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>org.hl7.fhir.core</artifactId>
|
||||
<version>6.3.25-SNAPSHOT</version>
|
||||
<version>6.3.26-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>org.hl7.fhir.core</artifactId>
|
||||
<version>6.3.25-SNAPSHOT</version>
|
||||
<version>6.3.26-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
|
|
@ -210,26 +210,30 @@ public class FilesystemPackageCacheManager extends BasePackageCacheManager imple
|
|||
Utilities.createDirectory(cacheFolder.getAbsolutePath());
|
||||
createIniFile();
|
||||
} else {
|
||||
if (!isCacheFolderValid()) {
|
||||
if (!iniFileExists()) {
|
||||
createIniFile();
|
||||
}
|
||||
if (!isIniFileCurrentVersion()) {
|
||||
clearCache();
|
||||
createIniFile();
|
||||
} else {
|
||||
deleteOldTempDirectories();
|
||||
}
|
||||
deleteOldTempDirectories();
|
||||
}
|
||||
return null;
|
||||
});
|
||||
}
|
||||
|
||||
private boolean isCacheFolderValid() throws IOException {
|
||||
private boolean iniFileExists() throws IOException {
|
||||
String iniPath = getPackagesIniPath();
|
||||
File iniFile = ManagedFileAccess.file(iniPath);
|
||||
if (!(iniFile.exists())) {
|
||||
return false;
|
||||
}
|
||||
return iniFile.exists();
|
||||
}
|
||||
|
||||
private boolean isIniFileCurrentVersion() throws IOException {
|
||||
String iniPath = getPackagesIniPath();
|
||||
IniFile ini = new IniFile(iniPath);
|
||||
String v = ini.getStringProperty("cache", "version");
|
||||
return CACHE_VERSION.equals(v);
|
||||
String version = ini.getStringProperty("cache", "version");
|
||||
return CACHE_VERSION.equals(version);
|
||||
}
|
||||
|
||||
private void deleteOldTempDirectories() throws IOException {
|
||||
|
|
|
@ -650,7 +650,17 @@ public class NpmPackage {
|
|||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Create a package .index.json file for a package folder.
|
||||
* <p>
|
||||
* See <a href="https://hl7.org/fhir/packages.html#2.1.10.4">the FHIR specification</a> for details on .index.json
|
||||
* format and usage.
|
||||
*
|
||||
* @param desc
|
||||
* @param folder
|
||||
* @throws FileNotFoundException
|
||||
* @throws IOException
|
||||
*/
|
||||
public void indexFolder(String desc, NpmPackageFolder folder) throws FileNotFoundException, IOException {
|
||||
List<String> remove = new ArrayList<>();
|
||||
NpmPackageIndexBuilder indexer = new NpmPackageIndexBuilder();
|
||||
|
|
|
@ -1,22 +1,25 @@
|
|||
package org.hl7.fhir.utilities.npm;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
import java.io.FileWriter;
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Files;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
import org.hl7.fhir.utilities.IniFile;
|
||||
import org.hl7.fhir.utilities.filesystem.ManagedFileAccess;
|
||||
import org.junit.jupiter.api.RepeatedTest;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.condition.DisabledOnOs;
|
||||
import org.junit.jupiter.api.condition.EnabledOnOs;
|
||||
|
@ -100,7 +103,6 @@ public class FilesystemPackageManagerTests {
|
|||
@DisabledOnOs(OS.WINDOWS)
|
||||
public void testSystemCacheDirectory() throws IOException {
|
||||
File folder = new FilesystemPackageCacheManager.Builder().withSystemCacheFolder().getCacheFolder();
|
||||
|
||||
assertEquals( "/var/lib/.fhir/packages", folder.getAbsolutePath());
|
||||
}
|
||||
|
||||
|
@ -124,6 +126,118 @@ public class FilesystemPackageManagerTests {
|
|||
return params.stream();
|
||||
}
|
||||
|
||||
private void createDummyTemp(File cacheDirectory, String lowerCase) throws IOException {
|
||||
createDummyPackage(cacheDirectory, lowerCase);
|
||||
}
|
||||
|
||||
private void createDummyPackage(File cacheDirectory, String packageName, String packageVersion) throws IOException {
|
||||
String directoryName = packageName + "#" + packageVersion;
|
||||
createDummyPackage(cacheDirectory, directoryName);
|
||||
}
|
||||
|
||||
private static void createDummyPackage(File cacheDirectory, String directoryName) throws IOException {
|
||||
File packageDirectory = ManagedFileAccess.file(cacheDirectory.getAbsolutePath(), directoryName);
|
||||
packageDirectory.mkdirs();
|
||||
|
||||
File dummyContentFile = ManagedFileAccess.file(packageDirectory.getAbsolutePath(), "dummy.txt");
|
||||
FileWriter wr = new FileWriter(dummyContentFile);
|
||||
wr.write("Ain't nobody here but us chickens");
|
||||
wr.flush();
|
||||
wr.close();
|
||||
}
|
||||
|
||||
private void assertThatDummyTempExists(File cacheDirectory, String dummyTempPackage) throws IOException {
|
||||
File dummyTempDirectory = ManagedFileAccess.file(cacheDirectory.getAbsolutePath(), dummyTempPackage);
|
||||
assertThat(dummyTempDirectory).exists();
|
||||
|
||||
File dummyContentFile = ManagedFileAccess.file(dummyTempDirectory.getAbsolutePath(), "dummy.txt");
|
||||
assertThat(dummyContentFile).exists();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCreatesIniIfDoesntExistAndCacheStaysIntact() throws IOException {
|
||||
File cacheDirectory = ManagedFileAccess.fromPath(Files.createTempDirectory("fpcm-multithreadingTest"));
|
||||
File cacheIni = ManagedFileAccess.file(cacheDirectory.getAbsolutePath(), "packages.ini");
|
||||
|
||||
createDummyPackage(cacheDirectory, "example.fhir.uv.myig", "1.2.3");
|
||||
|
||||
String dummyTempPackage = UUID.randomUUID().toString().toLowerCase();
|
||||
createDummyTemp(cacheDirectory, dummyTempPackage);
|
||||
assertThatDummyTempExists(cacheDirectory, dummyTempPackage);
|
||||
|
||||
assertThat(cacheIni).doesNotExist();
|
||||
FilesystemPackageCacheManager filesystemPackageCacheManager = new FilesystemPackageCacheManager.Builder().withCacheFolder(cacheDirectory.getAbsolutePath()).build();
|
||||
assertInitializedTestCacheIsValid(cacheDirectory, true);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Test
|
||||
public void testClearsCacheIfVersionIsWrong() throws IOException {
|
||||
File cacheDirectory = ManagedFileAccess.fromPath(Files.createTempDirectory("fpcm-multithreadingTest"));
|
||||
File cacheIni = ManagedFileAccess.file(cacheDirectory.getAbsolutePath(), "packages.ini");
|
||||
|
||||
createDummyPackage(cacheDirectory, "example.fhir.uv.myig", "1.2.3");
|
||||
String dummyTempPackage = UUID.randomUUID().toString().toLowerCase();
|
||||
createDummyTemp(cacheDirectory, dummyTempPackage);
|
||||
assertThatDummyTempExists(cacheDirectory, dummyTempPackage);
|
||||
|
||||
|
||||
IniFile ini = new IniFile(cacheIni.getAbsolutePath());
|
||||
ini.setStringProperty("cache", "version", "2", null);
|
||||
ini.save();
|
||||
|
||||
assertThat(cacheIni).exists();
|
||||
FilesystemPackageCacheManager filesystemPackageCacheManager = new FilesystemPackageCacheManager.Builder().withCacheFolder(cacheDirectory.getAbsolutePath()).build();
|
||||
assertInitializedTestCacheIsValid(cacheDirectory, false);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCacheStaysIntactIfVersionIsTheSame() throws IOException {
|
||||
File cacheDirectory = ManagedFileAccess.fromPath(Files.createTempDirectory("fpcm-multithreadingTest"));
|
||||
File cacheIni = ManagedFileAccess.file(cacheDirectory.getAbsolutePath(), "packages.ini");
|
||||
|
||||
createDummyPackage(cacheDirectory, "example.fhir.uv.myig", "1.2.3");
|
||||
String dummyTempPackage = UUID.randomUUID().toString().toLowerCase();
|
||||
createDummyTemp(cacheDirectory, dummyTempPackage);
|
||||
assertThatDummyTempExists(cacheDirectory, dummyTempPackage);
|
||||
|
||||
|
||||
IniFile ini = new IniFile(cacheIni.getAbsolutePath());
|
||||
ini.setStringProperty("cache", "version", "3", null);
|
||||
ini.save();
|
||||
|
||||
assertThat(cacheIni).exists();
|
||||
FilesystemPackageCacheManager filesystemPackageCacheManager = new FilesystemPackageCacheManager.Builder().withCacheFolder(cacheDirectory.getAbsolutePath()).build();
|
||||
assertInitializedTestCacheIsValid(cacheDirectory, true);
|
||||
}
|
||||
|
||||
private void assertInitializedTestCacheIsValid(File cacheDirectory, boolean dummyPackageShouldExist) throws IOException {
|
||||
assertThat(cacheDirectory).exists();
|
||||
File iniFile = ManagedFileAccess.file(cacheDirectory.getAbsolutePath(), "packages.ini");
|
||||
assertThat(ManagedFileAccess.file(cacheDirectory.getAbsolutePath(), "packages.ini")).exists();
|
||||
IniFile ini = new IniFile(iniFile.getAbsolutePath());
|
||||
String version = ini.getStringProperty("cache", "version");
|
||||
assertThat(version).isEqualTo("3");
|
||||
|
||||
File[] files = cacheDirectory.listFiles();
|
||||
if (dummyPackageShouldExist) {
|
||||
// Check that only packages.ini and our dummy package are in the cache. Our previous temp should be deleted.
|
||||
assertThat(files).hasSize(2); // packages.ini and example.fhir.uv.myig#1.2.3 (directory)
|
||||
|
||||
File dummyPackage = ManagedFileAccess.file(cacheDirectory.getAbsolutePath(), "example.fhir.uv.myig#1.2.3");
|
||||
assertThat(dummyPackage).exists();
|
||||
|
||||
File dummyContentFile = ManagedFileAccess.file(dummyPackage.getAbsolutePath(), "dummy.txt");
|
||||
assertThat(dummyContentFile).exists();
|
||||
} else {
|
||||
// Check that only packages.ini is in the cache.
|
||||
assertThat(files).hasSize(1);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@MethodSource("packageCacheMultiThreadTestParams")
|
||||
@ParameterizedTest
|
||||
public void packageCacheMultiThreadTest(final int threadTotal, final int packageCacheManagerTotal) throws IOException {
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>org.hl7.fhir.core</artifactId>
|
||||
<version>6.3.25-SNAPSHOT</version>
|
||||
<version>6.3.26-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>org.hl7.fhir.core</artifactId>
|
||||
<version>6.3.25-SNAPSHOT</version>
|
||||
<version>6.3.26-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
@ -119,37 +119,6 @@
|
|||
<optional>true</optional>
|
||||
</dependency>
|
||||
|
||||
<!-- CQL-to-ELM -->
|
||||
<dependency>
|
||||
<groupId>info.cqframework</groupId>
|
||||
<artifactId>cql</artifactId>
|
||||
<version>${info_cqframework_version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>info.cqframework</groupId>
|
||||
<artifactId>model</artifactId>
|
||||
<version>${info_cqframework_version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>info.cqframework</groupId>
|
||||
<artifactId>elm</artifactId>
|
||||
<version>${info_cqframework_version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>info.cqframework</groupId>
|
||||
<artifactId>cql-to-elm</artifactId>
|
||||
<version>${info_cqframework_version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>info.cqframework</groupId>
|
||||
<artifactId>quick</artifactId>
|
||||
<version>${info_cqframework_version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>info.cqframework</groupId>
|
||||
<artifactId>qdm</artifactId>
|
||||
<version>${info_cqframework_version}</version>
|
||||
</dependency>
|
||||
<!-- OkHttpDependency -->
|
||||
<dependency>
|
||||
<groupId>com.squareup.okhttp3</groupId>
|
||||
|
|
|
@ -46,7 +46,7 @@ import javax.annotation.Nonnull;
|
|||
import org.apache.commons.lang3.NotImplementedException;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.fhir.ucum.Decimal;
|
||||
import org.hl7.elm.r1.Code;
|
||||
|
||||
import org.hl7.fhir.exceptions.DefinitionException;
|
||||
import org.hl7.fhir.exceptions.FHIRException;
|
||||
import org.hl7.fhir.exceptions.PathEngineException;
|
||||
|
|
|
@ -8,10 +8,10 @@ import java.util.Collections;
|
|||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
|
||||
import org.hl7.fhir.ParametersParameter;
|
||||
|
||||
import org.hl7.fhir.r5.formats.IParser.OutputStyle;
|
||||
import org.hl7.fhir.r5.formats.JsonParser;
|
||||
import org.hl7.fhir.r5.model.Base;
|
||||
|
||||
import org.hl7.fhir.r5.model.Extension;
|
||||
import org.hl7.fhir.r5.model.OperationOutcome;
|
||||
import org.hl7.fhir.r5.model.OperationOutcome.OperationOutcomeIssueComponent;
|
||||
|
|
Loading…
Reference in New Issue