diff --git a/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/reference/OpenAPIDereferencer31.java b/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/reference/OpenAPIDereferencer31.java index 7c349f5d3c..9ac62a9873 100644 --- a/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/reference/OpenAPIDereferencer31.java +++ b/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/reference/OpenAPIDereferencer31.java @@ -11,15 +11,9 @@ import java.util.Iterator; import java.util.LinkedHashMap; import java.util.LinkedHashSet; -import java.util.Set; public class OpenAPIDereferencer31 implements OpenAPIDereferencer { - protected final Set messages = new HashSet<>(); - - private OpenAPI openAPI; - private SwaggerParseResult result; - public boolean canDereference(DereferencerContext context) { if (context.openApi != null && context.openApi.getOpenapi().startsWith("3.1")) { return true; @@ -38,8 +32,8 @@ public void dereference(DereferencerContext context, Iterator> futures = new ArrayList<>(); + for (int i = 0; i < iterations; i++) { + final String spec = (i % 2 == 0) ? specA : specB; + final String expectedTitle = (i % 2 == 0) ? "SpecA" : "SpecB"; + futures.add(pool.submit(() -> { + String actual = parseAndGetTitle(spec); + assertEquals("Parsed title should match input spec (concurrent race detected)", expectedTitle, actual); + return actual; + })); + } + + for (Future future : futures) { + future.get(); + } + } finally { + pool.shutdown(); + } + } +}