diff --git a/docs/content/v1.0.x-kor/release-notes/_index.md b/docs/content/v1.0.x-kor/release-notes/_index.md index 7e6e4b57d..d8fc7dde9 100644 --- a/docs/content/v1.0.x-kor/release-notes/_index.md +++ b/docs/content/v1.0.x-kor/release-notes/_index.md @@ -5,6 +5,11 @@ menu: docs: weight: 100 --- +sectionStart +### v.1.0.25 +Fix concurrency issue with string generation + +sectionEnd sectionStart ### v.1.0.24 diff --git a/docs/content/v1.0.x/release-notes/_index.md b/docs/content/v1.0.x/release-notes/_index.md index 86af5c436..56e052aee 100644 --- a/docs/content/v1.0.x/release-notes/_index.md +++ b/docs/content/v1.0.x/release-notes/_index.md @@ -5,6 +5,12 @@ menu: docs: weight: 100 --- +sectionStart +### v.1.0.25 +Fix concurrency issue with string generation + +sectionEnd + sectionStart ### v.1.0.24 Deprecate `ElementJsonSubTypesObjectPropertyGenerator`, `PropertyJsonSubTypesObjectPropertyGenerator` in `fixture-monkey-jackson` module. diff --git a/fixture-monkey-api/src/main/java/com/navercorp/fixturemonkey/api/arbitrary/MonkeyStringArbitrary.java b/fixture-monkey-api/src/main/java/com/navercorp/fixturemonkey/api/arbitrary/MonkeyStringArbitrary.java index e423261c9..9c88b6be6 100644 --- a/fixture-monkey-api/src/main/java/com/navercorp/fixturemonkey/api/arbitrary/MonkeyStringArbitrary.java +++ b/fixture-monkey-api/src/main/java/com/navercorp/fixturemonkey/api/arbitrary/MonkeyStringArbitrary.java @@ -18,6 +18,7 @@ package com.navercorp.fixturemonkey.api.arbitrary; +import static com.navercorp.fixturemonkey.api.jqwik.ArbitraryUtils.newThreadSafeArbitrary; import static java.util.Arrays.asList; import java.util.ArrayList; @@ -71,10 +72,16 @@ public RandomGenerator generator(int genSize) { randomCharacterGenerator(), minLength, maxLength(), maxUniqueChars, genSize, lengthDistribution, - characterArbitrary + newThreadSafeArbitrary(characterArbitrary) ); } + // Removing a StoreRepository dependency, it is not useful without Jqwik engine. + @Override + public RandomGenerator generator(int genSize, boolean withEdgeCases) { + return this.generator(genSize); + } + private int maxLength() { return RandomGenerators.collectionMaxSize(minLength, maxLength); } @@ -270,7 +277,6 @@ public int hashCode() { return HashCodeSupport.hash(characterArbitrary, minLength, maxLength, repeatChars, filter, lengthDistribution); } - public MonkeyStringArbitrary filterCharacter(Predicate predicate) { this.filter = this.filter.and(predicate); return this; @@ -288,7 +294,6 @@ private RandomGenerator randomCharacterGenerator() { private Arbitrary effectiveCharacterArbitrary() { Arbitrary characterArbitrary = this.characterArbitrary; - return characterArbitrary.filter(this.filter); + return newThreadSafeArbitrary(characterArbitrary.filter(this.filter)); } - } diff --git a/fixture-monkey-api/src/main/java/com/navercorp/fixturemonkey/api/jqwik/ArbitraryUtils.java b/fixture-monkey-api/src/main/java/com/navercorp/fixturemonkey/api/jqwik/ArbitraryUtils.java index 7da525520..aec39fea7 100644 --- a/fixture-monkey-api/src/main/java/com/navercorp/fixturemonkey/api/jqwik/ArbitraryUtils.java +++ b/fixture-monkey-api/src/main/java/com/navercorp/fixturemonkey/api/jqwik/ArbitraryUtils.java @@ -35,27 +35,30 @@ public static CombinableArbitrary toCombinableArbitrary(Arbitrary arbi return CombinableArbitrary.from(LazyArbitrary.lazy( () -> { if (arbitrary != null) { - return new Arbitrary() { - - @Override - public RandomGenerator generator(int genSize) { - return arbitrary.generator(genSize); - } - - // Removing a StoreRepository dependency, it is not useful without Jqwik engine. - @Override - public RandomGenerator generator(int genSize, boolean withEdgeCases) { - return arbitrary.generator(genSize); - } - - @Override - public EdgeCases edgeCases(int maxEdgeCases) { - return arbitrary.edgeCases(maxEdgeCases); - } - }.sample(); + return newThreadSafeArbitrary(arbitrary).sample(); } return null; } )); } + + public static Arbitrary newThreadSafeArbitrary(Arbitrary delegate) { + return new Arbitrary() { + @Override + public RandomGenerator generator(int genSize) { + return delegate.generator(genSize); + } + + // Removing a StoreRepository dependency, it is not useful without Jqwik engine. + @Override + public RandomGenerator generator(int genSize, boolean withEdgeCases) { + return delegate.generator(genSize); + } + + @Override + public EdgeCases edgeCases(int maxEdgeCases) { + return delegate.edgeCases(maxEdgeCases); + } + }; + } }