Skip to content

Commit 338fab2

Browse files
committed
minor changes
1 parent 26a322f commit 338fab2

File tree

7 files changed

+54
-33
lines changed

7 files changed

+54
-33
lines changed

validator/build.gradle

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,6 @@ dependencies {
4141
// yaml reader
4242
compile group: 'com.fasterxml.jackson.dataformat', name: 'jackson-dataformat-yaml', version: '2.11.1'
4343

44-
// json reader
45-
compile group: 'com.googlecode.json-simple', name: 'json-simple', version: '1.1'
46-
4744
// json flattener
4845
compile group: 'com.github.wnameless', name: 'json-flattener', version: '0.1.0'
4946

validator/src/main/java/com/amazon/aoc/callers/HttpCaller.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public SampleAppResponse callSampleApp() throws Exception {
3030

3131
AtomicReference<SampleAppResponse> sampleAppResponseAtomicReference = new AtomicReference<>();
3232
RetryHelper.retry(
33-
3,
33+
30,
3434
() -> {
3535
try (Response response = client.newCall(request).execute()) {
3636
String responseBody = response.body().string();

validator/src/main/java/com/amazon/aoc/exception/ExceptionCode.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ public enum ExceptionCode {
3030
TRACE_SPAN_NOT_MATCHED(50003, "trace span not matched"),
3131
TRACE_LIST_NOT_MATCHED(50004, "trace list has different length"),
3232
DATA_EMITTER_UNAVAILABLE(50005, "the data emitter is unavailable to ping"),
33+
EMPTY_LIST(50007, "list is empty or null"),
3334

3435
// build validator
3536
VALIDATION_TYPE_NOT_EXISTED(60001, "validation type not existed"),

validator/src/main/java/com/amazon/aoc/fileconfigs/ExpectedTrace.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@
2020
@Getter
2121
public enum ExpectedTrace implements FileConfig {
2222
DEFAULT_EXPECTED_TRACE("/expected-data-template/defaultExpectedTrace.mustache"),
23-
AWSSDK_EXPECTED_TRACE("/expected-data-template/expectedAWSSDKTrace.json"),
24-
HTTP_EXPECTED_TRACE("/expected-data-template/expectedHTTPTrace.json")
23+
AWSSDK_EXPECTED_TRACE("/expected-data-template/expectedAWSSDKTrace.mustache"),
24+
HTTP_EXPECTED_TRACE("/expected-data-template/expectedHTTPTrace.mustache")
2525
;
2626

2727
private String path;

validator/src/main/java/com/amazon/aoc/validators/TraceValidator.java

Lines changed: 44 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -19,30 +19,30 @@
1919
import com.amazon.aoc.exception.BaseException;
2020
import com.amazon.aoc.exception.ExceptionCode;
2121
import com.amazon.aoc.fileconfigs.FileConfig;
22+
import com.amazon.aoc.helpers.MustacheHelper;
2223
import com.amazon.aoc.models.Context;
2324
import com.amazon.aoc.models.SampleAppResponse;
2425
import com.amazon.aoc.services.XRayService;
2526
import com.amazonaws.services.xray.model.Trace;
2627
import com.github.wnameless.json.flattener.JsonFlattener;
2728
import lombok.extern.log4j.Log4j2;
28-
import org.json.simple.JSONObject;
29-
import org.json.simple.parser.JSONParser;
3029

31-
import java.io.FileReader;
3230
import java.util.*;
3331
import java.util.concurrent.TimeUnit;
3432

3533
@Log4j2
3634
public class TraceValidator implements IValidator {
37-
private static int MAX_RETRY_COUNT = 3;
38-
private XRayService xrayService;
39-
private ICaller caller;
40-
private FileConfig expectedTrace;
35+
private MustacheHelper mustacheHelper = new MustacheHelper();
36+
private XRayService xrayService;
37+
private ICaller caller;
38+
private Context context;
39+
private FileConfig expectedTrace;
4140

4241
@Override
4342
public void init(Context context, ICaller caller, FileConfig expectedTrace) throws Exception {
4443
this.xrayService = new XRayService(context.getRegion());
4544
this.caller = caller;
45+
this.context = context;
4646
this.expectedTrace = expectedTrace;
4747
}
4848

@@ -60,12 +60,14 @@ public void validate() throws Exception {
6060

6161
// validation of trace id
6262
if (!storedTrace.get("trace_id").equals(retrievedTrace.get("trace_id"))) {
63+
log.error("trace id validation failed");
6364
throw new BaseException(ExceptionCode.TRACE_ID_NOT_MATCHED);
6465
}
6566

6667
// data model validation of other fields of segment document
6768
for (Map.Entry<String, Object> entry : storedTrace.entrySet()) {
6869
if (!entry.getValue().equals(retrievedTrace.get(entry.getKey()))) {
70+
log.error("data model validation failed");
6971
log.info("mis matched data model field list");
7072
log.info("value of stored trace map: {}", entry.getValue());
7173
log.info("value of retrieved map: {}",retrievedTrace.get(entry.getKey()));
@@ -78,35 +80,56 @@ public void validate() throws Exception {
7880
// this method will hit get trace from x-ray service and get retrieved trace
7981
private Map<String, Object> getRetrievedTrace(List<String> traceIdList) throws Exception {
8082
Map<String, Object> flattenedJsonMapForRetrievedTrace = null;
83+
List<Trace> retrieveTraceList = null;
84+
int MAX_RETRY_COUNT = 3;
85+
int count = 1;
86+
87+
while (retrieveTraceList == null || retrieveTraceList.isEmpty()) {
88+
// wait for sample app to send trace data to x-ray
89+
log.info("sleeping for 15 seconds before retrieving data from x-ray service");
90+
TimeUnit.SECONDS.sleep(15);
91+
92+
try {
93+
retrieveTraceList = xrayService.listTraceByIds(traceIdList);
94+
} catch (Exception e) {
95+
log.error("exception while retrieving trace data from x-ray service" + e.getMessage());
96+
e.printStackTrace();
97+
}
8198

82-
// retrieve trace from x-ray service
83-
TimeUnit.SECONDS.sleep(15);
84-
List<Trace> retrieveTraceList = xrayService.listTraceByIds(traceIdList);
99+
if (count == MAX_RETRY_COUNT) {
100+
break;
101+
}
85102

86-
try {
87-
// flattened JSON object to a map
88-
flattenedJsonMapForRetrievedTrace = JsonFlattener.flattenAsMap(retrieveTraceList.get(0).getSegments().get(0).getDocument());
89-
} catch (Exception e) {
90-
e.printStackTrace();
103+
count++;
104+
}
105+
106+
// flattened JSON object to a map
107+
if (retrieveTraceList != null && !retrieveTraceList.isEmpty()) {
108+
try{
109+
flattenedJsonMapForRetrievedTrace = JsonFlattener.flattenAsMap(retrieveTraceList.get(0).getSegments().get(0).getDocument());
110+
} catch (Exception e) {
111+
log.error("exception while flattening the retrieved trace: " + e.getMessage());
112+
e.printStackTrace();
113+
}
114+
} else {
115+
log.error("retrieved trace list is empty or null");
116+
throw new BaseException(ExceptionCode.EMPTY_LIST);
91117
}
92118

93119
return flattenedJsonMapForRetrievedTrace;
94120
}
95121

96122
// this method will hit a http endpoints of sample web apps and get stored trace
97123
private Map<String, Object> getStoredTrace() throws Exception {
98-
String PATH = "src/main/resources";
99124
Map<String, Object> flattenedJsonMapForStoredTraces = null;
100125

101126
SampleAppResponse sampleAppResponse = this.caller.callSampleApp();
102127

103-
JSONParser parser = new JSONParser();
104-
try {
105-
Object obj = parser.parse(new FileReader(PATH + this.expectedTrace.getPath()));
106-
JSONObject jsonObject = (JSONObject) obj;
128+
String jsonExpectedTrace = mustacheHelper.render(this.expectedTrace, context);
107129

130+
try {
108131
// flattened JSON object to a map
109-
flattenedJsonMapForStoredTraces = JsonFlattener.flattenAsMap(jsonObject.toString());
132+
flattenedJsonMapForStoredTraces = JsonFlattener.flattenAsMap(jsonExpectedTrace);
110133
flattenedJsonMapForStoredTraces.put("trace_id", sampleAppResponse.getTraceId());
111134
} catch (Exception e) {
112135
e.printStackTrace();

validator/src/main/resources/expected-data-template/expectedAWSSDKTrace.json renamed to validator/src/main/resources/expected-data-template/expectedAWSSDKTrace.mustache

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
"throttle": false,
66
"http": {
77
"request": {
8-
"url": "http://127.0.0.1:8080/aws-sdk-call",
8+
"url": "{{endpoint}}/aws-sdk-call",
99
"method": "GET"
1010
},
1111
"response": {
@@ -26,7 +26,7 @@
2626
"throttle": false,
2727
"http": {
2828
"request": {
29-
"url": "https://s3.us-west-2.amazonaws.com/",
29+
"url": "https://s3.{{region}}.amazonaws.com/",
3030
"method": "GET"
3131
},
3232
"response": {
@@ -36,14 +36,14 @@
3636
"namespace": "aws",
3737
"subsegments": [
3838
{
39-
"name": "s3.us-west-2.amazonaws.com",
39+
"name": "s3.{{region}}.amazonaws.com",
4040
"fault": false,
4141
"error": false,
4242
"throttle": false,
4343
"http": {
4444
"request": {
45-
"url": "https://s3.us-west-2.amazonaws.com/",
46-
"method": "GET",
45+
"url": "https://s3.{{region}}.amazonaws.com/",
46+
"method": "GET"
4747
},
4848
"response": {
4949
"status": 200

validator/src/main/resources/expected-data-template/expectedHTTPTrace.json renamed to validator/src/main/resources/expected-data-template/expectedHTTPTrace.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
"throttle": false,
66
"http": {
77
"request": {
8-
"url": "http://127.0.0.1:8080/outgoing-http-call",
8+
"url": "{{endpoint}}/outgoing-http-call",
99
"method": "GET"
1010
},
1111
"response": {

0 commit comments

Comments
 (0)