package api import ( "encoding/base64" "testing" "github.com/stretchr/testify/assert" pkgAuditCommon "dev.azure.com/schwarzit/schwarzit.stackit-public/audit-go.git/pkg/audit/common" ) func Test_ToBase64(t *testing.T) { t.Run("cloud event nil", func(t *testing.T) { var cloudEvent *pkgAuditCommon.CloudEvent = nil routableIdentifier := pkgAuditCommon.RoutableSystemIdentifier base64str, err := ToBase64(cloudEvent, routableIdentifier) assert.ErrorIs(t, err, pkgAuditCommon.ErrCloudEventNil) assert.Nil(t, base64str) }) t.Run("routable identifier nil", func(t *testing.T) { cloudEvent := &pkgAuditCommon.CloudEvent{} var routableIdentifier *pkgAuditCommon.RoutableIdentifier = nil base64str, err := ToBase64(cloudEvent, routableIdentifier) assert.ErrorIs(t, err, ErrRoutableIdentifierNil) assert.Nil(t, base64str) }) t.Run("encoded event", func(t *testing.T) { e := &pkgAuditCommon.CloudEvent{} r := pkgAuditCommon.RoutableSystemIdentifier base64str, err := ToBase64(e, r) assert.NoError(t, err) cloudEvent, routableIdentifier, err := FromBase64(*base64str) assert.NoError(t, err) assert.Equal(t, e, cloudEvent) assert.Equal(t, r, routableIdentifier) }) } func Test_FromBase64(t *testing.T) { t.Run("empty string", func(t *testing.T) { cloudEvent, routableIdentifier, err := FromBase64("") assert.ErrorIs(t, err, ErrBase64StringEmpty) assert.Nil(t, cloudEvent) assert.Nil(t, routableIdentifier) }) t.Run("without version suffix", func(t *testing.T) { cloudEvent, routableIdentifier, err := FromBase64("ey") assert.ErrorIs(t, err, ErrUnsupportedBase64StringVersion) assert.Nil(t, cloudEvent) assert.Nil(t, routableIdentifier) }) t.Run("no base64 string", func(t *testing.T) { cloudEvent, routableIdentifier, err := FromBase64("no base 64 v1") assert.EqualError(t, err, "illegal base64 data at input byte 2") assert.Nil(t, cloudEvent) assert.Nil(t, routableIdentifier) }) t.Run("no json serialized event", func(t *testing.T) { base64Str := base64.StdEncoding.EncodeToString([]byte("not expected")) base64Str = base64Str + base64AuditEventV1 cloudEvent, routableIdentifier, err := FromBase64(base64Str) assert.EqualError(t, err, "invalid character 'o' in literal null (expecting 'u')") assert.Nil(t, cloudEvent) assert.Nil(t, routableIdentifier) }) t.Run("decoded event", func(t *testing.T) { e := &pkgAuditCommon.CloudEvent{} r := pkgAuditCommon.RoutableSystemIdentifier base64str, err := ToBase64(e, r) assert.NoError(t, err) cloudEvent, routableIdentifier, err := FromBase64(*base64str) assert.NoError(t, err) assert.Equal(t, e, cloudEvent) assert.Equal(t, r, routableIdentifier) }) }