diff --git a/CHANGELOG.md b/CHANGELOG.md index ae44d39..a3ec5a4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,18 @@ # Changelog +## [0.0.21](https://github.com/cloudquery/plugin-sdk-java/compare/v0.0.20...v0.0.21) (2024-02-09) + + +### Features + +* Implement `GetSpecSchema` ([#180](https://github.com/cloudquery/plugin-sdk-java/issues/180)) ([9eeb976](https://github.com/cloudquery/plugin-sdk-java/commit/9eeb976c868b1a206230b6285d666671a18682a7)) + + +### Bug Fixes + +* **deps:** Update dependency io.cloudquery:plugin-pb-java to v0.0.14 ([#178](https://github.com/cloudquery/plugin-sdk-java/issues/178)) ([6871551](https://github.com/cloudquery/plugin-sdk-java/commit/6871551de650ee36464699ec6cbb0f124676f282)) +* **deps:** Update grpc-java monorepo to v1.61.1 ([#172](https://github.com/cloudquery/plugin-sdk-java/issues/172)) ([4ada7bc](https://github.com/cloudquery/plugin-sdk-java/commit/4ada7bcade9cf94043a9ba99c86c2fef43c3a645)) + ## [0.0.20](https://github.com/cloudquery/plugin-sdk-java/compare/v0.0.19...v0.0.20) (2024-02-06) diff --git a/lib/build.gradle b/lib/build.gradle index c16beae..5fe9962 100644 --- a/lib/build.gradle +++ b/lib/build.gradle @@ -11,7 +11,7 @@ ext { group 'io.cloudquery' // x-release-please-start-version -version = '0.0.20' +version = '0.0.21' // x-release-please-end repositories { @@ -34,13 +34,12 @@ dependencies { implementation 'com.google.guava:guava:32.1.3-jre' implementation 'info.picocli:picocli:4.7.5' implementation 'com.google.guava:guava:32.1.3-jre' - implementation "io.grpc:grpc-protobuf:1.60.1" - implementation "io.grpc:grpc-stub:1.60.1" - implementation "io.grpc:grpc-services:1.60.1" - implementation "io.grpc:grpc-testing:1.60.1" - implementation "io.cloudquery:plugin-pb-java:0.0.12" - implementation "org.apache.arrow:arrow-memory-core:12.0.1" - implementation "org.apache.arrow:arrow-vector:12.0.1" + implementation 'io.grpc:grpc-protobuf:1.61.1' + implementation 'io.grpc:grpc-stub:1.61.1' + implementation 'io.grpc:grpc-services:1.61.1' + implementation 'io.cloudquery:plugin-pb-java:0.0.14' + implementation 'org.apache.arrow:arrow-memory-core:12.0.1' + implementation 'org.apache.arrow:arrow-vector:12.0.1' implementation "com.fasterxml.jackson.core:jackson-core:2.16.1" implementation "com.fasterxml.jackson.core:jackson-annotations:2.16.1" @@ -48,15 +47,16 @@ dependencies { implementation 'org.apache.logging.log4j:log4j-api:2.22.1' implementation 'org.apache.logging.log4j:log4j-core:2.22.1' - testImplementation(platform('org.junit:junit-bom:5.10.1')) - testImplementation('org.junit.jupiter:junit-jupiter:5.10.1') - testImplementation('org.junit.jupiter:junit-jupiter-api:5.10.1') - testImplementation('org.mockito:mockito-core:5.10.0') - testImplementation('org.mockito:mockito-junit-jupiter:5.10.0') - testImplementation('nl.jqno.equalsverifier:equalsverifier:3.15.6') - testRuntimeOnly('org.junit.jupiter:junit-jupiter-engine:5.10.1') - + testImplementation 'io.grpc:grpc-testing:1.61.1' + testImplementation 'io.grpc:grpc-inprocess:1.61.1' + testImplementation platform('org.junit:junit-bom:5.10.1') + testImplementation 'org.junit.jupiter:junit-jupiter:5.10.1' + testImplementation 'org.junit.jupiter:junit-jupiter-api:5.10.1' + testImplementation 'org.mockito:mockito-core:5.10.0' + testImplementation 'org.mockito:mockito-junit-jupiter:5.10.0' + testImplementation 'nl.jqno.equalsverifier:equalsverifier:3.15.6' testImplementation 'org.assertj:assertj-core:3.25.2' + testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.10.1' runtimeOnly "org.apache.arrow:arrow-memory-netty:12.0.1" } diff --git a/lib/src/main/java/io/cloudquery/internal/servers/plugin/v3/PluginServer.java b/lib/src/main/java/io/cloudquery/internal/servers/plugin/v3/PluginServer.java index 56ee04d..6bada6a 100644 --- a/lib/src/main/java/io/cloudquery/internal/servers/plugin/v3/PluginServer.java +++ b/lib/src/main/java/io/cloudquery/internal/servers/plugin/v3/PluginServer.java @@ -181,4 +181,18 @@ private WriteMessage processDeleteStaleRequest(Write.Request request) messageDeleteStale.getSourceName(), new Date(messageDeleteStale.getSyncTime().getSeconds() * 1000)); } + + @Override + public void getSpecSchema( + io.cloudquery.plugin.v3.GetSpecSchema.Request request, + StreamObserver responseObserver) { + io.cloudquery.plugin.v3.GetSpecSchema.Response.Builder builder = + io.cloudquery.plugin.v3.GetSpecSchema.Response.newBuilder(); + String schema = this.plugin.getJsonSchema(); + if (schema != null && !schema.isBlank()) { + builder.setJsonSchema(schema); + } + responseObserver.onNext(builder.build()); + responseObserver.onCompleted(); + } } diff --git a/lib/src/main/java/io/cloudquery/plugin/Plugin.java b/lib/src/main/java/io/cloudquery/plugin/Plugin.java index 5c02701..bb46a0b 100644 --- a/lib/src/main/java/io/cloudquery/plugin/Plugin.java +++ b/lib/src/main/java/io/cloudquery/plugin/Plugin.java @@ -18,6 +18,7 @@ public abstract class Plugin { @NonNull protected final String name; @NonNull protected final String version; @Setter protected Logger logger; + @Setter protected String jsonSchema; protected ClientMeta client; public void init(String spec, NewClientOptions options) throws Exception { diff --git a/lib/src/test/java/io/cloudquery/internal/servers/plugin/v3/PluginServerTest.java b/lib/src/test/java/io/cloudquery/internal/servers/plugin/v3/PluginServerTest.java index f75019f..e1e4d66 100644 --- a/lib/src/test/java/io/cloudquery/internal/servers/plugin/v3/PluginServerTest.java +++ b/lib/src/test/java/io/cloudquery/internal/servers/plugin/v3/PluginServerTest.java @@ -1,5 +1,6 @@ package io.cloudquery.internal.servers.plugin.v3; +import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.verify; @@ -9,6 +10,7 @@ import io.cloudquery.messages.WriteInsert; import io.cloudquery.messages.WriteMigrateTable; import io.cloudquery.plugin.Plugin; +import io.cloudquery.plugin.v3.GetSpecSchema; import io.cloudquery.plugin.v3.PluginGrpc; import io.cloudquery.plugin.v3.PluginGrpc.PluginStub; import io.cloudquery.plugin.v3.Write; @@ -25,12 +27,14 @@ import java.io.IOException; import java.util.List; import java.util.concurrent.CountDownLatch; +import lombok.Getter; import org.apache.arrow.vector.types.pojo.ArrowType; import org.junit.Rule; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; +import org.mockito.Mockito; import org.mockito.junit.jupiter.MockitoExtension; @ExtendWith(MockitoExtension.class) @@ -91,6 +95,31 @@ public void shouldSendWriteDeleteStaleMessage() throws Exception { verify(plugin).write(any(WriteDeleteStale.class)); } + @Test + public void shouldSendNullJSONSchema() throws Exception { + NullResponseStream responseObserver = new NullResponseStream<>(); + + pluginStub.getSpecSchema(GetSpecSchema.Request.getDefaultInstance(), responseObserver); + responseObserver.await(); + + verify(plugin).getJsonSchema(); + assertFalse(responseObserver.getValue().hasJsonSchema()); + } + + @Test + public void shouldSendNonNullJSONSchema() throws Exception { + Mockito.doReturn("{}").when(plugin).getJsonSchema(); + + NullResponseStream responseObserver = new NullResponseStream<>(); + + pluginStub.getSpecSchema(GetSpecSchema.Request.getDefaultInstance(), responseObserver); + responseObserver.await(); + + verify(plugin).getJsonSchema(); + assertTrue(responseObserver.getValue().hasJsonSchema()); + assertEquals("{}", responseObserver.getValue().getJsonSchema()); + } + private static Write.Request generateMigrateTableMessage() throws IOException { Table table = Table.builder().name("test").build(); return Write.Request.newBuilder() @@ -121,12 +150,18 @@ private Write.Request generateDeleteStaleMessage() { private static class NullResponseStream implements StreamObserver { private final CountDownLatch countDownLatch = new CountDownLatch(1); + @Getter private T value; + @Getter private Throwable error; @Override - public void onNext(T value) {} + public void onNext(T value) { + this.value = value; + } @Override - public void onError(Throwable t) {} + public void onError(Throwable t) { + this.error = t; + } @Override public void onCompleted() {