diff --git a/.github/linters/sun_checks.xml b/.github/linters/sun_checks.xml index ad6d3e6..ee2e150 100644 --- a/.github/linters/sun_checks.xml +++ b/.github/linters/sun_checks.xml @@ -92,7 +92,9 @@ - + + + @@ -135,7 +137,12 @@ - + + + + diff --git a/pom.xml b/pom.xml index bc1837e..8c359b1 100644 --- a/pom.xml +++ b/pom.xml @@ -117,6 +117,19 @@ 2.0.6 + + com.fasterxml.jackson.datatype + jackson-datatype-jsr310 + 2.14.2 + + + + com.networknt + json-schema-validator + 1.0.78 + + + diff --git a/src/main/java/dev/cdevents/CDEvents.java b/src/main/java/dev/cdevents/CDEvents.java new file mode 100644 index 0000000..f497adc --- /dev/null +++ b/src/main/java/dev/cdevents/CDEvents.java @@ -0,0 +1,92 @@ +package dev.cdevents; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ObjectNode; +import com.networknt.schema.JsonSchema; +import com.networknt.schema.JsonSchemaFactory; +import com.networknt.schema.SpecVersion; +import com.networknt.schema.ValidationMessage; +import dev.cdevents.config.CustomObjectMapper; +import dev.cdevents.exception.CDEventsException; +import dev.cdevents.models.CDEvent; +import io.cloudevents.CloudEvent; +import io.cloudevents.core.v03.CloudEventBuilder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.nio.charset.StandardCharsets; +import java.time.OffsetDateTime; +import java.util.Set; +import java.util.UUID; + +public final class CDEvents { + + private CDEvents() { + } + + private static ObjectMapper objectMapper = new CustomObjectMapper().customConfiguration(); + private static Logger log = LoggerFactory.getLogger(CDEvents.class); + + + /** + * @param cdEvent + * @return json string of a cdEvent + */ + public static String cdEventAsJson(CDEvent cdEvent) { + try { + return objectMapper.writeValueAsString(cdEvent); + } catch (JsonProcessingException e) { + log.error("Error while mapping cdEvent as Json {}", e.getMessage()); + throw new CDEventsException("Error while mapping cdEvent as Json {}", e); + } + } + + + /** + * Creates a CloudEvent from the cdEvent. + * @param cdEvent + * @return CloudEvent + */ + public static CloudEvent cdEventAsCloudEvent(CDEvent cdEvent) { + + String cdEventJson = cdEventAsJson(cdEvent); + if (!validateCDEvent(cdEvent)) { + log.error("CDEvent validation failed against schema URL - {}", cdEvent.schemaURL()); + throw new CDEventsException("CDEvent validation failed against schema URL - " + cdEvent.schemaURL()); + } + CloudEvent ceToSend = new CloudEventBuilder() + .withId(UUID.randomUUID().toString()) + .withSource(cdEvent.getContext().getSource()) + .withType(cdEvent.getContext().getType()) + .withDataContentType("application/json") + .withData(cdEventJson.getBytes(StandardCharsets.UTF_8)) + .withTime(OffsetDateTime.now()) + .build(); + + return ceToSend; + } + + /** + * Validates the cdEvent against the Schema URL. + * @param cdEvent + * @return valid cdEvent + */ + public static boolean validateCDEvent(CDEvent cdEvent) { + String cdEventJson = cdEventAsJson(cdEvent); + + JsonSchemaFactory factory = JsonSchemaFactory.getInstance(SpecVersion.VersionFlag.V202012); + JsonSchema jsonSchema = factory.getSchema(cdEvent.eventSchema()); + + JsonNode jsonNode = objectMapper.convertValue(cdEvent, ObjectNode.class); + Set errors = jsonSchema.validate(jsonNode); + + if (!errors.isEmpty()) { + log.error("CDEvent validation failed with errors {}", errors); + return false; + } + return true; + } + +} diff --git a/src/main/java/dev/cdevents/config/CustomObjectMapper.java b/src/main/java/dev/cdevents/config/CustomObjectMapper.java new file mode 100644 index 0000000..a436bc3 --- /dev/null +++ b/src/main/java/dev/cdevents/config/CustomObjectMapper.java @@ -0,0 +1,20 @@ +package dev.cdevents.config; + +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; + +public class CustomObjectMapper extends ObjectMapper { + + /** + * @return customized ObjectMapper + */ + public ObjectMapper customConfiguration() { + return this + .enable(SerializationFeature.WRITE_ENUMS_USING_TO_STRING) + .enable(DeserializationFeature.READ_ENUMS_USING_TO_STRING) + .configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false) + .registerModule(new JavaTimeModule()); + } +} diff --git a/src/main/java/dev/cdevents/config/package-info.java b/src/main/java/dev/cdevents/config/package-info.java new file mode 100644 index 0000000..140d1d7 --- /dev/null +++ b/src/main/java/dev/cdevents/config/package-info.java @@ -0,0 +1,17 @@ +/** + * Copyright 2023-Present https://cdevents.dev/ + * + * 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. + * + * + */ + +package dev.cdevents.config; diff --git a/src/main/java/dev/cdevents/constants/CDEventConstants.java b/src/main/java/dev/cdevents/constants/CDEventConstants.java index 4307dd1..59e2a46 100644 --- a/src/main/java/dev/cdevents/constants/CDEventConstants.java +++ b/src/main/java/dev/cdevents/constants/CDEventConstants.java @@ -1,26 +1,58 @@ package dev.cdevents.constants; -public class CDEventConstants { +public final class CDEventConstants { + private CDEventConstants() { + } /** * CDEvents Version. */ - private static final String VERSION = "0.1.0"; + public static final String CDEVENTS_SPEC_VERSION = "0.1.0"; + + public enum SubjectType { + /** + * Subject Type pipelineRun. + */ + PIPELINERUN("pipelineRun"); + + private String subjectType; + + /** + * @param subjectType + */ + SubjectType(String subjectType) { + this.subjectType = subjectType; + } + + /** + * @return subjectType + */ + public String getSubjectType() { + return subjectType; + } + + /** + * @param subjectType + */ + public void setSubjectType(String subjectType) { + this.subjectType = subjectType; + } + } public enum Outcome { /** * Outcome Success. */ - OutcomeSuccess("success"), + SUCCESS("success"), /** * Outcome Failure. */ - OutcomeFailure("failure"), + FAILURE("failure"), /** * Outcome Error. */ - OutcomeError("error"); + ERROR("error"); /** * Outcome. @@ -52,161 +84,159 @@ public enum CDEventTypes { /** * Pipeline run started event. */ - PipelineRunStartedEvent("dev.cdevents.pipelinerun.started." + VERSION), + PipelineRunStartedEvent("dev.cdevents.pipelinerun.started."), /** * Pipeline run finished event. */ - PipelineRunFinishedEvent("dev.cdevents.pipelinerun.finished." - + VERSION), + PipelineRunFinishedEvent("dev.cdevents.pipelinerun.finished."), /** * Pipeline run queued event. */ - PipelineRunQueuedEvent("dev.cdevents.pipelinerun.queued." + VERSION), + PipelineRunQueuedEvent("dev.cdevents.pipelinerun.queued."), /* TaskRun events */ /** * Task run started event. */ - TaskRunStartedEvent("dev.cdevents.taskrun.started." + VERSION), + TaskRunStartedEvent("dev.cdevents.taskrun.started."), /** * Task run finished event. */ - TaskRunFinishedEvent("dev.cdevents.taskrun.finished." + VERSION), + TaskRunFinishedEvent("dev.cdevents.taskrun.finished."), /* Repository events */ /** * Repository created event. */ - RepositoryCreatedEvent("dev.cdevents.repository.created." + VERSION), + RepositoryCreatedEvent("dev.cdevents.repository.created."), /** * Repository modified event. */ - RepositoryModifiedEvent("dev.cdevents.repository.modified." + VERSION), + RepositoryModifiedEvent("dev.cdevents.repository.modified."), /** * Repository deleted event. */ - RepositoryDeletedEvent("dev.cdevents.repository.deleted." + VERSION), + RepositoryDeletedEvent("dev.cdevents.repository.deleted."), /** * Repository branch created event. */ - BranchCreatedEvent("dev.cdevents.branch.created." + VERSION), + BranchCreatedEvent("dev.cdevents.branch.created."), /** * Repository branch deleted event. */ - BranchDeletedEvent("dev.cdevents.branch.deleted." + VERSION), + BranchDeletedEvent("dev.cdevents.branch.deleted."), /* Repository change Events */ /** * Repository change created event. */ - ChangeCreatedEvent("dev.cdevents.change.created." + VERSION), + ChangeCreatedEvent("dev.cdevents.change.created."), /** * Repository change updated event. */ - ChangeUpdatedEvent("dev.cdevents.change.updated." + VERSION), + ChangeUpdatedEvent("dev.cdevents.change.updated."), /** * Repository change reviewed event. */ - ChangeReviewedEvent("dev.cdevents.change.reviewed." + VERSION), + ChangeReviewedEvent("dev.cdevents.change.reviewed."), /** * Repository change merged event. */ - ChangeMergedEvent("dev.cdevents.change.merged." + VERSION), + ChangeMergedEvent("dev.cdevents.change.merged."), /** * Repository change abandoned event. */ - ChangeAbandonedEvent("dev.cdevents.change.abandoned." + VERSION), + ChangeAbandonedEvent("dev.cdevents.change.abandoned."), /* Build Events */ /** * Build started event. */ - BuildStartedEvent("dev.cdevents.build.started" + VERSION), + BuildStartedEvent("dev.cdevents.build.started."), /** * Build queued event. */ - BuildQueuedEvent("dev.cdevents.build.queued" + VERSION), + BuildQueuedEvent("dev.cdevents.build.queued."), /** * Build finished event. */ - BuildFinishedEvent("dev.cdevents.build.finished" + VERSION), + BuildFinishedEvent("dev.cdevents.build.finished."), /* Test Events */ /** * TestCase started event. */ - TestCaseStartedEvent("dev.cdevents.testcase.started" + VERSION), + TestCaseStartedEvent("dev.cdevents.testcase.started."), /** * TestCase queued event. */ - TestCaseQueuedEvent("dev.cdevents.testcase.queued" + VERSION), + TestCaseQueuedEvent("dev.cdevents.testcase.queued."), /** * TestCase finished event. */ - TestCaseFinishedEvent("dev.cdevents.testcase.finished" + VERSION), + TestCaseFinishedEvent("dev.cdevents.testcase.finished."), /** * TestSuite started event. */ - TestSuiteStartedEvent("dev.cdevents.testsuite.started" + VERSION), + TestSuiteStartedEvent("dev.cdevents.testsuite.started."), /** * TestSuite queued event. */ - TestSuiteQueuedEvent("dev.cdevents.testsuite.queued" + VERSION), + TestSuiteQueuedEvent("dev.cdevents.testsuite.queued."), /** * TestSuite finished event. */ - TestSuiteFinishedEvent("dev.cdevents.testsuite.finished" + VERSION), + TestSuiteFinishedEvent("dev.cdevents.testsuite.finished."), /* Artifact Events */ /** * Artifact packaged event. */ - ArtifactPackagedEvent("dev.cdevents.artifact.packaged." + VERSION), + ArtifactPackagedEvent("dev.cdevents.artifact.packaged."), /** * Artifact published event. */ - ArtifactPublishedEvent("dev.cdevents.artifact.published." + VERSION), + ArtifactPublishedEvent("dev.cdevents.artifact.published."), /** * Artifact created event. */ - ArtifactCreatedEvent("dev.cdevents.artifact.created." + VERSION), + ArtifactCreatedEvent("dev.cdevents.artifact.created."), /* Environment Events */ /** * Environment created event. */ - EnvironmentCreatedEvent("dev.cdevents.environment.created." + VERSION), + EnvironmentCreatedEvent("dev.cdevents.environment.created."), /** * Environment modified event. */ - EnvironmentModifiedEvent("dev.cdevents.environment.modified." - + VERSION), + EnvironmentModifiedEvent("dev.cdevents.environment.modified."), /** * Environment deleted event. */ - EnvironmentDeletedEvent("dev.cdevents.environment.deleted." + VERSION), + EnvironmentDeletedEvent("dev.cdevents.environment.deleted."), /* Service Events */ /** * Service deployed event. */ - ServiceDeployedEvent("dev.cdevents.service.deployed." + VERSION), + ServiceDeployedEvent("dev.cdevents.service.deployed."), /** * Service upgraded event. */ - ServiceUpgradedEvent("dev.cdevents.service.upgraded." + VERSION), + ServiceUpgradedEvent("dev.cdevents.service.upgraded."), /** * Service rolled back event. */ - ServiceRolledBackEvent("dev.cdevents.service.rolledback." + VERSION), + ServiceRolledBackEvent("dev.cdevents.service.rolledback."), /** * Service removed event. */ - ServiceRemovedEvent("dev.cdevents.service.removed." + VERSION), + ServiceRemovedEvent("dev.cdevents.service.removed."), /** * Service published event. */ - ServicePublishedEvent("dev.cdevents.service.published." + VERSION); + ServicePublishedEvent("dev.cdevents.service.published."); /** diff --git a/src/main/java/dev/cdevents/events/PipelineRunFinishedCDEvent.java b/src/main/java/dev/cdevents/events/PipelineRunFinishedCDEvent.java new file mode 100644 index 0000000..d73dde8 --- /dev/null +++ b/src/main/java/dev/cdevents/events/PipelineRunFinishedCDEvent.java @@ -0,0 +1,210 @@ +package dev.cdevents.events; + +import com.fasterxml.jackson.annotation.JsonProperty; +import dev.cdevents.constants.CDEventConstants; +import dev.cdevents.models.CDEvent; +import dev.cdevents.models.PipelineRunFinishedSubject; + +import java.net.URI; + +public class PipelineRunFinishedCDEvent extends CDEvent { + + private static final String CDEVENT_VERSION = "0.1.0"; + @JsonProperty(required = true) + private PipelineRunFinishedSubject subject; + + /** + * Constructor to init CDEvent and set the Subject for {@link PipelineRunFinishedCDEvent}. + */ + public PipelineRunFinishedCDEvent() { + initCDEvent(currentCDEventType()); + setSubject(new PipelineRunFinishedSubject(CDEventConstants.SubjectType.PIPELINERUN)); + } + + /** + * @return subject + */ + public PipelineRunFinishedSubject getSubject() { + return subject; + } + + /** + * @param subject + */ + public void setSubject(PipelineRunFinishedSubject subject) { + this.subject = subject; + } + + /** + * @return the current CDEvent type + */ + @Override + public String currentCDEventType() { + return CDEventConstants.CDEventTypes.PipelineRunFinishedEvent.getEventType().concat(CDEVENT_VERSION); + } + + /** + * @return the pipeline-run-finished-event schema URL + */ + @Override + public String schemaURL() { + return String.format("https://cdevents.dev/%s/schema/pipeline-run-finished-event", CDEventConstants.CDEVENTS_SPEC_VERSION); + } + + /** + * @return the pipeline-run-finished-event schema Json + */ + @Override + public String eventSchema() { + return "{\n" + + " \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n" + + " \"$id\": \"https://cdevents.dev/0.1.0/schema/pipeline-run-finished-event\",\n" + + " \"properties\": {\n" + + " \"context\": {\n" + + " \"properties\": {\n" + + " \"version\": {\n" + + " \"type\": \"string\",\n" + + " \"enum\": [\n" + + " \"0.1.0\"\n" + + " ],\n" + + " \"default\": \"0.1.0\"\n" + + " },\n" + + " \"id\": {\n" + + " \"type\": \"string\",\n" + + " \"minLength\": 1\n" + + " },\n" + + " \"source\": {\n" + + " \"type\": \"string\",\n" + + " \"minLength\": 1\n" + + " },\n" + + " \"type\": {\n" + + " \"type\": \"string\",\n" + + " \"minLength\": 1\n" + + " },\n" + + " \"timestamp\": {\n" + + " \"type\": \"string\",\n" + + " \"format\": \"date-time\"\n" + + " }\n" + + " },\n" + + " \"additionalProperties\": false,\n" + + " \"type\": \"object\",\n" + + " \"required\": [\n" + + " \"version\",\n" + + " \"id\",\n" + + " \"source\",\n" + + " \"type\",\n" + + " \"timestamp\"\n" + + " ]\n" + + " },\n" + + " \"subject\": {\n" + + " \"properties\": {\n" + + " \"id\": {\n" + + " \"type\": \"string\",\n" + + " \"minLength\": 1\n" + + " },\n" + + " \"source\": {\n" + + " \"type\": \"string\"\n" + + " },\n" + + " \"type\": {\n" + + " \"type\": \"string\",\n" + + " \"minLength\": 1\n" + + " },\n" + + " \"content\": {\n" + + " \"properties\": {\n" + + " \"pipelineName\": {\n" + + " \"type\": \"string\"\n" + + " },\n" + + " \"url\": {\n" + + " \"type\": \"string\"\n" + + " },\n" + + " \"outcome\": {\n" + + " \"type\": \"string\"\n" + + " },\n" + + " \"errors\": {\n" + + " \"type\": \"string\"\n" + + " }\n" + + " },\n" + + " \"additionalProperties\": false,\n" + + " \"type\": \"object\"\n" + + " }\n" + + " },\n" + + " \"additionalProperties\": false,\n" + + " \"type\": \"object\",\n" + + " \"required\": [\n" + + " \"id\",\n" + + " \"type\",\n" + + " \"content\"\n" + + " ]\n" + + " },\n" + + " \"customData\": {\n" + + " \"oneOf\": [\n" + + " {\n" + + " \"type\": \"object\"\n" + + " },\n" + + " {\n" + + " \"type\": \"string\",\n" + + " \"contentEncoding\": \"base64\"\n" + + " }\n" + + " ]\n" + + " },\n" + + " \"customDataContentType\": {\n" + + " \"type\": \"string\"\n" + + " }\n" + + " },\n" + + " \"additionalProperties\": false,\n" + + " \"type\": \"object\",\n" + + " \"required\": [\n" + + " \"context\",\n" + + " \"subject\"\n" + + " ]\n" + + "}"; + } + + /** + * @param subjectId + * sets the subject Id + */ + public void setSubjectId(String subjectId) { + getSubject().setId(subjectId); + } + + /** + * @param subjectSource + * sets the pipeline source + */ + public void setSubjectSource(URI subjectSource) { + getSubject().setSource(subjectSource); + } + + /** + * @param pipelineName + * sets the pipeline name + */ + public void setSubjectPipelineName(String pipelineName) { + getSubject().getContent().setPipelineName(pipelineName); + } + + /** + * @param subjectUrl + * sets the pipeline URL + */ + public void setSubjectUrl(URI subjectUrl) { + getSubject().getContent().setUrl(subjectUrl); + } + + /** + * @param subjectOutcome + * sets the {@link PipelineRunFinishedCDEvent} outcome + */ + public void setSubjectOutcome(CDEventConstants.Outcome subjectOutcome) { + getSubject().getContent().setOutcome(subjectOutcome); + } + + /** + * @param subjectErrors + * sets the {@link PipelineRunFinishedCDEvent} errors + */ + public void setSubjectErrors(String subjectErrors) { + getSubject().getContent().setErrors(subjectErrors); + } +} diff --git a/src/main/java/dev/cdevents/events/package-info.java b/src/main/java/dev/cdevents/events/package-info.java new file mode 100644 index 0000000..2e3d387 --- /dev/null +++ b/src/main/java/dev/cdevents/events/package-info.java @@ -0,0 +1,17 @@ +/** + * Copyright 2023-Present https://cdevents.dev/ + * + * 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. + * + * + */ + +package dev.cdevents.events; diff --git a/src/main/java/dev/cdevents/exception/CDEventsException.java b/src/main/java/dev/cdevents/exception/CDEventsException.java new file mode 100644 index 0000000..eb58505 --- /dev/null +++ b/src/main/java/dev/cdevents/exception/CDEventsException.java @@ -0,0 +1,23 @@ +package dev.cdevents.exception; + +public class CDEventsException extends RuntimeException { + + + /** + * Custom CDEventsException to throw. + * @param message + */ + public CDEventsException(String message) { + super(message); + } + + + /** + * Custom CDEventsException to throw. + * @param message + * @param cause + */ + public CDEventsException(String message, Throwable cause) { + super(message, cause); + } +} diff --git a/src/main/java/dev/cdevents/exception/package-info.java b/src/main/java/dev/cdevents/exception/package-info.java new file mode 100644 index 0000000..695a833 --- /dev/null +++ b/src/main/java/dev/cdevents/exception/package-info.java @@ -0,0 +1,17 @@ +/** + * Copyright 2023-Present https://cdevents.dev/ + * + * 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. + * + * + */ + +package dev.cdevents.exception; diff --git a/src/main/java/dev/cdevents/models/CDEvent.java b/src/main/java/dev/cdevents/models/CDEvent.java new file mode 100644 index 0000000..1c82b2b --- /dev/null +++ b/src/main/java/dev/cdevents/models/CDEvent.java @@ -0,0 +1,94 @@ +package dev.cdevents.models; + +import com.fasterxml.jackson.annotation.JsonProperty; +import dev.cdevents.constants.CDEventConstants; + +import java.net.URI; +import java.time.LocalDateTime; +import java.util.UUID; + +public abstract class CDEvent { + + @JsonProperty(required = true) + private Context context; + + @JsonProperty + private Object customData = new Object(); + + @JsonProperty + private String customDataContentType = "application/json"; + + + /** + * @return current CDEvent type + */ + public abstract String currentCDEventType(); + + /** + * @return schema URL for validating the CDEvent structure + */ + public abstract String schemaURL(); + + /** + * @return schema json for validating the CDEvent structure + */ + public abstract String eventSchema(); + + /** + * @param source + * Sets the {@link Context} source value + */ + public void setSource(URI source) { + this.getContext().setSource(source); + } + + /** + * @return context + */ + public Context getContext() { + return context; + } + + /** + * @param context + */ + public void setContext(Context context) { + this.context = context; + } + + /** + * @return customData + */ + public Object getCustomData() { + return customData; + } + + /** + * @param customData + */ + public void setCustomData(Object customData) { + this.customData = customData; + } + + /** + * @return customDataContentType + */ + public String getCustomDataContentType() { + return customDataContentType; + } + + /** + * @param customDataContentType + */ + public void setCustomDataContentType(String customDataContentType) { + this.customDataContentType = customDataContentType; + } + + /** + * @param cdeventType + * Initialize the CDEvent with the context values + */ + public void initCDEvent(String cdeventType) { + setContext(new Context(UUID.randomUUID().toString(), LocalDateTime.now(), cdeventType, CDEventConstants.CDEVENTS_SPEC_VERSION)); + } +} diff --git a/src/main/java/dev/cdevents/models/Context.java b/src/main/java/dev/cdevents/models/Context.java new file mode 100644 index 0000000..e47ae5c --- /dev/null +++ b/src/main/java/dev/cdevents/models/Context.java @@ -0,0 +1,108 @@ +package dev.cdevents.models; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonProperty; + +import java.net.URI; +import java.time.LocalDateTime; + +public class Context { + @JsonProperty(required = true) + private String id; + + @JsonProperty(required = true) + private String type; + + @JsonProperty(required = true) + private URI source; + + @JsonProperty(required = true) + private String version; + + @JsonProperty(required = true) + @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss'Z'") + private LocalDateTime timestamp; + + /** + * @param id + * @param timestamp + * @param type + * @param version + */ + public Context(String id, LocalDateTime timestamp, String type, String version) { + this.id = id; + this.timestamp = timestamp; + this.type = type; + this.version = version; + } + + /** + * @return Context id + */ + public String getId() { + return id; + } + + /** + * @param id + */ + public void setId(String id) { + this.id = id; + } + + /** + * @return type + */ + public String getType() { + return type; + } + + /** + * @param type + */ + public void setType(String type) { + this.type = type; + } + + /** + * @return source + */ + public URI getSource() { + return source; + } + + /** + * @param source + */ + public void setSource(URI source) { + this.source = source; + } + + /** + * @return version + */ + public String getVersion() { + return version; + } + + /** + * @param version + */ + public void setVersion(String version) { + this.version = version; + } + + /** + * @return timestamp + */ + public LocalDateTime getTimestamp() { + return timestamp; + } + + /** + * @param timestamp + */ + public void setTimestamp(LocalDateTime timestamp) { + this.timestamp = timestamp; + } +} diff --git a/src/main/java/dev/cdevents/models/PipelineRunFinishedSubject.java b/src/main/java/dev/cdevents/models/PipelineRunFinishedSubject.java new file mode 100644 index 0000000..a2b7aeb --- /dev/null +++ b/src/main/java/dev/cdevents/models/PipelineRunFinishedSubject.java @@ -0,0 +1,109 @@ +package dev.cdevents.models; + +import com.fasterxml.jackson.annotation.JsonProperty; +import dev.cdevents.constants.CDEventConstants; + +import java.net.URI; + +public class PipelineRunFinishedSubject extends Subject { + + @JsonProperty(required = true) + private PipelineRunFinishedSubjectContent content; + + + /** + * @return the PipelineRunFinished subject's Content + */ + public PipelineRunFinishedSubjectContent getContent() { + return content; + } + + /** + * @param content + */ + public void setContent(PipelineRunFinishedSubjectContent content) { + this.content = content; + } + + /** + * @param subjectType + */ + public PipelineRunFinishedSubject(CDEventConstants.SubjectType subjectType) { + super(subjectType); + setContent(new PipelineRunFinishedSubjectContent()); + + } + + public class PipelineRunFinishedSubjectContent { + + @JsonProperty + private String pipelineName; + + @JsonProperty + private URI url; + + @JsonProperty + private CDEventConstants.Outcome outcome; + + @JsonProperty + private String errors; + + /** + * @return pipelineName + */ + public String getPipelineName() { + return pipelineName; + } + + /** + * @param pipelineName + */ + public void setPipelineName(String pipelineName) { + this.pipelineName = pipelineName; + } + + /** + * @return URL + */ + public URI getUrl() { + return url; + } + + /** + * @param url + */ + public void setUrl(URI url) { + this.url = url; + } + + /** + * @return outcome + */ + public CDEventConstants.Outcome getOutcome() { + return outcome; + } + + /** + * @param outcome + */ + public void setOutcome(CDEventConstants.Outcome outcome) { + this.outcome = outcome; + } + + + /** + * @return errors + */ + public String getErrors() { + return errors; + } + + + /** + * @param errors + */ + public void setErrors(String errors) { + this.errors = errors; + } + } +} diff --git a/src/main/java/dev/cdevents/models/Subject.java b/src/main/java/dev/cdevents/models/Subject.java new file mode 100644 index 0000000..b04c421 --- /dev/null +++ b/src/main/java/dev/cdevents/models/Subject.java @@ -0,0 +1,69 @@ +package dev.cdevents.models; + +import com.fasterxml.jackson.annotation.JsonProperty; +import dev.cdevents.constants.CDEventConstants; + +import java.net.URI; + +public class Subject { + + @JsonProperty(required = true) + private String id; + + @JsonProperty + private URI source; + + @JsonProperty(required = true) + private CDEventConstants.SubjectType type; + + /** + * Constructor to set the Subject Type. + * @param type + */ + public Subject(CDEventConstants.SubjectType type) { + this.type = type; + } + + /** + * @return Subject id + */ + public String getId() { + return id; + } + + /** + * @param id + */ + public void setId(String id) { + this.id = id; + } + + /** + * @return source + */ + public URI getSource() { + return source; + } + + /** + * @param source + */ + public void setSource(URI source) { + this.source = source; + } + + /** + * @return subject type + */ + public CDEventConstants.SubjectType getType() { + return type; + } + + + /** + * @param type + */ + public void setType(CDEventConstants.SubjectType type) { + this.type = type; + } +} diff --git a/src/main/resources/log4j.properties b/src/main/resources/log4j.properties new file mode 100644 index 0000000..f1d6f74 --- /dev/null +++ b/src/main/resources/log4j.properties @@ -0,0 +1,7 @@ +# Set root logger level to INFO and append to console +log4j.rootLogger=INFO, Console + +# Configure console appender +log4j.appender.Console=org.apache.log4j.ConsoleAppender +log4j.appender.Console.layout=org.apache.log4j.PatternLayout +log4j.appender.Console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %level %logger{36} - %msg%n \ No newline at end of file diff --git a/src/test/java/dev/cdevents/CDEventTypesTest.java b/src/test/java/dev/cdevents/CDEventTypesTest.java index 2f1a704..c89564b 100644 --- a/src/test/java/dev/cdevents/CDEventTypesTest.java +++ b/src/test/java/dev/cdevents/CDEventTypesTest.java @@ -1,559 +1,558 @@ -/** - * Copyright 2022-Present https://cdevents.dev/ - * - * 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. - * - * - */ - -package dev.cdevents; - -import static org.assertj.core.api.Assertions.assertThat; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import dev.cdevents.constants.CDEventConstants; -import dev.cdevents.models.Environment; -import dev.cdevents.models.PipelineRun; -import dev.cdevents.models.Repository; -import org.junit.jupiter.api.Test; - -import io.cloudevents.CloudEvent; - -import java.net.MalformedURLException; -import java.net.URI; -import java.net.URISyntaxException; -import java.net.URL; - -public class CDEventTypesTest { - - - /** - * Object Mapper for writing Environment, Repository and PipelineRun objects to json string. - */ - private static ObjectMapper objectMapper = new ObjectMapper(); - - - @Test - void createPipelineRunFinishedEventTest() throws URISyntaxException { - URI url = new URI("cdevents.dev"); - CloudEvent cdEvent = CDEventTypes.createPipelineRunFinishedEvent( - "id", url, "name", url, - CDEventConstants.Outcome.OutcomeSuccess, "errors", "data"); - - assertThat(cdEvent.getExtensionNames()) - .containsExactlyInAnyOrder("id", "source", - "pipelinename", "url", "outcome", "errors"); - - assertThat(cdEvent.getExtension("id")).isEqualTo("id"); - assertThat(cdEvent.getExtension("source")).isEqualTo(url); - assertThat(cdEvent.getExtension("pipelinename")).isEqualTo("name"); - assertThat(cdEvent.getExtension("url")).isEqualTo(url); - assertThat(cdEvent.getExtension("outcome")).isEqualTo( - CDEventConstants.Outcome.OutcomeSuccess.getOutcome()); - assertThat(cdEvent.getExtension("errors")).isEqualTo("errors"); - } - - @Test - void createPipelineRunStartedEventTest() throws URISyntaxException { - URI url = new URI("cdevents.dev"); - CloudEvent cdEvent = CDEventTypes.createPipelineRunStartedEvent( - "id", url, "name", url, "data"); - - assertThat(cdEvent.getExtensionNames()) - .containsExactlyInAnyOrder("id", "source", - "pipelinename", "url"); - - assertThat(cdEvent.getExtension("id")).isEqualTo("id"); - assertThat(cdEvent.getExtension("source")).isEqualTo(url); - assertThat(cdEvent.getExtension("pipelinename")).isEqualTo("name"); - assertThat(cdEvent.getExtension("url")).isEqualTo(url); - } - - @Test - void createPipelineRunQueuedEventTest() throws URISyntaxException { - URI url = new URI("cdevents.dev"); - CloudEvent cdEvent = CDEventTypes.createPipelineRunQueuedEvent( - "id", url, "name", url, "data"); - - assertThat(cdEvent.getExtensionNames()) - .containsExactlyInAnyOrder("id", "source", - "pipelinename", "url"); - - assertThat(cdEvent.getExtension("id")).isEqualTo("id"); - assertThat(cdEvent.getExtension("source")).isEqualTo(url); - assertThat(cdEvent.getExtension("pipelinename")).isEqualTo("name"); - assertThat(cdEvent.getExtension("url")).isEqualTo(url); - } - - @Test - void createTaskRunStartedTest() - throws URISyntaxException, JsonProcessingException { - URI url = new URI("cdevents.dev"); - PipelineRun pipelineRun = new PipelineRun(); - - CloudEvent cdEvent = CDEventTypes.createTaskRunStartedEvent( - "id", url, "taskname", pipelineRun, url, "data"); - - assertThat(cdEvent.getExtensionNames()) - .containsExactlyInAnyOrder("id", "source", "taskname", - "pipelinerun", "url"); - - assertThat(cdEvent.getExtension("id")).isEqualTo("id"); - assertThat(cdEvent.getExtension("source")).isEqualTo(url); - assertThat(cdEvent.getExtension("taskname")).isEqualTo("taskname"); - assertThat(cdEvent.getExtension("pipelinerun")). - isEqualTo(objectMapper.writeValueAsString(pipelineRun)); - assertThat(cdEvent.getExtension("url")).isEqualTo(url); - } - - @Test - void createTaskRunFinishedTest() - throws URISyntaxException, JsonProcessingException { - URI url = new URI("cdevents.dev"); - PipelineRun pipelineRun = new PipelineRun(); - CloudEvent cdEvent = CDEventTypes.createTaskRunFinishedEvent( - "id", url, - "taskname", pipelineRun, url, CDEventConstants.Outcome. - OutcomeSuccess, "errors", "data"); - - assertThat(cdEvent.getExtensionNames()) - .containsExactlyInAnyOrder("id", "source", "taskname", - "pipelinerun", "url", "outcome", "errors"); - - assertThat(cdEvent.getExtension("id")).isEqualTo("id"); - assertThat(cdEvent.getExtension("source")).isEqualTo(url); - assertThat(cdEvent.getExtension("taskname")).isEqualTo("taskname"); - assertThat(cdEvent.getExtension("pipelinerun")). - isEqualTo(objectMapper.writeValueAsString(pipelineRun)); - assertThat(cdEvent.getExtension("url")).isEqualTo(url); - assertThat(cdEvent.getExtension("outcome")). - isEqualTo(CDEventConstants.Outcome.OutcomeSuccess.getOutcome()); - assertThat(cdEvent.getExtension("errors")).isEqualTo("errors"); - } - - @Test - void createRepositoryCreatedEventTest() throws URISyntaxException { - URI url = new URI("cdevents.dev"); - CloudEvent cdEvent = CDEventTypes.createRepositoryCreatedEvent( - "id", url, "name", "owner", url, url, "data"); - assertThat(cdEvent.getExtensionNames()) - .containsExactlyInAnyOrder("id", "source", "name", - "owner", "url", "viewurl"); - - assertThat(cdEvent.getExtension("id")).isEqualTo("id"); - assertThat(cdEvent.getExtension("source")).isEqualTo(url); - assertThat(cdEvent.getExtension("name")).isEqualTo("name"); - assertThat(cdEvent.getExtension("owner")).isEqualTo("owner"); - assertThat(cdEvent.getExtension("url")).isEqualTo(url); - assertThat(cdEvent.getExtension("viewurl")).isEqualTo(url); - } - - @Test - void createRepositoryModifiedEventTest() throws URISyntaxException { - URI url = new URI("cdevents.dev"); - CloudEvent cdEvent = CDEventTypes.createRepositoryModifiedEvent( - "id", url, "name", "owner", url, url, "data"); - assertThat(cdEvent.getExtensionNames()) - .containsExactlyInAnyOrder("id", "source", "name", - "owner", "url", "viewurl"); - - assertThat(cdEvent.getExtension("id")).isEqualTo("id"); - assertThat(cdEvent.getExtension("source")).isEqualTo(url); - assertThat(cdEvent.getExtension("name")).isEqualTo("name"); - assertThat(cdEvent.getExtension("owner")).isEqualTo("owner"); - assertThat(cdEvent.getExtension("url")).isEqualTo(url); - assertThat(cdEvent.getExtension("viewurl")).isEqualTo(url); - } - - @Test - void createRepositoryDeletedEventTest() throws URISyntaxException { - URI url = new URI("cdevents.dev"); - CloudEvent cdEvent = CDEventTypes.createRepositoryDeletedEvent( - "id", url, "name", "owner", url, url, "data"); - assertThat(cdEvent.getExtensionNames()) - .containsExactlyInAnyOrder("id", "source", "name", - "owner", "url", "viewurl"); - - assertThat(cdEvent.getExtension("id")).isEqualTo("id"); - assertThat(cdEvent.getExtension("source")).isEqualTo(url); - assertThat(cdEvent.getExtension("name")).isEqualTo("name"); - assertThat(cdEvent.getExtension("owner")).isEqualTo("owner"); - assertThat(cdEvent.getExtension("url")).isEqualTo(url); - assertThat(cdEvent.getExtension("viewurl")).isEqualTo(url); - } - - @Test - void createBranchCreatedEventTest() - throws URISyntaxException, JsonProcessingException { - URI url = new URI("cdevents.dev"); - Repository repository = new Repository(); - CloudEvent cdEvent = CDEventTypes.createBranchCreatedEvent( - "id", url, repository, "data"); - assertThat(cdEvent.getExtensionNames()) - .containsExactlyInAnyOrder("id", "source", "repository"); - - assertThat(cdEvent.getExtension("id")).isEqualTo("id"); - assertThat(cdEvent.getExtension("source")).isEqualTo(url); - assertThat(cdEvent.getExtension("repository")). - isEqualTo(objectMapper.writeValueAsString(repository)); - } - - @Test - void createBranchDeletedEventTest() - throws URISyntaxException, JsonProcessingException { - URI url = new URI("cdevents.dev"); - Repository repository = new Repository(); - CloudEvent cdEvent = CDEventTypes.createBranchDeletedEvent( - "id", url, repository, "data"); - assertThat(cdEvent.getExtensionNames()) - .containsExactlyInAnyOrder("id", "source", "repository"); - - assertThat(cdEvent.getExtension("id")).isEqualTo("id"); - assertThat(cdEvent.getExtension("source")).isEqualTo(url); - assertThat(cdEvent.getExtension("repository")). - isEqualTo(objectMapper.writeValueAsString(repository)); - } - - @Test - void createChangeCreatedEventTest() - throws URISyntaxException, JsonProcessingException { - URI url = new URI("cdevents.dev"); - Repository repository = new Repository(); - CloudEvent cdEvent = CDEventTypes.createChangeCreatedEvent( - "id", url, repository, "data"); - assertThat(cdEvent.getExtensionNames()) - .containsExactlyInAnyOrder("id", "source", "repository"); - - assertThat(cdEvent.getExtension("id")).isEqualTo("id"); - assertThat(cdEvent.getExtension("source")).isEqualTo(url); - assertThat(cdEvent.getExtension("repository")). - isEqualTo(objectMapper.writeValueAsString(repository)); - } - - @Test - void createChangeReviewedEventTest() - throws URISyntaxException, JsonProcessingException { - URI url = new URI("cdevents.dev"); - Repository repository = new Repository(); - CloudEvent cdEvent = CDEventTypes.createChangeReviewedEvent( - "id", url, repository, "data"); - assertThat(cdEvent.getExtensionNames()) - .containsExactlyInAnyOrder("id", "source", "repository"); - - assertThat(cdEvent.getExtension("id")).isEqualTo("id"); - assertThat(cdEvent.getExtension("source")).isEqualTo(url); - assertThat(cdEvent.getExtension("repository")). - isEqualTo(objectMapper.writeValueAsString(repository)); - } - - @Test - void createChangeMergedEventTest() - throws URISyntaxException, JsonProcessingException { - URI url = new URI("cdevents.dev"); - Repository repository = new Repository(); - CloudEvent cdEvent = CDEventTypes.createChangeMergedEvent( - "id", url, repository, "data"); - assertThat(cdEvent.getExtensionNames()) - .containsExactlyInAnyOrder("id", "source", "repository"); - - assertThat(cdEvent.getExtension("id")).isEqualTo("id"); - assertThat(cdEvent.getExtension("source")).isEqualTo(url); - assertThat(cdEvent.getExtension("repository")). - isEqualTo(objectMapper.writeValueAsString(repository)); - } - - @Test - void createChangeAbandonedEventTest() - throws URISyntaxException, JsonProcessingException { - URI url = new URI("cdevents.dev"); - Repository repository = new Repository(); - CloudEvent cdEvent = CDEventTypes.createChangeAbandonedEvent( - "id", url, repository, "data"); - assertThat(cdEvent.getExtensionNames()) - .containsExactlyInAnyOrder("id", "source", "repository"); - - assertThat(cdEvent.getExtension("id")).isEqualTo("id"); - assertThat(cdEvent.getExtension("source")).isEqualTo(url); - assertThat(cdEvent.getExtension("repository")). - isEqualTo(objectMapper.writeValueAsString(repository)); - } - - @Test - void createChangeUpdatedEventTest() - throws URISyntaxException, JsonProcessingException { - URI url = new URI("cdevents.dev"); - Repository repository = new Repository(); - CloudEvent cdEvent = CDEventTypes.createChangeUpdatedEvent( - "id", url, repository, "data"); - assertThat(cdEvent.getExtensionNames()) - .containsExactlyInAnyOrder("id", "source", "repository"); - - assertThat(cdEvent.getExtension("id")).isEqualTo("id"); - assertThat(cdEvent.getExtension("source")).isEqualTo(url); - assertThat(cdEvent.getExtension("repository")). - isEqualTo(objectMapper.writeValueAsString(repository)); - } - - @Test - void createBuildQueuedEventTest() throws URISyntaxException { - URI url = new URI("cdevents.dev"); - CloudEvent cdEvent = CDEventTypes.createBuildQueuedEvent( - "id", url, "data"); - assertThat(cdEvent.getExtensionNames()) - .containsExactlyInAnyOrder("id", "source"); - - assertThat(cdEvent.getExtension("id")).isEqualTo("id"); - assertThat(cdEvent.getExtension("source")).isEqualTo(url); - } - - @Test - void createBuildStartedEventTest() throws URISyntaxException { - URI url = new URI("cdevents.dev"); - CloudEvent cdEvent = CDEventTypes.createBuildStartedEvent( - "id", url, "data"); - assertThat(cdEvent.getExtensionNames()) - .containsExactlyInAnyOrder("id", "source"); - - assertThat(cdEvent.getExtension("id")).isEqualTo("id"); - assertThat(cdEvent.getExtension("source")).isEqualTo(url); - } - - @Test - void createBuildFinishedEventTest() throws URISyntaxException { - URI url = new URI("cdevents.dev"); - CloudEvent cdEvent = CDEventTypes.createBuildFinishedEvent( - "id", url, url, "data"); - assertThat(cdEvent.getExtensionNames()) - .containsExactlyInAnyOrder("id", "source", "artifactid"); - - assertThat(cdEvent.getExtension("id")).isEqualTo("id"); - assertThat(cdEvent.getExtension("source")).isEqualTo(url); - assertThat(cdEvent.getExtension("artifactid")).isEqualTo(url); - } - - @Test - void createTestCaseQueuedEventTest() throws URISyntaxException { - URI url = new URI("cdevents.dev"); - CloudEvent cdEvent = CDEventTypes.createTestCaseQueuedEvent( - "id", url, "data"); - assertThat(cdEvent.getExtensionNames()) - .containsExactlyInAnyOrder("id", "source"); - - assertThat(cdEvent.getExtension("id")).isEqualTo("id"); - assertThat(cdEvent.getExtension("source")).isEqualTo(url); - } - - @Test - void createTestCaseStartedEventTest() throws URISyntaxException { - URI url = new URI("cdevents.dev"); - CloudEvent cdEvent = CDEventTypes.createTestCaseStartedEvent( - "id", url, "data"); - assertThat(cdEvent.getExtensionNames()) - .containsExactlyInAnyOrder("id", "source"); - - assertThat(cdEvent.getExtension("id")).isEqualTo("id"); - assertThat(cdEvent.getExtension("source")).isEqualTo(url); - } - - @Test - void createTestCaseFinishedEventTest() throws URISyntaxException { - URI url = new URI("cdevents.dev"); - CloudEvent cdEvent = CDEventTypes.createTestCaseFinishedEvent( - "id", url, "data"); - assertThat(cdEvent.getExtensionNames()) - .containsExactlyInAnyOrder("id", "source"); - - assertThat(cdEvent.getExtension("id")).isEqualTo("id"); - assertThat(cdEvent.getExtension("source")).isEqualTo(url); - } - - @Test - void createTestSuiteStartedEventTest() throws URISyntaxException { - URI url = new URI("cdevents.dev"); - CloudEvent cdEvent = CDEventTypes.createTestSuiteStartedEvent( - "id", url, "data"); - assertThat(cdEvent.getExtensionNames()) - .containsExactlyInAnyOrder("id", "source"); - - assertThat(cdEvent.getExtension("id")).isEqualTo("id"); - assertThat(cdEvent.getExtension("source")).isEqualTo(url); - } - - @Test - void createTestSuiteFinishedEventTest() throws URISyntaxException { - URI url = new URI("cdevents.dev"); - CloudEvent cdEvent = CDEventTypes.createTestSuiteFinishedEvent( - "id", url, "data"); - assertThat(cdEvent.getExtensionNames()) - .containsExactlyInAnyOrder("id", "source"); - - assertThat(cdEvent.getExtension("id")).isEqualTo("id"); - assertThat(cdEvent.getExtension("source")).isEqualTo(url); - } - - @Test - void createArtifactPackagedEventTest() throws URISyntaxException { - URI url = new URI("cdevents.dev"); - CloudEvent cdEvent = CDEventTypes.createArtifactPackagedEvent( - "id", url, "data"); - assertThat(cdEvent.getExtensionNames()) - .containsExactlyInAnyOrder("id", "source"); - - assertThat(cdEvent.getExtension("id")).isEqualTo("id"); - assertThat(cdEvent.getExtension("source")).isEqualTo(url); - } - - @Test - void createArtifactPublishedEventTest() throws URISyntaxException { - URI url = new URI("cdevents.dev"); - CloudEvent cdEvent = CDEventTypes.createArtifactPublishedEvent( - "id", url, "data"); - assertThat(cdEvent.getExtensionNames()) - .containsExactlyInAnyOrder("id", "source"); - - assertThat(cdEvent.getExtension("id")).isEqualTo("id"); - assertThat(cdEvent.getExtension("source")).isEqualTo(url); - } - - @Test - void createEnvironmentCreatedEventTest() throws URISyntaxException { - URI url = new URI("cdevents.dev"); - CloudEvent cdEvent = CDEventTypes.createEnvironmentCreatedEvent( - "id", url, "name", "url", "data"); - assertThat(cdEvent.getExtensionNames()) - .containsExactlyInAnyOrder("id", "source", "name", "url"); - - assertThat(cdEvent.getExtension("id")).isEqualTo("id"); - assertThat(cdEvent.getExtension("source")).isEqualTo(url); - assertThat(cdEvent.getExtension("name")).isEqualTo("name"); - assertThat(cdEvent.getExtension("url")).isEqualTo("url"); - } - - @Test - void createEnvironmentModifiedEventTest() throws URISyntaxException { - URI url = new URI("cdevents.dev"); - CloudEvent cdEvent = CDEventTypes.createEnvironmentModifiedEvent( - "id", url, "name", "url", "data"); - assertThat(cdEvent.getExtensionNames()) - .containsExactlyInAnyOrder("id", "source", "name", "url"); - - assertThat(cdEvent.getExtension("id")).isEqualTo("id"); - assertThat(cdEvent.getExtension("source")).isEqualTo(url); - assertThat(cdEvent.getExtension("name")).isEqualTo("name"); - assertThat(cdEvent.getExtension("url")).isEqualTo("url"); - } - - @Test - void createEnvironmentDeletedEventTest() throws URISyntaxException { - URI url = new URI("cdevents.dev"); - CloudEvent cdEvent = CDEventTypes.createEnvironmentDeletedEvent( - "id", url, "name", "data"); - assertThat(cdEvent.getExtensionNames()) - .containsExactlyInAnyOrder("id", "source", "name"); - - assertThat(cdEvent.getExtension("id")).isEqualTo("id"); - assertThat(cdEvent.getExtension("source")).isEqualTo(url); - assertThat(cdEvent.getExtension("name")).isEqualTo("name"); - } - - @Test - void createServiceDeployedTest() - throws URISyntaxException, JsonProcessingException, - MalformedURLException { - URI url = new URI("cdevents.dev"); - URL purl = new URL("https://www.cdevents.dev"); - Environment environment = new Environment("id", url, "name", "url"); - CloudEvent cdEvent = CDEventTypes.createServiceDeployedEvent( - "id", environment, purl, "data"); - assertThat(cdEvent.getExtensionNames()) - .containsExactlyInAnyOrder("id", "environment", "artifactid"); - - - assertThat(cdEvent.getExtension("id")).isEqualTo("id"); - assertThat(cdEvent.getExtension("environment")). - isEqualTo(objectMapper.writeValueAsString(environment)); - assertThat(cdEvent.getExtension("artifactid")). - isEqualTo(purl.toString()); - } - - @Test - void createServiceUpgradedTest() - throws URISyntaxException, JsonProcessingException, - MalformedURLException { - URI url = new URI("cdevents.dev"); - URL purl = new URL("https://www.cdevents.dev"); - Environment environment = new Environment("id", url, "name", "url"); - CloudEvent cdEvent = CDEventTypes.createServiceUpgradedEvent( - "id", environment, purl, "data"); - assertThat(cdEvent.getExtensionNames()) - .containsExactlyInAnyOrder("id", "environment", "artifactid"); - - assertThat(cdEvent.getExtension("id")).isEqualTo("id"); - assertThat(cdEvent.getExtension("environment")). - isEqualTo(objectMapper.writeValueAsString(environment)); - assertThat(cdEvent.getExtension("artifactid")). - isEqualTo(purl.toString()); - } - - @Test - void createServiceRolledBackTest() - throws URISyntaxException, JsonProcessingException, - MalformedURLException { - URI url = new URI("cdevents.dev"); - URL purl = new URL("https://www.cdevents.dev"); - Environment environment = new Environment("id", url, "name", "url"); - CloudEvent cdEvent = CDEventTypes.createServiceRolledBackEvent( - "id", environment, purl, "data"); - assertThat(cdEvent.getExtensionNames()) - .containsExactlyInAnyOrder("id", "environment", "artifactid"); - - - assertThat(cdEvent.getExtension("id")).isEqualTo("id"); - assertThat(cdEvent.getExtension("environment")). - isEqualTo(objectMapper.writeValueAsString(environment)); - assertThat(cdEvent.getExtension("artifactid")). - isEqualTo(purl.toString()); - } - - @Test - void createServiceRemovedTest() - throws URISyntaxException, JsonProcessingException { - URI url = new URI("cdevents.dev"); - Environment environment = new Environment("id", url, "name", "url"); - - CloudEvent cdEvent = CDEventTypes.createServiceRemovedEvent( - "id", environment, "data"); - - assertThat(cdEvent.getExtensionNames()) - .containsExactlyInAnyOrder("id", "environment"); - assertThat(cdEvent.getExtension("id")).isEqualTo("id"); - assertThat(cdEvent.getExtension("environment")). - isEqualTo(objectMapper.writeValueAsString(environment)); - } - - @Test - void createServicePublishedTest() - throws URISyntaxException, JsonProcessingException { - URI url = new URI("cdevents.dev"); - Environment environment = new Environment("id", url, "name", "url"); - - CloudEvent cdEvent = CDEventTypes.createServicePublishedEvent( - "id", environment, "data"); - - assertThat(cdEvent.getExtensionNames()) - .containsExactlyInAnyOrder("id", "environment"); - assertThat(cdEvent.getExtension("id")).isEqualTo("id"); - assertThat(cdEvent.getExtension("environment")). - isEqualTo(objectMapper.writeValueAsString(environment)); - } - -} +/** + * Copyright 2022-Present https://cdevents.dev/ + * + * 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. + * + * + */ + +package dev.cdevents; + +import static org.assertj.core.api.Assertions.assertThat; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import dev.cdevents.constants.CDEventConstants; +import dev.cdevents.models.Environment; +import dev.cdevents.models.PipelineRun; +import dev.cdevents.models.Repository; +import org.junit.jupiter.api.Test; + +import io.cloudevents.CloudEvent; + +import java.net.MalformedURLException; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.URL; + +public class CDEventTypesTest { + + + /** + * Object Mapper for writing Environment, Repository and PipelineRun objects to json string. + */ + private static ObjectMapper objectMapper = new ObjectMapper(); + + + @Test + void createPipelineRunFinishedEventTest() throws URISyntaxException { + URI url = new URI("cdevents.dev"); + CloudEvent cdEvent = CDEventTypes.createPipelineRunFinishedEvent( + "id", url, "name", url, + CDEventConstants.Outcome.SUCCESS, "errors", "data"); + + assertThat(cdEvent.getExtensionNames()) + .containsExactlyInAnyOrder("id", "source", + "pipelinename", "url", "outcome", "errors"); + + assertThat(cdEvent.getExtension("id")).isEqualTo("id"); + assertThat(cdEvent.getExtension("source")).isEqualTo(url); + assertThat(cdEvent.getExtension("pipelinename")).isEqualTo("name"); + assertThat(cdEvent.getExtension("url")).isEqualTo(url); + assertThat(cdEvent.getExtension("outcome")).isEqualTo( + CDEventConstants.Outcome.SUCCESS.getOutcome()); + assertThat(cdEvent.getExtension("errors")).isEqualTo("errors"); + } + + @Test + void createPipelineRunStartedEventTest() throws URISyntaxException { + URI url = new URI("cdevents.dev"); + CloudEvent cdEvent = CDEventTypes.createPipelineRunStartedEvent( + "id", url, "name", url, "data"); + + assertThat(cdEvent.getExtensionNames()) + .containsExactlyInAnyOrder("id", "source", + "pipelinename", "url"); + + assertThat(cdEvent.getExtension("id")).isEqualTo("id"); + assertThat(cdEvent.getExtension("source")).isEqualTo(url); + assertThat(cdEvent.getExtension("pipelinename")).isEqualTo("name"); + assertThat(cdEvent.getExtension("url")).isEqualTo(url); + } + + @Test + void createPipelineRunQueuedEventTest() throws URISyntaxException { + URI url = new URI("cdevents.dev"); + CloudEvent cdEvent = CDEventTypes.createPipelineRunQueuedEvent( + "id", url, "name", url, "data"); + + assertThat(cdEvent.getExtensionNames()) + .containsExactlyInAnyOrder("id", "source", + "pipelinename", "url"); + + assertThat(cdEvent.getExtension("id")).isEqualTo("id"); + assertThat(cdEvent.getExtension("source")).isEqualTo(url); + assertThat(cdEvent.getExtension("pipelinename")).isEqualTo("name"); + assertThat(cdEvent.getExtension("url")).isEqualTo(url); + } + + @Test + void createTaskRunStartedTest() + throws URISyntaxException, JsonProcessingException { + URI url = new URI("cdevents.dev"); + PipelineRun pipelineRun = new PipelineRun(); + + CloudEvent cdEvent = CDEventTypes.createTaskRunStartedEvent( + "id", url, "taskname", pipelineRun, url, "data"); + + assertThat(cdEvent.getExtensionNames()) + .containsExactlyInAnyOrder("id", "source", "taskname", + "pipelinerun", "url"); + + assertThat(cdEvent.getExtension("id")).isEqualTo("id"); + assertThat(cdEvent.getExtension("source")).isEqualTo(url); + assertThat(cdEvent.getExtension("taskname")).isEqualTo("taskname"); + assertThat(cdEvent.getExtension("pipelinerun")). + isEqualTo(objectMapper.writeValueAsString(pipelineRun)); + assertThat(cdEvent.getExtension("url")).isEqualTo(url); + } + + @Test + void createTaskRunFinishedTest() + throws URISyntaxException, JsonProcessingException { + URI url = new URI("cdevents.dev"); + PipelineRun pipelineRun = new PipelineRun(); + CloudEvent cdEvent = CDEventTypes.createTaskRunFinishedEvent( + "id", url, + "taskname", pipelineRun, url, CDEventConstants.Outcome. + SUCCESS, "errors", "data"); + + assertThat(cdEvent.getExtensionNames()) + .containsExactlyInAnyOrder("id", "source", "taskname", + "pipelinerun", "url", "outcome", "errors"); + + assertThat(cdEvent.getExtension("id")).isEqualTo("id"); + assertThat(cdEvent.getExtension("source")).isEqualTo(url); + assertThat(cdEvent.getExtension("taskname")).isEqualTo("taskname"); + assertThat(cdEvent.getExtension("pipelinerun")). + isEqualTo(objectMapper.writeValueAsString(pipelineRun)); + assertThat(cdEvent.getExtension("url")).isEqualTo(url); + assertThat(cdEvent.getExtension("outcome")). + isEqualTo(CDEventConstants.Outcome.SUCCESS.getOutcome()); + assertThat(cdEvent.getExtension("errors")).isEqualTo("errors"); + } + + @Test + void createRepositoryCreatedEventTest() throws URISyntaxException { + URI url = new URI("cdevents.dev"); + CloudEvent cdEvent = CDEventTypes.createRepositoryCreatedEvent( + "id", url, "name", "owner", url, url, "data"); + assertThat(cdEvent.getExtensionNames()) + .containsExactlyInAnyOrder("id", "source", "name", + "owner", "url", "viewurl"); + + assertThat(cdEvent.getExtension("id")).isEqualTo("id"); + assertThat(cdEvent.getExtension("source")).isEqualTo(url); + assertThat(cdEvent.getExtension("name")).isEqualTo("name"); + assertThat(cdEvent.getExtension("owner")).isEqualTo("owner"); + assertThat(cdEvent.getExtension("url")).isEqualTo(url); + assertThat(cdEvent.getExtension("viewurl")).isEqualTo(url); + } + + @Test + void createRepositoryModifiedEventTest() throws URISyntaxException { + URI url = new URI("cdevents.dev"); + CloudEvent cdEvent = CDEventTypes.createRepositoryModifiedEvent( + "id", url, "name", "owner", url, url, "data"); + assertThat(cdEvent.getExtensionNames()) + .containsExactlyInAnyOrder("id", "source", "name", + "owner", "url", "viewurl"); + + assertThat(cdEvent.getExtension("id")).isEqualTo("id"); + assertThat(cdEvent.getExtension("source")).isEqualTo(url); + assertThat(cdEvent.getExtension("name")).isEqualTo("name"); + assertThat(cdEvent.getExtension("owner")).isEqualTo("owner"); + assertThat(cdEvent.getExtension("url")).isEqualTo(url); + assertThat(cdEvent.getExtension("viewurl")).isEqualTo(url); + } + + @Test + void createRepositoryDeletedEventTest() throws URISyntaxException { + URI url = new URI("cdevents.dev"); + CloudEvent cdEvent = CDEventTypes.createRepositoryDeletedEvent( + "id", url, "name", "owner", url, url, "data"); + assertThat(cdEvent.getExtensionNames()) + .containsExactlyInAnyOrder("id", "source", "name", + "owner", "url", "viewurl"); + + assertThat(cdEvent.getExtension("id")).isEqualTo("id"); + assertThat(cdEvent.getExtension("source")).isEqualTo(url); + assertThat(cdEvent.getExtension("name")).isEqualTo("name"); + assertThat(cdEvent.getExtension("owner")).isEqualTo("owner"); + assertThat(cdEvent.getExtension("url")).isEqualTo(url); + assertThat(cdEvent.getExtension("viewurl")).isEqualTo(url); + } + + @Test + void createBranchCreatedEventTest() + throws URISyntaxException, JsonProcessingException { + URI url = new URI("cdevents.dev"); + Repository repository = new Repository(); + CloudEvent cdEvent = CDEventTypes.createBranchCreatedEvent( + "id", url, repository, "data"); + assertThat(cdEvent.getExtensionNames()) + .containsExactlyInAnyOrder("id", "source", "repository"); + + assertThat(cdEvent.getExtension("id")).isEqualTo("id"); + assertThat(cdEvent.getExtension("source")).isEqualTo(url); + assertThat(cdEvent.getExtension("repository")). + isEqualTo(objectMapper.writeValueAsString(repository)); + } + + @Test + void createBranchDeletedEventTest() + throws URISyntaxException, JsonProcessingException { + URI url = new URI("cdevents.dev"); + Repository repository = new Repository(); + CloudEvent cdEvent = CDEventTypes.createBranchDeletedEvent( + "id", url, repository, "data"); + assertThat(cdEvent.getExtensionNames()) + .containsExactlyInAnyOrder("id", "source", "repository"); + + assertThat(cdEvent.getExtension("id")).isEqualTo("id"); + assertThat(cdEvent.getExtension("source")).isEqualTo(url); + assertThat(cdEvent.getExtension("repository")). + isEqualTo(objectMapper.writeValueAsString(repository)); + } + + @Test + void createChangeCreatedEventTest() + throws URISyntaxException, JsonProcessingException { + URI url = new URI("cdevents.dev"); + Repository repository = new Repository(); + CloudEvent cdEvent = CDEventTypes.createChangeCreatedEvent( + "id", url, repository, "data"); + assertThat(cdEvent.getExtensionNames()) + .containsExactlyInAnyOrder("id", "source", "repository"); + + assertThat(cdEvent.getExtension("id")).isEqualTo("id"); + assertThat(cdEvent.getExtension("source")).isEqualTo(url); + assertThat(cdEvent.getExtension("repository")). + isEqualTo(objectMapper.writeValueAsString(repository)); + } + + @Test + void createChangeReviewedEventTest() + throws URISyntaxException, JsonProcessingException { + URI url = new URI("cdevents.dev"); + Repository repository = new Repository(); + CloudEvent cdEvent = CDEventTypes.createChangeReviewedEvent( + "id", url, repository, "data"); + assertThat(cdEvent.getExtensionNames()) + .containsExactlyInAnyOrder("id", "source", "repository"); + + assertThat(cdEvent.getExtension("id")).isEqualTo("id"); + assertThat(cdEvent.getExtension("source")).isEqualTo(url); + assertThat(cdEvent.getExtension("repository")). + isEqualTo(objectMapper.writeValueAsString(repository)); + } + + @Test + void createChangeMergedEventTest() + throws URISyntaxException, JsonProcessingException { + URI url = new URI("cdevents.dev"); + Repository repository = new Repository(); + CloudEvent cdEvent = CDEventTypes.createChangeMergedEvent( + "id", url, repository, "data"); + assertThat(cdEvent.getExtensionNames()) + .containsExactlyInAnyOrder("id", "source", "repository"); + + assertThat(cdEvent.getExtension("id")).isEqualTo("id"); + assertThat(cdEvent.getExtension("source")).isEqualTo(url); + assertThat(cdEvent.getExtension("repository")). + isEqualTo(objectMapper.writeValueAsString(repository)); + } + + @Test + void createChangeAbandonedEventTest() + throws URISyntaxException, JsonProcessingException { + URI url = new URI("cdevents.dev"); + Repository repository = new Repository(); + CloudEvent cdEvent = CDEventTypes.createChangeAbandonedEvent( + "id", url, repository, "data"); + assertThat(cdEvent.getExtensionNames()) + .containsExactlyInAnyOrder("id", "source", "repository"); + + assertThat(cdEvent.getExtension("id")).isEqualTo("id"); + assertThat(cdEvent.getExtension("source")).isEqualTo(url); + assertThat(cdEvent.getExtension("repository")). + isEqualTo(objectMapper.writeValueAsString(repository)); + } + + @Test + void createChangeUpdatedEventTest() + throws URISyntaxException, JsonProcessingException { + URI url = new URI("cdevents.dev"); + Repository repository = new Repository(); + CloudEvent cdEvent = CDEventTypes.createChangeUpdatedEvent( + "id", url, repository, "data"); + assertThat(cdEvent.getExtensionNames()) + .containsExactlyInAnyOrder("id", "source", "repository"); + + assertThat(cdEvent.getExtension("id")).isEqualTo("id"); + assertThat(cdEvent.getExtension("source")).isEqualTo(url); + assertThat(cdEvent.getExtension("repository")). + isEqualTo(objectMapper.writeValueAsString(repository)); + } + + @Test + void createBuildQueuedEventTest() throws URISyntaxException { + URI url = new URI("cdevents.dev"); + CloudEvent cdEvent = CDEventTypes.createBuildQueuedEvent( + "id", url, "data"); + assertThat(cdEvent.getExtensionNames()) + .containsExactlyInAnyOrder("id", "source"); + + assertThat(cdEvent.getExtension("id")).isEqualTo("id"); + assertThat(cdEvent.getExtension("source")).isEqualTo(url); + } + + @Test + void createBuildStartedEventTest() throws URISyntaxException { + URI url = new URI("cdevents.dev"); + CloudEvent cdEvent = CDEventTypes.createBuildStartedEvent( + "id", url, "data"); + assertThat(cdEvent.getExtensionNames()) + .containsExactlyInAnyOrder("id", "source"); + + assertThat(cdEvent.getExtension("id")).isEqualTo("id"); + assertThat(cdEvent.getExtension("source")).isEqualTo(url); + } + + @Test + void createBuildFinishedEventTest() throws URISyntaxException { + URI url = new URI("cdevents.dev"); + CloudEvent cdEvent = CDEventTypes.createBuildFinishedEvent( + "id", url, url, "data"); + assertThat(cdEvent.getExtensionNames()) + .containsExactlyInAnyOrder("id", "source", "artifactid"); + + assertThat(cdEvent.getExtension("id")).isEqualTo("id"); + assertThat(cdEvent.getExtension("source")).isEqualTo(url); + assertThat(cdEvent.getExtension("artifactid")).isEqualTo(url); + } + + @Test + void createTestCaseQueuedEventTest() throws URISyntaxException { + URI url = new URI("cdevents.dev"); + CloudEvent cdEvent = CDEventTypes.createTestCaseQueuedEvent( + "id", url, "data"); + assertThat(cdEvent.getExtensionNames()) + .containsExactlyInAnyOrder("id", "source"); + + assertThat(cdEvent.getExtension("id")).isEqualTo("id"); + assertThat(cdEvent.getExtension("source")).isEqualTo(url); + } + + @Test + void createTestCaseStartedEventTest() throws URISyntaxException { + URI url = new URI("cdevents.dev"); + CloudEvent cdEvent = CDEventTypes.createTestCaseStartedEvent( + "id", url, "data"); + assertThat(cdEvent.getExtensionNames()) + .containsExactlyInAnyOrder("id", "source"); + + assertThat(cdEvent.getExtension("id")).isEqualTo("id"); + assertThat(cdEvent.getExtension("source")).isEqualTo(url); + } + + @Test + void createTestCaseFinishedEventTest() throws URISyntaxException { + URI url = new URI("cdevents.dev"); + CloudEvent cdEvent = CDEventTypes.createTestCaseFinishedEvent( + "id", url, "data"); + assertThat(cdEvent.getExtensionNames()) + .containsExactlyInAnyOrder("id", "source"); + + assertThat(cdEvent.getExtension("id")).isEqualTo("id"); + assertThat(cdEvent.getExtension("source")).isEqualTo(url); + } + + @Test + void createTestSuiteStartedEventTest() throws URISyntaxException { + URI url = new URI("cdevents.dev"); + CloudEvent cdEvent = CDEventTypes.createTestSuiteStartedEvent( + "id", url, "data"); + assertThat(cdEvent.getExtensionNames()) + .containsExactlyInAnyOrder("id", "source"); + + assertThat(cdEvent.getExtension("id")).isEqualTo("id"); + assertThat(cdEvent.getExtension("source")).isEqualTo(url); + } + + @Test + void createTestSuiteFinishedEventTest() throws URISyntaxException { + URI url = new URI("cdevents.dev"); + CloudEvent cdEvent = CDEventTypes.createTestSuiteFinishedEvent( + "id", url, "data"); + assertThat(cdEvent.getExtensionNames()) + .containsExactlyInAnyOrder("id", "source"); + + assertThat(cdEvent.getExtension("id")).isEqualTo("id"); + assertThat(cdEvent.getExtension("source")).isEqualTo(url); + } + + @Test + void createArtifactPackagedEventTest() throws URISyntaxException { + URI url = new URI("cdevents.dev"); + CloudEvent cdEvent = CDEventTypes.createArtifactPackagedEvent( + "id", url, "data"); + assertThat(cdEvent.getExtensionNames()) + .containsExactlyInAnyOrder("id", "source"); + + assertThat(cdEvent.getExtension("id")).isEqualTo("id"); + assertThat(cdEvent.getExtension("source")).isEqualTo(url); + } + + @Test + void createArtifactPublishedEventTest() throws URISyntaxException { + URI url = new URI("cdevents.dev"); + CloudEvent cdEvent = CDEventTypes.createArtifactPublishedEvent( + "id", url, "data"); + assertThat(cdEvent.getExtensionNames()) + .containsExactlyInAnyOrder("id", "source"); + + assertThat(cdEvent.getExtension("id")).isEqualTo("id"); + assertThat(cdEvent.getExtension("source")).isEqualTo(url); + } + + @Test + void createEnvironmentCreatedEventTest() throws URISyntaxException { + URI url = new URI("cdevents.dev"); + CloudEvent cdEvent = CDEventTypes.createEnvironmentCreatedEvent( + "id", url, "name", "url", "data"); + assertThat(cdEvent.getExtensionNames()) + .containsExactlyInAnyOrder("id", "source", "name", "url"); + + assertThat(cdEvent.getExtension("id")).isEqualTo("id"); + assertThat(cdEvent.getExtension("source")).isEqualTo(url); + assertThat(cdEvent.getExtension("name")).isEqualTo("name"); + assertThat(cdEvent.getExtension("url")).isEqualTo("url"); + } + + @Test + void createEnvironmentModifiedEventTest() throws URISyntaxException { + URI url = new URI("cdevents.dev"); + CloudEvent cdEvent = CDEventTypes.createEnvironmentModifiedEvent( + "id", url, "name", "url", "data"); + assertThat(cdEvent.getExtensionNames()) + .containsExactlyInAnyOrder("id", "source", "name", "url"); + + assertThat(cdEvent.getExtension("id")).isEqualTo("id"); + assertThat(cdEvent.getExtension("source")).isEqualTo(url); + assertThat(cdEvent.getExtension("name")).isEqualTo("name"); + assertThat(cdEvent.getExtension("url")).isEqualTo("url"); + } + + @Test + void createEnvironmentDeletedEventTest() throws URISyntaxException { + URI url = new URI("cdevents.dev"); + CloudEvent cdEvent = CDEventTypes.createEnvironmentDeletedEvent( + "id", url, "name", "data"); + assertThat(cdEvent.getExtensionNames()) + .containsExactlyInAnyOrder("id", "source", "name"); + + assertThat(cdEvent.getExtension("id")).isEqualTo("id"); + assertThat(cdEvent.getExtension("source")).isEqualTo(url); + assertThat(cdEvent.getExtension("name")).isEqualTo("name"); + } + + @Test + void createServiceDeployedTest() + throws URISyntaxException, JsonProcessingException, + MalformedURLException { + URI url = new URI("cdevents.dev"); + URL purl = new URL("https://www.cdevents.dev"); + Environment environment = new Environment("id", url, "name", "url"); + CloudEvent cdEvent = CDEventTypes.createServiceDeployedEvent( + "id", environment, purl, "data"); + assertThat(cdEvent.getExtensionNames()) + .containsExactlyInAnyOrder("id", "environment", "artifactid"); + + + assertThat(cdEvent.getExtension("id")).isEqualTo("id"); + assertThat(cdEvent.getExtension("environment")). + isEqualTo(objectMapper.writeValueAsString(environment)); + assertThat(cdEvent.getExtension("artifactid")). + isEqualTo(purl.toString()); + } + + @Test + void createServiceUpgradedTest() + throws URISyntaxException, JsonProcessingException, + MalformedURLException { + URI url = new URI("cdevents.dev"); + URL purl = new URL("https://www.cdevents.dev"); + Environment environment = new Environment("id", url, "name", "url"); + CloudEvent cdEvent = CDEventTypes.createServiceUpgradedEvent( + "id", environment, purl, "data"); + assertThat(cdEvent.getExtensionNames()) + .containsExactlyInAnyOrder("id", "environment", "artifactid"); + + assertThat(cdEvent.getExtension("id")).isEqualTo("id"); + assertThat(cdEvent.getExtension("environment")). + isEqualTo(objectMapper.writeValueAsString(environment)); + assertThat(cdEvent.getExtension("artifactid")). + isEqualTo(purl.toString()); + } + + @Test + void createServiceRolledBackTest() + throws URISyntaxException, JsonProcessingException, + MalformedURLException { + URI url = new URI("cdevents.dev"); + URL purl = new URL("https://www.cdevents.dev"); + Environment environment = new Environment("id", url, "name", "url"); + CloudEvent cdEvent = CDEventTypes.createServiceRolledBackEvent( + "id", environment, purl, "data"); + assertThat(cdEvent.getExtensionNames()) + .containsExactlyInAnyOrder("id", "environment", "artifactid"); + + + assertThat(cdEvent.getExtension("id")).isEqualTo("id"); + assertThat(cdEvent.getExtension("environment")). + isEqualTo(objectMapper.writeValueAsString(environment)); + assertThat(cdEvent.getExtension("artifactid")). + isEqualTo(purl.toString()); + } + + @Test + void createServiceRemovedTest() + throws URISyntaxException, JsonProcessingException { + URI url = new URI("cdevents.dev"); + Environment environment = new Environment("id", url, "name", "url"); + + CloudEvent cdEvent = CDEventTypes.createServiceRemovedEvent( + "id", environment, "data"); + + assertThat(cdEvent.getExtensionNames()) + .containsExactlyInAnyOrder("id", "environment"); + assertThat(cdEvent.getExtension("id")).isEqualTo("id"); + assertThat(cdEvent.getExtension("environment")). + isEqualTo(objectMapper.writeValueAsString(environment)); + } + + @Test + void createServicePublishedTest() + throws URISyntaxException, JsonProcessingException { + URI url = new URI("cdevents.dev"); + Environment environment = new Environment("id", url, "name", "url"); + + CloudEvent cdEvent = CDEventTypes.createServicePublishedEvent( + "id", environment, "data"); + + assertThat(cdEvent.getExtensionNames()) + .containsExactlyInAnyOrder("id", "environment"); + assertThat(cdEvent.getExtension("id")).isEqualTo("id"); + assertThat(cdEvent.getExtension("environment")). + isEqualTo(objectMapper.writeValueAsString(environment)); + } +} diff --git a/src/test/java/dev/cdevents/CDEventsTest.java b/src/test/java/dev/cdevents/CDEventsTest.java new file mode 100644 index 0000000..a9e53e5 --- /dev/null +++ b/src/test/java/dev/cdevents/CDEventsTest.java @@ -0,0 +1,55 @@ +package dev.cdevents; + +import dev.cdevents.constants.CDEventConstants; +import dev.cdevents.events.PipelineRunFinishedCDEvent; +import dev.cdevents.exception.CDEventsException; +import io.cloudevents.CloudEvent; +import org.junit.jupiter.api.Test; + +import java.net.URI; +import java.nio.charset.StandardCharsets; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; + +public class CDEventsTest { + + @Test + void createPipelineRunFinishedEventAsCloudEvent() { + + PipelineRunFinishedCDEvent cdEvent = new PipelineRunFinishedCDEvent(); + cdEvent.setSource(URI.create("http://dev.cdevents")); + + cdEvent.setSubjectId("/dev/pipeline/run/subject"); + cdEvent.setSubjectSource(URI.create("/dev/pipeline/run/subject")); + cdEvent.setSubjectPipelineName("Name-pipeline"); + cdEvent.setSubjectUrl(URI.create("http://dev/pipeline/url")); + cdEvent.setSubjectErrors("errors to place"); + cdEvent.setSubjectOutcome(CDEventConstants.Outcome.SUCCESS); + + String cdEventJson = CDEvents.cdEventAsJson(cdEvent); + + CloudEvent ceEvent = CDEvents.cdEventAsCloudEvent(cdEvent); + + String ceDataJson = new String(ceEvent.getData().toBytes(), StandardCharsets.UTF_8); + + assertThat(ceEvent.getType()).isEqualTo(cdEvent.getContext().getType()); + assertThat(ceEvent.getSource()).isEqualTo(cdEvent.getContext().getSource()); + assertThat(ceDataJson).isEqualTo(cdEventJson); + + } + + @Test + void testInvalidPipelineRunFinishedEventWithNoSubject() { + PipelineRunFinishedCDEvent cdEvent = new PipelineRunFinishedCDEvent(); + cdEvent.setSource(URI.create("http://dev.cdevents")); + + Exception exception = assertThrows(CDEventsException.class, () -> { + CDEvents.cdEventAsCloudEvent(cdEvent); + }); + String expectedError = "CDEvent validation failed against schema URL - " + cdEvent.schemaURL(); + + assertThat(exception.getMessage()).isEqualTo(expectedError); + } +}