The format is based on [Keep a Changelog](http://keepachangelog.com/)
and this project adheres to [Semantic Versioning](http://semver.org/).
-
+## [1.12.2] - 2023/01/20
+ - [DCAEGEN2-3334] - Update tests execution to be platform agnostic
+
## [1.12.1] - 2022/12/05
- [DCAEGEN2-3257] - Align DCAE components with the new logging GR.
============LICENSE_START=======================================================
dcaegen2-collectors-ves
================================================================================
- Copyright (c) 2017-2019,2021-2022 AT&T Intellectual Property. All rights reserved.
+ Copyright (c) 2017-2019,2021-2023 AT&T Intellectual Property. All rights reserved.
Copyright (c) 2020-2022 Nokia. All rights reserved.
================================================================================
Licensed under the Apache License, Version 2.0 (the "License"); you may not
<groupId>org.onap.oparent</groupId>
<artifactId>oparent</artifactId>
<version>3.2.0</version>
- <relativePath/>
</parent>
<groupId>org.onap.dcaegen2.collectors.ves</groupId>
<artifactId>VESCollector</artifactId>
- <version>1.12.1-SNAPSHOT</version>
+ <version>1.12.2-SNAPSHOT</version>
<name>dcaegen2-collectors-ves</name>
<description>VESCollector</description>
<properties>
* ============LICENSE_START=======================================================
* VES Collector
* ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017,2023 AT&T Intellectual Property. All rights reserved.
* Copyright (C) 2018 - 2021 Nokia. All rights reserved.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
loadPropertiesFromFile();
parsedArgs.filterKeys(k -> !"c".equals(k)).forEach(this::addOrUpdate);
String collectorSchemaFile = properties.getString("collector.schema.file",
- format("{\"%s\":\"etc/CommonEventFormat_28.4.1.json\"}", FALLBACK_VES_VERSION));
+ format("{\"%s\":\"./etc/CommonEventFormat_28.4.1.json\"}", FALLBACK_VES_VERSION));
+
loadedJsonSchemas = new JSonSchemasSupplier().loadJsonSchemas(collectorSchemaFile);
eventTransformations = loadEventTransformations();
responseCompatibility = getResponseCompatibilityFlag();
* org.onap.dcaegen2.collectors.ves
* ================================================================================
* Copyright (C) 2018 - 2021 Nokia. All rights reserved.
- * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2018,2023 AT&T Intellectual Property. All rights reserved.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import java.io.File;
import java.io.IOException;
+import java.net.URI;
+import java.net.URISyntaxException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import static org.onap.dcae.TestingUtilities.createTemporaryFile;
public class ApplicationSettingsTest {
+
+ /**
+ * The Unix separator character.
+ */
+ private static final char UNIX_SEPARATOR = '/';
+
+ /**
+ * The Windows separator character.
+ */
+ private static final char WINDOWS_SEPARATOR = '\\';
private static final String SAMPLE_JSON_SCHEMA = "{"
+ " \"type\": \"object\","
+ " \"state\": { \"type\": \"string\" }"
+ " }"
+ "}";
+
+ /**
+ * Converts all separators to the Unix separator of forward slash.
+ *
+ * @param path the path to be changed, null ignored
+ * @return the updated path
+ */
+ private static String separatorsToUnix(final String path) {
+ if (path == null || path.indexOf(WINDOWS_SEPARATOR) == -1) {
+ return path;
+ }
+ return path.replace(WINDOWS_SEPARATOR, UNIX_SEPARATOR);
+ }
@Test
public void shouldMakeApplicationSettingsOutOfCLIArguments() {
// when
int applicationPort = fromTemporaryConfiguration("collector.service.port=8090")
.httpPort();
-
// then
assertEquals(8090, applicationPort);
}
}
@Test
- public void shouldReportValidateJSONSchemaErrorWhenJsonContainsIntegerValueNotString() throws IOException {
+ public void shouldReportValidateJSONSchemaErrorWhenJsonContainsIntegerValueNotString() throws IOException, URISyntaxException {
// when
Path temporarySchemaFile = createTemporaryFile(SAMPLE_JSON_SCHEMA);
-
+ String normalizedSchemaFile = separatorsToUnix(temporarySchemaFile.toString());
// when
JsonSchema schema = fromTemporaryConfiguration(
- String.format("collector.schema.file={\"v1\": \"%s\"}", temporarySchemaFile))
+ String.format("collector.schema.file={\"v1\": \"%s\"}", normalizedSchemaFile))
.jsonSchema("v1");
// then
public void shouldDoNotReportAnyValidateJSONSchemaError() throws IOException {
// when
Path temporarySchemaFile = createTemporaryFile(SAMPLE_JSON_SCHEMA);
-
+ String normalizedSchemaFile = separatorsToUnix(temporarySchemaFile.toString());
// when
JsonSchema schema = fromTemporaryConfiguration(
- String.format("collector.schema.file={\"v1\": \"%s\"}", temporarySchemaFile))
+ String.format("collector.schema.file={\"v1\": \"%s\"}", normalizedSchemaFile))
.jsonSchema("v1");
// then
.getExternalSchemaSchemasLocation();
//then
- assertEquals(sanitizePath("./etc/externalRepo"), externalSchemaSchemasLocation);
+ assertEquals("./etc/externalRepo", externalSchemaSchemasLocation);
}
@Test
.getExternalSchemaMappingFileLocation();
//then
- assertEquals(sanitizePath("./etc/externalRepo/schema-map.json"), externalSchemaMappingFileLocation);
+ assertEquals("./etc/externalRepo/schema-map.json", externalSchemaMappingFileLocation);
}
@Test
.getExternalSchemaSchemaRefPath();
//then
- assertEquals(sanitizePath("/event/stndDefinedFields/schemaReference"), externalSchemaSchemaRefPath);
+ assertEquals("/event/stndDefinedFields/schemaReference", externalSchemaSchemaRefPath);
}
@Test
.getExternalSchemaStndDefinedDataPath();
//then
- assertEquals(sanitizePath("/event/stndDefinedFields/data"), externalSchemaStndDefinedDataPath);
+ assertEquals("/event/stndDefinedFields/data", externalSchemaStndDefinedDataPath);
}
@Test
* ============LICENSE_START=======================================================
* VES Collector
* ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017,2023 AT&T Intellectual Property. All rights reserved.
* Copyright (C) 2018-2021 Nokia. All rights reserved.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
import org.onap.dcae.restapi.EventValidatorException;
import java.io.IOException;
+import java.net.URISyntaxException;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
@Test
- public void shouldNotSendEventWhenStreamIdIsNotDefined() throws IOException {
+ public void shouldNotSendEventWhenStreamIdIsNotDefined() throws IOException, URISyntaxException {
// given
EventSender eventSender = givenConfiguredEventSender(HashMap.empty());
List<VesEvent> eventToSend = createEventToSend("/eventsAfterTransformation/ves7_valid_event.json");
}
@Test
- public void shouldSendStdDefinedEventAtStreamAssignedToEventDomain() throws IOException {
+ public void shouldSendStdDefinedEventAtStreamAssignedToEventDomain() throws IOException, URISyntaxException {
// given
EventSender eventSender = givenConfiguredEventSender(
HashMap.of("3GPP-FaultSupervision", "ves-3gpp-fault-supervision")
}
@Test
- public void shouldNotSendStndEventWhenStreamIsNotDefined() throws IOException {
+ public void shouldNotSendStndEventWhenStreamIsNotDefined() throws IOException, URISyntaxException {
// given
EventSender eventSender = givenConfiguredEventSender(HashMap.empty());
List<VesEvent> eventToSend = createEventToSend("/eventsAfterTransformation/ves_stdnDefined_valid.json");
}
@Test
- public void shouldReportThatNoStndDefinedNamespaceParameterIsDefinedInEvent() throws IOException {
+ public void shouldReportThatNoStndDefinedNamespaceParameterIsDefinedInEvent() throws IOException, URISyntaxException {
// given
EventSender eventSender = givenConfiguredEventSender(HashMap.empty());
List<VesEvent> eventToSend = createEventToSend(
verifyThatEventWasNotSendAtStream();
}
- private List<VesEvent> createEventToSend(String path) throws IOException {
+ private List<VesEvent> createEventToSend(String path) throws IOException, URISyntaxException {
String event = JsonDataLoader.loadContent(path);
return givenEventToSend(event);
}
* ============LICENSE_START=======================================================
* VES Collector
* ================================================================================
- * Copyright (C) 2020 Nokia. All rights reserved.s
+ * Copyright (C) 2020 Nokia. All rights reserved.
+ * Copyright (C) 2023 AT&T Intellectual Property. All rights reserved.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
package org.onap.dcae.common;
import java.io.IOException;
+import java.net.URI;
+import java.net.URISyntaxException;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Path;
/**
* This class is static and does not have public constructor.
- * It is responsible for data loading fot test cases.
+ * It is responsible for data loading for test cases.
*
* @author Zebek
*/
* @param path to file that will be loaded
* @return contend of the file located under path, given in parameters, as string
* @throws IOException when file under given path was not found
+ * @throws URISyntaxException
*/
- public static String loadContent(String path) throws IOException {
- URL resource = JsonDataLoader.class.getResource(path);
- Path resourcePath = Paths.get(resource.getPath());
+ public static String loadContent(String path) throws IOException, URISyntaxException {
+ URI resource = JsonDataLoader.class.getResource(path).toURI();
+ Path resourcePath = Paths.get(resource);
return new String(Files.readAllBytes(resourcePath));
}
}
* ============LICENSE_START=======================================================
* VES Collector
* ================================================================================
- * Copyright (C) 2020 Nokia. All rights reserved.s
+ * Copyright (C) 2020 Nokia. All rights reserved.
+ * Copyright (C) 2023 AT&T Intellectual Property. All rights reserved.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import org.onap.dcae.common.JsonDataLoader;
import java.io.IOException;
+import java.net.URISyntaxException;
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
private static final String STND_DEFINED_STREAM_ID = "3GPP-FaultSupervision";
@Test
- public void shouldReturnsOriginalDomainForNonStdEvent() throws IOException {
+ public void shouldReturnsOriginalDomainForNonStdEvent() throws IOException, URISyntaxException {
// given
final VesEvent vesEvent = createVesEvent("/eventsAfterTransformation/ves7_valid_event.json");
}
@Test
- public void shouldReturnsDomainStoredInStndDefinedNamespaceParameterForNonStdEvent() throws IOException {
+ public void shouldReturnsDomainStoredInStndDefinedNamespaceParameterForNonStdEvent() throws IOException, URISyntaxException {
// given
final VesEvent vesEvent = createVesEvent("/eventsAfterTransformation/ves_stdnDefined_valid.json");
@Test
- public void shouldReportThatStndDefinedNamespaceParameterIsNotDefinedInEvent() throws IOException {
+ public void shouldReportThatStndDefinedNamespaceParameterIsNotDefinedInEvent() throws IOException, URISyntaxException {
// given
final VesEvent vesEvent = createVesEvent(
"/eventsAfterTransformation/ves_stdnDefined_missing_namespace_invalid.json"
}
@Test
- public void shouldReportThatStndDefinedNamespaceParameterHasEmptyValue() throws IOException {
+ public void shouldReportThatStndDefinedNamespaceParameterHasEmptyValue() throws IOException, URISyntaxException {
// given
final VesEvent vesEvent = createVesEvent(
"/eventsAfterTransformation/ves_stdnDefined_empty_namespace_invalid.json"
});
}
- private VesEvent createVesEvent(String path) throws IOException {
+ private VesEvent createVesEvent(String path) throws IOException, URISyntaxException {
String event = JsonDataLoader.loadContent(path);
return new VesEvent(new JSONObject(event));
}
* VES Collector
* =========================================================
* Copyright (C) 2019-2021 Nokia. All rights reserved.
+ * Copyright (C) 2023 AT&T Intellectual Property. All rights reserved.
* =========================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
package org.onap.dcae.common.publishing;
+import org.onap.dcae.FileReader;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.testcontainers.containers.DockerComposeContainer;
import java.io.File;
+import java.net.URI;
+import java.net.URISyntaxException;
import java.net.URL;
final class DMaapContainer {
private static final String DOCKER_COMPOSE_FILE_PATH = getDockerComposeFilePath(MR_COMPOSE_RESOURCE_NAME);
static final int DMAAP_SERVICE_EXPOSED_PORT = 3904;
static final String DMAAP_SERVICE_NAME = "onap-dmaap";
-
+ private static final Logger log = LoggerFactory.getLogger(DMaapContainer.class);
+
private DMaapContainer() {}
- public static DockerComposeContainer createContainerInstance(){
+ public static DockerComposeContainer createContainerInstance() {
+
+ URI dockercomposeuri = null;
+ try {
+ dockercomposeuri = new URI(DOCKER_COMPOSE_FILE_PATH);
+ } catch (URISyntaxException e) {
+ log.error("Error while opening docker compose file.", e);
+ }
return new DockerComposeContainer(
- new File(DOCKER_COMPOSE_FILE_PATH))
+ new File(dockercomposeuri.getPath()))
.withExposedService(DMAAP_SERVICE_NAME, DMAAP_SERVICE_EXPOSED_PORT)
.withLocalCompose(true);
}
* VES Collector
* ================================================================================
* Copyright (C) 2021 Nokia. All rights reserved.
+ * Copyright (C) 2023 AT&T Intellectual Property. All rights reserved.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import io.vavr.collection.List;
import io.vavr.control.Option;
import org.junit.jupiter.api.Test;
+import org.junit.Assume;
+import org.junit.Before;
+
import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.model.ImmutableMessageRouterPublishResponse;
import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.model.MessageRouterPublishResponse;
import org.testcontainers.containers.DockerComposeContainer;
import static org.onap.dcae.common.publishing.DmaapRequestConfiguration.getAsJsonElements;
-@Testcontainers
-public class PublisherTest {
+@Testcontainers(disabledWithoutDocker = true)
+public class PublisherTest {
@Container
private final DockerComposeContainer CONTAINER = createContainerInstance();
+
+ @Before
+ public void linuxOnly() {
+ Assume.assumeFalse
+ (System.getProperty("os.name").toLowerCase().startsWith("win"));
+ }
@Test
- void publishEvent_shouldSuccessfullyPublishSingleMessage() {
+ public void publishEvent_shouldSuccessfullyPublishSingleMessage() {
//given
final Publisher publisher = new Publisher();
final String simpleEvent = "{\"message\":\"message1\"}";
* org.onap.dcaegen2.collectors.ves
* ================================================================================
* Copyright (C) 2020 Nokia. All rights reserved.
+ * Copyright (C) 2023 AT&T Intellectual Property. All rights reserved.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import org.jetbrains.annotations.NotNull;
import org.json.JSONObject;
+import org.junit.Assume;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.Mockito.when;
+import java.nio.file.Paths;
+
@ExtendWith(MockitoExtension.class)
public class StndDefinedDataValidatorTest {
@Test
public void shouldReturnTrueWhenEventIsValid() throws EventValidatorException {
+ Assume.assumeFalse(System.getProperty("os.name").toLowerCase().startsWith("win"));
//given
VesEvent event = getVesEvent("src/test/resources/ves_stdnDefined_valid.json");
@Test
void shouldReturnErrorWhenMissingLocalSchemaReferenceInMappingFile() {
+ Assume.assumeFalse(System.getProperty("os.name").toLowerCase().startsWith("win"));
//given
VesEvent event = getVesEvent("src/test/resources/ves_stdnDefined_missing_local_schema_reference.json");
try {
@Test
void shouldReturnErrorWhenIncorrectInternalFileReference() {
+ Assume.assumeFalse(System.getProperty("os.name").toLowerCase().startsWith("win"));
//given
VesEvent event = getVesEvent("src/test/resources/ves_stdnDefined_wrong_internal_file_reference.json");
try {
void shouldNotReturnErrorWhenValidatingInvalidEventAndStndDefinedReferenceMissing() {
//given
VesEvent event = getVesEvent("src/test/resources/ves_stdnDefined_without_schema_reference.json");
-
+
//when
//then
assertDoesNotThrow(() -> stndDefinedDataValidator.validate(event));
@NotNull
private VesEvent getVesEvent(String filename) {
- JSONObject jsonObjectEvent = getJsonObjectEvent(filename);
- return new VesEvent(jsonObjectEvent);
+ JSONObject jsonObjectEvent = getJsonObjectEvent(filename);
+ return new VesEvent(jsonObjectEvent);
}
private JSONObject getJsonObjectEvent(String fileName) {
}
private void mockStndDefinedValidationProps() {
- when(settings.getExternalSchemaMappingFileLocation()).thenReturn(MAPPING_FILE_LOCATION);
+ when(settings.getExternalSchemaMappingFileLocation()).thenReturn(Paths.get(MAPPING_FILE_LOCATION).toString());
when(settings.getExternalSchemaSchemaRefPath()).thenReturn(SCHEMA_REF_PATH);
- when(settings.getExternalSchemaSchemasLocation()).thenReturn(SCHEMA_FILES_LOCATION);
+ when(settings.getExternalSchemaSchemasLocation()).thenReturn(Paths.get(SCHEMA_FILES_LOCATION).toString());
when(settings.getExternalSchemaStndDefinedDataPath()).thenReturn(STND_DEFINED_DATA_PATH);
}
-}
\ No newline at end of file
+}
* VES Collector
* ================================================================================
* Copyright (C) 2021 Nokia. All rights reserved.
+ * Copyright (C) 2023 AT&T Intellectual Property. All rights reserved.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import io.vavr.collection.HashMap;
import io.vavr.collection.Map;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
import org.junit.jupiter.api.Test;
-import static org.junit.jupiter.api.Assertions.*;
class MultipleStreamReducerTest {
@Test
void shouldReturnInfoAboutDomainToStreamsConfig() {
+ String newLine = System.getProperty("line.separator");
//given
final Map<String, String> domainToStreamsAfterReduce = multipleStreamReducer.reduce(domainToStreams);
String expectedRedundantStreamsInfo =
- "Domain: fault has active stream: ves-fault\n" +
- "Domain: log has active stream: ves-syslog\n" +
- "Domain: test has active stream: stream6\n";
+ "Domain: fault has active stream: ves-fault" + newLine +
+ "Domain: log has active stream: ves-syslog" + newLine +
+ "Domain: test has active stream: stream6" + newLine;
//when
final String domainToStreamsConfigInfo = multipleStreamReducer.getDomainToStreamsInfo(domainToStreamsAfterReduce);
* VES Collector
* ================================================================================
* Copyright (C) 2020-2021 Nokia. All rights reserved.
+ * Copyright (C) 2023 AT&T Intellectual Property. All rights reserved.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import java.io.FileReader;
import java.io.IOException;
import java.lang.reflect.Type;
+import java.net.URI;
+import java.net.URISyntaxException;
import java.util.List;
import java.util.Map;
import java.util.stream.Stream;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
+import java.nio.file.Paths;
@ExtendWith(MockitoExtension.class)
public class VesRestControllerTest {
}
@Test
- void shouldTransformEventAccordingToEventTransformFile() throws IOException {
+ void shouldTransformEventAccordingToEventTransformFile() throws IOException, URISyntaxException{
//given
configureEventTransformations();
configureHeadersForEventListener();
@Test
- void shouldSendBatchEvent() throws IOException {
+ void shouldSendBatchEvent() throws IOException, URISyntaxException {
//given
configureEventTransformations();
configureHeadersForEventListener();
}
@Test
- void shouldSendStndDomainEventIntoDomainStream() throws IOException {
+ void shouldSendStndDomainEventIntoDomainStream() throws IOException, URISyntaxException{
//given
configureEventTransformations();
configureHeadersForEventListener();
@Test
- void shouldReportThatStndDomainEventHasntGotNamespaceParameter() throws IOException {
+ void shouldReportThatStndDomainEventHasntGotNamespaceParameter() throws IOException, URISyntaxException {
//given
configureEventTransformations();
configureHeadersForEventListener();
}
@Test
- void shouldReportThatStndDomainEventNamespaceParameterIsEmpty() throws IOException {
+ void shouldReportThatStndDomainEventNamespaceParameterIsEmpty() throws IOException, URISyntaxException {
//given
configureEventTransformations();
configureHeadersForEventListener();
}
@Test
- void shouldNotSendStndDomainEventWhenTopicCannotBeFoundInConfiguration() throws IOException {
+ void shouldNotSendStndDomainEventWhenTopicCannotBeFoundInConfiguration() throws IOException, URISyntaxException {
//given
configureEventTransformations();
configureHeadersForEventListener();
}
@Test
- void shouldExecuteStndDefinedValidationWhenFlagIsOnTrue() throws IOException {
+ void shouldExecuteStndDefinedValidationWhenFlagIsOnTrue() throws IOException, URISyntaxException{
//given
configureEventTransformations();
configureHeadersForEventListener();
}
@Test
- void shouldNotExecuteStndDefinedValidationWhenFlagIsOnFalse() throws IOException {
+ void shouldNotExecuteStndDefinedValidationWhenFlagIsOnFalse() throws IOException, URISyntaxException {
//given
configureEventTransformations();
configureHeadersForEventListener();
}
@Test
- void shouldReturn413WhenPayloadIsTooLarge() throws IOException {
+ void shouldReturn413WhenPayloadIsTooLarge() throws IOException, URISyntaxException {
//given
configureEventTransformations();
configureHeadersForEventListener();
@ParameterizedTest
@MethodSource("errorsCodeAndResponseBody")
- void shouldMapErrorTo503AndReturnOriginalBody(ApiException apiException,String bodyVariable,String bodyVariable2) throws IOException {
+ void shouldMapErrorTo503AndReturnOriginalBody(ApiException apiException,String bodyVariable,String bodyVariable2) throws IOException, URISyntaxException {
//given
configureEventTransformations();
configureHeadersForEventListener();
return map.get("requestError").get("ServiceException");
}
- private void configureEventTransformations() throws IOException {
+ private void configureEventTransformations() throws IOException, URISyntaxException {
final List<EventTransformation> eventTransformations = loadEventTransformations();
when(applicationSettings.isVersionSupported(VERSION_V7)).thenReturn(true);
when(applicationSettings.eventTransformingEnabled()).thenReturn(true);
return request;
}
- private List<EventTransformation> loadEventTransformations() throws IOException {
+ private List<EventTransformation> loadEventTransformations() throws IOException, URISyntaxException {
Type EVENT_TRANSFORM_LIST_TYPE = new TypeToken<List<EventTransformation>>() {
}.getType();
- try (FileReader fr = new FileReader(this.getClass().getResource(EVENT_TRANSFORM_FILE_PATH).getPath())) {
- return new Gson().fromJson(fr, EVENT_TRANSFORM_LIST_TYPE);
- }
+ URI resource = this.getClass().getResource(EVENT_TRANSFORM_FILE_PATH).toURI();
+ try (FileReader fr = new FileReader(resource.getPath())) {
+ return new Gson().fromJson(fr, EVENT_TRANSFORM_LIST_TYPE);
+ }
}
}
major=1
minor=12
-patch=1
+patch=2
base_version=${major}.${minor}.${patch}
release_version=${base_version}
snapshot_version=${base_version}-SNAPSHOT