in events/validators.go [98:173]
func validateLegacyEvent(name string, gotBytes, wantBytes []byte) *ValidationInfo {
vi := &ValidationInfo{
Name: name,
}
got := make(map[string]interface{})
err := json.Unmarshal(gotBytes, &got)
if err != nil {
vi.Errs = append(vi.Errs, fmt.Errorf("unmarshalling received legacy event %q: %v", name, err))
}
want := make(map[string]interface{})
err = json.Unmarshal(wantBytes, &want)
if err != nil {
vi.Errs = append(vi.Errs, fmt.Errorf("unmarshalling expected legacy event %q: %v", name, err))
}
// If there were issues extracting the data, bail early.
if vi.Errs != nil {
return vi
}
gotContext := got["context"].(map[string]interface{})
wantContext := want["context"].(map[string]interface{})
// For some fields in the context, they can be written in more than one way. Check all.
type eventFields struct {
name string
gotValue interface{}
wantValue interface{}
}
gotTimestamp, err := time.Parse(time.RFC3339, gotContext["timestamp"].(string))
if err != nil {
vi.Errs = append(vi.Errs, fmt.Errorf("parsing timestamp of received legacy event: %v", err))
return vi
}
wantTimestamp, err := time.Parse(time.RFC3339, wantContext["timestamp"].(string))
if err != nil {
vi.Errs = append(vi.Errs, fmt.Errorf("parsing timestamp of expected legacy event: %v", err))
return vi
}
fields := []eventFields{
{
name: "ID",
gotValue: getMaybeSnakeCaseField(gotContext, "eventId"),
wantValue: wantContext["eventId"],
},
{
name: "type",
gotValue: getMaybeSnakeCaseField(gotContext, "eventType"),
wantValue: wantContext["eventType"],
},
{
name: "timestamp",
gotValue: gotTimestamp,
wantValue: wantTimestamp,
},
{
name: "resource",
gotValue: gotContext["resource"],
wantValue: wantContext["resource"],
},
{
name: "data",
gotValue: got["data"],
wantValue: want["data"],
},
}
for _, field := range fields {
if !reflect.DeepEqual(field.gotValue, field.wantValue) {
vi.Errs = append(vi.Errs, fmt.Errorf("unexpected %q in event %q:\ngot %+v,\nwant %+v", field.name, name, field.gotValue, field.wantValue))
}
}
return vi
}