From c473bcdc54bc165c1ea04c515b6a3cf10fb7c246 Mon Sep 17 00:00:00 2001 From: Joris Borgdorff Date: Tue, 20 Oct 2020 15:25:08 +0200 Subject: [PATCH 1/9] Bump dev version --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 58b8a60b..e2e00d0d 100644 --- a/build.gradle +++ b/build.gradle @@ -29,7 +29,7 @@ subprojects { // Configuration // //---------------------------------------------------------------------------// - version = '0.13.0' + version = '0.13.1-SNAPSHOT' group = 'org.radarbase' ext.githubRepoName = 'RADAR-base/radar-commons' From 2e54f8a0106df6b6e14679f2821ab3fad38175fb Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 26 Oct 2020 05:21:28 +0000 Subject: [PATCH 2/9] Bump opencsv from 5.2 to 5.3 Bumps opencsv from 5.2 to 5.3. Signed-off-by: dependabot-preview[bot] --- radar-commons-testing/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/radar-commons-testing/build.gradle b/radar-commons-testing/build.gradle index b2d4cc94..e1037b10 100644 --- a/radar-commons-testing/build.gradle +++ b/radar-commons-testing/build.gradle @@ -46,7 +46,7 @@ dependencies { api group: 'org.apache.avro', name: 'avro', version: avroVersion api group: 'org.radarcns', name: 'radar-schemas-commons', version: radarSchemasVersion - implementation group: 'com.opencsv', name: 'opencsv', version: '5.2' + implementation group: 'com.opencsv', name: 'opencsv', version: '5.3' implementation group: 'com.fasterxml.jackson.core' , name: 'jackson-databind' , version: jacksonVersion implementation group: 'org.apache.kafka', name: 'kafka-clients', version: kafkaVersion implementation (group: 'io.confluent', name: 'kafka-avro-serializer', version: confluentVersion) { From eaa7259f8d10be49a487c62a1a2d1510fb32463e Mon Sep 17 00:00:00 2001 From: Joris Borgdorff Date: Thu, 18 Feb 2021 15:46:49 +0100 Subject: [PATCH 3/9] Fix ManagementPortal authorization in latest version --- radar-commons-testing/mock/light.csv | 2 + .../org/radarbase/mock/MockFileSender.java | 7 +++ .../java/org/radarbase/mock/MockProducer.java | 63 +++++++++++++++++-- .../org/radarbase/mock/config/AuthConfig.java | 26 ++++++++ .../mock/config/BasicMockConfig.java | 7 +++ .../radarbase/mock/config/MockDataConfig.java | 15 +++++ .../radarbase/mock/data/MockCsvParser.java | 5 ++ 7 files changed, 120 insertions(+), 5 deletions(-) create mode 100644 radar-commons-testing/mock/light.csv create mode 100644 radar-commons-testing/src/main/java/org/radarbase/mock/config/AuthConfig.java diff --git a/radar-commons-testing/mock/light.csv b/radar-commons-testing/mock/light.csv new file mode 100644 index 00000000..8cff8768 --- /dev/null +++ b/radar-commons-testing/mock/light.csv @@ -0,0 +1,2 @@ +projectId,userId,sourceId,time,timeReceived,light +radar,d90c8b88-5793-438a-b27d-6c87580cc3d9,mock,1613658505.0,1613658505.1,1.0 diff --git a/radar-commons-testing/src/main/java/org/radarbase/mock/MockFileSender.java b/radar-commons-testing/src/main/java/org/radarbase/mock/MockFileSender.java index 34bb5ade..668fd151 100644 --- a/radar-commons-testing/src/main/java/org/radarbase/mock/MockFileSender.java +++ b/radar-commons-testing/src/main/java/org/radarbase/mock/MockFileSender.java @@ -55,4 +55,11 @@ public void send() throws IOException { throw new IOException("Failed to read CSV file", e); } } + + @Override + public String toString() { + return "MockFileSender{" + + "parser=" + parser + + '}'; + } } diff --git a/radar-commons-testing/src/main/java/org/radarbase/mock/MockProducer.java b/radar-commons-testing/src/main/java/org/radarbase/mock/MockProducer.java index 36d1fc0f..67fc74da 100644 --- a/radar-commons-testing/src/main/java/org/radarbase/mock/MockProducer.java +++ b/radar-commons-testing/src/main/java/org/radarbase/mock/MockProducer.java @@ -32,9 +32,19 @@ import java.util.Properties; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; +import okhttp3.Credentials; +import okhttp3.FormBody; +import okhttp3.Headers; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Request.Builder; +import okhttp3.Response; +import okhttp3.ResponseBody; import org.apache.avro.SchemaValidationException; +import org.json.JSONObject; import org.radarbase.config.ServerConfig; import org.radarbase.config.YamlConfigLoader; +import org.radarbase.mock.config.AuthConfig; import org.radarbase.mock.config.MockDataConfig; import org.radarbase.mock.data.MockCsvParser; import org.radarbase.mock.data.RecordGenerator; @@ -106,7 +116,8 @@ public MockProducer(BasicMockConfig mockConfig, Path root) throws IOException { generators = createGenerators(dataConfigs); mockFiles = createMockFiles(dataConfigs, root); - tmpSenders = createSenders(mockConfig, numDevices + mockFiles.size()); + tmpSenders = createSenders(mockConfig, numDevices + mockFiles.size(), + mockConfig.getAuthConfig()); if (!generators.isEmpty()) { String userId = "UserID_"; @@ -141,14 +152,14 @@ public MockProducer(BasicMockConfig mockConfig, Path root) throws IOException { } private List createSenders( - BasicMockConfig mockConfig, int numDevices) { + BasicMockConfig mockConfig, int numDevices, AuthConfig authConfig) throws IOException { if (mockConfig.isDirectProducer()) { return createDirectSenders(numDevices, mockConfig.getSchemaRegistry().getUrlString(), mockConfig.getBrokerPaths()); } else { return createRestSenders(numDevices, retriever, mockConfig.getRestProxy(), - mockConfig.hasCompression()); + mockConfig.hasCompression(), authConfig); } } @@ -168,12 +179,47 @@ private List createDirectSenders(int numDevices, return result; } + private String requestAccessToken(OkHttpClient okHttpClient, AuthConfig authConfig) + throws IOException { + Request request = new Builder() + .url(authConfig.getTokenUrl()) + .post(new FormBody.Builder() + .add("grant_type", "client_credentials") + .add("client_id", authConfig.getClientId()) + .add("client_secret", authConfig.getClientSecret()) + .build()) + .addHeader("Authorization", Credentials + .basic(authConfig.getClientId(), authConfig.getClientSecret())) + .build(); + + try (Response response = okHttpClient.newCall(request).execute()) { + ResponseBody responseBody = response.body(); + if (responseBody == null) { + throw new IOException("Cannot request token at " + request.url() + " (" + response.code() + ") returned no body"); + } + if (!response.isSuccessful()) { + throw new IOException("Cannot request token: at " + request.url() + " (" + response.code() + "): " + responseBody.string()); + } + return new JSONObject(responseBody.string()).getString("access_token"); + } + } + /** Create senders that produce data to Kafka via the REST proxy. */ private List createRestSenders(int numDevices, - SchemaRetriever retriever, ServerConfig restProxy, boolean useCompression) { + SchemaRetriever retriever, ServerConfig restProxy, boolean useCompression, + AuthConfig authConfig) throws IOException { List result = new ArrayList<>(numDevices); ConnectionState sharedState = new ConnectionState(10, TimeUnit.SECONDS); + Headers headers; + if (authConfig == null) { + headers = Headers.of(); + } else { + OkHttpClient okHttpClient = new OkHttpClient(); + String token = requestAccessToken(okHttpClient, authConfig); + headers = Headers.of("Authorization", "Bearer " + token); + } + for (int i = 0; i < numDevices; i++) { RestClient httpClient = RestClient.newClient() .server(restProxy) @@ -185,6 +231,7 @@ private List createRestSenders(int numDevices, .schemaRetriever(retriever) .httpClient(httpClient) .connectionState(sharedState) + .headers(headers) .build(); result.add(new BatchedKafkaSender(restSender, 1000, 1000)); } @@ -198,6 +245,7 @@ public void start() throws IOException { } for (MockFileSender file : files) { file.send(); + logger.info("Sent data {}", file); } } @@ -244,7 +292,9 @@ public static void main(String[] args) { try { MockProducer producer = new MockProducer(config, mockFile.getParent()); producer.start(); - waitForProducer(producer, config.getDuration()); + if (!producer.devices.isEmpty()) { + waitForProducer(producer, config.getDuration()); + } } catch (IllegalArgumentException ex) { logger.error("{}", ex.getMessage()); System.exit(1); @@ -364,7 +414,10 @@ private List> createMockFiles(List for (MockDataConfig config : configs) { if (config.getDataFile() != null) { + logger.info("Reading mock data from {}", config.getDataFile()); result.add(new MockCsvParser<>(config, parent)); + } else { + logger.info("Generating mock data from {}", config); } } diff --git a/radar-commons-testing/src/main/java/org/radarbase/mock/config/AuthConfig.java b/radar-commons-testing/src/main/java/org/radarbase/mock/config/AuthConfig.java new file mode 100644 index 00000000..15696c71 --- /dev/null +++ b/radar-commons-testing/src/main/java/org/radarbase/mock/config/AuthConfig.java @@ -0,0 +1,26 @@ +package org.radarbase.mock.config; + +import com.fasterxml.jackson.annotation.JsonProperty; + +public class AuthConfig { + @JsonProperty("client_id") + private String clientId; + + @JsonProperty("client_secret") + private String clientSecret; + + @JsonProperty("token_url") + private String tokenUrl; + + public String getClientId() { + return clientId; + } + + public String getClientSecret() { + return clientSecret; + } + + public String getTokenUrl() { + return tokenUrl; + } +} diff --git a/radar-commons-testing/src/main/java/org/radarbase/mock/config/BasicMockConfig.java b/radar-commons-testing/src/main/java/org/radarbase/mock/config/BasicMockConfig.java index 753df59c..9255c0ed 100644 --- a/radar-commons-testing/src/main/java/org/radarbase/mock/config/BasicMockConfig.java +++ b/radar-commons-testing/src/main/java/org/radarbase/mock/config/BasicMockConfig.java @@ -46,6 +46,9 @@ public class BasicMockConfig { @JsonProperty("duration_millis") private long duration = 0L; + @JsonProperty("auth") + private AuthConfig authConfig = null; + public List getBroker() { return broker; } @@ -122,4 +125,8 @@ public long getDuration() { public void setDuration(long duration) { this.duration = duration; } + + public AuthConfig getAuthConfig() { + return authConfig; + } } diff --git a/radar-commons-testing/src/main/java/org/radarbase/mock/config/MockDataConfig.java b/radar-commons-testing/src/main/java/org/radarbase/mock/config/MockDataConfig.java index 93a2fd9b..3be701c9 100644 --- a/radar-commons-testing/src/main/java/org/radarbase/mock/config/MockDataConfig.java +++ b/radar-commons-testing/src/main/java/org/radarbase/mock/config/MockDataConfig.java @@ -144,4 +144,19 @@ public void setMaximum(double maximum) { public int getFrequency() { return frequency; } + + @Override + public String toString() { + return "MockDataConfig{" + + "topic='" + getTopic() + '\'' + + ", valueSchema='" + getValueSchema() + '\'' + + ", dataFile='" + dataFile + '\'' + + ", frequency=" + frequency + + ", sensor='" + sensor + '\'' + + ", valueFields=" + valueFields + + ", maximumDifference=" + maximumDifference + + ", minimum=" + minimum + + ", maximum=" + maximum + + '}'; + } } diff --git a/radar-commons-testing/src/main/java/org/radarbase/mock/data/MockCsvParser.java b/radar-commons-testing/src/main/java/org/radarbase/mock/data/MockCsvParser.java index 9efc4184..351aff41 100644 --- a/radar-commons-testing/src/main/java/org/radarbase/mock/data/MockCsvParser.java +++ b/radar-commons-testing/src/main/java/org/radarbase/mock/data/MockCsvParser.java @@ -206,4 +206,9 @@ public void close() throws IOException { csvReader.close(); bufferedReader.close(); } + + @Override + public String toString() { + return "MockCsvParser{" + "topic=" + topic + '}'; + } } From 26aa30c6102c060b518d7194fa486190b446a32f Mon Sep 17 00:00:00 2001 From: Joris Borgdorff Date: Mon, 22 Feb 2021 14:39:15 +0100 Subject: [PATCH 4/9] Update dependencies --- build.gradle | 18 +++++++++--------- .../java/org/radarbase/mock/MockProducer.java | 6 ++++-- .../radarbase/mock/config/BasicMockConfig.java | 4 ++++ 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/build.gradle b/build.gradle index e2e00d0d..5b4509ff 100644 --- a/build.gradle +++ b/build.gradle @@ -34,18 +34,18 @@ subprojects { ext.githubRepoName = 'RADAR-base/radar-commons' ext.slf4jVersion = '1.7.30' - ext.kafkaVersion = '2.5.0' + ext.kafkaVersion = '2.7.0' ext.avroVersion = '1.9.2' - ext.confluentVersion = '5.5.0' - ext.jacksonVersion = '2.11.0' - ext.jacksonYamlVersion = '2.11.0' - ext.okhttpVersion = '4.7.2' - ext.junitVersion = '4.13' - ext.mockitoVersion = '3.3.3' + ext.confluentVersion = '5.5.3' + ext.jacksonVersion = '2.12.1' + ext.jacksonYamlVersion = '2.12.1' + ext.okhttpVersion = '4.9.1' + ext.junitVersion = '4.13.2' + ext.mockitoVersion = '3.7.7' ext.hamcrestVersion = '1.3' ext.codacyVersion = '7.9.0' - ext.radarSchemasVersion = '0.5.9' - ext.orgJsonVersion = '20200518' + ext.radarSchemasVersion = '0.5.15' + ext.orgJsonVersion = '20201115' ext.githubUrl = "https://github.com/$githubRepoName" ext.issueUrl = "https://github.com/$githubRepoName/issues" diff --git a/radar-commons-testing/src/main/java/org/radarbase/mock/MockProducer.java b/radar-commons-testing/src/main/java/org/radarbase/mock/MockProducer.java index 67fc74da..d2e57a54 100644 --- a/radar-commons-testing/src/main/java/org/radarbase/mock/MockProducer.java +++ b/radar-commons-testing/src/main/java/org/radarbase/mock/MockProducer.java @@ -195,10 +195,12 @@ private String requestAccessToken(OkHttpClient okHttpClient, AuthConfig authConf try (Response response = okHttpClient.newCall(request).execute()) { ResponseBody responseBody = response.body(); if (responseBody == null) { - throw new IOException("Cannot request token at " + request.url() + " (" + response.code() + ") returned no body"); + throw new IOException("Cannot request token at " + request.url() + + " (" + response.code() + ") returned no body"); } if (!response.isSuccessful()) { - throw new IOException("Cannot request token: at " + request.url() + " (" + response.code() + "): " + responseBody.string()); + throw new IOException("Cannot request token: at " + request.url() + + " (" + response.code() + "): " + responseBody.string()); } return new JSONObject(responseBody.string()).getString("access_token"); } diff --git a/radar-commons-testing/src/main/java/org/radarbase/mock/config/BasicMockConfig.java b/radar-commons-testing/src/main/java/org/radarbase/mock/config/BasicMockConfig.java index 9255c0ed..7adebb64 100644 --- a/radar-commons-testing/src/main/java/org/radarbase/mock/config/BasicMockConfig.java +++ b/radar-commons-testing/src/main/java/org/radarbase/mock/config/BasicMockConfig.java @@ -126,6 +126,10 @@ public void setDuration(long duration) { this.duration = duration; } + public void setAuthConfig(AuthConfig authConfig) { + this.authConfig = authConfig; + } + public AuthConfig getAuthConfig() { return authConfig; } From 77479bd35dd49d56e0a29ad9ae9113cfd91791f0 Mon Sep 17 00:00:00 2001 From: Joris Borgdorff Date: Mon, 15 Mar 2021 16:08:07 +0100 Subject: [PATCH 5/9] Generate ENUM fields --- radar-commons-testing/build.gradle | 1 + .../radarbase/mock/data/MockCsvParser.java | 16 ++++++++++++ .../mock/data/MockRecordValidator.java | 13 +++++++--- .../radarbase/mock/data/RecordGenerator.java | 25 +++++++++++++++--- .../mock/data/MockRecordValidatorTest.java | 26 +++++++++++++++++++ 5 files changed, 75 insertions(+), 6 deletions(-) diff --git a/radar-commons-testing/build.gradle b/radar-commons-testing/build.gradle index e1037b10..e11e26a3 100644 --- a/radar-commons-testing/build.gradle +++ b/radar-commons-testing/build.gradle @@ -59,6 +59,7 @@ dependencies { // Direct producer uses KafkaAvroSerializer if initialized testImplementation group: 'junit', name: 'junit', version: junitVersion testImplementation group: 'org.hamcrest', name: 'hamcrest-all', version: hamcrestVersion + testImplementation group: 'org.slf4j', name: 'slf4j-simple', version: slf4jVersion } apply from: '../gradle/publishing.gradle' diff --git a/radar-commons-testing/src/main/java/org/radarbase/mock/data/MockCsvParser.java b/radar-commons-testing/src/main/java/org/radarbase/mock/data/MockCsvParser.java index 351aff41..e8294d22 100644 --- a/radar-commons-testing/src/main/java/org/radarbase/mock/data/MockCsvParser.java +++ b/radar-commons-testing/src/main/java/org/radarbase/mock/data/MockCsvParser.java @@ -21,6 +21,7 @@ import java.io.BufferedReader; import java.io.Closeable; import java.io.IOException; +import java.lang.reflect.Method; import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; @@ -136,6 +137,8 @@ private static Object parseValue(Schema schema, String fieldString) { return parseArray(schema, fieldString); case UNION: return parseUnion(schema, fieldString); + case ENUM: + return parseEnum(schema, fieldString); default: throw new IllegalArgumentException("Cannot handle schemas of type " + schema.getType()); @@ -201,6 +204,19 @@ private static List parseArray(Schema schema, String fieldString) { return ret; } + @SuppressWarnings("unchecked") + private static > E parseEnum(Schema schema, String fieldString) { + try { + Class cls = Class.forName(schema.getFullName()); + Method valueOf = cls.getMethod("valueOf", String.class); + return (E) valueOf.invoke(null, fieldString); + } catch (ReflectiveOperationException | ClassCastException e) { + throw new IllegalArgumentException( + "Cannot create enum class " + schema.getFullName() + + " for value "+ fieldString, e); + } + } + @Override public void close() throws IOException { csvReader.close(); diff --git a/radar-commons-testing/src/main/java/org/radarbase/mock/data/MockRecordValidator.java b/radar-commons-testing/src/main/java/org/radarbase/mock/data/MockRecordValidator.java index f36ad179..fd7fcb87 100644 --- a/radar-commons-testing/src/main/java/org/radarbase/mock/data/MockRecordValidator.java +++ b/radar-commons-testing/src/main/java/org/radarbase/mock/data/MockRecordValidator.java @@ -19,6 +19,8 @@ import com.opencsv.exceptions.CsvValidationException; import java.io.IOException; import java.nio.file.Path; +import org.apache.avro.Schema; +import org.apache.avro.Schema.Field; import org.apache.avro.specific.SpecificRecord; import org.radarbase.data.Record; import org.radarbase.mock.config.MockDataConfig; @@ -58,8 +60,12 @@ public void validate() { throw new IllegalArgumentException("CSV file is empty"); } - timePos = config.parseAvroTopic().getValueSchema() - .getField("timeReceived").pos(); + Schema valueSchema = config.parseAvroTopic().getValueSchema(); + Field timeField = valueSchema.getField("timeReceived"); + if (timeField == null) { + timeField = valueSchema.getField("time"); + } + timePos = timeField.pos(); Record last = null; long line = 1L; @@ -78,8 +84,9 @@ public void validate() { } private void checkFrequency(long line) { + long expected = config.getFrequency() * duration / 1000L + 1L; if (line != config.getFrequency() * duration / 1000L + 1L) { - error("CSV contains fewer messages than expected.", -1L, null); + error("CSV contains fewer messages " + line + " than expected " + expected, -1L, null); } } diff --git a/radar-commons-testing/src/main/java/org/radarbase/mock/data/RecordGenerator.java b/radar-commons-testing/src/main/java/org/radarbase/mock/data/RecordGenerator.java index e2f17346..88b9dcbf 100644 --- a/radar-commons-testing/src/main/java/org/radarbase/mock/data/RecordGenerator.java +++ b/radar-commons-testing/src/main/java/org/radarbase/mock/data/RecordGenerator.java @@ -16,6 +16,7 @@ package org.radarbase.mock.data; +import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -40,7 +41,7 @@ */ public class RecordGenerator { private static final Set ACCEPTABLE_VALUE_TYPES = new HashSet<>(Arrays.asList(Type.DOUBLE, - Type.FLOAT, Type.INT, Type.LONG)); + Type.FLOAT, Type.INT, Type.LONG, Type.ENUM)); private final AvroTopic topic; private final Field timeField; private final Field timeReceivedField; @@ -76,7 +77,7 @@ public RecordGenerator(MockDataConfig config, Class keyClass) { Schema valueSchema = topic.getValueSchema(); timeField = forceGetField(valueSchema, "time"); - timeReceivedField = forceGetField(valueSchema, "timeReceived"); + timeReceivedField = valueSchema.getField("timeReceived"); List valueFieldNames = config.getValueFields(); if (valueFieldNames == null) { @@ -229,7 +230,9 @@ public Record next() { long time = timestamps.next(); value.put(timeField.pos(), time / 1000d); - value.put(timeReceivedField.pos(), getTimeReceived(time) / 1000d); + if (timeReceivedField != null) { + value.put(timeReceivedField.pos(), getTimeReceived(time) / 1000d); + } for (Field f : valueFields) { Type type = f.schema().getType(); @@ -247,6 +250,9 @@ public Record next() { case INT: fieldValue = (int)getRandomDouble(); break; + case ENUM: + fieldValue = getRandomEnum(f.schema()); + break; default: throw new IllegalStateException("Cannot parse type " + type); @@ -266,4 +272,17 @@ public void remove() { throw new UnsupportedOperationException(); } } + + private static Object getRandomEnum(Schema schema) { + try { + Class cls = Class.forName(schema.getFullName()); + Method values = cls.getMethod("values"); + Object[] symbols = (Object[]) values.invoke(null); + int symbolIndex = ThreadLocalRandom.current().nextInt(symbols.length); + return symbols[symbolIndex]; + } catch (ReflectiveOperationException | ClassCastException e) { + throw new IllegalArgumentException( + "Cannot generate random enum class " + schema.getFullName(), e); + } + } } diff --git a/radar-commons-testing/src/test/java/org/radarbase/mock/data/MockRecordValidatorTest.java b/radar-commons-testing/src/test/java/org/radarbase/mock/data/MockRecordValidatorTest.java index 43308b78..60e14339 100644 --- a/radar-commons-testing/src/test/java/org/radarbase/mock/data/MockRecordValidatorTest.java +++ b/radar-commons-testing/src/test/java/org/radarbase/mock/data/MockRecordValidatorTest.java @@ -29,6 +29,7 @@ import org.junit.rules.ExpectedException; import org.junit.rules.TemporaryFolder; import org.radarbase.mock.config.MockDataConfig; +import org.radarcns.monitor.application.ApplicationServerStatus; import org.radarcns.passive.phone.PhoneAcceleration; import org.radarcns.passive.phone.PhoneLight; @@ -56,6 +57,31 @@ public static MockDataConfig makeConfig(TemporaryFolder folder) throws IOExcepti return config; } + @Test + public void validateEnum() throws IOException { + MockDataConfig config = makeConfig(); + config.setValueSchema(ApplicationServerStatus.class.getName()); + + try (Writer writer = Files.newBufferedWriter(config.getDataFile(root))) { + writer.append("projectId,userId,sourceId,time,serverStatus,ipAddress\n"); + writer.append("test,a,b,1,UNKNOWN,\n"); + writer.append("test,a,b,2,CONNECTED,\n"); + } + + new MockRecordValidator(config, 2_000L, root).validate(); + } + + + @Test + public void validateEnumGenerated() throws IOException { + MockDataConfig config = makeConfig(); + config.setValueSchema(ApplicationServerStatus.class.getName()); + config.setValueField("serverStatus"); + CsvGenerator generator = new CsvGenerator(); + generator.generate(config, 2_000L, root); + new MockRecordValidator(config, 2_000L, root).validate(); + } + @Test public void validate() throws Exception { CsvGenerator generator = new CsvGenerator(); From 6e9b65504bb25b84c0e30740c54fc01ab67a732a Mon Sep 17 00:00:00 2001 From: Joris Borgdorff Date: Tue, 16 Mar 2021 13:28:22 +0100 Subject: [PATCH 6/9] Bump gradle wrapper --- build.gradle | 2 +- gradle/wrapper/gradle-wrapper.jar | Bin 58694 -> 59203 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 2 ++ gradlew.bat | 22 ++++------------------ 5 files changed, 8 insertions(+), 20 deletions(-) diff --git a/build.gradle b/build.gradle index 5b4509ff..2217aa9b 100644 --- a/build.gradle +++ b/build.gradle @@ -111,5 +111,5 @@ subprojects { } wrapper { - gradleVersion '6.3' + gradleVersion '6.8.3' } diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 490fda8577df6c95960ba7077c43220e5bb2c0d9..e708b1c023ec8b20f512888fe07c5bd3ff77bb8f 100644 GIT binary patch delta 6763 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 2>&1 -if "%ERRORLEVEL%" == "0" goto init +if "%ERRORLEVEL%" == "0" goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -54,7 +54,7 @@ goto fail set JAVA_HOME=%JAVA_HOME:"=% set JAVA_EXE=%JAVA_HOME%/bin/java.exe -if exist "%JAVA_EXE%" goto init +if exist "%JAVA_EXE%" goto execute echo. echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% @@ -64,28 +64,14 @@ echo location of your Java installation. goto fail -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - :execute @rem Setup the command line set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* :end @rem End local scope for the variables with windows NT shell From b236d2bd88086fed3a653009d1a2ceb8bc13a2cb Mon Sep 17 00:00:00 2001 From: Joris Borgdorff Date: Tue, 16 Mar 2021 13:28:37 +0100 Subject: [PATCH 7/9] Move to maven central for publishing --- .travis.yml | 10 ------- README.md | 12 ++++----- build.gradle | 2 -- gradle/publishing.gradle | 57 ++++++++++++++-------------------------- 4 files changed, 24 insertions(+), 57 deletions(-) diff --git a/.travis.yml b/.travis.yml index d1463dc9..9e4cf878 100644 --- a/.travis.yml +++ b/.travis.yml @@ -24,13 +24,3 @@ deploy: skip_cleanup: true on: tags: true - - provider: script - script: ./gradlew publish - skip_cleanup: true - on: - branch: dev - - provider: script - script: ./gradlew bintrayUpload - skip_cleanup: true - on: - tags: true diff --git a/README.md b/README.md index ff5813e7..c35e54af 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ Add the RADAR-Commons library to your project with Gradle by updating your `buil ```gradle repositories { - jcenter() + mavenCentral() } dependencies { @@ -64,7 +64,7 @@ Note that this code above does not include any flows for registering a source wi For server utilities, include `radar-commons-server`: ```gradle repositories { - jcenter() + mavenCentral() maven { url 'https://packages.confluent.io/maven/' } } @@ -77,9 +77,8 @@ For mocking clients of the RADAR-base infrastructure, use that 'radar-commons-te ```gradle repositories { - jcenter() + mavenCentral() maven { url 'https://packages.confluent.io/maven/' } - maven { url 'https://dl.bintray.com/radar-base/org.radarbase' } } dependencies { @@ -90,9 +89,8 @@ dependencies { Finally, if the schema registry is losing old schemas and your code is not recovering, include `radar-commons-unsafe`. Ensure that it comes in the classpath before any Confluent code. This will override the Confluent Avro deserializer to recover from failure when a message with unknown schema ID is passed. ```gradle repositories { - jcenter() + mavenCentral() maven { url 'https://packages.confluent.io/maven/' } - maven { url 'https://dl.bintray.com/radar-base/org.radarbase' } } dependencies { @@ -112,7 +110,7 @@ For latest code use `dev` branch. This is released on JFrog's OSS Artifactory. T ```gradle repositories { - maven { url 'https://repo.thehyve.nl/content/repositories/snapshots' } + maven { url 'https://oss.sonatype.org/content/repositories/snapshots' } } configurations.all { diff --git a/build.gradle b/build.gradle index 2217aa9b..51b7c508 100644 --- a/build.gradle +++ b/build.gradle @@ -14,8 +14,6 @@ * limitations under the License. */ plugins { - // Get bintray version - id 'com.jfrog.bintray' version '1.8.5' apply false id 'com.commercehub.gradle.plugin.avro' version '0.19.1' } diff --git a/gradle/publishing.gradle b/gradle/publishing.gradle index 8ed990a5..65846e2e 100644 --- a/gradle/publishing.gradle +++ b/gradle/publishing.gradle @@ -1,5 +1,5 @@ apply plugin: 'maven-publish' -apply plugin: 'com.jfrog.bintray' +apply plugin: 'signing' def sharedManifest = manifest { attributes("Implementation-Title": project.name, @@ -7,31 +7,23 @@ def sharedManifest = manifest { } jar { - archiveBaseName.set(project.name) manifest.from sharedManifest } // custom tasks for creating source/javadoc jars task sourcesJar(type: Jar, dependsOn: classes) { - archiveBaseName.set(project.name) archiveClassifier.set('sources') from sourceSets.main.allSource manifest.from sharedManifest } task javadocJar(type: Jar, dependsOn: javadoc) { - archiveBaseName.set(project.name) archiveClassifier.set('javadoc') from javadoc.destinationDir manifest.from sharedManifest } -ext.nexusRepoBase = 'https://repo.thehyve.nl/content/repositories' - -// add javadoc/source jar tasks as artifacts -artifacts { - archives sourcesJar, javadocJar -} +assemble.dependsOn(javadocJar, sourcesJar) publishing { publications { @@ -80,40 +72,29 @@ publishing { } } } + repositories { maven { - def releasesRepoUrl = "$nexusRepoBase/releases" - def snapshotsRepoUrl = "$nexusRepoBase/snapshots" - url = version.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl + name = "OSSRH" credentials { - username = project.hasProperty('nexusUser') ? project.property('nexusUser') : System.getenv('NEXUS_USER') - password = project.hasProperty('nexusPassword') ? project.property('nexusPassword') : System.getenv('NEXUS_PASSWORD') + username = project.hasProperty("ossrh.user") ? project.property("ossrh.user") : System.getenv("OSSRH_USER") + password = project.hasProperty("ossrh.password") ? project.property("ossrh.password") : System.getenv("OSSRH_PASSWORD") } + + def releasesRepoUrl = uri("https://oss.sonatype.org/service/local/staging/deploy/maven2/") + def snapshotsRepoUrl = uri("https://oss.sonatype.org/content/repositories/snapshots/") + url = version.toString().endsWith("SNAPSHOT") ? snapshotsRepoUrl : releasesRepoUrl } } } -bintray { - user = project.hasProperty('bintrayUser') ? project.property('bintrayUser') : System.getenv('BINTRAY_USER') - key = project.hasProperty('bintrayApiKey') ? project.property('bintrayApiKey') : System.getenv('BINTRAY_API_KEY') - override = false - publications 'mavenJar' - pkg { - repo = project.group - name = project.name - userOrg = 'radar-base' - desc = project.description - licenses = ['Apache-2.0'] - websiteUrl = website - issueTrackerUrl = issueUrl - vcsUrl = githubUrl - githubRepo = githubRepoName - githubReleaseNotesFile = 'README.md' - version { - name = project.version - desc = project.description - vcsTag = System.getenv('TRAVIS_TAG') - released = new Date() - } - } +signing { + useGpgCmd() + required { true } + sign(tasks["sourcesJar"], tasks["javadocJar"]) + sign(publishing.publications["mavenJar"]) +} + +tasks.withType(Sign).configureEach { + onlyIf { gradle.taskGraph.hasTask("${project.path}:publish") } } From 60c3155a5bfeda3d5575349e7976ce1924e4257c Mon Sep 17 00:00:00 2001 From: Joris Borgdorff Date: Tue, 16 Mar 2021 14:24:20 +0100 Subject: [PATCH 8/9] Bump version --- README.md | 10 +++++----- build.gradle | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index c35e54af..2e573850 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ repositories { } dependencies { - implementation group: 'org.radarbase', name: 'radar-commons', version: '0.13.0' + implementation group: 'org.radarbase', name: 'radar-commons', version: '0.13.1' } ``` @@ -69,7 +69,7 @@ repositories { } dependencies { - implementation group: 'org.radarbase', name: 'radar-commons-server', version: '0.13.0' + implementation group: 'org.radarbase', name: 'radar-commons-server', version: '0.13.1' } ``` @@ -82,7 +82,7 @@ repositories { } dependencies { - testImplementation group: 'org.radarbase', name: 'radar-commons-testing', version: '0.13.0' + testImplementation group: 'org.radarbase', name: 'radar-commons-testing', version: '0.13.1' } ``` @@ -94,7 +94,7 @@ repositories { } dependencies { - runtimeOnly group: 'org.radarbase', name: 'radar-commons-unsafe', version: '0.13.0' + runtimeOnly group: 'org.radarbase', name: 'radar-commons-unsafe', version: '0.13.1' } ``` @@ -119,7 +119,7 @@ configurations.all { } dependencies { - compile group: 'org.radarbase', name: 'radar-commons', version: '0.13.1-SNAPSHOT' + compile group: 'org.radarbase', name: 'radar-commons', version: '0.13.2-SNAPSHOT' } ``` diff --git a/build.gradle b/build.gradle index 51b7c508..24fe6990 100644 --- a/build.gradle +++ b/build.gradle @@ -27,7 +27,7 @@ subprojects { // Configuration // //---------------------------------------------------------------------------// - version = '0.13.1-SNAPSHOT' + version = '0.13.1' group = 'org.radarbase' ext.githubRepoName = 'RADAR-base/radar-commons' From 03815cd771dc370cf55dc8bea604028b61560dae Mon Sep 17 00:00:00 2001 From: Joris Borgdorff Date: Tue, 16 Mar 2021 14:37:34 +0100 Subject: [PATCH 9/9] Code style fix --- .../src/main/java/org/radarbase/mock/data/MockCsvParser.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/radar-commons-testing/src/main/java/org/radarbase/mock/data/MockCsvParser.java b/radar-commons-testing/src/main/java/org/radarbase/mock/data/MockCsvParser.java index e8294d22..ff8e23a6 100644 --- a/radar-commons-testing/src/main/java/org/radarbase/mock/data/MockCsvParser.java +++ b/radar-commons-testing/src/main/java/org/radarbase/mock/data/MockCsvParser.java @@ -213,7 +213,7 @@ private static > E parseEnum(Schema schema, String fieldString } catch (ReflectiveOperationException | ClassCastException e) { throw new IllegalArgumentException( "Cannot create enum class " + schema.getFullName() - + " for value "+ fieldString, e); + + " for value " + fieldString, e); } }