func validateCloudEvent()

in events/validators.go [196:266]


func validateCloudEvent(name string, gotBytes, wantBytes []byte) *ValidationInfo {
	vi := &ValidationInfo{
		Name: name,
	}

	got := &cloudevents.Event{}
	err := json.Unmarshal(gotBytes, got)
	if err != nil {
		vi.Errs = append(vi.Errs, fmt.Errorf("unmarshalling function-received version of cloud event %q: %v", name, err))
	}

	want := &cloudevents.Event{}
	err = json.Unmarshal(wantBytes, want)
	if err != nil {
		vi.Errs = append(vi.Errs, fmt.Errorf("unmarshalling expected contents of cloud event %q: %v", name, err))
	}

	// If there were issues extracting the data, bail early.
	if vi.Errs != nil {
		return vi
	}

	fields := []struct {
		name      string
		gotValue  interface{}
		wantValue interface{}
	}{
		{
			name:      "ID",
			gotValue:  got.ID(),
			wantValue: want.ID(),
		},
		{
			name:      "source",
			gotValue:  got.Source(),
			wantValue: want.Source(),
		},
		{
			name:      "subject",
			gotValue:  got.Subject(),
			wantValue: want.Subject(),
		},
		{
			name:      "type",
			gotValue:  got.Type(),
			wantValue: want.Type(),
		},
		{
			name:      "time",
			gotValue:  got.Time(),
			wantValue: want.Time(),
		},
		{
			name:      "datacontenttype",
			gotValue:  got.DataContentType(),
			wantValue: want.DataContentType(),
		},
		{
			name:      "data",
			gotValue:  unmarshalMap(got.Data(), vi),
			wantValue: unmarshalMap(want.Data(), vi),
		},
	}
	for _, field := range fields {
		if !cmp.Equal(field.gotValue, field.wantValue) {
			vi.Errs = append(vi.Errs, fmt.Errorf("unexpected %q field in %q: got %v, want %v", field.name, name, field.gotValue, field.wantValue))
		}
	}

	return vi
}