Skip to content

Commit dff4b59

Browse files
committed
File data source shouldPersist tests.
1 parent 753a7d5 commit dff4b59

File tree

4 files changed

+142
-3
lines changed

4 files changed

+142
-3
lines changed

lib/sdk/server/src/main/java/com/launchdarkly/sdk/server/integrations/FileDataSourceBuilder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public final class FileDataSourceBuilder implements ComponentConfigurer<DataSour
3434
private boolean autoUpdate = false;
3535
private FileData.DuplicateKeysHandling duplicateKeysHandling = FileData.DuplicateKeysHandling.FAIL;
3636

37-
private boolean shouldPersist = false;
37+
private boolean shouldPersist = true;
3838

3939
/**
4040
* Adds any number of source files for loading flag data, specifying each file path as a string. The files will

lib/sdk/server/src/test/java/com/launchdarkly/sdk/server/integrations/FileDataSourceTest.java

Lines changed: 53 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import static org.hamcrest.MatcherAssert.assertThat;
3232
import static org.hamcrest.Matchers.equalTo;
3333
import static org.hamcrest.Matchers.is;
34+
import static org.hamcrest.Matchers.notNullValue;
3435
import static org.junit.Assert.assertEquals;
3536

3637
@SuppressWarnings("javadoc")
@@ -160,10 +161,60 @@ public void instantiationOfArbitraryTypeIsNotAllowed() throws Exception {
160161
}
161162
}
162163
}
163-
164+
165+
@Test
166+
public void dataSourceDefaultsToPersisting() throws Exception {
167+
FileDataSourceBuilder factory = makeFactoryWithFile(resourceFilePath("all-properties.json"));
168+
try (DataSource fp = makeDataSource(factory)) {
169+
fp.start();
170+
171+
// Wait for and get the init data
172+
com.launchdarkly.sdk.server.subsystems.DataStoreTypes.FullDataSet<com.launchdarkly.sdk.server.subsystems.DataStoreTypes.ItemDescriptor> initData =
173+
dataSourceUpdates.receivedInits.poll(5, java.util.concurrent.TimeUnit.SECONDS);
174+
175+
assertThat(initData, notNullValue());
176+
// The FullDataSet should have shouldPersist=true by default for legacy compatibility
177+
assertThat(initData.shouldPersist(), equalTo(true));
178+
}
179+
}
180+
181+
@Test
182+
public void dataSourceCanBeConfiguredToPersist() throws Exception {
183+
FileDataSourceBuilder factory = FileData.dataSource()
184+
.filePaths(resourceFilePath("all-properties.json"))
185+
.shouldPersist(true);
186+
try (DataSource fp = makeDataSource(factory)) {
187+
fp.start();
188+
189+
// Wait for and get the init data
190+
com.launchdarkly.sdk.server.subsystems.DataStoreTypes.FullDataSet<com.launchdarkly.sdk.server.subsystems.DataStoreTypes.ItemDescriptor> initData =
191+
dataSourceUpdates.receivedInits.poll(5, java.util.concurrent.TimeUnit.SECONDS);
192+
193+
assertThat(initData, notNullValue());
194+
assertThat(initData.shouldPersist(), equalTo(true));
195+
}
196+
}
197+
198+
@Test
199+
public void dataSourceCanBeConfiguredToNotPersist() throws Exception {
200+
FileDataSourceBuilder factory = FileData.dataSource()
201+
.filePaths(resourceFilePath("all-properties.json"))
202+
.shouldPersist(false);
203+
try (DataSource fp = makeDataSource(factory)) {
204+
fp.start();
205+
206+
// Wait for and get the init data
207+
com.launchdarkly.sdk.server.subsystems.DataStoreTypes.FullDataSet<com.launchdarkly.sdk.server.subsystems.DataStoreTypes.ItemDescriptor> initData =
208+
dataSourceUpdates.receivedInits.poll(5, java.util.concurrent.TimeUnit.SECONDS);
209+
210+
assertThat(initData, notNullValue());
211+
assertThat(initData.shouldPersist(), equalTo(false));
212+
}
213+
}
214+
164215
public static class SimulatedMaliciousType {
165216
static volatile boolean wasInstantiated = false;
166-
217+
167218
public SimulatedMaliciousType(String value) {
168219
wasInstantiated = true;
169220
}

lib/sdk/server/src/test/java/com/launchdarkly/sdk/server/integrations/FileInitializerTest.java

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,50 @@ public void initializerRespectsIgnoreDuplicateKeysHandling() throws Exception {
100100
}
101101
}
102102

103+
@Test
104+
public void initializerDefaultsToNotPersisting() throws Exception {
105+
106+
try (Initializer initializer = FileData.initializer()
107+
.filePaths(resourceFilePath("all-properties.json"))
108+
.build(TestDataSourceBuildInputs.create(testLogger))) {
109+
CompletableFuture<FDv2SourceResult> resultFuture = initializer.run();
110+
FDv2SourceResult result = resultFuture.get(5, TimeUnit.SECONDS);
111+
112+
assertThat(result.getResultType(), equalTo(FDv2SourceResult.ResultType.CHANGE_SET));
113+
assertThat(result.getChangeSet().shouldPersist(), equalTo(false));
114+
}
115+
}
116+
117+
@Test
118+
public void initializerCanBeConfiguredToPersist() throws Exception {
119+
120+
try (Initializer initializer = FileData.initializer()
121+
.filePaths(resourceFilePath("all-properties.json"))
122+
.shouldPersist(true)
123+
.build(TestDataSourceBuildInputs.create(testLogger))) {
124+
CompletableFuture<FDv2SourceResult> resultFuture = initializer.run();
125+
FDv2SourceResult result = resultFuture.get(5, TimeUnit.SECONDS);
126+
127+
assertThat(result.getResultType(), equalTo(FDv2SourceResult.ResultType.CHANGE_SET));
128+
assertThat(result.getChangeSet().shouldPersist(), equalTo(true));
129+
}
130+
}
131+
132+
@Test
133+
public void initializerCanBeConfiguredToNotPersist() throws Exception {
134+
135+
try (Initializer initializer = FileData.initializer()
136+
.filePaths(resourceFilePath("all-properties.json"))
137+
.shouldPersist(false)
138+
.build(TestDataSourceBuildInputs.create(testLogger))) {
139+
CompletableFuture<FDv2SourceResult> resultFuture = initializer.run();
140+
FDv2SourceResult result = resultFuture.get(5, TimeUnit.SECONDS);
141+
142+
assertThat(result.getResultType(), equalTo(FDv2SourceResult.ResultType.CHANGE_SET));
143+
assertThat(result.getChangeSet().shouldPersist(), equalTo(false));
144+
}
145+
}
146+
103147
@Test
104148
public void initializerFailsOnDuplicateKeysByDefault() throws Exception {
105149

lib/sdk/server/src/test/java/com/launchdarkly/sdk/server/integrations/FileSynchronizerTest.java

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,4 +159,48 @@ public void synchronizerAutoUpdateEmitsNewResultOnFileChange() throws Exception
159159
}
160160
}
161161
}
162+
163+
@Test
164+
public void synchronizerDefaultsToNotPersisting() throws Exception {
165+
166+
try (Synchronizer synchronizer = FileData.synchronizer()
167+
.filePaths(resourceFilePath("all-properties.json"))
168+
.build(TestDataSourceBuildInputs.create(testLogger))) {
169+
CompletableFuture<FDv2SourceResult> resultFuture = synchronizer.next();
170+
FDv2SourceResult result = resultFuture.get(5, TimeUnit.SECONDS);
171+
172+
assertThat(result.getResultType(), equalTo(FDv2SourceResult.ResultType.CHANGE_SET));
173+
assertThat(result.getChangeSet().shouldPersist(), equalTo(false));
174+
}
175+
}
176+
177+
@Test
178+
public void synchronizerCanBeConfiguredToPersist() throws Exception {
179+
180+
try (Synchronizer synchronizer = FileData.synchronizer()
181+
.filePaths(resourceFilePath("all-properties.json"))
182+
.shouldPersist(true)
183+
.build(TestDataSourceBuildInputs.create(testLogger))) {
184+
CompletableFuture<FDv2SourceResult> resultFuture = synchronizer.next();
185+
FDv2SourceResult result = resultFuture.get(5, TimeUnit.SECONDS);
186+
187+
assertThat(result.getResultType(), equalTo(FDv2SourceResult.ResultType.CHANGE_SET));
188+
assertThat(result.getChangeSet().shouldPersist(), equalTo(true));
189+
}
190+
}
191+
192+
@Test
193+
public void synchronizerCanBeConfiguredToNotPersist() throws Exception {
194+
195+
try (Synchronizer synchronizer = FileData.synchronizer()
196+
.filePaths(resourceFilePath("all-properties.json"))
197+
.shouldPersist(false)
198+
.build(TestDataSourceBuildInputs.create(testLogger))) {
199+
CompletableFuture<FDv2SourceResult> resultFuture = synchronizer.next();
200+
FDv2SourceResult result = resultFuture.get(5, TimeUnit.SECONDS);
201+
202+
assertThat(result.getResultType(), equalTo(FDv2SourceResult.ResultType.CHANGE_SET));
203+
assertThat(result.getChangeSet().shouldPersist(), equalTo(false));
204+
}
205+
}
162206
}

0 commit comments

Comments
 (0)