Skip to content

Commit 9eeb976

Browse files
authored
feat: Implement GetSpecSchema (#180)
Closes cloudquery/cloudquery#16503
1 parent 4ada7bc commit 9eeb976

File tree

3 files changed

+52
-2
lines changed

3 files changed

+52
-2
lines changed

Diff for: lib/src/main/java/io/cloudquery/internal/servers/plugin/v3/PluginServer.java

+14
Original file line numberDiff line numberDiff line change
@@ -181,4 +181,18 @@ private WriteMessage processDeleteStaleRequest(Write.Request request)
181181
messageDeleteStale.getSourceName(),
182182
new Date(messageDeleteStale.getSyncTime().getSeconds() * 1000));
183183
}
184+
185+
@Override
186+
public void getSpecSchema(
187+
io.cloudquery.plugin.v3.GetSpecSchema.Request request,
188+
StreamObserver<io.cloudquery.plugin.v3.GetSpecSchema.Response> responseObserver) {
189+
io.cloudquery.plugin.v3.GetSpecSchema.Response.Builder builder =
190+
io.cloudquery.plugin.v3.GetSpecSchema.Response.newBuilder();
191+
String schema = this.plugin.getJsonSchema();
192+
if (schema != null && !schema.isBlank()) {
193+
builder.setJsonSchema(schema);
194+
}
195+
responseObserver.onNext(builder.build());
196+
responseObserver.onCompleted();
197+
}
184198
}

Diff for: lib/src/main/java/io/cloudquery/plugin/Plugin.java

+1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ public abstract class Plugin {
1818
@NonNull protected final String name;
1919
@NonNull protected final String version;
2020
@Setter protected Logger logger;
21+
@Setter protected String jsonSchema;
2122
protected ClientMeta client;
2223

2324
public void init(String spec, NewClientOptions options) throws Exception {

Diff for: lib/src/test/java/io/cloudquery/internal/servers/plugin/v3/PluginServerTest.java

+37-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package io.cloudquery.internal.servers.plugin.v3;
22

3+
import static org.junit.jupiter.api.Assertions.*;
34
import static org.mockito.ArgumentMatchers.any;
45
import static org.mockito.Mockito.verify;
56

@@ -9,6 +10,7 @@
910
import io.cloudquery.messages.WriteInsert;
1011
import io.cloudquery.messages.WriteMigrateTable;
1112
import io.cloudquery.plugin.Plugin;
13+
import io.cloudquery.plugin.v3.GetSpecSchema;
1214
import io.cloudquery.plugin.v3.PluginGrpc;
1315
import io.cloudquery.plugin.v3.PluginGrpc.PluginStub;
1416
import io.cloudquery.plugin.v3.Write;
@@ -25,12 +27,14 @@
2527
import java.io.IOException;
2628
import java.util.List;
2729
import java.util.concurrent.CountDownLatch;
30+
import lombok.Getter;
2831
import org.apache.arrow.vector.types.pojo.ArrowType;
2932
import org.junit.Rule;
3033
import org.junit.jupiter.api.BeforeEach;
3134
import org.junit.jupiter.api.Test;
3235
import org.junit.jupiter.api.extension.ExtendWith;
3336
import org.mockito.Mock;
37+
import org.mockito.Mockito;
3438
import org.mockito.junit.jupiter.MockitoExtension;
3539

3640
@ExtendWith(MockitoExtension.class)
@@ -91,6 +95,31 @@ public void shouldSendWriteDeleteStaleMessage() throws Exception {
9195
verify(plugin).write(any(WriteDeleteStale.class));
9296
}
9397

98+
@Test
99+
public void shouldSendNullJSONSchema() throws Exception {
100+
NullResponseStream<GetSpecSchema.Response> responseObserver = new NullResponseStream<>();
101+
102+
pluginStub.getSpecSchema(GetSpecSchema.Request.getDefaultInstance(), responseObserver);
103+
responseObserver.await();
104+
105+
verify(plugin).getJsonSchema();
106+
assertFalse(responseObserver.getValue().hasJsonSchema());
107+
}
108+
109+
@Test
110+
public void shouldSendNonNullJSONSchema() throws Exception {
111+
Mockito.doReturn("{}").when(plugin).getJsonSchema();
112+
113+
NullResponseStream<GetSpecSchema.Response> responseObserver = new NullResponseStream<>();
114+
115+
pluginStub.getSpecSchema(GetSpecSchema.Request.getDefaultInstance(), responseObserver);
116+
responseObserver.await();
117+
118+
verify(plugin).getJsonSchema();
119+
assertTrue(responseObserver.getValue().hasJsonSchema());
120+
assertEquals("{}", responseObserver.getValue().getJsonSchema());
121+
}
122+
94123
private static Write.Request generateMigrateTableMessage() throws IOException {
95124
Table table = Table.builder().name("test").build();
96125
return Write.Request.newBuilder()
@@ -121,12 +150,18 @@ private Write.Request generateDeleteStaleMessage() {
121150

122151
private static class NullResponseStream<T> implements StreamObserver<T> {
123152
private final CountDownLatch countDownLatch = new CountDownLatch(1);
153+
@Getter private T value;
154+
@Getter private Throwable error;
124155

125156
@Override
126-
public void onNext(T value) {}
157+
public void onNext(T value) {
158+
this.value = value;
159+
}
127160

128161
@Override
129-
public void onError(Throwable t) {}
162+
public void onError(Throwable t) {
163+
this.error = t;
164+
}
130165

131166
@Override
132167
public void onCompleted() {

0 commit comments

Comments
 (0)