From cda0f2296525f477a6198674494aeb8df589fcec Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Fri, 15 Oct 2021 00:16:14 +0200 Subject: [PATCH 1/6] Fix ArXiVIdentifier -- dot is required and not arbitrary character --- .../org/jabref/model/entry/identifier/ArXivIdentifier.java | 2 +- .../jabref/model/entry/identifier/ArXivIdentifierTest.java | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/jabref/model/entry/identifier/ArXivIdentifier.java b/src/main/java/org/jabref/model/entry/identifier/ArXivIdentifier.java index 87d3dcc333a..c8bc793e639 100644 --- a/src/main/java/org/jabref/model/entry/identifier/ArXivIdentifier.java +++ b/src/main/java/org/jabref/model/entry/identifier/ArXivIdentifier.java @@ -37,7 +37,7 @@ public class ArXivIdentifier implements Identifier { public static Optional parse(String value) { String identifier = value.replaceAll(" ", ""); - Pattern identifierPattern = Pattern.compile("(" + ARXIV_PREFIX + ")?\\s?:?\\s?(?\\d{4}.\\d{4,5})(v(?\\d+))?\\s?(\\[(?\\S+)\\])?"); + Pattern identifierPattern = Pattern.compile("(" + ARXIV_PREFIX + ")?\\s?:?\\s?(?\\d{4}\\.\\d{4,5})(v(?\\d+))?\\s?(\\[(?\\S+)\\])?"); Matcher identifierMatcher = identifierPattern.matcher(identifier); if (identifierMatcher.matches()) { String id = identifierMatcher.group("id"); diff --git a/src/test/java/org/jabref/model/entry/identifier/ArXivIdentifierTest.java b/src/test/java/org/jabref/model/entry/identifier/ArXivIdentifierTest.java index cbcfa455e2b..61c488fd221 100644 --- a/src/test/java/org/jabref/model/entry/identifier/ArXivIdentifierTest.java +++ b/src/test/java/org/jabref/model/entry/identifier/ArXivIdentifierTest.java @@ -91,4 +91,11 @@ void parseOldUrlWithVersion() throws Exception { assertEquals(Optional.of(new ArXivIdentifier("hep-ex/0307015", "1", "hep-ex")), parsed); } + + @Test + void fourDigitDateIsInvalidInLegacyFormat() throws Exception { + Optional parsed = ArXivIdentifier.parse("2017/1118"); + + assertEquals(Optional.empty(), parsed); + } } From afacd9d41080c81bc74fed50c2d15e5ec647cb1e Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Fri, 15 Oct 2021 00:51:42 +0200 Subject: [PATCH 2/6] Remove semantic duplicate class Eprint --- CHANGELOG.md | 1 + .../org/jabref/gui/desktop/JabRefDesktop.java | 9 +- .../logic/importer/util/IdentifierParser.java | 4 +- .../entry/identifier/ArXivIdentifier.java | 34 ++--- .../jabref/model/entry/identifier/Eprint.java | 142 ------------------ .../entry/identifier/ArXivIdentifierTest.java | 73 +++++++++ .../model/entry/identifier/EprintTest.java | 60 -------- 7 files changed, 99 insertions(+), 224 deletions(-) delete mode 100644 src/main/java/org/jabref/model/entry/identifier/Eprint.java delete mode 100644 src/test/java/org/jabref/model/entry/identifier/EprintTest.java diff --git a/CHANGELOG.md b/CHANGELOG.md index f72c67a4a53..7c4dbfeb80e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -35,6 +35,7 @@ Note that this project **does not** adhere to [Semantic Versioning](http://semve - The metadata-to-pdf actions now also embeds the bibfile to the PDF. [#8037](https://github.com/JabRef/jabref/pull/8037) - The snap was updated to use the core20 base and to use lzo compression for better startup performance [#8109](https://github.com/JabRef/jabref/pull/8109) - We improved the Drag and Drop behavior in the "Customize Entry Types" Dialog [#6338](https://github.com/JabRef/jabref/issues/6338) +- When determing the URL of an ArXiV eprint, the URL now points to the version ### Fixed diff --git a/src/main/java/org/jabref/gui/desktop/JabRefDesktop.java b/src/main/java/org/jabref/gui/desktop/JabRefDesktop.java index 430454938e8..75d22919cb8 100644 --- a/src/main/java/org/jabref/gui/desktop/JabRefDesktop.java +++ b/src/main/java/org/jabref/gui/desktop/JabRefDesktop.java @@ -26,8 +26,8 @@ import org.jabref.model.database.BibDatabaseContext; import org.jabref.model.entry.field.Field; import org.jabref.model.entry.field.StandardField; +import org.jabref.model.entry.identifier.ArXivIdentifier; import org.jabref.model.entry.identifier.DOI; -import org.jabref.model.entry.identifier.Eprint; import org.jabref.model.util.FileHelper; import org.jabref.preferences.PreferencesService; @@ -84,7 +84,12 @@ public static void openExternalViewer(BibDatabaseContext databaseContext, openDoi(link); return; } else if (StandardField.EPRINT.equals(field)) { - link = Eprint.build(link).map(Eprint::getURIAsASCIIString).orElse(link); + link = ArXivIdentifier.parse(link) + .map(ArXivIdentifier::getExternalURI) + .filter(Optional::isPresent) + .map(Optional::get) + .map(URI::toASCIIString) + .orElse(link); // should be opened in browser field = StandardField.URL; } diff --git a/src/main/java/org/jabref/logic/importer/util/IdentifierParser.java b/src/main/java/org/jabref/logic/importer/util/IdentifierParser.java index daa7a871e37..d5d86ad6a9a 100644 --- a/src/main/java/org/jabref/logic/importer/util/IdentifierParser.java +++ b/src/main/java/org/jabref/logic/importer/util/IdentifierParser.java @@ -5,8 +5,8 @@ import org.jabref.model.entry.field.Field; import org.jabref.model.entry.field.StandardField; +import org.jabref.model.entry.identifier.ArXivIdentifier; import org.jabref.model.entry.identifier.DOI; -import org.jabref.model.entry.identifier.Eprint; import org.jabref.model.entry.identifier.ISBN; import org.jabref.model.entry.identifier.Identifier; import org.jabref.model.entry.identifier.MathSciNetId; @@ -28,7 +28,7 @@ private static Function> getParserForFiel } else if (StandardField.ISBN.equals(field)) { return ISBN::parse; } else if (StandardField.EPRINT.equals(field)) { - return Eprint::build; + return ArXivIdentifier::parse; } else if (StandardField.MR_NUMBER.equals(field)) { return MathSciNetId::parse; } diff --git a/src/main/java/org/jabref/model/entry/identifier/ArXivIdentifier.java b/src/main/java/org/jabref/model/entry/identifier/ArXivIdentifier.java index c8bc793e639..9b3949bd1e4 100644 --- a/src/main/java/org/jabref/model/entry/identifier/ArXivIdentifier.java +++ b/src/main/java/org/jabref/model/entry/identifier/ArXivIdentifier.java @@ -40,33 +40,31 @@ public static Optional parse(String value) { Pattern identifierPattern = Pattern.compile("(" + ARXIV_PREFIX + ")?\\s?:?\\s?(?\\d{4}\\.\\d{4,5})(v(?\\d+))?\\s?(\\[(?\\S+)\\])?"); Matcher identifierMatcher = identifierPattern.matcher(identifier); if (identifierMatcher.matches()) { - String id = identifierMatcher.group("id"); - String classification = identifierMatcher.group("classification"); - if (classification == null) { - classification = ""; - } - String version = identifierMatcher.group("version"); - if (version == null) { - version = ""; - } - return Optional.of(new ArXivIdentifier(id, version, classification)); + return getArXivIdentifier(identifierMatcher); } Pattern oldIdentifierPattern = Pattern.compile("(" + ARXIV_PREFIX + ")?\\s?:?\\s?(?(?[a-z\\-]+(\\.[A-Z]{2})?)/\\d{7})(v(?\\d+))?"); Matcher oldIdentifierMatcher = oldIdentifierPattern.matcher(identifier); if (oldIdentifierMatcher.matches()) { - String id = oldIdentifierMatcher.group("id"); - String classification = oldIdentifierMatcher.group("classification"); - String version = oldIdentifierMatcher.group("version"); - if (version == null) { - version = ""; - } - return Optional.of(new ArXivIdentifier(id, version, classification)); + return getArXivIdentifier(oldIdentifierMatcher); } return Optional.empty(); } + private static Optional getArXivIdentifier(Matcher matcher) { + String id = matcher.group("id"); + String classification = matcher.group("classification"); + if (classification == null) { + classification = ""; + } + String version = matcher.group("version"); + if (version == null) { + version = ""; + } + return Optional.of(new ArXivIdentifier(id, version, classification)); + } + public Optional getClassification() { if (classification.isEmpty()) { return Optional.empty(); @@ -123,7 +121,7 @@ public String getNormalizedWithoutVersion() { @Override public Optional getExternalURI() { try { - return Optional.of(new URI("https://arxiv.org/abs/" + identifier)); + return Optional.of(new URI("https://arxiv.org/abs/" + getNormalized())); } catch (URISyntaxException e) { return Optional.empty(); } diff --git a/src/main/java/org/jabref/model/entry/identifier/Eprint.java b/src/main/java/org/jabref/model/entry/identifier/Eprint.java deleted file mode 100644 index fb9b27ab443..00000000000 --- a/src/main/java/org/jabref/model/entry/identifier/Eprint.java +++ /dev/null @@ -1,142 +0,0 @@ -package org.jabref.model.entry.identifier; - -import java.net.URI; -import java.net.URISyntaxException; -import java.util.Objects; -import java.util.Optional; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import org.jabref.model.entry.field.Field; -import org.jabref.model.entry.field.StandardField; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * Class for working with Eprint identifiers - *

- * See also https://arxiv.org/help/arxiv_identifier and https://arxiv.org/hypertex/bibstyles/ - */ -public class Eprint implements Identifier { - public static final URI RESOLVER = URI.create("https://arxiv.org"); - private static final Logger LOGGER = LoggerFactory.getLogger(Eprint.class); - - // Regex - // (see https://arxiv.org/help/arxiv_identifier) - private static final String EPRINT_EXP = "" - + "(?:arXiv:)?" // optional prefix - + "(" // begin group \1 - + "\\d{4}" // YYMM - + "\\." // divider - + "\\d{4,5}" // number - + "(v\\d+)?" // optional version - + "|" // old id - + ".+" // archive - + "(\\.\\w{2})?" // optional subject class - + "\\/" // divider - + "\\d{7}" // number - + ")"; // end group \1 - private static final String HTTP_EXP = "https?://[^\\s]+?" + EPRINT_EXP; - // Pattern - private static final Pattern EXACT_EPRINT_PATT = Pattern.compile("^(?:https?://[^\\s]+?)?" + EPRINT_EXP + "$", Pattern.CASE_INSENSITIVE); - - // DOI - private final String eprint; - - /** - * Creates a Eprint from various schemes including URL. - * - * @param eprint the Eprint identifier string - * @throws NullPointerException if eprint is null - * @throws IllegalArgumentException if eprint does not include a valid Eprint identifier - */ - public Eprint(String eprint) { - Objects.requireNonNull(eprint); - - // Remove whitespace - String trimmedId = eprint.trim(); - - // HTTP URL decoding - if (eprint.matches(HTTP_EXP)) { - try { - // decodes path segment - URI url = new URI(trimmedId); - trimmedId = url.getScheme() + "://" + url.getHost() + url.getPath(); - } catch (URISyntaxException e) { - throw new IllegalArgumentException(eprint + " is not a valid HTTP Eprint identifier."); - } - } - - // Extract DOI - Matcher matcher = EXACT_EPRINT_PATT.matcher(trimmedId); - if (matcher.find()) { - // match only group \1 - this.eprint = matcher.group(1); - } else { - throw new IllegalArgumentException(trimmedId + " is not a valid Eprint identifier."); - } - } - - /** - * Creates an Optional<Eprint> from various schemes including URL. - * - * Useful for suppressing the IllegalArgumentException of the Constructor - * and checking for Optional.isPresent() instead. - * - * @param eprint the Eprint string - * @return an Optional containing the Eprint or an empty Optional - */ - public static Optional build(String eprint) { - try { - return Optional.ofNullable(new Eprint(eprint)); - } catch (IllegalArgumentException | NullPointerException e) { - return Optional.empty(); - } - } - - /** - * Return a URI presentation for the Eprint identifier - * - * @return an encoded URI representation of the Eprint identifier - */ - @Override - public Optional getExternalURI() { - try { - URI uri = new URI(RESOLVER.getScheme(), RESOLVER.getHost(), "/abs/" + eprint, null); - return Optional.of(uri); - } catch (URISyntaxException e) { - // should never happen - LOGGER.error(eprint + " could not be encoded as URI.", e); - return Optional.empty(); - } - } - - /** - * Return an ASCII URL presentation for the Eprint identifier - * - * @return an encoded URL representation of the Eprint identifier - */ - public String getURIAsASCIIString() { - return getExternalURI().map(URI::toASCIIString).orElse(""); - } - - /** - * Return the plain Eprint identifier - * - * @return the plain Eprint value. - */ - public String getEprint() { - return eprint; - } - - @Override - public Field getDefaultField() { - return StandardField.EPRINT; - } - - @Override - public String getNormalized() { - return eprint; - } -} diff --git a/src/test/java/org/jabref/model/entry/identifier/ArXivIdentifierTest.java b/src/test/java/org/jabref/model/entry/identifier/ArXivIdentifierTest.java index 61c488fd221..888f8836861 100644 --- a/src/test/java/org/jabref/model/entry/identifier/ArXivIdentifierTest.java +++ b/src/test/java/org/jabref/model/entry/identifier/ArXivIdentifierTest.java @@ -1,5 +1,6 @@ package org.jabref.model.entry.identifier; +import java.net.URI; import java.util.Optional; import org.junit.jupiter.api.Test; @@ -50,6 +51,18 @@ void parseOldIdentifier() throws Exception { assertEquals(Optional.of(new ArXivIdentifier("math.GT/0309136", "math.GT")), parsed); } + @Test + public void acceptLegacyEprint() { + Optional parsed = ArXivIdentifier.parse("astro-ph.GT/1234567"); + assertEquals(Optional.of(new ArXivIdentifier("astro-ph.GT/1234567", "astro-ph.GT")), parsed); + } + + @Test + public void acceptLegacyMathEprint() { + Optional parsed = ArXivIdentifier.parse("math/1234567"); + assertEquals(Optional.of(new ArXivIdentifier("math/1234567", "math")), parsed); + } + @Test void parseOldIdentifierWithArXivPrefix() throws Exception { Optional parsed = ArXivIdentifier.parse("arXiv:math.GT/0309136"); @@ -95,7 +108,67 @@ void parseOldUrlWithVersion() throws Exception { @Test void fourDigitDateIsInvalidInLegacyFormat() throws Exception { Optional parsed = ArXivIdentifier.parse("2017/1118"); + assertEquals(Optional.empty(), parsed); + } + + @Test + public void acceptPlainEprint() { + Optional parsed = ArXivIdentifier.parse("0706.0001"); + assertEquals(Optional.of(new ArXivIdentifier("0706.0001")), parsed); + } + + @Test + public void acceptPlainEprintWithVersion() { + Optional parsed = ArXivIdentifier.parse("0706.0001v1"); + assertEquals(Optional.of(new ArXivIdentifier("0706.0001", "v1", "")), parsed); + } + + @Test + public void acceptArxivPrefix() { + Optional parsed = ArXivIdentifier.parse("arXiv:0706.0001v1"); + assertEquals(Optional.of(new ArXivIdentifier("0706.0001", "v1", "")), parsed); + } + + @Test + public void ignoreLeadingAndTrailingWhitespaces() { + Optional parsed = ArXivIdentifier.parse(" 0706.0001v1 "); + assertEquals(Optional.of(new ArXivIdentifier("0706.0001", "v1", "")), parsed); + } + @Test + public void rejectEmbeddedEprint() { + Optional parsed = ArXivIdentifier.parse("other stuff 0706.0001v1 end"); + assertEquals(Optional.empty(), parsed); + } + + @Test + public void rejectInvalidEprint() { + Optional parsed = ArXivIdentifier.parse("https://thisisnouri"); assertEquals(Optional.empty(), parsed); } + + @Test + public void acceptUrlHttpEprint() { + Optional parsed = ArXivIdentifier.parse("http://arxiv.org/abs/0706.0001v1"); + assertEquals(Optional.of(new ArXivIdentifier("0706.0001", "v1", "")), parsed); + } + + @Test + public void acceptUrlHttpsEprint() { + Optional parsed = ArXivIdentifier.parse("https://arxiv.org/abs/0706.0001v1"); + assertEquals(Optional.of(new ArXivIdentifier("0706.0001", "v1", "")), parsed); + } + + @Test + public void rejectUrlOtherDomainEprint() { + Optional parsed = ArXivIdentifier.parse("https://asdf.org/abs/0706.0001v1"); + assertEquals(Optional.empty(), parsed); + } + + @Test + public void constructCorrectURLForEprint() throws Exception { + Optional parsed = ArXivIdentifier.parse("0706.0001v1"); + assertEquals(Optional.of(new URI("https://arxiv.org/abs/0706.0001v1")), parsed.get().getExternalURI()); + } + } diff --git a/src/test/java/org/jabref/model/entry/identifier/EprintTest.java b/src/test/java/org/jabref/model/entry/identifier/EprintTest.java deleted file mode 100644 index 3ada9792566..00000000000 --- a/src/test/java/org/jabref/model/entry/identifier/EprintTest.java +++ /dev/null @@ -1,60 +0,0 @@ -package org.jabref.model.entry.identifier; - -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertThrows; - -public class EprintTest { - - @Test - public void acceptPlainEprint() { - assertEquals("0706.0001", new Eprint("0706.0001").getEprint()); - } - - @Test - public void acceptLegacyEprint() { - assertEquals("astro-ph.GT/1234567", new Eprint("astro-ph.GT/1234567").getEprint()); - assertEquals("math/1234567", new Eprint("math/1234567").getEprint()); - } - - @Test - public void acceptPlainEprintWithVersion() { - assertEquals("0706.0001v1", new Eprint("0706.0001v1").getEprint()); - } - - @Test - public void ignoreLeadingAndTrailingWhitespaces() { - assertEquals("0706.0001v1", new Eprint(" 0706.0001v1 ").getEprint()); - } - - @Test - public void rejectEmbeddedEprint() { - assertThrows(IllegalArgumentException.class, () -> new Eprint("other stuff 0706.0001v1 end")); - } - - @Test - public void rejectInvalidEprint() { - assertThrows(IllegalArgumentException.class, () -> new Eprint("https://thisisnouri")); - } - - @Test - public void acceptArxivPrefix() { - assertEquals("0706.0001v1", new Eprint("arXiv:0706.0001v1").getEprint()); - } - - @Test - public void acceptURLEprint() { - // http - assertEquals("0706.0001v1", new Eprint("http://arxiv.org/abs/0706.0001v1").getEprint()); - // https - assertEquals("0706.0001v1", new Eprint("https://arxiv.org/abs/0706.0001v1").getEprint()); - // other domains - assertEquals("0706.0001v1", new Eprint("https://asdf.org/abs/0706.0001v1").getEprint()); - } - - @Test - public void constructCorrectURLForEprint() { - assertEquals("https://arxiv.org/abs/0706.0001v1", new Eprint("0706.0001v1").getURIAsASCIIString()); - } -} From 85e43d7abf6d3b02227d3e7775366b61baf32c31 Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Fri, 15 Oct 2021 00:56:13 +0200 Subject: [PATCH 3/6] Add PR reference --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7c4dbfeb80e..59eea617342 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -35,7 +35,7 @@ Note that this project **does not** adhere to [Semantic Versioning](http://semve - The metadata-to-pdf actions now also embeds the bibfile to the PDF. [#8037](https://github.com/JabRef/jabref/pull/8037) - The snap was updated to use the core20 base and to use lzo compression for better startup performance [#8109](https://github.com/JabRef/jabref/pull/8109) - We improved the Drag and Drop behavior in the "Customize Entry Types" Dialog [#6338](https://github.com/JabRef/jabref/issues/6338) -- When determing the URL of an ArXiV eprint, the URL now points to the version +- When determing the URL of an ArXiV eprint, the URL now points to the version [#8149](https://github.com/JabRef/jabref/pull/8149) ### Fixed From b9b8c05f9a72106d82adbefc09871fedd9d0e7de Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Sun, 17 Oct 2021 11:10:37 +0200 Subject: [PATCH 4/6] Adapt test to new behavior --- src/test/java/org/jabref/logic/importer/fetcher/ArXivTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/org/jabref/logic/importer/fetcher/ArXivTest.java b/src/test/java/org/jabref/logic/importer/fetcher/ArXivTest.java index 84bb345e80a..212948502c6 100644 --- a/src/test/java/org/jabref/logic/importer/fetcher/ArXivTest.java +++ b/src/test/java/org/jabref/logic/importer/fetcher/ArXivTest.java @@ -223,7 +223,7 @@ void searchEntryByIdWith5Digits() throws Exception { @Test void searchWithMalformedIdThrowsException() throws Exception { - assertThrows(FetcherException.class, () -> fetcher.performSearchById("123412345")); + assertEquals(Optional.empty(), fetcher.performSearchById("123412345")); } @Test From 42e37eb9e26b6bdf4571e93922692dc251e0c85d Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Sun, 17 Oct 2021 11:47:32 +0200 Subject: [PATCH 5/6] Fix checkstyle --- src/test/java/org/jabref/logic/importer/fetcher/ArXivTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/test/java/org/jabref/logic/importer/fetcher/ArXivTest.java b/src/test/java/org/jabref/logic/importer/fetcher/ArXivTest.java index 212948502c6..018262e1fea 100644 --- a/src/test/java/org/jabref/logic/importer/fetcher/ArXivTest.java +++ b/src/test/java/org/jabref/logic/importer/fetcher/ArXivTest.java @@ -6,7 +6,6 @@ import java.util.List; import java.util.Optional; -import org.jabref.logic.importer.FetcherException; import org.jabref.logic.importer.ImportFormatPreferences; import org.jabref.logic.importer.PagedSearchBasedFetcher; import org.jabref.logic.importer.SearchBasedFetcher; From b3a9663c3787c6e8b0b1cf568512bd8621dd5bb2 Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Sun, 17 Oct 2021 11:54:02 +0200 Subject: [PATCH 6/6] Disable IacrEprintFetcherTest, because gets blocked Example: Caused by: java.io.IOException: Server returned HTTP response code: 500 for URL: eprint.iacr.org/eprint-bin/cite.pl?entry=2017/1118 --- .../jabref/logic/importer/fetcher/IacrEprintFetcherTest.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/test/java/org/jabref/logic/importer/fetcher/IacrEprintFetcherTest.java b/src/test/java/org/jabref/logic/importer/fetcher/IacrEprintFetcherTest.java index b5ead872a6f..d30abe26e1b 100644 --- a/src/test/java/org/jabref/logic/importer/fetcher/IacrEprintFetcherTest.java +++ b/src/test/java/org/jabref/logic/importer/fetcher/IacrEprintFetcherTest.java @@ -12,6 +12,7 @@ import org.jabref.model.entry.BibEntry; import org.jabref.model.entry.field.StandardField; import org.jabref.model.entry.types.StandardEntryType; +import org.jabref.support.DisabledOnCIServer; import org.jabref.testutils.category.FetcherTest; import org.junit.jupiter.api.BeforeEach; @@ -30,6 +31,7 @@ import static org.mockito.Mockito.mock; @FetcherTest +@DisabledOnCIServer("eprint.iacr.org blocks with 500 when there are too many calls from the same IP address.") public class IacrEprintFetcherTest { private IacrEprintFetcher fetcher;