diff --git a/doc/sphinx-guides/source/installation/config.rst b/doc/sphinx-guides/source/installation/config.rst
index 2c576b03989..c21313a6121 100644
--- a/doc/sphinx-guides/source/installation/config.rst
+++ b/doc/sphinx-guides/source/installation/config.rst
@@ -1435,32 +1435,63 @@ It's also possible to change these values by stopping Payara, editing ``payara5/
dataverse.fqdn
++++++++++++++
-If the Dataverse installation has multiple DNS names, this option specifies the one to be used as the "official" hostname. For example, you may want to have ``dataverse.example.edu``, and not the less appealing ``server-123.example.edu`` to appear exclusively in all the registered global identifiers, etc.
-
-The password reset feature requires ``dataverse.fqdn`` to be configured.
-
-Configuring ``dataverse.fqdn`` is not enough. Read on for the importance of also setting ``dataverse.siteUrl``.
+If the Dataverse installation has multiple DNS names, this option specifies the one to be used as the "official"
+hostname. For example, you may want to have ``dataverse.example.edu``, and not the less appealing
+``server-123.example.edu`` to appear exclusively in all the registered global identifiers, etc.
+
+- Email confirmation links
+- Password reset links
+- Generating a Private URL
+- PID minting
+- Exporting to Schema.org format (and showing JSON-LD in HTML's tag)
+- Exporting to DDI format
+- Which Dataverse installation an "external tool" should return to
+- URLs embedded in SWORD API responses
+- ...
+
+Usually it will follow the pattern ``https:///``.
+*Only* the FQDN part of your Dataverse installation URL can be determined by setting ``dataverse.fqdn``.
+
+**Notes:**
+
+- The URL will default to using ``https://`` and no additional port information. If that does not suit your setup, you
+ can define an additional option, ``dataverse.siteUrl``, :ref:`explained below `, which always
+ takes precedence.
+- Can also be set via *MicroProfile Config API* sources, e.g. the environment variable ``DATAVERSE_FQDN``.
+ Defaults to ``localhost`` when used with ``mp.config.profile=ct``
.. _dataverse.siteUrl:
dataverse.siteUrl
+++++++++++++++++
-``dataverse.siteUrl`` is used to configure the URL for your Dataverse installation that you plan to advertise to your users. As explained in the :ref:`installation ` docs, this setting is critical for the correct operation of your installation.
-
-For example, your site URL could be https://dataverse.example.edu
+``dataverse.siteUrl`` is used to configure the URL for your Dataverse installation that you plan to advertise to your
+users. As explained in the :ref:`installation ` docs, this setting is critical for the correct
+operation of your installation. For example, your site URL could be https://dataverse.example.edu . That is, even though
+the server might also be available at uglier URLs such as https://server-123.example.edu, the site URL is the
+"official" URL.
-That is, even though the server might also be available at uglier URLs such as https://server-123.example.edu the site URL is the "official" URL.
+That said, some environments may require using a different URL pattern to access your installation. You might need to
+use HTTP without "S", a non-standard port and so on. This is especially useful in development or testing environments.
-The ``dataverse.siteUrl`` JVM option can be configured by following the procedure under :ref:`jvm-options` or by editing ``domain.xml`` directly. You can specify the protocol, host, and port number. Your ``domain.xml`` file could look like this, for example:
+You can provide any custom tailored site URL via ``dataverse.siteUrl``, which always takes precedence.
+Example: ``dataverse.siteUrl=http://localhost:8080``
-``-Ddataverse.siteUrl=https://dataverse.example.edu``
+If you wish to change your site URL by changing the domain configuration, you should edit your ``domain.xml`` directly
+to avoid problems with colons in commands. Find a line similar to
+``-Ddataverse.siteUrl=https://dataverse.example.edu`` and change it. You can specify the
+protocol, host, and port number and should not include a trailing slash.
-Note that it's also possible to use the ``dataverse.fqdn`` as a variable, if you wish. Here's an example of this as well as a custom port (which is usually not necessary):
+**Notes:**
-``-Ddataverse.siteUrl=https://${dataverse.fqdn}:444``
+- This setting may be used in combination with variable replacement, referencing :ref:`dataverse.fqdn` with
+ ``./asadmin create-jvm-options "\-Ddataverse.siteUrl=http\://\${dataverse.fqdn}\:8080"``
+- Remember to restart Payara after editing ``domain.xml``.
+- Can also be set via *MicroProfile Config API* sources, e.g. the environment variable ``DATAVERSE_SITEURL``.
+ Defaults to ``http://${dataverse.fqdn}:8080`` when used with ``mp.config.profile=ct``
+- We are absolutely aware that it's confusing to have both ``dataverse.fqdn`` and ``dataverse.siteUrl``.
+ https://github.com/IQSS/dataverse/issues/6636 is about resolving this confusion.
-We are absolutely aware that it's confusing to have both ``dataverse.fqdn`` and ``dataverse.siteUrl``. https://github.com/IQSS/dataverse/issues/6636 is about resolving this confusion.
.. _dataverse.files.directory:
diff --git a/src/main/java/edu/harvard/iq/dataverse/HandlenetServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/HandlenetServiceBean.java
index 1a8ee8a85e8..df16991b51e 100644
--- a/src/main/java/edu/harvard/iq/dataverse/HandlenetServiceBean.java
+++ b/src/main/java/edu/harvard/iq/dataverse/HandlenetServiceBean.java
@@ -24,8 +24,6 @@
import java.io.File;
import java.io.FileInputStream;
-import java.net.InetAddress;
-import java.net.UnknownHostException;
import java.util.*;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -34,6 +32,7 @@
import java.security.PrivateKey;
/* Handlenet imports: */
+import edu.harvard.iq.dataverse.util.SystemConfig;
import net.handle.hdllib.AbstractMessage;
import net.handle.hdllib.AbstractResponse;
import net.handle.hdllib.AdminRecord;
@@ -247,21 +246,7 @@ private String getRegistrationUrl(DvObject dvObject) {
}
public String getSiteUrl() {
- logger.log(Level.FINE,"getSiteUrl");
- String hostUrl = System.getProperty("dataverse.siteUrl");
- if (hostUrl != null && !"".equals(hostUrl)) {
- return hostUrl;
- }
- String hostName = System.getProperty("dataverse.fqdn");
- if (hostName == null) {
- try {
- hostName = InetAddress.getLocalHost().getCanonicalHostName();
- } catch (UnknownHostException e) {
- return null;
- }
- }
- hostUrl = "https://" + hostName;
- return hostUrl;
+ return SystemConfig.getDataverseSiteUrlStatic();
}
private byte[] readKey(final String file) {
diff --git a/src/main/java/edu/harvard/iq/dataverse/api/Info.java b/src/main/java/edu/harvard/iq/dataverse/api/Info.java
index 4fe5cba5b9f..fd7824c15cf 100644
--- a/src/main/java/edu/harvard/iq/dataverse/api/Info.java
+++ b/src/main/java/edu/harvard/iq/dataverse/api/Info.java
@@ -1,5 +1,6 @@
package edu.harvard.iq.dataverse.api;
+import edu.harvard.iq.dataverse.settings.JvmSettings;
import edu.harvard.iq.dataverse.settings.SettingsServiceBean;
import edu.harvard.iq.dataverse.util.SystemConfig;
import javax.ejb.EJB;
@@ -44,7 +45,7 @@ public Response getInfo() {
@GET
@Path("server")
public Response getServer() {
- return response( req -> ok(systemConfig.getDataverseServer()));
+ return response( req -> ok(JvmSettings.FQDN.lookup()));
}
@GET
diff --git a/src/main/java/edu/harvard/iq/dataverse/export/ddi/DdiExportUtil.java b/src/main/java/edu/harvard/iq/dataverse/export/ddi/DdiExportUtil.java
index 4bbcd653ac3..eb7632dd03c 100644
--- a/src/main/java/edu/harvard/iq/dataverse/export/ddi/DdiExportUtil.java
+++ b/src/main/java/edu/harvard/iq/dataverse/export/ddi/DdiExportUtil.java
@@ -32,18 +32,15 @@
import edu.harvard.iq.dataverse.export.DDIExporter;
import edu.harvard.iq.dataverse.settings.SettingsServiceBean;
-import static edu.harvard.iq.dataverse.util.SystemConfig.FQDN;
-import static edu.harvard.iq.dataverse.util.SystemConfig.SITE_URL;
import edu.harvard.iq.dataverse.util.BundleUtil;
import edu.harvard.iq.dataverse.util.FileUtil;
+import edu.harvard.iq.dataverse.util.SystemConfig;
import edu.harvard.iq.dataverse.util.json.JsonUtil;
import edu.harvard.iq.dataverse.util.xml.XmlPrinter;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
-import java.net.InetAddress;
-import java.net.UnknownHostException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
@@ -1292,7 +1289,7 @@ private static void writeNotesElement(XMLStreamWriter xmlw, DatasetVersionDTO da
// harvesting *all* files are encoded as otherMats; even tabular ones.
private static void createOtherMats(XMLStreamWriter xmlw, List fileDtos) throws XMLStreamException {
// The preferred URL for this dataverse, for cooking up the file access API links:
- String dataverseUrl = getDataverseSiteUrl();
+ String dataverseUrl = SystemConfig.getDataverseSiteUrlStatic();
for (FileDTO fileDTo : fileDtos) {
// We'll continue using the scheme we've used before, in DVN2-3: non-tabular files are put into otherMat,
@@ -1339,7 +1336,7 @@ private static void createOtherMats(XMLStreamWriter xmlw, List fileDtos
private static void createOtherMatsFromFileMetadatas(XMLStreamWriter xmlw, List fileMetadatas) throws XMLStreamException {
// The preferred URL for this dataverse, for cooking up the file access API links:
- String dataverseUrl = getDataverseSiteUrl();
+ String dataverseUrl = SystemConfig.getDataverseSiteUrlStatic();
for (FileMetadata fileMetadata : fileMetadatas) {
// We'll continue using the scheme we've used before, in DVN2-3: non-tabular files are put into otherMat,
@@ -1555,33 +1552,6 @@ private static void saveJsonToDisk(String datasetVersionAsJson) throws IOExcepti
Files.write(Paths.get("/tmp/out.json"), datasetVersionAsJson.getBytes());
}
- /**
- * The "official", designated URL of the site;
- * can be defined as a complete URL; or derived from the
- * "official" hostname. If none of these options is set,
- * defaults to the InetAddress.getLocalHOst() and https;
- */
- private static String getDataverseSiteUrl() {
- String hostUrl = System.getProperty(SITE_URL);
- if (hostUrl != null && !"".equals(hostUrl)) {
- return hostUrl;
- }
- String hostName = System.getProperty(FQDN);
- if (hostName == null) {
- try {
- hostName = InetAddress.getLocalHost().getCanonicalHostName();
- } catch (UnknownHostException e) {
- hostName = null;
- }
- }
-
- if (hostName != null) {
- return "https://" + hostName;
- }
-
- return "http://localhost:8080";
- }
-
@@ -1893,7 +1863,7 @@ private static void createVarDDI(XMLStreamWriter xmlw, DataVariable dv, FileMeta
}
private static void createFileDscr(XMLStreamWriter xmlw, DatasetVersion datasetVersion) throws XMLStreamException {
- String dataverseUrl = getDataverseSiteUrl();
+ String dataverseUrl = SystemConfig.getDataverseSiteUrlStatic();
for (FileMetadata fileMetadata : datasetVersion.getFileMetadatas()) {
DataFile dataFile = fileMetadata.getDataFile();
diff --git a/src/main/java/edu/harvard/iq/dataverse/harvest/server/web/servlet/OAIServlet.java b/src/main/java/edu/harvard/iq/dataverse/harvest/server/web/servlet/OAIServlet.java
index f778fd56644..5d0580708a9 100644
--- a/src/main/java/edu/harvard/iq/dataverse/harvest/server/web/servlet/OAIServlet.java
+++ b/src/main/java/edu/harvard/iq/dataverse/harvest/server/web/servlet/OAIServlet.java
@@ -123,7 +123,7 @@ public void init(ServletConfig config) throws ServletException {
}
setRepository = new DataverseXoaiSetRepository(setService);
- itemRepository = new DataverseXoaiItemRepository(recordService, datasetService, systemConfig.getDataverseSiteUrl());
+ itemRepository = new DataverseXoaiItemRepository(recordService, datasetService, SystemConfig.getDataverseSiteUrlStatic());
repositoryConfiguration = createRepositoryConfiguration();
diff --git a/src/main/java/edu/harvard/iq/dataverse/settings/JvmSettings.java b/src/main/java/edu/harvard/iq/dataverse/settings/JvmSettings.java
index e409607346b..9be3df68648 100644
--- a/src/main/java/edu/harvard/iq/dataverse/settings/JvmSettings.java
+++ b/src/main/java/edu/harvard/iq/dataverse/settings/JvmSettings.java
@@ -41,6 +41,8 @@ public enum JvmSettings {
// GENERAL SETTINGS
VERSION(PREFIX, "version"),
BUILD(PREFIX, "build"),
+ FQDN(PREFIX, "fqdn"),
+ SITE_URL(PREFIX, "siteUrl"),
// API SETTINGS
SCOPE_API(PREFIX, "api"),
diff --git a/src/main/java/edu/harvard/iq/dataverse/util/SystemConfig.java b/src/main/java/edu/harvard/iq/dataverse/util/SystemConfig.java
index f7743cd313a..9e0905365d7 100644
--- a/src/main/java/edu/harvard/iq/dataverse/util/SystemConfig.java
+++ b/src/main/java/edu/harvard/iq/dataverse/util/SystemConfig.java
@@ -10,17 +10,6 @@
import edu.harvard.iq.dataverse.settings.JvmSettings;
import edu.harvard.iq.dataverse.settings.SettingsServiceBean;
import edu.harvard.iq.dataverse.validation.PasswordValidatorUtil;
-import org.passay.CharacterRule;
-
-import javax.ejb.EJB;
-import javax.ejb.Stateless;
-import javax.inject.Named;
-import javax.json.Json;
-import javax.json.JsonArray;
-import javax.json.JsonObject;
-import javax.json.JsonReader;
-import javax.json.JsonString;
-import javax.json.JsonValue;
import java.io.StringReader;
import java.net.InetAddress;
import java.net.UnknownHostException;
@@ -31,11 +20,24 @@
import java.util.List;
import java.util.Map;
import java.util.MissingResourceException;
+import java.util.Optional;
import java.util.ResourceBundle;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import org.passay.CharacterRule;
+
+import javax.ejb.EJB;
+import javax.ejb.Stateless;
+import javax.inject.Named;
+import javax.json.Json;
+import javax.json.JsonArray;
+import javax.json.JsonObject;
+import javax.json.JsonReader;
+import javax.json.JsonString;
+import javax.json.JsonValue;
+
/**
* System-wide configuration
*/
@@ -55,23 +57,7 @@ public class SystemConfig {
AuthenticationServiceBean authenticationService;
public static final String DATAVERSE_PATH = "/dataverse/";
-
- /**
- * A JVM option for the advertised fully qualified domain name (hostname) of
- * the Dataverse installation, such as "dataverse.example.com", which may
- * differ from the hostname that the server knows itself as.
- *
- * The equivalent in DVN 3.x was "dvn.inetAddress".
- */
- public static final String FQDN = "dataverse.fqdn";
-
- /**
- * A JVM option for specifying the "official" URL of the site.
- * Unlike the FQDN option above, this would be a complete URL,
- * with the protocol, port number etc.
- */
- public static final String SITE_URL = "dataverse.siteUrl";
-
+
/**
* A JVM option for where files are stored on the file system.
*/
@@ -243,32 +229,58 @@ public static int getMinutesUntilPasswordResetTokenExpires() {
}
/**
- * The "official", designated URL of the site;
- * can be defined as a complete URL; or derived from the
- * "official" hostname. If none of these options is set,
- * defaults to the InetAddress.getLocalHOst() and https;
- * These are legacy JVM options. Will be eventualy replaced
- * by the Settings Service configuration.
+ * Lookup (or construct) the designated URL of this instance from configuration.
+ *
+ * Can be defined as a complete URL via dataverse.siteUrl
; or derived from the hostname
+ * dataverse.fqdn
and HTTPS. If none of these options is set, defaults to the
+ * {@link InetAddress#getLocalHost} and HTTPS.
+ *
+ * NOTE: This method does not provide any validation.
+ * TODO: The behaviour of this method is subject to a later change, see
+ * https://github.com/IQSS/dataverse/issues/6636
+ *
+ * @return The designated URL of this instance as per configuration.
*/
public String getDataverseSiteUrl() {
return getDataverseSiteUrlStatic();
}
+ /**
+ * Lookup (or construct) the designated URL of this instance from configuration.
+ *
+ * Can be defined as a complete URL via dataverse.siteUrl
; or derived from the hostname
+ * dataverse.fqdn
and HTTPS. If none of these options is set, defaults to the
+ * {@link InetAddress#getLocalHost} and HTTPS.
+ *
+ * NOTE: This method does not provide any validation.
+ * TODO: The behaviour of this method is subject to a later change, see
+ * https://github.com/IQSS/dataverse/issues/6636
+ *
+ * @return The designated URL of this instance as per configuration.
+ */
public static String getDataverseSiteUrlStatic() {
- String hostUrl = System.getProperty(SITE_URL);
- if (hostUrl != null && !"".equals(hostUrl)) {
- return hostUrl;
+ // If dataverse.siteUrl has been configured, simply return it
+ Optional siteUrl = JvmSettings.SITE_URL.lookupOptional();
+ if (siteUrl.isPresent()) {
+ return siteUrl.get();
}
- String hostName = System.getProperty(FQDN);
- if (hostName == null) {
- try {
- hostName = InetAddress.getLocalHost().getCanonicalHostName();
- } catch (UnknownHostException e) {
- return null;
- }
+
+ // Other wise try to lookup dataverse.fqdn setting and default to HTTPS
+ Optional fqdn = JvmSettings.FQDN.lookupOptional();
+ if (fqdn.isPresent()) {
+ return "https://" + fqdn.get();
+ }
+
+ // Last resort - get the servers local name and use it.
+ // BEWARE - this is dangerous.
+ // 1) A server might have a different name than your repository URL.
+ // 2) The underlying reverse DNS lookup might point to a different name than your repository URL.
+ // 3) If this server has multiple IPs assigned, which one will it be for the lookup?
+ try {
+ return "https://" + InetAddress.getLocalHost().getCanonicalHostName();
+ } catch (UnknownHostException e) {
+ return null;
}
- hostUrl = "https://" + hostName;
- return hostUrl;
}
/**
@@ -278,22 +290,6 @@ public String getPageURLWithQueryString() {
return PrettyContext.getCurrentInstance().getRequestURL().toURL() + PrettyContext.getCurrentInstance().getRequestQueryString().toQueryString();
}
- /**
- * The "official" server's fully-qualified domain name:
- */
- public String getDataverseServer() {
- // still reliese on a JVM option:
- String fqdn = System.getProperty(FQDN);
- if (fqdn == null) {
- try {
- fqdn = InetAddress.getLocalHost().getCanonicalHostName();
- } catch (UnknownHostException e) {
- return null;
- }
- }
- return fqdn;
- }
-
public String getGuidesBaseUrl() {
String saneDefault = "https://guides.dataverse.org";
String guidesBaseUrl = settingsService.getValueForKey(SettingsServiceBean.Key.GuidesBaseUrl, saneDefault);
diff --git a/src/main/resources/META-INF/microprofile-config.properties b/src/main/resources/META-INF/microprofile-config.properties
index be02bb1b090..c7520c19070 100644
--- a/src/main/resources/META-INF/microprofile-config.properties
+++ b/src/main/resources/META-INF/microprofile-config.properties
@@ -3,11 +3,17 @@
dataverse.version=${project.version}
dataverse.build=
+# Default only for containers! (keep mimicking the current behaviour -
+# changing that is part of https://github.com/IQSS/dataverse/issues/6636)
+%ct.dataverse.fqdn=localhost
+%ct.dataverse.siteUrl=http://${dataverse.fqdn}:8080
+
# DATABASE
dataverse.db.host=localhost
dataverse.db.port=5432
dataverse.db.user=dataverse
dataverse.db.name=dataverse
+
# OAI SERVER
dataverse.oai.server.maxidentifiers=100
dataverse.oai.server.maxrecords=10
diff --git a/src/test/java/edu/harvard/iq/dataverse/export/SchemaDotOrgExporterTest.java b/src/test/java/edu/harvard/iq/dataverse/export/SchemaDotOrgExporterTest.java
index 56080c66eec..7947a82d5f1 100644
--- a/src/test/java/edu/harvard/iq/dataverse/export/SchemaDotOrgExporterTest.java
+++ b/src/test/java/edu/harvard/iq/dataverse/export/SchemaDotOrgExporterTest.java
@@ -6,9 +6,9 @@
import edu.harvard.iq.dataverse.license.LicenseServiceBean;
import edu.harvard.iq.dataverse.mocks.MockDatasetFieldSvc;
-import static edu.harvard.iq.dataverse.util.SystemConfig.SITE_URL;
import static edu.harvard.iq.dataverse.util.SystemConfig.FILES_HIDE_SCHEMA_DOT_ORG_DOWNLOAD_URLS;
+import edu.harvard.iq.dataverse.settings.JvmSettings;
import edu.harvard.iq.dataverse.settings.SettingsServiceBean;
import edu.harvard.iq.dataverse.util.json.JsonParser;
import edu.harvard.iq.dataverse.util.json.JsonUtil;
@@ -31,6 +31,8 @@
import javax.json.Json;
import javax.json.JsonObject;
import javax.json.JsonReader;
+
+import edu.harvard.iq.dataverse.util.testing.JvmSetting;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.Test;
@@ -64,6 +66,7 @@ public static void tearDownClass() {
* Test of exportDataset method, of class SchemaDotOrgExporter.
*/
@Test
+ @JvmSetting(key = JvmSettings.SITE_URL, value = "https://librascholar.org")
public void testExportDataset() throws Exception {
File datasetVersionJson = new File("src/test/resources/json/dataset-finch2.json");
String datasetVersionAsJson = new String(Files.readAllBytes(Paths.get(datasetVersionJson.getAbsolutePath())));
@@ -92,7 +95,6 @@ public void testExportDataset() throws Exception {
Dataverse dataverse = new Dataverse();
dataverse.setName("LibraScholar");
dataset.setOwner(dataverse);
- System.setProperty(SITE_URL, "https://librascholar.org");
boolean hideFileUrls = false;
if (hideFileUrls) {
System.setProperty(FILES_HIDE_SCHEMA_DOT_ORG_DOWNLOAD_URLS, "true");
diff --git a/src/test/java/edu/harvard/iq/dataverse/externaltools/ExternalToolHandlerTest.java b/src/test/java/edu/harvard/iq/dataverse/externaltools/ExternalToolHandlerTest.java
index 70393ebcb2b..ab3a0263d66 100644
--- a/src/test/java/edu/harvard/iq/dataverse/externaltools/ExternalToolHandlerTest.java
+++ b/src/test/java/edu/harvard/iq/dataverse/externaltools/ExternalToolHandlerTest.java
@@ -7,22 +7,20 @@
import edu.harvard.iq.dataverse.FileMetadata;
import edu.harvard.iq.dataverse.authorization.users.ApiToken;
import edu.harvard.iq.dataverse.authorization.users.AuthenticatedUser;
-import edu.harvard.iq.dataverse.util.SystemConfig;
+import edu.harvard.iq.dataverse.settings.JvmSettings;
import edu.harvard.iq.dataverse.util.json.JsonUtil;
-import edu.harvard.iq.dataverse.util.testing.SystemProperty;
+import edu.harvard.iq.dataverse.util.testing.JvmSetting;
+import org.junit.jupiter.api.Test;
import javax.json.Json;
import javax.json.JsonObject;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
import java.util.ArrayList;
import java.util.List;
-import org.junit.Test;
-import org.mockito.Mockito;
-
public class ExternalToolHandlerTest {
// TODO: It would probably be better to split these into individual tests.
@@ -205,9 +203,10 @@ public void testGetToolUrlWithOptionalQueryParameters() {
assertEquals("Unknown reserved word: {junk}", expectedException.getMessage());
}
-
+
+
@Test
- @SystemProperty(key = SystemConfig.SITE_URL, value = "https://librascholar.org")
+ @JvmSetting(key = JvmSettings.SITE_URL, value = "https://librascholar.org")
public void testGetToolUrlWithAllowedApiCalls() {
System.out.println("allowedApiCalls test");
Dataset ds = new Dataset();
diff --git a/src/test/java/edu/harvard/iq/dataverse/util/UrlTokenUtilTest.java b/src/test/java/edu/harvard/iq/dataverse/util/UrlTokenUtilTest.java
index 5e5c14ed063..236179bdb12 100644
--- a/src/test/java/edu/harvard/iq/dataverse/util/UrlTokenUtilTest.java
+++ b/src/test/java/edu/harvard/iq/dataverse/util/UrlTokenUtilTest.java
@@ -6,21 +6,25 @@
import edu.harvard.iq.dataverse.FileMetadata;
import edu.harvard.iq.dataverse.GlobalId;
import edu.harvard.iq.dataverse.authorization.users.ApiToken;
-import edu.harvard.iq.dataverse.util.testing.SystemProperty;
+import edu.harvard.iq.dataverse.settings.JvmSettings;
+import edu.harvard.iq.dataverse.util.testing.JvmSetting;
+import org.junit.jupiter.api.Test;
-import static org.junit.Assert.assertEquals;
import java.util.ArrayList;
import java.util.List;
-import org.junit.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
-public class UrlTokenUtilTest {
+class UrlTokenUtilTest {
@Test
- @SystemProperty(key = SystemConfig.SITE_URL, value = "https://librascholar.org")
- public void testGetToolUrlWithOptionalQueryParameters() {
+ @JvmSetting(key = JvmSettings.SITE_URL, value = "https://librascholar.org")
+ void testGetToolUrlWithOptionalQueryParameters() {
+ // given
+ String siteUrl = "https://librascholar.org";
+
DataFile dataFile = new DataFile();
- dataFile.setId(42l);
+ dataFile.setId(42L);
FileMetadata fmd = new FileMetadata();
DatasetVersion dv = new DatasetVersion();
Dataset ds = new Dataset();
@@ -28,20 +32,26 @@ public void testGetToolUrlWithOptionalQueryParameters() {
ds.setGlobalId(new GlobalId("doi:10.5072/FK2ABCDEF"));
dv.setDataset(ds);
fmd.setDatasetVersion(dv);
- List fmdl = new ArrayList();
+ List fmdl = new ArrayList<>();
fmdl.add(fmd);
dataFile.setFileMetadatas(fmdl);
+
ApiToken apiToken = new ApiToken();
apiToken.setTokenString("7196b5ce-f200-4286-8809-03ffdbc255d7");
+
+ // when & then 1/2
URLTokenUtil urlTokenUtil = new URLTokenUtil(dataFile, apiToken, fmd, "en");
assertEquals("en", urlTokenUtil.replaceTokensWithValues("{localeCode}"));
assertEquals("42 test en", urlTokenUtil.replaceTokensWithValues("{fileId} test {localeCode}"));
assertEquals("42 test en", urlTokenUtil.replaceTokensWithValues("{fileId} test {localeCode}"));
-
- assertEquals("https://librascholar.org/api/files/42/metadata?key=" + apiToken.getTokenString(), urlTokenUtil.replaceTokensWithValues("{siteUrl}/api/files/{fileId}/metadata?key={apiToken}"));
-
+ assertEquals( siteUrl + "/api/files/42/metadata?key=" + apiToken.getTokenString(),
+ urlTokenUtil.replaceTokensWithValues("{siteUrl}/api/files/{fileId}/metadata?key={apiToken}"));
+
+ // when & then 2/2
URLTokenUtil urlTokenUtil2 = new URLTokenUtil(ds, apiToken, "en");
- assertEquals("https://librascholar.org/api/datasets/50?key=" + apiToken.getTokenString(), urlTokenUtil2.replaceTokensWithValues("{siteUrl}/api/datasets/{datasetId}?key={apiToken}"));
- assertEquals("https://librascholar.org/api/datasets/:persistentId/?persistentId=doi:10.5072/FK2ABCDEF&key=" + apiToken.getTokenString(), urlTokenUtil2.replaceTokensWithValues("{siteUrl}/api/datasets/:persistentId/?persistentId={datasetPid}&key={apiToken}"));
+ assertEquals(siteUrl + "/api/datasets/50?key=" + apiToken.getTokenString(),
+ urlTokenUtil2.replaceTokensWithValues("{siteUrl}/api/datasets/{datasetId}?key={apiToken}"));
+ assertEquals(siteUrl + "/api/datasets/:persistentId/?persistentId=doi:10.5072/FK2ABCDEF&key=" + apiToken.getTokenString(),
+ urlTokenUtil2.replaceTokensWithValues("{siteUrl}/api/datasets/:persistentId/?persistentId={datasetPid}&key={apiToken}"));
}
}