Add time to CloudEvent automatically if not present (#2123)

Closes https://github.com/dapr/dapr/issues/5137

Signed-off-by: Yash Nisar <yashnisar@microsoft.com>

Signed-off-by: Yash Nisar <yashnisar@microsoft.com>
This commit is contained in:
Yash Nisar 2022-09-26 16:44:57 -05:00 committed by GitHub
parent b0d267317d
commit ad5397ea25
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 18 additions and 0 deletions

View File

@ -51,6 +51,7 @@ const (
SourceField = "source"
IDField = "id"
SubjectField = "subject"
TimeField = "time"
)
// unmarshalPrecise is a wrapper around encoding/json's Decoder
@ -110,6 +111,7 @@ func NewCloudEventsEnvelope(id, source, eventType, subject string, topic string,
TraceIDField: traceParent,
TraceParentField: traceParent,
TraceStateField: traceState,
TimeField: time.Now().Format(time.RFC3339),
}
ce[ceDataField] = ceData
@ -129,6 +131,14 @@ func FromCloudEvent(cloudEvent []byte, topic, pubsub, traceParent string, traceS
return m, err
}
customTimeVal, keyExists := m[TimeField]
if keyExists {
m[TimeField] = customTimeVal
} else {
m[TimeField] = time.Now().Format(time.RFC3339)
}
m[TraceIDField] = traceParent
m[TraceParentField] = traceParent
m[TraceStateField] = traceState

View File

@ -41,6 +41,7 @@ func TestEnvelopeXML(t *testing.T) {
assert.Equal(t, "1.0", envelope[SpecVersionField])
assert.Equal(t, "routed.topic", envelope[TopicField])
assert.Equal(t, "mypubsub", envelope[PubsubField])
assert.NotNil(t, envelope[TimeField])
})
t.Run("xml without content-type", func(t *testing.T) {
@ -52,6 +53,7 @@ func TestEnvelopeXML(t *testing.T) {
assert.Equal(t, "1.0", envelope[SpecVersionField])
assert.Equal(t, "routed.topic", envelope[TopicField])
assert.Equal(t, "mypubsub", envelope[PubsubField])
assert.NotNil(t, envelope[TimeField])
})
}
@ -246,6 +248,7 @@ func TestNewFromExisting(t *testing.T) {
m := map[string]interface{}{
"specversion": "1.0",
"customfield": "a",
"time": "2021-08-02T09:00:00Z",
}
b, _ := json.Marshal(&m)
@ -257,6 +260,7 @@ func TestNewFromExisting(t *testing.T) {
assert.Equal(t, "pubsub", n[PubsubField])
assert.Equal(t, "1", n[TraceParentField])
assert.Equal(t, "key=value", n[TraceStateField])
assert.Equal(t, "2021-08-02T09:00:00Z", n[TimeField])
assert.Nil(t, n[DataField])
assert.Nil(t, n[DataBase64Field])
})
@ -271,6 +275,7 @@ func TestNewFromExisting(t *testing.T) {
"specversion": "1.0",
"customfield": "a",
"data": "hello world",
"time": "2021-08-02T09:00:00Z",
}
b, _ := json.Marshal(&m)
@ -282,6 +287,7 @@ func TestNewFromExisting(t *testing.T) {
assert.Equal(t, "pubsub", n[PubsubField])
assert.Equal(t, "1", n[TraceParentField])
assert.Equal(t, "key=value", n[TraceStateField])
assert.Equal(t, "2021-08-02T09:00:00Z", n[TimeField])
assert.Nil(t, n[DataBase64Field])
assert.Equal(t, "hello world", n[DataField])
})
@ -302,6 +308,7 @@ func TestNewFromExisting(t *testing.T) {
assert.Equal(t, "pubsub", n[PubsubField])
assert.Equal(t, "1", n[TraceParentField])
assert.Equal(t, "key=value", n[TraceStateField])
assert.NotNil(t, n[TimeField])
assert.Nil(t, n[DataField])
assert.Equal(t, base64.StdEncoding.EncodeToString([]byte{0x1}), n[DataBase64Field])
})
@ -312,6 +319,7 @@ func TestCreateFromBinaryPayload(t *testing.T) {
envelope := NewCloudEventsEnvelope("", "", "", "", "", "",
"application/octet-stream", []byte{0x1}, "trace", "")
assert.Equal(t, base64Encoding, envelope[DataBase64Field])
assert.NotNil(t, envelope[TimeField])
assert.Nil(t, envelope[DataField])
}