Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@
import com.skyflow.utils.Utils;
import com.skyflow.utils.logger.LogUtil;
import com.skyflow.utils.validations.Validations;
import com.skyflow.vault.data.BulkDeleteTokensOptions;
import com.skyflow.vault.data.BulkTokenizeOptions;
import com.skyflow.vault.data.BulkDeleteTokensRequest;
import com.skyflow.vault.data.BulkDeleteTokensResponseRecord;
import com.skyflow.vault.data.BulkTokenizeRequestRecord;
Expand Down Expand Up @@ -244,7 +246,7 @@ public BulkDeleteTokensResponse bulkDeleteTokens(BulkDeleteTokensRequest deleteT
return bulkDeleteTokens(deleteTokensRequest, null);
}

public BulkDeleteTokensResponse bulkDeleteTokens(BulkDeleteTokensRequest deleteTokensRequest, DeleteTokensOptions options) throws SkyflowException {
public BulkDeleteTokensResponse bulkDeleteTokens(BulkDeleteTokensRequest deleteTokensRequest, BulkDeleteTokensOptions options) throws SkyflowException {
LogUtil.printInfoLog(InfoLogs.DELETE_TOKENS_TRIGGERED.getLog());
try {
LogUtil.printInfoLog(InfoLogs.VALIDATE_DELETE_TOKENS_REQUEST.getLog());
Expand All @@ -269,7 +271,7 @@ public CompletableFuture<BulkDeleteTokensResponse> bulkDeleteTokensAsync(BulkDel
return bulkDeleteTokensAsync(deleteTokensRequest, null);
}

public CompletableFuture<BulkDeleteTokensResponse> bulkDeleteTokensAsync(BulkDeleteTokensRequest deleteTokensRequest, DeleteTokensOptions options) throws SkyflowException {
public CompletableFuture<BulkDeleteTokensResponse> bulkDeleteTokensAsync(BulkDeleteTokensRequest deleteTokensRequest, BulkDeleteTokensOptions options) throws SkyflowException {
LogUtil.printInfoLog(InfoLogs.DELETE_TOKENS_TRIGGERED.getLog());
ExecutorService executor = null;
try {
Expand Down Expand Up @@ -325,7 +327,7 @@ public BulkTokenizeResponse bulkTokenize(BulkTokenizeRequest tokenizeRequest) th
return bulkTokenize(tokenizeRequest, null);
}

public BulkTokenizeResponse bulkTokenize(BulkTokenizeRequest tokenizeRequest, TokenizeOptions options) throws SkyflowException {
public BulkTokenizeResponse bulkTokenize(BulkTokenizeRequest tokenizeRequest, BulkTokenizeOptions options) throws SkyflowException {
LogUtil.printInfoLog(InfoLogs.TOKENIZE_TRIGGERED.getLog());
try {
LogUtil.printInfoLog(InfoLogs.VALIDATING_TOKENIZE_REQUEST.getLog());
Expand All @@ -351,7 +353,7 @@ public CompletableFuture<BulkTokenizeResponse> bulkTokenizeAsync(BulkTokenizeReq
return bulkTokenizeAsync(tokenizeRequest, null);
}

public CompletableFuture<BulkTokenizeResponse> bulkTokenizeAsync(BulkTokenizeRequest tokenizeRequest, TokenizeOptions options) throws SkyflowException {
public CompletableFuture<BulkTokenizeResponse> bulkTokenizeAsync(BulkTokenizeRequest tokenizeRequest, BulkTokenizeOptions options) throws SkyflowException {
LogUtil.printInfoLog(InfoLogs.TOKENIZE_TRIGGERED.getLog());
ExecutorService executor = null;
try {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package com.skyflow.vault.data;

/**
* Per-call options for bulk delete tokens.
*
* <p>Adds nothing to {@link DeleteTokensOptions} today; it exists so the bulk interfaces have their own
* options type to grow into, matching the {@link BulkDeleteTokensRequest} / {@link DeleteTokensRequest} split.
*/
public final class BulkDeleteTokensOptions extends DeleteTokensOptions {

private BulkDeleteTokensOptions(BulkDeleteTokensOptionsBuilder builder) {
super(builder);
}

public static BulkDeleteTokensOptionsBuilder builder() {
return new BulkDeleteTokensOptionsBuilder();
}

public static final class BulkDeleteTokensOptionsBuilder extends Builder {

private BulkDeleteTokensOptionsBuilder() {}

@Override
public BulkDeleteTokensOptionsBuilder interceptor(RequestInterceptor interceptor) {
super.interceptor(interceptor);
return this;
}

@Override
public BulkDeleteTokensOptions build() {
return new BulkDeleteTokensOptions(this);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package com.skyflow.vault.data;

/**
* Per-call options for bulk tokenize.
*
* <p>Adds nothing to {@link TokenizeOptions} today; it exists so the bulk interfaces have their own
* options type to grow into, matching the {@link BulkTokenizeRequest} / {@link TokenizeRequest} split.
*/
public final class BulkTokenizeOptions extends TokenizeOptions {

private BulkTokenizeOptions(BulkTokenizeOptionsBuilder builder) {
super(builder);
}

public static BulkTokenizeOptionsBuilder builder() {
return new BulkTokenizeOptionsBuilder();
}

public static final class BulkTokenizeOptionsBuilder extends Builder {

private BulkTokenizeOptionsBuilder() {}

@Override
public BulkTokenizeOptionsBuilder interceptor(RequestInterceptor interceptor) {
super.interceptor(interceptor);
return this;
}

@Override
public BulkTokenizeOptions build() {
return new BulkTokenizeOptions(this);
}
}
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,15 @@
package com.skyflow.vault.data;

public final class DeleteTokensOptions {
/**
* Per-call options for delete tokens.
*
* <p>Subclassed by {@link BulkDeleteTokensOptions} so the bulk interfaces can take their own options
* type while sharing this one's settings, mirroring how {@link BulkDeleteTokensRequest} extends {@link DeleteTokensRequest}.
*/
public class DeleteTokensOptions {
private final RequestInterceptor interceptor;

private DeleteTokensOptions(Builder builder) {
protected DeleteTokensOptions(Builder builder) {
this.interceptor = builder.interceptor;
}

Expand All @@ -15,9 +21,11 @@ public static Builder builder() {
return new Builder();
}

public static final class Builder {
public static class Builder {
private RequestInterceptor interceptor;

protected Builder() {}

public Builder interceptor(RequestInterceptor interceptor) {
this.interceptor = interceptor;
return this;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,15 @@
package com.skyflow.vault.data;

public final class TokenizeOptions {
/**
* Per-call options for tokenize.
*
* <p>Subclassed by {@link BulkTokenizeOptions} so the bulk interfaces can take their own options
* type while sharing this one's settings, mirroring how {@link BulkTokenizeRequest} extends {@link TokenizeRequest}.
*/
public class TokenizeOptions {
private final RequestInterceptor interceptor;

private TokenizeOptions(Builder builder) {
protected TokenizeOptions(Builder builder) {
this.interceptor = builder.interceptor;
}

Expand All @@ -15,9 +21,11 @@ public static Builder builder() {
return new Builder();
}

public static final class Builder {
public static class Builder {
private RequestInterceptor interceptor;

protected Builder() {}

public Builder interceptor(RequestInterceptor interceptor) {
this.interceptor = interceptor;
return this;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@
import com.skyflow.generated.rest.types.V1InsertResponse;
import com.skyflow.generated.rest.types.V1RecordResponseObject;
import com.skyflow.utils.Constants;
import com.skyflow.vault.data.BulkDeleteTokensOptions;
import com.skyflow.vault.data.BulkTokenizeOptions;
import com.skyflow.vault.data.BulkDeleteTokensRequest;
import com.skyflow.vault.data.BulkDeleteTokensResponse;
import com.skyflow.vault.data.BulkDetokenizeRequest;
Expand Down Expand Up @@ -1049,7 +1051,7 @@ public void testBulkDeleteTokens_interceptorInvokedOncePerBatchWithDistinctConte
BulkDeleteTokensRequest request = BulkDeleteTokensRequest.builder().tokens(multiBatchTokens()).build();

CountingInterceptor interceptor = new CountingInterceptor();
controller.bulkDeleteTokens(request, DeleteTokensOptions.builder().interceptor(interceptor).build());
controller.bulkDeleteTokens(request, BulkDeleteTokensOptions.builder().interceptor(interceptor).build());

ArgumentCaptor<RequestOptions> captor = ArgumentCaptor.forClass(RequestOptions.class);
Mockito.verify(mockRaw, Mockito.times(EXPECTED_BATCH_COUNT)).deletetoken(any(), captor.capture());
Expand Down Expand Up @@ -1108,7 +1110,7 @@ public void testBulkTokenize_interceptorInvokedOncePerBatchWithDistinctContext()
BulkTokenizeRequest request = BulkTokenizeRequest.builder().records(records).build();

CountingInterceptor interceptor = new CountingInterceptor();
controller.bulkTokenize(request, TokenizeOptions.builder().interceptor(interceptor).build());
controller.bulkTokenize(request, BulkTokenizeOptions.builder().interceptor(interceptor).build());

ArgumentCaptor<RequestOptions> captor = ArgumentCaptor.forClass(RequestOptions.class);
Mockito.verify(mockRaw, Mockito.times(EXPECTED_BATCH_COUNT)).tokenize(any(), captor.capture());
Expand Down
70 changes: 63 additions & 7 deletions flowvault/src/test/java/com/skyflow/vault/data/OptionsTests.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,6 @@

import org.junit.Assert;
import org.junit.Test;

/**
* Tests for the single-field options/builder classes: {@link InsertOptions},
* {@link DetokenizeOptions}, {@link TokenizeOptions} and {@link DeleteTokensOptions},
* plus the bulk specializations {@link BulkInsertOptions} and {@link BulkDetokenizeOptions}.
* Each class simply wraps a {@link RequestInterceptor} with no validation.
*/
public class OptionsTests {

private static final RequestInterceptor INTERCEPTOR = context -> {
Expand Down Expand Up @@ -100,4 +93,67 @@ public void testDeleteTokensOptions_withoutInterceptor() {
DeleteTokensOptions options = DeleteTokensOptions.builder().build();
Assert.assertNull(options.getInterceptor());
}

// ── BulkTokenizeOptions ──────────────────────────────────────────────────

@Test
public void testBulkTokenizeOptions_withInterceptor() {
BulkTokenizeOptions options = BulkTokenizeOptions.builder().interceptor(INTERCEPTOR).build();
Assert.assertSame(INTERCEPTOR, options.getInterceptor());
}

@Test
public void testBulkTokenizeOptions_withoutInterceptor() {
BulkTokenizeOptions options = BulkTokenizeOptions.builder().build();
Assert.assertNull(options.getInterceptor());
}

@Test
public void testBulkTokenizeOptions_isATokenizeOptions() {
BulkTokenizeOptions options = BulkTokenizeOptions.builder().interceptor(INTERCEPTOR).build();
Assert.assertTrue(options instanceof TokenizeOptions);
// the inherited accessor sees the same interceptor
Assert.assertSame(INTERCEPTOR, ((TokenizeOptions) options).getInterceptor());
}

@Test
public void testBulkTokenizeOptions_builderStaysBulkTypedWhileChaining() {
// builder() hides the parent's, so the override must return the bulk builder for
// chaining to keep compiling without a cast
BulkTokenizeOptions.BulkTokenizeOptionsBuilder builder =
BulkTokenizeOptions.builder().interceptor(INTERCEPTOR);
BulkTokenizeOptions options = builder.build();
Assert.assertSame(INTERCEPTOR, options.getInterceptor());
}

// ── BulkDeleteTokensOptions ──────────────────────────────────────────────

@Test
public void testBulkDeleteTokensOptions_withInterceptor() {
BulkDeleteTokensOptions options =
BulkDeleteTokensOptions.builder().interceptor(INTERCEPTOR).build();
Assert.assertSame(INTERCEPTOR, options.getInterceptor());
}

@Test
public void testBulkDeleteTokensOptions_withoutInterceptor() {
BulkDeleteTokensOptions options = BulkDeleteTokensOptions.builder().build();
Assert.assertNull(options.getInterceptor());
}

@Test
public void testBulkDeleteTokensOptions_isADeleteTokensOptions() {
BulkDeleteTokensOptions options =
BulkDeleteTokensOptions.builder().interceptor(INTERCEPTOR).build();
Assert.assertTrue(options instanceof DeleteTokensOptions);
Assert.assertSame(INTERCEPTOR, ((DeleteTokensOptions) options).getInterceptor());
}

@Test
public void testBulkDeleteTokensOptions_builderStaysBulkTypedWhileChaining() {
BulkDeleteTokensOptions.BulkDeleteTokensOptionsBuilder builder =
BulkDeleteTokensOptions.builder().interceptor(INTERCEPTOR);
BulkDeleteTokensOptions options = builder.build();
Assert.assertSame(INTERCEPTOR, options.getInterceptor());
}
}
Loading