Skip to content

Commit 93d47a4

Browse files
sarvesh-devopsxdurvak
authored andcommitted
[DRUACI7594]-meta.source.serializer information needs to be filled in by remrem semantics (#57)
1 parent 9305db5 commit 93d47a4

File tree

8 files changed

+161
-7
lines changed

8 files changed

+161
-7
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
## 0.3.1
2+
- Implemented functionality to override input semantics gav with MANIFEST.MF file gav
3+
14
## 0.3.0
25
- Implemented routing key for eiffel messages in REMReM semantics.
36

build.gradle

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,11 +48,13 @@ allprojects {
4848

4949
jar {
5050
baseName = 'eiffel-remrem-semantics'
51-
version = '0.3.0'
51+
version = '0.3.1'
5252
manifest {
5353
attributes('remremVersionKey': 'semanticsVersion')
5454
attributes('semanticsVersion': version)
5555
attributes('isEndpointVersion': 'true')
56+
attributes('groupId': 'com.github.Ericsson')
57+
attributes('artifactId': baseName)
5658
}
5759
from { configurations.runtime.collect { it.isDirectory() ? it : zipTree(it) } }
5860
{
@@ -64,7 +66,7 @@ jar {
6466

6567
shadowJar {
6668
baseName = 'eiffel-remrem-semantics'
67-
version = '0.3.0'
69+
version = '0.3.1'
6870
classifier = ''
6971
}
7072

src/main/java/com/ericsson/eiffel/remrem/semantics/SemanticsService.java

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
import java.util.HashMap;
4242
import java.util.Map;
4343

44+
import javax.annotation.PostConstruct;
4445
import javax.inject.Named;
4546

4647
import org.apache.commons.lang3.StringUtils;
@@ -50,6 +51,7 @@
5051
import com.ericsson.eiffel.remrem.protocol.MsgService;
5152
import com.ericsson.eiffel.remrem.protocol.ValidationResult;
5253
import com.ericsson.eiffel.remrem.semantics.factory.EiffelOutputValidatorFactory;
54+
import com.ericsson.eiffel.remrem.semantics.util.ManifestHandler;
5355
import com.ericsson.eiffel.remrem.semantics.validator.EiffelValidationException;
5456
import com.ericsson.eiffel.remrem.semantics.validator.EiffelValidator;
5557
import com.ericsson.eiffel.semantics.events.EiffelActivityCanceledEvent;
@@ -75,6 +77,9 @@
7577
import com.ericsson.eiffel.semantics.events.EiffelIssueVerifiedEvent;
7678
import com.ericsson.eiffel.semantics.events.EiffelArtifactReusedEvent;
7779
import com.ericsson.eiffel.semantics.events.Event;
80+
import com.ericsson.eiffel.semantics.events.Gav;
81+
import com.ericsson.eiffel.semantics.events.Serializer;
82+
import com.ericsson.eiffel.semantics.events.Source;
7883
import com.google.gson.Gson;
7984
import com.google.gson.JsonObject;
8085
import com.google.gson.JsonParser;
@@ -100,7 +105,8 @@ public class SemanticsService implements MsgService {
100105
private final ArrayList<String> supportedEventTypes = new ArrayList<String>();
101106
public static final Logger log = LoggerFactory.getLogger(SemanticsService.class);
102107
private Event event = new Event();
103-
108+
public static Gav semanticsGAV;
109+
private boolean semanticsGavFlag = false;
104110
private static Gson gson = new Gson();
105111
private static Map<EiffelEventType, Class<? extends Event>> eventTypes = SemanticsService.eventType();
106112

@@ -109,6 +115,16 @@ public SemanticsService() {
109115
supportedEventTypes.add(msg.getEventName());
110116
}
111117
}
118+
119+
@PostConstruct
120+
public void readManifest() {
121+
ManifestHandler manifastHandler = new ManifestHandler();
122+
semanticsGAV = manifastHandler.readGavfromManifest();
123+
if (semanticsGAV == null || semanticsGAV.getArtifactId() == null || semanticsGAV.getGroupId() == null
124+
|| semanticsGAV.getVersion() == null) {
125+
semanticsGavFlag = true;
126+
}
127+
}
112128

113129
public static Map<EiffelEventType, Class<? extends Event>> eventType() {
114130
eventTypes = new HashMap<>();
@@ -139,6 +155,10 @@ public static Map<EiffelEventType, Class<? extends Event>> eventType() {
139155

140156
@Override
141157
public String generateMsg(String msgType, JsonObject bodyJson) {
158+
if (semanticsGavFlag) {
159+
return createErrorResponse("GAV info of eiffel-remrem-semantics is missing",
160+
"Required Serializer GAV information of eiffel-remrem-semantics is missing in MANIFEST.MF");
161+
}
142162
EiffelEventType eiffelType = EiffelEventType.fromString(msgType);
143163
if (eiffelType == null) {
144164
log.error("Unknown message type requested: " + msgType);
@@ -178,6 +198,7 @@ private static Event eventCreation(Class<? extends Event> eventType, JsonObject
178198
eventNodes.add("meta", msgNodes.get("meta"));
179199
Event event = createEvent(eventNodes, eventType);
180200
event.setMeta(event.generateMeta(event.getMeta()));
201+
event.getMeta().setSource(setSerializerGav(event.getMeta().getSource()));
181202
return event;
182203
}
183204

@@ -321,4 +342,22 @@ public String generateRoutingKey(JsonObject eiffelMessage, String tag, String do
321342
}
322343
return null;
323344
}
345+
346+
/**
347+
* This method is used to override given input meta.source.serializer GAV
348+
* with semantics GAV or if not exist, generates semantics GAV and set to
349+
* meta.source.serializer
350+
*
351+
* @param source
352+
* @return updated source instance with semantics gav information
353+
*/
354+
public static Source setSerializerGav(Source source) {
355+
source = source == null ? new Source() : source;
356+
Serializer serializer = source.getSerializer()==null? new Serializer():source.getSerializer();
357+
serializer.setGroupId(semanticsGAV.getGroupId());
358+
serializer.setArtifactId(semanticsGAV.getArtifactId());
359+
serializer.setVersion(semanticsGAV.getVersion());
360+
source.setSerializer(serializer);
361+
return source;
362+
}
324363
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
/*
2+
Copyright 2017 Ericsson AB.
3+
For a full list of individual contributors, please see the commit history.
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
http://www.apache.org/licenses/LICENSE-2.0
8+
Unless required by applicable law or agreed to in writing, software
9+
distributed under the License is distributed on an "AS IS" BASIS,
10+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11+
See the License for the specific language governing permissions and
12+
limitations under the License.
13+
*/
14+
15+
package com.ericsson.eiffel.remrem.semantics.util;
16+
17+
import java.net.URL;
18+
import java.util.jar.Attributes;
19+
import java.util.jar.Manifest;
20+
21+
import org.slf4j.Logger;
22+
import org.slf4j.LoggerFactory;
23+
24+
import com.ericsson.eiffel.remrem.semantics.SemanticsService;
25+
import com.ericsson.eiffel.semantics.events.Gav;
26+
27+
public class ManifestHandler {
28+
public static final Logger log = LoggerFactory.getLogger(SemanticsService.class);
29+
30+
/**
31+
* This method is used to read semantics GAV from MANIFEST.MF file
32+
*
33+
* @return Gav instance which contains semantics gav read from MANIFEST.MF
34+
* file
35+
*/
36+
public Gav readGavfromManifest() {
37+
try {
38+
Gav semanticsGAV = new Gav();
39+
String classPath = SemanticsService.class.getResource("SemanticsService.class").toString();
40+
String manifestPath = classPath.substring(0, classPath.lastIndexOf("!") + 1) + "/META-INF/MANIFEST.MF";
41+
Manifest manifest = new Manifest(new URL(manifestPath).openStream());
42+
Attributes attributes = manifest.getMainAttributes();
43+
semanticsGAV.setGroupId(attributes.getValue("groupId"));
44+
semanticsGAV.setArtifactId(attributes.getValue("artifactId"));
45+
semanticsGAV.setVersion(attributes.getValue("semanticsVersion"));
46+
return semanticsGAV;
47+
} catch (Exception e) {
48+
log.error("Unable to read eiffel-remrem-semantics gav information from MANIFEST.MF " + e.getMessage());
49+
}
50+
return null;
51+
}
52+
}

src/main/java/com/ericsson/eiffel/semantics/events/Meta.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,6 @@
1717
public interface Meta {
1818
public void setId(String id);
1919
public void setTime(Long time);
20-
20+
public void setSource(Source source);
21+
public Source getSource();
2122
}

src/main/resources/MANIFEST.MF

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
comment: This Manifest file is used for testing purpose
2+
Manifest-Version: 1.0
3+
groupId: com.github.Ericsson
4+
remremVersionKey: semanticsVersion
5+
artifactId: eiffel-remrem-semantics
6+
isEndpointVersion: true
7+
semanticsVersion: 0.3.1
8+

src/test/java/com/ericsson/eiffel/remrem/semantics/ServiceTest.java

Lines changed: 52 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,18 +20,23 @@
2020
import static org.mockito.Mockito.when;
2121

2222
import java.io.File;
23+
import java.io.FileInputStream;
2324
import java.io.FileNotFoundException;
2425
import java.io.FileReader;
2526
import java.net.URL;
2627
import java.util.jar.Attributes;
28+
import java.util.jar.Manifest;
29+
2730

2831
import org.junit.Assert;
2932
import org.junit.Before;
33+
import org.junit.BeforeClass;
3034
import org.junit.Test;
3135
import org.mockito.InjectMocks;
3236
import org.mockito.MockitoAnnotations;
3337

3438
import com.ericsson.eiffel.remrem.protocol.ValidationResult;
39+
import com.ericsson.eiffel.remrem.semantics.util.ManifestHandler;
3540
import com.ericsson.eiffel.semantics.events.EiffelActivityCanceledEvent;
3641
import com.ericsson.eiffel.semantics.events.EiffelActivityFinishedEvent;
3742
import com.ericsson.eiffel.semantics.events.EiffelActivityStartedEvent;
@@ -54,6 +59,7 @@
5459
import com.ericsson.eiffel.semantics.events.EiffelTestExecutionRecipeCollectionCreatedEvent;
5560
import com.ericsson.eiffel.semantics.events.EiffelTestSuiteFinishedEvent;
5661
import com.ericsson.eiffel.semantics.events.EiffelTestSuiteStartedEvent;
62+
import com.ericsson.eiffel.semantics.events.Gav;
5763
import com.google.gson.JsonIOException;
5864
import com.google.gson.JsonObject;
5965
import com.google.gson.JsonParser;
@@ -157,12 +163,35 @@ public class ServiceTest {
157163

158164
@InjectMocks
159165
EiffelTestExecutionRecipeCollectionCreatedEvent terEvent = new EiffelTestExecutionRecipeCollectionCreatedEvent();
166+
167+
ManifestHandler manifestHandler;
168+
static Gav manifestGav = null;
169+
170+
@BeforeClass
171+
public static void readManifestGav() {
172+
manifestGav = new Gav();
173+
URL url = ServiceTest.class.getClassLoader().getResource("MANIFEST.MF");
174+
String manifestPath = url.getPath().replace("%20", " ");
175+
try {
176+
Manifest manifest = new Manifest(new FileInputStream(manifestPath));
177+
Attributes attributes1 = manifest.getMainAttributes();
178+
manifestGav.setGroupId(attributes1.getValue("groupId"));
179+
manifestGav.setArtifactId(attributes1.getValue("artifactId"));
180+
manifestGav.setVersion(attributes1.getValue("semanticsVersion"));
181+
} catch (FileNotFoundException e) {
182+
e.printStackTrace();
183+
} catch (Exception e) {
184+
e.printStackTrace();
185+
}
186+
}
160187

161188
@Before
162189
public void setUp() throws Exception {
163190
Attributes attributes = mock(Attributes.class);
191+
manifestHandler = mock(ManifestHandler.class);
164192
MockitoAnnotations.initMocks(this);
165-
when(attributes.getValue(anyString())).thenReturn("0.2.3");
193+
when(attributes.getValue(anyString())).thenReturn("0.2.3");
194+
SemanticsService.semanticsGAV = manifestGav;
166195
}
167196

168197
private void testGenerateMsg(String msgType, String fileName) {
@@ -280,7 +309,7 @@ public void testInvalidMessage() {
280309
Assert.assertTrue(msg.contains("message"));
281310
Assert.assertTrue(msg.contains("Cannot validate given JSON string"));
282311
Assert.assertTrue(msg.contains("cause"));
283-
Assert.assertTrue(msg.contains("missing required properties ([\\\"groupId"));
312+
Assert.assertTrue(msg.contains("missing required properties ([\\\"conclusion"));
284313
} catch(FileNotFoundException e) {
285314
Assert.assertFalse(false);
286315
}
@@ -346,4 +375,25 @@ public void testGenerateRoutingKey() {
346375
}
347376
assertEquals("eiffel.activity.finished.notag.domainID", routingKey);
348377
}
378+
379+
@Test
380+
public void testGetRemremSemanticsGav() {
381+
when(manifestHandler.readGavfromManifest()).thenReturn(manifestGav);
382+
Gav gav = manifestHandler.readGavfromManifest();
383+
Assert.assertEquals(gav.getGroupId(), "com.github.Ericsson");
384+
Assert.assertEquals(gav.getArtifactId(), "eiffel-remrem-semantics");
385+
Assert.assertEquals(gav.getVersion(), "0.3.1");
386+
}
387+
388+
@Test(expected = FileNotFoundException.class)
389+
public void testInvalidPathRemremSemanticsGav() throws Exception {
390+
URL url = ServiceTest.class.getClassLoader().getResource("MANIFEST.MF");
391+
String manifestPath = url.getPath() + "/InvalidPath";
392+
Manifest manifest = new Manifest(new FileInputStream(manifestPath));
393+
Attributes attributes1 = manifest.getMainAttributes();
394+
manifestGav.setGroupId(attributes1.getValue("groupId"));
395+
manifestGav.setArtifactId(attributes1.getValue("artifactId"));
396+
manifestGav.setVersion(attributes1.getValue("semanticsVersion"));
397+
398+
}
349399
}

src/test/resources/input/ActivityFinishedInvalid.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
"eventParams": {
2626
"data": {
2727
"outcome": {
28-
"conclusion": "TIMED_OUT",
2928
"description": "Compilation timed out."
3029
},
3130
"persistentLogs": [{

0 commit comments

Comments
 (0)