Added validation on client_received_end_timestamp
diff --git a/api_helper.go b/api_helper.go
index 45e99f0..ee65631 100644
--- a/api_helper.go
+++ b/api_helper.go
@@ -101,11 +101,11 @@
/*
Does basic validation on each analytics message
-1. client_received_start_timestamp should exist
-2. if client_received_end_timestamp exists then it should be > client_received_start_timestamp
+1. client_received_start_timestamp, client_received_end_timestamp should exist
+2. client_received_end_timestamp should be > client_received_start_timestamp and not 0
*/
func validate(recordMap map[string]interface{}) (bool, errResponse) {
- elems := []string{"client_received_start_timestamp"}
+ elems := []string{"client_received_start_timestamp", "client_received_end_timestamp"}
for _, elem := range elems {
if recordMap[elem] == nil {
return false, errResponse{
@@ -117,7 +117,12 @@
crst, exists1 := recordMap["client_received_start_timestamp"]
cret, exists2 := recordMap["client_received_end_timestamp"]
if exists1 && exists2 {
- if crst.(json.Number) > cret.(json.Number) {
+ if crst.(json.Number) == json.Number("0") || cret.(json.Number) == json.Number("0") {
+ return false, errResponse{
+ ErrorCode: "BAD_DATA",
+ Reason: "client_received_start_timestamp or " +
+ "> client_received_end_timestamp cannot be 0"}
+ } else if crst.(json.Number) > cret.(json.Number) {
return false, errResponse{
ErrorCode: "BAD_DATA",
Reason: "client_received_start_timestamp " +
diff --git a/api_helper_test.go b/api_helper_test.go
index 7b83679..4304769 100644
--- a/api_helper_test.go
+++ b/api_helper_test.go
@@ -36,8 +36,23 @@
Expect(valid).To(BeFalse())
Expect(e.ErrorCode).To(Equal("BAD_DATA"))
- Expect(e.Reason).To(Equal("client_received_start_timestamp > client_received_end_timestamp"))
+ Expect(e.Reason).To(Equal("client_received_start_timestamp " +
+ "> client_received_end_timestamp"))
+ By("payload with clst = 0")
+ record = []byte(`{
+ "response_status_code": 200,
+ "client_id":"testapikey",
+ "client_received_start_timestamp": 0,
+ "client_received_end_timestamp": 1486406248260
+ }`)
+ raw = getRaw(record)
+ valid, e = validate(raw)
+
+ Expect(valid).To(BeFalse())
+ Expect(e.ErrorCode).To(Equal("BAD_DATA"))
+ Expect(e.Reason).To(Equal("client_received_start_timestamp or " +
+ "> client_received_end_timestamp cannot be 0"))
})
})
Context("valid record", func() {