mirror of
https://dev.azure.com/schwarzit/schwarzit.stackit-public/_git/audit-go
synced 2026-02-17 05:11:46 +00:00
Remove operation name from base64 serialization utilities
This commit is contained in:
parent
c222e6f79a
commit
baeb466421
2 changed files with 17 additions and 45 deletions
|
|
@ -8,20 +8,17 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
var ErrBase64StringEmpty = errors.New("base64 string must not be empty")
|
var ErrBase64StringEmpty = errors.New("base64 string must not be empty")
|
||||||
var ErrOperationEmpty = errors.New("Operation must not be empty")
|
|
||||||
var ErrRoutableIdentifierNil = errors.New("routableIdentifier must not be nil")
|
var ErrRoutableIdentifierNil = errors.New("routableIdentifier must not be nil")
|
||||||
var ErrUnsupportedBase64StringVersion = errors.New("unsupported base64 cloud event string version")
|
var ErrUnsupportedBase64StringVersion = errors.New("unsupported base64 cloud event string version")
|
||||||
|
|
||||||
type serializableEvent struct {
|
type serializableEvent struct {
|
||||||
CloudEvent CloudEvent `json:"cloudEvent"`
|
CloudEvent CloudEvent `json:"cloudEvent"`
|
||||||
Operation string `json:"operation"`
|
|
||||||
RoutableIdentifier RoutableIdentifier `json:"routableIdentifier"`
|
RoutableIdentifier RoutableIdentifier `json:"routableIdentifier"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func ToBase64(
|
func ToBase64(
|
||||||
cloudEvent *CloudEvent,
|
cloudEvent *CloudEvent,
|
||||||
routableIdentifier *RoutableIdentifier,
|
routableIdentifier *RoutableIdentifier) (*string, error) {
|
||||||
operation string) (*string, error) {
|
|
||||||
|
|
||||||
if cloudEvent == nil {
|
if cloudEvent == nil {
|
||||||
return nil, ErrCloudEventNil
|
return nil, ErrCloudEventNil
|
||||||
|
|
@ -31,13 +28,8 @@ func ToBase64(
|
||||||
return nil, ErrRoutableIdentifierNil
|
return nil, ErrRoutableIdentifierNil
|
||||||
}
|
}
|
||||||
|
|
||||||
if operation == "" {
|
|
||||||
return nil, ErrOperationEmpty
|
|
||||||
}
|
|
||||||
|
|
||||||
event := serializableEvent{
|
event := serializableEvent{
|
||||||
CloudEvent: *cloudEvent,
|
CloudEvent: *cloudEvent,
|
||||||
Operation: operation,
|
|
||||||
RoutableIdentifier: *routableIdentifier,
|
RoutableIdentifier: *routableIdentifier,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -51,26 +43,26 @@ func ToBase64(
|
||||||
return &base64Str, nil
|
return &base64Str, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func FromBase64(base64Str string) (*CloudEvent, *RoutableIdentifier, *string, error) {
|
func FromBase64(base64Str string) (*CloudEvent, *RoutableIdentifier, error) {
|
||||||
if base64Str == "" {
|
if base64Str == "" {
|
||||||
return nil, nil, nil, ErrBase64StringEmpty
|
return nil, nil, ErrBase64StringEmpty
|
||||||
}
|
}
|
||||||
|
|
||||||
if !strings.HasSuffix(base64Str, "v1") {
|
if !strings.HasSuffix(base64Str, "v1") {
|
||||||
return nil, nil, nil, ErrUnsupportedBase64StringVersion
|
return nil, nil, ErrUnsupportedBase64StringVersion
|
||||||
}
|
}
|
||||||
base64Str = strings.TrimSuffix(base64Str, "v1")
|
base64Str = strings.TrimSuffix(base64Str, "v1")
|
||||||
|
|
||||||
base64Bytes, err := base64.StdEncoding.DecodeString(base64Str)
|
base64Bytes, err := base64.StdEncoding.DecodeString(base64Str)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
event := serializableEvent{}
|
event := serializableEvent{}
|
||||||
err = json.Unmarshal(base64Bytes, &event)
|
err = json.Unmarshal(base64Bytes, &event)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return &event.CloudEvent, &event.RoutableIdentifier, &event.Operation, nil
|
return &event.CloudEvent, &event.RoutableIdentifier, nil
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,9 +11,8 @@ func Test_ToBase64(t *testing.T) {
|
||||||
t.Run("cloud event nil", func(t *testing.T) {
|
t.Run("cloud event nil", func(t *testing.T) {
|
||||||
var cloudEvent *CloudEvent = nil
|
var cloudEvent *CloudEvent = nil
|
||||||
routableIdentifier := RoutableSystemIdentifier
|
routableIdentifier := RoutableSystemIdentifier
|
||||||
operation := "organization.create"
|
|
||||||
|
|
||||||
base64str, err := ToBase64(cloudEvent, routableIdentifier, operation)
|
base64str, err := ToBase64(cloudEvent, routableIdentifier)
|
||||||
assert.ErrorIs(t, err, ErrCloudEventNil)
|
assert.ErrorIs(t, err, ErrCloudEventNil)
|
||||||
assert.Nil(t, base64str)
|
assert.Nil(t, base64str)
|
||||||
})
|
})
|
||||||
|
|
@ -21,85 +20,66 @@ func Test_ToBase64(t *testing.T) {
|
||||||
t.Run("routable identifier nil", func(t *testing.T) {
|
t.Run("routable identifier nil", func(t *testing.T) {
|
||||||
cloudEvent := &CloudEvent{}
|
cloudEvent := &CloudEvent{}
|
||||||
var routableIdentifier *RoutableIdentifier = nil
|
var routableIdentifier *RoutableIdentifier = nil
|
||||||
operation := "organization.create"
|
|
||||||
|
|
||||||
base64str, err := ToBase64(cloudEvent, routableIdentifier, operation)
|
base64str, err := ToBase64(cloudEvent, routableIdentifier)
|
||||||
assert.ErrorIs(t, err, ErrRoutableIdentifierNil)
|
assert.ErrorIs(t, err, ErrRoutableIdentifierNil)
|
||||||
assert.Nil(t, base64str)
|
assert.Nil(t, base64str)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("Operation empty", func(t *testing.T) {
|
|
||||||
cloudEvent := &CloudEvent{}
|
|
||||||
routableIdentifier := RoutableSystemIdentifier
|
|
||||||
operation := ""
|
|
||||||
|
|
||||||
base64str, err := ToBase64(cloudEvent, routableIdentifier, operation)
|
|
||||||
assert.ErrorIs(t, err, ErrOperationEmpty)
|
|
||||||
assert.Nil(t, base64str)
|
|
||||||
})
|
|
||||||
|
|
||||||
t.Run("encoded event", func(t *testing.T) {
|
t.Run("encoded event", func(t *testing.T) {
|
||||||
e := &CloudEvent{}
|
e := &CloudEvent{}
|
||||||
r := RoutableSystemIdentifier
|
r := RoutableSystemIdentifier
|
||||||
o := "organization.create"
|
base64str, err := ToBase64(e, r)
|
||||||
base64str, err := ToBase64(e, r, o)
|
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
cloudEvent, routableIdentifier, operation, err := FromBase64(*base64str)
|
cloudEvent, routableIdentifier, err := FromBase64(*base64str)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.Equal(t, e, cloudEvent)
|
assert.Equal(t, e, cloudEvent)
|
||||||
assert.Equal(t, r, routableIdentifier)
|
assert.Equal(t, r, routableIdentifier)
|
||||||
assert.Equal(t, o, *operation)
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func Test_FromBase64(t *testing.T) {
|
func Test_FromBase64(t *testing.T) {
|
||||||
|
|
||||||
t.Run("empty string", func(t *testing.T) {
|
t.Run("empty string", func(t *testing.T) {
|
||||||
cloudEvent, routableIdentifier, operation, err := FromBase64("")
|
cloudEvent, routableIdentifier, err := FromBase64("")
|
||||||
assert.ErrorIs(t, err, ErrBase64StringEmpty)
|
assert.ErrorIs(t, err, ErrBase64StringEmpty)
|
||||||
assert.Nil(t, cloudEvent)
|
assert.Nil(t, cloudEvent)
|
||||||
assert.Nil(t, routableIdentifier)
|
assert.Nil(t, routableIdentifier)
|
||||||
assert.Nil(t, operation)
|
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("without version suffix", func(t *testing.T) {
|
t.Run("without version suffix", func(t *testing.T) {
|
||||||
cloudEvent, routableIdentifier, operation, err := FromBase64("ey")
|
cloudEvent, routableIdentifier, err := FromBase64("ey")
|
||||||
assert.ErrorIs(t, err, ErrUnsupportedBase64StringVersion)
|
assert.ErrorIs(t, err, ErrUnsupportedBase64StringVersion)
|
||||||
assert.Nil(t, cloudEvent)
|
assert.Nil(t, cloudEvent)
|
||||||
assert.Nil(t, routableIdentifier)
|
assert.Nil(t, routableIdentifier)
|
||||||
assert.Nil(t, operation)
|
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("no base64 string", func(t *testing.T) {
|
t.Run("no base64 string", func(t *testing.T) {
|
||||||
cloudEvent, routableIdentifier, operation, err := FromBase64("no base 64 v1")
|
cloudEvent, routableIdentifier, err := FromBase64("no base 64 v1")
|
||||||
assert.EqualError(t, err, "illegal base64 data at input byte 2")
|
assert.EqualError(t, err, "illegal base64 data at input byte 2")
|
||||||
assert.Nil(t, cloudEvent)
|
assert.Nil(t, cloudEvent)
|
||||||
assert.Nil(t, routableIdentifier)
|
assert.Nil(t, routableIdentifier)
|
||||||
assert.Nil(t, operation)
|
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("no json serialized event", func(t *testing.T) {
|
t.Run("no json serialized event", func(t *testing.T) {
|
||||||
base64Str := base64.StdEncoding.EncodeToString([]byte("not expected"))
|
base64Str := base64.StdEncoding.EncodeToString([]byte("not expected"))
|
||||||
base64Str = base64Str + "v1"
|
base64Str = base64Str + "v1"
|
||||||
cloudEvent, routableIdentifier, operation, err := FromBase64(base64Str)
|
cloudEvent, routableIdentifier, err := FromBase64(base64Str)
|
||||||
assert.EqualError(t, err, "invalid character 'o' in literal null (expecting 'u')")
|
assert.EqualError(t, err, "invalid character 'o' in literal null (expecting 'u')")
|
||||||
assert.Nil(t, cloudEvent)
|
assert.Nil(t, cloudEvent)
|
||||||
assert.Nil(t, routableIdentifier)
|
assert.Nil(t, routableIdentifier)
|
||||||
assert.Nil(t, operation)
|
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("decoded event", func(t *testing.T) {
|
t.Run("decoded event", func(t *testing.T) {
|
||||||
e := &CloudEvent{}
|
e := &CloudEvent{}
|
||||||
r := RoutableSystemIdentifier
|
r := RoutableSystemIdentifier
|
||||||
o := "organization.create"
|
base64str, err := ToBase64(e, r)
|
||||||
base64str, err := ToBase64(e, r, o)
|
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
cloudEvent, routableIdentifier, operation, err := FromBase64(*base64str)
|
cloudEvent, routableIdentifier, err := FromBase64(*base64str)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.Equal(t, e, cloudEvent)
|
assert.Equal(t, e, cloudEvent)
|
||||||
assert.Equal(t, r, routableIdentifier)
|
assert.Equal(t, r, routableIdentifier)
|
||||||
assert.Equal(t, o, *operation)
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue