Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 12 additions & 5 deletions internal/database/sqlcommon/namespace_sql.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// Copyright © 2021 Kaleido, Inc.
// Copyright © 2022 Kaleido, Inc.
//
// SPDX-License-Identifier: Apache-2.0
//
Expand Down Expand Up @@ -136,20 +136,19 @@ func (s *SQLCommon) namespaceResult(ctx context.Context, row *sql.Rows) (*fftype
return &namespace, nil
}

func (s *SQLCommon) GetNamespace(ctx context.Context, name string) (message *fftypes.Namespace, err error) {

func (s *SQLCommon) getNamespaceEq(ctx context.Context, eq sq.Eq, textName string) (message *fftypes.Namespace, err error) {
rows, _, err := s.query(ctx,
sq.Select(namespaceColumns...).
From("namespaces").
Where(sq.Eq{"name": name}),
Where(eq),
)
if err != nil {
return nil, err
}
defer rows.Close()

if !rows.Next() {
log.L(ctx).Debugf("Namespace '%s' not found", name)
log.L(ctx).Debugf("Namespace '%s' not found", textName)
return nil, nil
}

Expand All @@ -161,6 +160,14 @@ func (s *SQLCommon) GetNamespace(ctx context.Context, name string) (message *fft
return namespace, nil
}

func (s *SQLCommon) GetNamespace(ctx context.Context, name string) (message *fftypes.Namespace, err error) {
return s.getNamespaceEq(ctx, sq.Eq{"name": name}, name)
}

func (s *SQLCommon) GetNamespaceByID(ctx context.Context, id *fftypes.UUID) (ns *fftypes.Namespace, err error) {
return s.getNamespaceEq(ctx, sq.Eq{"id": id}, id.String())
}

func (s *SQLCommon) GetNamespaces(ctx context.Context, filter database.Filter) (message []*fftypes.Namespace, fr *database.FilterResult, err error) {

query, fop, fi, err := s.filterSelect(ctx, "", sq.Select(namespaceColumns...).From("namespaces"), filter, namespaceFilterFieldMap, []interface{}{"sequence"})
Expand Down
52 changes: 50 additions & 2 deletions internal/database/sqlcommon/namespace_sql_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,7 @@ func TestGetNamespaceByIDSelectFail(t *testing.T) {
assert.NoError(t, mock.ExpectationsWereMet())
}

func TestGetNamespaceByIDNotFound(t *testing.T) {
func TestGetNamespaceByNameNotFound(t *testing.T) {
s, mock := newMockProvider().init()
mock.ExpectQuery("SELECT .*").WillReturnRows(sqlmock.NewRows([]string{"ntype", "namespace", "name"}))
msg, err := s.GetNamespace(context.Background(), "name1")
Expand All @@ -180,7 +180,7 @@ func TestGetNamespaceByIDNotFound(t *testing.T) {
assert.NoError(t, mock.ExpectationsWereMet())
}

func TestGetNamespaceByIDScanFail(t *testing.T) {
func TestGetNamespaceByNameScanFail(t *testing.T) {
s, mock := newMockProvider().init()
mock.ExpectQuery("SELECT .*").WillReturnRows(sqlmock.NewRows([]string{"ntype"}).AddRow("only one"))
_, err := s.GetNamespace(context.Background(), "name1")
Expand All @@ -204,6 +204,54 @@ func TestGetNamespaceBuildQueryFail(t *testing.T) {
assert.Regexp(t, "FF10149.*type", err)
}

func TestGetNamespaceByIDQueryFail(t *testing.T) {
s, mock := newMockProvider().init()
mock.ExpectQuery("SELECT .*").WillReturnError(fmt.Errorf("pop"))
nsID := fftypes.NewUUID()
_, err := s.GetNamespaceByID(context.Background(), nsID)
assert.Regexp(t, "FF10115", err)
assert.NoError(t, mock.ExpectationsWereMet())
}

func TestGetNamespaceByIDNotFound(t *testing.T) {
s, mock := newMockProvider().init()
mock.ExpectQuery("SELECT .*").WillReturnRows(sqlmock.NewRows([]string{"ntype", "namespace", "name"}))
nsID := fftypes.NewUUID()
msg, err := s.GetNamespaceByID(context.Background(), nsID)
assert.NoError(t, err)
assert.Nil(t, msg)
assert.NoError(t, mock.ExpectationsWereMet())
}

func TestGetNamespaceByIDScanFail(t *testing.T) {
s, mock := newMockProvider().init()
mock.ExpectQuery("SELECT .*").WillReturnRows(sqlmock.NewRows([]string{"ntype"}).AddRow("only one"))
nsID := fftypes.NewUUID()
_, err := s.GetNamespaceByID(context.Background(), nsID)
assert.Regexp(t, "FF10121", err)
assert.NoError(t, mock.ExpectationsWereMet())
}

func TestGetNamespaceByIDSuccess(t *testing.T) {
s, mock := newMockProvider().init()
msgID := fftypes.NewUUID()
nsID := fftypes.NewUUID()
currTime := fftypes.Now()
nsMock := &fftypes.Namespace{
ID: nsID,
Message: msgID,
Name: "ns1",
Type: fftypes.NamespaceTypeLocal,
Description: "foo",
Created: currTime,
}
mock.ExpectQuery("SELECT .*").WillReturnRows(sqlmock.NewRows([]string{"id", "message", "type", "name", "description", "created"}).AddRow(nsID.String(), msgID.String(), fftypes.NamespaceTypeLocal, "ns1", "foo", currTime.String()))
ns, err := s.GetNamespaceByID(context.Background(), nsID)
assert.NoError(t, err)
assert.Equal(t, nsMock, ns)
assert.NoError(t, mock.ExpectationsWereMet())
}

func TestGetNamespaceReadMessageFail(t *testing.T) {
s, mock := newMockProvider().init()
mock.ExpectQuery("SELECT .*").WillReturnRows(sqlmock.NewRows([]string{"ntype"}).AddRow("only one"))
Expand Down
48 changes: 48 additions & 0 deletions internal/txcommon/event_enrich.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,54 @@ func (t *transactionHelper) EnrichEvent(ctx context.Context, event *fftypes.Even
return nil, err
}
e.BlockchainEvent = be
case fftypes.EventTypeContractAPIConfirmed:
contractAPI, err := t.database.GetContractAPIByID(ctx, event.Reference)
if err != nil {
return nil, err
}
e.ContractAPI = contractAPI
case fftypes.EventTypeContractInterfaceConfirmed:
contractInterface, err := t.database.GetFFIByID(ctx, event.Reference)
if err != nil {
return nil, err
}
e.ContractInterface = contractInterface
case fftypes.EventTypeDatatypeConfirmed:
dt, err := t.database.GetDatatypeByID(ctx, event.Reference)
if err != nil {
return nil, err
}
e.Datatype = dt
case fftypes.EventTypeIdentityConfirmed, fftypes.EventTypeIdentityUpdated:
identity, err := t.database.GetIdentityByID(ctx, event.Reference)
if err != nil {
return nil, err
}
e.Identity = identity
case fftypes.EventTypeNamespaceConfirmed:
ns, err := t.database.GetNamespaceByID(ctx, event.Reference)
if err != nil {
return nil, err
}
e.NamespaceDetails = ns
case fftypes.EventTypePoolConfirmed:
tokenPool, err := t.database.GetTokenPoolByID(ctx, event.Reference)
if err != nil {
return nil, err
}
e.TokenPool = tokenPool
case fftypes.EventTypeApprovalConfirmed, fftypes.EventTypeApprovalOpFailed:
approval, err := t.database.GetTokenApproval(ctx, event.Reference)
if err != nil {
return nil, err
}
e.TokenApproval = approval
case fftypes.EventTypeTransferConfirmed, fftypes.EventTypeTransferOpFailed:
transfer, err := t.database.GetTokenTransfer(ctx, event.Reference)
if err != nil {
return nil, err
}
e.TokenTransfer = transfer
}
return e, nil
}
Loading