From 1c6b86562d3639643765dc9f310e9d5f034554a2 Mon Sep 17 00:00:00 2001 From: Big Andy <8012398+big-andy-coates@users.noreply.github.com> Date: Fri, 10 Nov 2023 15:42:06 +0000 Subject: [PATCH] Data driven documentation on implementations under test fixes: #45 Adds a GitHub workflow to publish GitHub pages for the site. The workflow uses the newly added utility to extract the metadata of the validation libraries under test, (extended in this PR to include licence, language and url), and injects this JSON into the markdown files before building and uploading the site. --- .github/workflows/gh-pages.yml | 101 ++++++++++++++++++ build.gradle.kts | 7 +- docs/.gitignore | 15 +++ docs/Gemfile | 23 ++++ docs/README.md | 42 ++++++++ docs/_config.dev.yml | 13 +++ docs/_config.yml | 52 +++++++++ docs/_data/navigation/docs.yml | 10 ++ docs/_docs/1. implementations.md | 48 +++++++++ docs/assets/images/json.png | Bin 0 -> 89829 bytes .../ConfluentImplementation.java | 5 +- .../implementations/EveritImplementation.java | 8 +- .../perf/implementations/Implementation.java | 63 ++++++++++- .../JacksonImplementation.java | 8 +- .../JustifyImplementation.java | 10 +- .../implementations/MedeiaImplementation.java | 8 +- .../NetworkNtImplementation.java | 8 +- .../SchemaFriendImplementation.java | 5 +- .../implementations/SkemaImplementation.java | 8 +- .../implementations/SnowImplementation.java | 9 +- .../implementations/VertxImplementation.java | 9 +- .../perf/util/ImplsJsonFormatterTest.java | 21 +++- 22 files changed, 457 insertions(+), 16 deletions(-) create mode 100644 .github/workflows/gh-pages.yml create mode 100644 docs/.gitignore create mode 100644 docs/Gemfile create mode 100644 docs/README.md create mode 100644 docs/_config.dev.yml create mode 100644 docs/_config.yml create mode 100644 docs/_data/navigation/docs.yml create mode 100644 docs/_docs/1. implementations.md create mode 100644 docs/assets/images/json.png diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml new file mode 100644 index 0000000..244ff33 --- /dev/null +++ b/.github/workflows/gh-pages.yml @@ -0,0 +1,101 @@ +name: GitHub Pages + +on: + push: + branches: [ main] + pull_request: + branches: [ main ] + workflow_dispatch: + +# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages +permissions: + contents: read + +# Allow one concurrent deployment, per branch +concurrency: + group: "${{ github.workflow }}-${{ github.ref }}" + cancel-in-progress: true + +jobs: + get_impls: + needs: build_pages + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 + - name: Set up JDK + uses: actions/setup-java@0ab4596768b603586c0de567f2430c30f5b0d2b0 # v3.13.0 + with: + java-version: '17' + distribution: 'adopt' + - name: Setup Gradle + uses: gradle/gradle-build-action@842c587ad8aa4c68eeba24c396e15af4c2e9f30a # v2.9.0 + with: + gradle-home-cache-cleanup: true + - name: Run functional tests + run: | + ./gradlew --quiet extractImplementations > implementations.json + cat implementations.json >> $GITHUB_STEP_SUMMARY + - name: Upload Implementations + uses: actions/upload-artifact@v3 + with: + name: implementations + path: implementations.json + retention-days: 1 + + build_pages: + needs: get_impls + runs-on: ubuntu-latest + env: + BUNDLE_GEMFILE: ${{ github.workspace }}/docs/Gemfile + steps: + - name: Checkout + uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v3.4.0 + with: + fetch-depth: 0 # need full history to get page last modified times + - name: Setup Ruby + uses: ruby/setup-ruby@250fcd6a742febb1123a77a841497ccaa8b9e939 # v1.152.0 + with: + ruby-version: '3.1' + bundler-cache: true # runs 'bundle install' and caches installed gems automatically + cache-version: 0 # Increment this number if you need to re-download cached gems + - name: Setup Pages + id: pages + uses: actions/configure-pages@f156874f8191504dae5b037505266ed5dda6c382 # v3.0.6 + - name: Download Implementations JSON + uses: actions/download-artifact@v3 + with: + name: implementations + - name: Inject Implementations JSON into site + run: sed -i $'/IMPLEMENTATIONS_JSON/ { r implementations.json\nd }' "docs/_docs/1. implementations.md" + - name: Build with Jekyll + # Outputs to the './docs/_site' directory by default + run: (cd docs && bundle exec jekyll build --baseurl "${{ steps.pages.outputs.base_path }}") + env: + JEKYLL_ENV: production + - name: Upload artifact + if: github.event_name == 'push' || github.event_name == 'workflow_dispatch' + # Automatically uploads an artifact from the './_site' directory by default + uses: actions/upload-pages-artifact@a753861a5debcf57bf8b404356158c8e1e33150c # v2.0.0 + with: + path: "docs/_site/" + + # Deployment job + deploy_pages: + if: github.event_name == 'push' || github.event_name == 'workflow_dispatch' + needs: build_pages + + # Grant GITHUB_TOKEN the permissions required to make a Pages deployment + permissions: + pages: write # to deploy to Pages + id-token: write # to verify the deployment originates from an appropriate source + + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@9dbe3824824f8a1377b8e298bafde1a50ede43e5 # v2.0.4 + - name: Ping Google Search + run: curl "https://www.google.com/ping?sitemap=https://www.creekservice.org/${{ github.event.repository.name }}/sitemap.xml" \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index 44a59db..b55c27a 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -152,8 +152,13 @@ val runBenchmarkSmokeTest = tasks.register("runBenchmarkSmokeTest") { dependsOn(pullTask) } +val extractImplementations = tasks.register("extractImplementations") { + classpath = sourceSets.main.get().runtimeClasspath + mainClass.set("org.creekservice.kafka.test.perf.ImplementationsMain") +} + tasks.check { - dependsOn(runFunctionalTests, runBenchmarkSmokeTest) + dependsOn(runFunctionalTests, runBenchmarkSmokeTest, extractImplementations) } // Dummy / empty tasks required to allow the repo to use the same standard GitHub workflows as other Creek repos: diff --git a/docs/.gitignore b/docs/.gitignore new file mode 100644 index 0000000..34a2c9f --- /dev/null +++ b/docs/.gitignore @@ -0,0 +1,15 @@ +# Apple +**/.DS_Store + +# Ruby Gem +*.gem +.bundle +Gemfile.lock +**/vendor/bundle + +# Jekyll generated files +.jekyll-cache +.jekyll-metadata +.sass-cache +_asset_bundler_cache +_site \ No newline at end of file diff --git a/docs/Gemfile b/docs/Gemfile new file mode 100644 index 0000000..4194d11 --- /dev/null +++ b/docs/Gemfile @@ -0,0 +1,23 @@ +# Copyright 2023 Creek Contributors (https://github.com/creek-service) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +source "https://rubygems.org" + +gem "jekyll", "~> 4.3" +gem "creek-jekyll-theme", "~> 1.0" + +# # If you have any plugins, put them here! +group :jekyll_plugins do + gem 'jekyll-include_snippet', "~> 0.2" +end diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..284754d --- /dev/null +++ b/docs/README.md @@ -0,0 +1,42 @@ +# Repos GitHub pages site. + +## Setup + +If you want to hack about with the site or add content, then follow these instructions to be able to run locally. + +### Prerequisites + +1. Install Git, obviously. +2. [Install Jekyll](https://jekyllrb.com/docs/installation) +3. Install [Builder](https://bundler.io/) by running `gem install bundler`. + +### Installing + +#### 1. Install the gems + +```shell +(cd docs && bundle install) +``` + +#### 2. Update + +Occasionally update gems + +```shell +git checkout main +git pull +(cd docs && bundle update) +git checkout -b gems-update +git add . +git commit -m "updating gems" +git push --set-upstream origin gems-update +``` + +#### 3. Run the local server + +```shell +(cd docs && bundle exec jekyll serve --livereload --baseurl /json-schema-validation-comparison) +``` + +This will launch a web server so that you can work on the site locally. +Check it out on [http://localhost:4000/json-schema-validation-comparison](http://localhost:4000/json-schema-validation-comparison). diff --git a/docs/_config.dev.yml b/docs/_config.dev.yml new file mode 100644 index 0000000..5b811a3 --- /dev/null +++ b/docs/_config.dev.yml @@ -0,0 +1,13 @@ +# Develop override settings + +url: http://localhost:4000 + +analytics: + provider: false + +comments: + disqus: + shortname : "creek-service-dev" + +sass: + style: expanded \ No newline at end of file diff --git a/docs/_config.yml b/docs/_config.yml new file mode 100644 index 0000000..64947d6 --- /dev/null +++ b/docs/_config.yml @@ -0,0 +1,52 @@ + +# Welcome to Jekyll! +# +# This config file is meant for settings that affect your entire site, values +# which you are expected to set up once and rarely need to edit after that. +# For technical reasons, this file is *NOT* reloaded automatically when you use +# `jekyll serve`. If you change this file, please restart the server process. + +# Site Settings +theme : "creek-jekyll-theme" +baseurl : "/json-schema-validation-comparison" +repository : "creek-service/json-schema-validation-comparison" + +# Reading Files +include: + - .htaccess + - _pages +exclude: + - README.md + +# Collections +collections: + docs: + output: true + permalink: /:collection/:path + +# Defaults +defaults: + # _pages + - scope: + path: "_pages" + type: pages + values: + layout: single + author_profile: false + toc: true + toc_sticky: true + share: true + # _docs + - scope: + path: "" + type: docs + values: + layout: single + read_time: false + author_profile: false + share: false + comments: false + toc: false + toc_sticky: true + sidebar: + nav: "docs" \ No newline at end of file diff --git a/docs/_data/navigation/docs.yml b/docs/_data/navigation/docs.yml new file mode 100644 index 0000000..532bb47 --- /dev/null +++ b/docs/_data/navigation/docs.yml @@ -0,0 +1,10 @@ +- title: JSON Validator Comparison + children: + - title: Introduction + url: / + - title: Libraries under test + url: /implementations + - title: Functional comparison + url: /functional + - title: Performance comparison + url: /performance \ No newline at end of file diff --git a/docs/_docs/1. implementations.md b/docs/_docs/1. implementations.md new file mode 100644 index 0000000..d7ffc4a --- /dev/null +++ b/docs/_docs/1. implementations.md @@ -0,0 +1,48 @@ +--- +title: List of JSON Validator implementations under test +permalink: /implementations +layout: single +header: + image: /assets/images/json.png +toc: false +classes: wide +--- + +See below for an up-to-date list of the JVM based JSON Validator implementations covered by this performance and functionality comparison. + +
+
+
+ +[//]: # (Table scripts: https://github.com/fiduswriter/Simple-DataTables) + + + + \ No newline at end of file diff --git a/docs/assets/images/json.png b/docs/assets/images/json.png new file mode 100644 index 0000000000000000000000000000000000000000..03629322fb3859aa46f0e20bff25deaec21a744e GIT binary patch literal 89829 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

(YGDS$y$d^~xLdwjbw$z4n!g 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 F{{U6n={^7e literal 0 HcmV?d00001 diff --git a/src/main/java/org/creekservice/kafka/test/perf/implementations/ConfluentImplementation.java b/src/main/java/org/creekservice/kafka/test/perf/implementations/ConfluentImplementation.java index 32e2927..040941e 100644 --- a/src/main/java/org/creekservice/kafka/test/perf/implementations/ConfluentImplementation.java +++ b/src/main/java/org/creekservice/kafka/test/perf/implementations/ConfluentImplementation.java @@ -44,7 +44,10 @@ public class ConfluentImplementation implements Implementation { new MetaData( "Confluent validating JSON serde", "Confluent", - Set.of(DRAFT_04, DRAFT_06, DRAFT_07)); + Language.Java, + Licence.Apache_v2_0, + Set.of(DRAFT_04, DRAFT_06, DRAFT_07), + "https://docs.confluent.io/platform/current/schema-registry/fundamentals/serdes-develop/serdes-json.html"); private static final String TOPIC_NAME = "t"; diff --git a/src/main/java/org/creekservice/kafka/test/perf/implementations/EveritImplementation.java b/src/main/java/org/creekservice/kafka/test/perf/implementations/EveritImplementation.java index 7b74fa2..2540275 100644 --- a/src/main/java/org/creekservice/kafka/test/perf/implementations/EveritImplementation.java +++ b/src/main/java/org/creekservice/kafka/test/perf/implementations/EveritImplementation.java @@ -49,7 +49,13 @@ public class EveritImplementation implements Implementation { private static final MetaData METADATA = - new MetaData("everit-org/json-schema", "Everit", Set.of(DRAFT_04, DRAFT_06, DRAFT_07)); + new MetaData( + "everit-org/json-schema", + "Everit", + Language.Java, + Licence.Apache_v2_0, + Set.of(DRAFT_04, DRAFT_06, DRAFT_07), + "https://github.com/everit-org/json-schema"); private ObjectMapper mapper = JsonMapper.builder().build(); diff --git a/src/main/java/org/creekservice/kafka/test/perf/implementations/Implementation.java b/src/main/java/org/creekservice/kafka/test/perf/implementations/Implementation.java index 18c41a6..e4997e4 100644 --- a/src/main/java/org/creekservice/kafka/test/perf/implementations/Implementation.java +++ b/src/main/java/org/creekservice/kafka/test/perf/implementations/Implementation.java @@ -19,6 +19,9 @@ import static java.util.Objects.requireNonNull; import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonValue; +import java.net.MalformedURLException; +import java.net.URL; import java.util.Set; import java.util.TreeSet; import org.creekservice.kafka.test.perf.model.TestModel; @@ -57,21 +60,64 @@ interface JsonValidator { TestModel deserialize(byte[] data); } + enum Language { + Java, + Kotlin + } + + enum Licence { + Apache_v2_0("Apache Licence 2.0"), + MIT("MIT"), + GNU_Affero_General_Public_v3_0("GNU Affero General Public License v3.0"); + + private final String text; + + Licence(final String text) { + this.text = requireNonNull(text, "test"); + } + + @JsonValue + @Override + public String toString() { + return text; + } + } + class MetaData { private final String longName; private final String shortName; + private final Language language; + private final Licence licence; private final Set supported; + private final URL url; /** + * Construct metadata about a specific validator implementation. + * * @param longName a more expressive name. * @param shortName the short name, as used in reports. + * @param language the programming language the validator library is written in. + * @param licence the licence the validator library is released under. * @param supported the set of supported JSON schema draft specifications. + * @param url the url to the validator libraries implementation or documentation. */ public MetaData( - final String longName, final String shortName, final Set supported) { + final String longName, + final String shortName, + final Language language, + final Licence licence, + final Set supported, + final String url) { this.longName = requireNonNull(longName, "longName").trim(); this.shortName = requireNonNull(shortName, "shortName").trim(); + this.language = requireNonNull(language, "language"); + this.licence = requireNonNull(licence, "licence"); this.supported = Set.copyOf(requireNonNull(supported, "supported")); + try { + this.url = new URL(requireNonNull(url, "url")); + } catch (MalformedURLException e) { + throw new RuntimeException(e); + } if (longName.isBlank()) { throw new IllegalArgumentException("Long name blank"); @@ -92,6 +138,21 @@ public String shortName() { return shortName; } + @JsonProperty("language") + public Language language() { + return language; + } + + @JsonProperty("licence") + public Licence licence() { + return licence; + } + + @JsonProperty("url") + public URL url() { + return url; + } + @JsonProperty("supported") public Set supported() { return new TreeSet<>(supported); diff --git a/src/main/java/org/creekservice/kafka/test/perf/implementations/JacksonImplementation.java b/src/main/java/org/creekservice/kafka/test/perf/implementations/JacksonImplementation.java index 8dcdbd8..78815f4 100644 --- a/src/main/java/org/creekservice/kafka/test/perf/implementations/JacksonImplementation.java +++ b/src/main/java/org/creekservice/kafka/test/perf/implementations/JacksonImplementation.java @@ -29,7 +29,13 @@ public class JacksonImplementation implements Implementation { private static final MetaData METADATA = - new MetaData("Plain Jackson Serialization", "Jackson", Set.of(SchemaSpec.DRAFT_07)); + new MetaData( + "Plain Jackson Serialization", + "Jackson", + Language.Java, + Licence.Apache_v2_0, + Set.of(SchemaSpec.DRAFT_07), + "https://github.com/FasterXML/jackson-core"); private ObjectMapper mapper = JsonMapper.builder().build(); diff --git a/src/main/java/org/creekservice/kafka/test/perf/implementations/JustifyImplementation.java b/src/main/java/org/creekservice/kafka/test/perf/implementations/JustifyImplementation.java index c4d69c6..0253fb2 100644 --- a/src/main/java/org/creekservice/kafka/test/perf/implementations/JustifyImplementation.java +++ b/src/main/java/org/creekservice/kafka/test/perf/implementations/JustifyImplementation.java @@ -45,7 +45,15 @@ public class JustifyImplementation implements Implementation { DRAFT_04, SpecVersion.DRAFT_04, DRAFT_06, SpecVersion.DRAFT_06, DRAFT_07, SpecVersion.DRAFT_07); - private static final MetaData METADATA = new MetaData("Justify", "Justify", SUPPORTED.keySet()); + + private static final MetaData METADATA = + new MetaData( + "Justify", + "Justify", + Language.Java, + Licence.Apache_v2_0, + SUPPORTED.keySet(), + "https://github.com/leadpony/justify"); private ProblemHandler handler = problems -> { diff --git a/src/main/java/org/creekservice/kafka/test/perf/implementations/MedeiaImplementation.java b/src/main/java/org/creekservice/kafka/test/perf/implementations/MedeiaImplementation.java index a70b6bf..bd07c3b 100644 --- a/src/main/java/org/creekservice/kafka/test/perf/implementations/MedeiaImplementation.java +++ b/src/main/java/org/creekservice/kafka/test/perf/implementations/MedeiaImplementation.java @@ -54,7 +54,13 @@ public class MedeiaImplementation implements Implementation { DRAFT_07, JsonSchemaVersion.DRAFT07); private static final MetaData METADATA = - new MetaData("worldturner/medeia-validator", "Medeia", SUPPORTED.keySet()); + new MetaData( + "worldturner/medeia-validator", + "Medeia", + Language.Kotlin, + Licence.Apache_v2_0, + SUPPORTED.keySet(), + "https://github.com/worldturner/medeia-validator"); private static final ValidationOptions VALIDATOR_OPTIONS = new ValidationOptions().withValidateSchema(false); diff --git a/src/main/java/org/creekservice/kafka/test/perf/implementations/NetworkNtImplementation.java b/src/main/java/org/creekservice/kafka/test/perf/implementations/NetworkNtImplementation.java index e494121..6b1f26b 100644 --- a/src/main/java/org/creekservice/kafka/test/perf/implementations/NetworkNtImplementation.java +++ b/src/main/java/org/creekservice/kafka/test/perf/implementations/NetworkNtImplementation.java @@ -52,7 +52,13 @@ public class NetworkNtImplementation implements Implementation { DRAFT_2020_12, SpecVersion.VersionFlag.V202012); private static final MetaData METADATA = - new MetaData("networknt/json-schema-validator", "NetworkNt", SUPPORTED.keySet()); + new MetaData( + "networknt/json-schema-validator", + "NetworkNt", + Language.Java, + Licence.Apache_v2_0, + SUPPORTED.keySet(), + "https://github.com/networknt/json-schema-validator"); private ObjectMapper mapper = JsonMapper.builder().build(); diff --git a/src/main/java/org/creekservice/kafka/test/perf/implementations/SchemaFriendImplementation.java b/src/main/java/org/creekservice/kafka/test/perf/implementations/SchemaFriendImplementation.java index 73fff34..a33b6fb 100644 --- a/src/main/java/org/creekservice/kafka/test/perf/implementations/SchemaFriendImplementation.java +++ b/src/main/java/org/creekservice/kafka/test/perf/implementations/SchemaFriendImplementation.java @@ -48,7 +48,10 @@ public class SchemaFriendImplementation implements Implementation { new MetaData( "JSON Schema Friend", "SchemaFriend", - Set.of(DRAFT_2020_12, DRAFT_2019_09, DRAFT_07, DRAFT_06, DRAFT_04, DRAFT_03)); + Language.Java, + Licence.Apache_v2_0, + Set.of(DRAFT_2020_12, DRAFT_2019_09, DRAFT_07, DRAFT_06, DRAFT_04, DRAFT_03), + "https://github.com/jimblackler/jsonschemafriend"); private ObjectMapper mapper = JsonMapper.builder().build(); diff --git a/src/main/java/org/creekservice/kafka/test/perf/implementations/SkemaImplementation.java b/src/main/java/org/creekservice/kafka/test/perf/implementations/SkemaImplementation.java index 2a32de2..a0dcd9e 100644 --- a/src/main/java/org/creekservice/kafka/test/perf/implementations/SkemaImplementation.java +++ b/src/main/java/org/creekservice/kafka/test/perf/implementations/SkemaImplementation.java @@ -45,7 +45,13 @@ public class SkemaImplementation implements Implementation { private static final MetaData METADATA = - new MetaData("erosb/json-sKema", "sKema", Set.of(DRAFT_2020_12)); + new MetaData( + "erosb/json-sKema", + "sKema", + Language.Kotlin, + Licence.MIT, + Set.of(DRAFT_2020_12), + "https://github.com/erosb/json-sKema"); private ObjectMapper mapper = JsonMapper.builder().build(); diff --git a/src/main/java/org/creekservice/kafka/test/perf/implementations/SnowImplementation.java b/src/main/java/org/creekservice/kafka/test/perf/implementations/SnowImplementation.java index 6f6d181..1df8c25 100644 --- a/src/main/java/org/creekservice/kafka/test/perf/implementations/SnowImplementation.java +++ b/src/main/java/org/creekservice/kafka/test/perf/implementations/SnowImplementation.java @@ -49,7 +49,14 @@ public class SnowImplementation implements Implementation { SchemaSpec.DRAFT_07, Specification.DRAFT_07, SchemaSpec.DRAFT_2019_09, Specification.DRAFT_2019_09); - private static final MetaData METADATA = new MetaData("Snow", "Snow", SUPPORTED.keySet()); + private static final MetaData METADATA = + new MetaData( + "Snow", + "Snow", + Language.Java, + Licence.GNU_Affero_General_Public_v3_0, + SUPPORTED.keySet(), + "https://github.com/ssilverman/snowy-json"); private ObjectMapper mapper = JsonMapper.builder().build(); diff --git a/src/main/java/org/creekservice/kafka/test/perf/implementations/VertxImplementation.java b/src/main/java/org/creekservice/kafka/test/perf/implementations/VertxImplementation.java index 3ff50db..1be9607 100644 --- a/src/main/java/org/creekservice/kafka/test/perf/implementations/VertxImplementation.java +++ b/src/main/java/org/creekservice/kafka/test/perf/implementations/VertxImplementation.java @@ -43,8 +43,15 @@ public class VertxImplementation implements Implementation { SchemaSpec.DRAFT_07, Draft.DRAFT7, SchemaSpec.DRAFT_2019_09, Draft.DRAFT201909, SchemaSpec.DRAFT_2020_12, Draft.DRAFT202012); + private static final MetaData METADATA = - new MetaData("Vert.x Json Schema", "Vert.x", SUPPORTED.keySet()); + new MetaData( + "Vert.x Json Schema", + "Vert.x", + Language.Java, + Licence.Apache_v2_0, + SUPPORTED.keySet(), + "https://github.com/eclipse-vertx/vertx-json-schema"); private ObjectMapper mapper = JsonMapper.builder().build(); diff --git a/src/test/java/org/creekservice/kafka/test/perf/util/ImplsJsonFormatterTest.java b/src/test/java/org/creekservice/kafka/test/perf/util/ImplsJsonFormatterTest.java index 2371d47..eaa0c03 100644 --- a/src/test/java/org/creekservice/kafka/test/perf/util/ImplsJsonFormatterTest.java +++ b/src/test/java/org/creekservice/kafka/test/perf/util/ImplsJsonFormatterTest.java @@ -37,10 +37,19 @@ class ImplsJsonFormatterTest { new Implementation.MetaData( "Implementation A", "Impl_A", - Set.of(SchemaSpec.DRAFT_2019_09, SchemaSpec.DRAFT_04)); + Implementation.Language.Java, + Implementation.Licence.Apache_v2_0, + Set.of(SchemaSpec.DRAFT_2019_09, SchemaSpec.DRAFT_04), + "http://a"); private static final Implementation.MetaData MD_B = - new Implementation.MetaData("Implementation B", "Impl_B", Set.of(SchemaSpec.DRAFT_07)); + new Implementation.MetaData( + "Implementation B", + "Impl_B", + Implementation.Language.Java, + Implementation.Licence.Apache_v2_0, + Set.of(SchemaSpec.DRAFT_07), + "http://b"); @Mock private Implementation implA; @@ -64,7 +73,11 @@ void shouldFormatAsJson() { json, is( "[{\"longName\":\"Implementation" - + " A\",\"shortName\":\"Impl_A\",\"supported\":[\"DRAFT_04\",\"DRAFT_2019_09\"]},{\"longName\":\"Implementation" - + " B\",\"shortName\":\"Impl_B\",\"supported\":[\"DRAFT_07\"]}]")); + + " A\",\"shortName\":\"Impl_A\",\"language\":\"Java\",\"licence\":\"Apache" + + " Licence" + + " 2.0\",\"supported\":[\"DRAFT_04\",\"DRAFT_2019_09\"],\"url\":\"http://a\"},{\"longName\":\"Implementation" + + " B\",\"shortName\":\"Impl_B\",\"language\":\"Java\",\"licence\":\"Apache" + + " Licence" + + " 2.0\",\"supported\":[\"DRAFT_07\"],\"url\":\"http://b\"}]")); } }