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:
parent
b0d267317d
commit
ad5397ea25
|
@ -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
|
||||
|
|
|
@ -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])
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue