Skip to content

Commit

Permalink
Review feedback
Browse files Browse the repository at this point in the history
- also added a missing test around retrieving active listener status

Signed-off-by: Chris Bygrave <chris.bygrave@kaleido.io>
  • Loading branch information
chrisbygrave committed May 22, 2024
1 parent 51db854 commit a927a4f
Show file tree
Hide file tree
Showing 4 changed files with 132 additions and 41 deletions.
2 changes: 1 addition & 1 deletion internal/coremsgs/en_error_messages.go
Original file line number Diff line number Diff line change
Expand Up @@ -307,7 +307,7 @@ var (
MsgCannotCancelBatchType = ffe("FF10466", "Cannot cancel batch of type: %s", 400)
MsgErrorLoadingBatch = ffe("FF10467", "Error loading batch messages")
MsgBatchNotDispatching = ffe("FF10468", "Batch %s is not currently dispatching - current: %s", 400)
MsgNoMessageInlineData = ffe("FF10469", "Unable to check message registration data for org %s", 500)
MsgNoRegistrationMessageData = ffe("FF10469", "Unable to check message registration data for org %s", 500)
MsgUnexpectedRegistrationType = ffe("FF10470", "Unexpected type checking registration status: %s", 500)
MsgUnableToParseRegistrationData = ffe("FF10471", "Unable to parse registration message data: %s", 500)
)
28 changes: 14 additions & 14 deletions internal/orchestrator/status.go
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,7 @@ func (or *orchestrator) checkRegistrationType(ctx context.Context, msg *core.Mes
}
return identity.Identity.DID == did && identity.Identity.Type == expectedType, nil
}
return false, i18n.NewError(ctx, coremsgs.MsgNoMessageInlineData, or.config.Multiparty.Org.Name)
return false, i18n.NewError(ctx, coremsgs.MsgNoRegistrationMessageData, or.config.Multiparty.Org.Name)
}

func (or *orchestrator) GetMultipartyStatus(ctx context.Context) (mpStatus *core.NamespaceMultipartyStatus, err error) {
Expand All @@ -191,20 +191,20 @@ func (or *orchestrator) GetMultipartyStatus(ctx context.Context) (mpStatus *core

mpStatus.Org = core.NamespaceMultipartyStatusOrg{}
mpStatus.Node = core.NamespaceMultipartyStatusNode{}
mpStatus.Contracts = &core.MultipartyContractsWithActiveStatus{
Active: &core.MultipartyContractWithStatus{
mpStatus.Contracts = &core.MultipartyContractsWithActiveStatus{}
if or.namespace.Contracts != nil {
mpStatus.Contracts.Active = &core.MultipartyContractWithStatus{
MultipartyContract: *or.namespace.Contracts.Active,
Status: core.ContractListenerStatusUnknown,
},
Terminated: or.namespace.Contracts.Terminated,
}

log.L(ctx).Debugf("Looking up listener status with subscription ID: %s", mpStatus.Contracts.Active.Info.Subscription)
ok, _, listenerStatus, err := or.blockchain().GetContractListenerStatus(ctx, or.namespace.Name, mpStatus.Contracts.Active.Info.Subscription, false)
if !ok || err != nil {
return nil, err
}
mpStatus.Contracts.Terminated = or.namespace.Contracts.Terminated
log.L(ctx).Debugf("Looking up listener status with subscription ID: %s", mpStatus.Contracts.Active.Info.Subscription)
ok, _, listenerStatus, err := or.blockchain().GetContractListenerStatus(ctx, or.namespace.Name, mpStatus.Contracts.Active.Info.Subscription, false)
if !ok || err != nil {
return nil, err
}
mpStatus.Contracts.Active.Status = listenerStatus
}
mpStatus.Contracts.Active.Status = listenerStatus

if status.Org.Registered {
mpStatus.Org.Status = core.NamespaceRegistrationStatusRegistered
Expand All @@ -222,7 +222,7 @@ func (or *orchestrator) GetMultipartyStatus(ctx context.Context) (mpStatus *core
return nil, err
}
if match {
mpStatus.Node.RegistrationMessageID = msg.Header.ID
mpStatus.Node.PendingRegistrationMessageID = msg.Header.ID
mpStatus.Node.Status = core.NamespaceRegistrationStatusRegistering
} else {
mpStatus.Node.Status = core.NamespaceRegistrationStatusUnknown
Expand All @@ -242,7 +242,7 @@ func (or *orchestrator) GetMultipartyStatus(ctx context.Context) (mpStatus *core
return nil, err
}
if match {
mpStatus.Org.RegistrationMessageID = msg.Header.ID
mpStatus.Org.PendingRegistrationMessageID = msg.Header.ID
mpStatus.Org.Status = core.NamespaceRegistrationStatusRegistering
} else {
mpStatus.Org.Status = core.NamespaceRegistrationStatusUnknown
Expand Down
126 changes: 113 additions & 13 deletions internal/orchestrator/status_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -365,9 +365,9 @@ func TestGetMultipartyStatusUnregistered(t *testing.T) {

assert.Equal(t, true, mpStatus.Enabled)
assert.Equal(t, core.NamespaceRegistrationStatusUnregistered, mpStatus.Org.Status)
assert.Nil(t, mpStatus.Org.RegistrationMessageID)
assert.Nil(t, mpStatus.Org.PendingRegistrationMessageID)
assert.Equal(t, core.NamespaceRegistrationStatusUnregistered, mpStatus.Node.Status)
assert.Nil(t, mpStatus.Node.RegistrationMessageID)
assert.Nil(t, mpStatus.Node.PendingRegistrationMessageID)

}

Expand Down Expand Up @@ -401,9 +401,9 @@ func TestGetMultipartyStatusRegisteringOrg(t *testing.T) {

assert.Equal(t, true, mpStatus.Enabled)
assert.Equal(t, core.NamespaceRegistrationStatusRegistering, mpStatus.Org.Status)
assert.Equal(t, msgID, mpStatus.Org.RegistrationMessageID)
assert.Equal(t, msgID, mpStatus.Org.PendingRegistrationMessageID)
assert.Equal(t, core.NamespaceRegistrationStatusUnregistered, mpStatus.Node.Status)
assert.Nil(t, mpStatus.Node.RegistrationMessageID)
assert.Nil(t, mpStatus.Node.PendingRegistrationMessageID)

}

Expand Down Expand Up @@ -437,9 +437,9 @@ func TestGetMultipartyStatusMismatchedOrgRegistration(t *testing.T) {

assert.Equal(t, true, mpStatus.Enabled)
assert.Equal(t, core.NamespaceRegistrationStatusUnknown, mpStatus.Org.Status)
assert.Nil(t, mpStatus.Org.RegistrationMessageID)
assert.Nil(t, mpStatus.Org.PendingRegistrationMessageID)
assert.Equal(t, core.NamespaceRegistrationStatusUnknown, mpStatus.Node.Status)
assert.Nil(t, mpStatus.Node.RegistrationMessageID)
assert.Nil(t, mpStatus.Node.PendingRegistrationMessageID)
}

func TestGetMultipartyStatusOrgBadMessage(t *testing.T) {
Expand Down Expand Up @@ -538,9 +538,9 @@ func TestGetMultipartyStatusRegisteringNode(t *testing.T) {

assert.Equal(t, true, mpStatus.Enabled)
assert.Equal(t, core.NamespaceRegistrationStatusRegistered, mpStatus.Org.Status)
assert.Nil(t, mpStatus.Org.RegistrationMessageID)
assert.Nil(t, mpStatus.Org.PendingRegistrationMessageID)
assert.Equal(t, core.NamespaceRegistrationStatusRegistering, mpStatus.Node.Status)
assert.Equal(t, msgID, mpStatus.Node.RegistrationMessageID)
assert.Equal(t, msgID, mpStatus.Node.PendingRegistrationMessageID)

}

Expand Down Expand Up @@ -590,7 +590,7 @@ func TestGetMultipartyStatusMismatchedNodeRegistration(t *testing.T) {
assert.Equal(t, true, mpStatus.Enabled)
assert.Equal(t, core.NamespaceRegistrationStatusRegistered, mpStatus.Org.Status)
assert.Equal(t, core.NamespaceRegistrationStatusUnknown, mpStatus.Node.Status)
assert.Nil(t, mpStatus.Node.RegistrationMessageID)
assert.Nil(t, mpStatus.Node.PendingRegistrationMessageID)
}
func TestGetMultipartyStatusNodeBadMessage(t *testing.T) {
or := newTestOrchestrator()
Expand Down Expand Up @@ -711,9 +711,9 @@ func TestGetMultipartyStatusUnregisteredNode(t *testing.T) {

assert.Equal(t, true, mpStatus.Enabled)
assert.Equal(t, core.NamespaceRegistrationStatusRegistered, mpStatus.Org.Status)
assert.Nil(t, mpStatus.Org.RegistrationMessageID)
assert.Nil(t, mpStatus.Org.PendingRegistrationMessageID)
assert.Equal(t, core.NamespaceRegistrationStatusUnregistered, mpStatus.Node.Status)
assert.Nil(t, mpStatus.Node.RegistrationMessageID)
assert.Nil(t, mpStatus.Node.PendingRegistrationMessageID)

}

Expand Down Expand Up @@ -756,9 +756,9 @@ func TestGetMultipartyStatusRegistered(t *testing.T) {

assert.Equal(t, true, mpStatus.Enabled)
assert.Equal(t, core.NamespaceRegistrationStatusRegistered, mpStatus.Org.Status)
assert.Nil(t, mpStatus.Org.RegistrationMessageID)
assert.Nil(t, mpStatus.Org.PendingRegistrationMessageID)
assert.Equal(t, core.NamespaceRegistrationStatusRegistered, mpStatus.Node.Status)
assert.Nil(t, mpStatus.Node.RegistrationMessageID)
assert.Nil(t, mpStatus.Node.PendingRegistrationMessageID)

}

Expand Down Expand Up @@ -867,3 +867,103 @@ func TestCheckRegistrationType(t *testing.T) {
assert.False(t, match)

}

func TestGetMultipartyActiveListenerStatus(t *testing.T) {
or := newTestOrchestrator()
defer or.cleanup(t)

coreconfig.Reset()
config.Set(coreconfig.NamespacesDefault, "default")

orgID := fftypes.NewUUID()

or.mim.On("GetRootOrg", or.ctx).Return(&core.Identity{
IdentityBase: core.IdentityBase{
ID: orgID,
Name: "org1",
Namespace: "ns",
DID: "did:firefly:org/org1",
},
}, nil)
or.mim.On("GetLocalNode", or.ctx).Return(&core.Identity{
IdentityBase: core.IdentityBase{
Parent: orgID,
},
}, nil)
or.mdi.On("GetVerifiers", or.ctx, "ns", mock.Anything).Return([]*core.Verifier{
{Hash: fftypes.NewRandB32(), VerifierRef: core.VerifierRef{
Type: core.VerifierTypeEthAddress,
Value: "0x12345",
}},
}, nil, nil)

or.config.Multiparty.Org.Name = "org1"
or.config.Multiparty.Node.Name = "node1"
or.namespace.Contracts = &core.MultipartyContracts{
Active: &core.MultipartyContract{
Info: core.MultipartyContractInfo{
Subscription: "sub1",
},
},
Terminated: []*core.MultipartyContract{},
}

or.mem.On("GetPlugins").Return(mockEventPlugins)

or.mbi.On("GetContractListenerStatus", or.ctx, "ns", "sub1", false).Return(true, nil, core.ContractListenerStatusSynced, nil)

mpStatus, err := or.GetMultipartyStatus(or.ctx)
assert.NoError(t, err)

assert.Equal(t, core.ContractListenerStatusSynced, mpStatus.Contracts.Active.Status)

}

func TestGetMultipartyErrorActiveListenerStatus(t *testing.T) {
or := newTestOrchestrator()
defer or.cleanup(t)

coreconfig.Reset()
config.Set(coreconfig.NamespacesDefault, "default")

orgID := fftypes.NewUUID()

or.mim.On("GetRootOrg", or.ctx).Return(&core.Identity{
IdentityBase: core.IdentityBase{
ID: orgID,
Name: "org1",
Namespace: "ns",
DID: "did:firefly:org/org1",
},
}, nil)
or.mim.On("GetLocalNode", or.ctx).Return(&core.Identity{
IdentityBase: core.IdentityBase{
Parent: orgID,
},
}, nil)
or.mdi.On("GetVerifiers", or.ctx, "ns", mock.Anything).Return([]*core.Verifier{
{Hash: fftypes.NewRandB32(), VerifierRef: core.VerifierRef{
Type: core.VerifierTypeEthAddress,
Value: "0x12345",
}},
}, nil, nil)

or.config.Multiparty.Org.Name = "org1"
or.config.Multiparty.Node.Name = "node1"
or.namespace.Contracts = &core.MultipartyContracts{
Active: &core.MultipartyContract{
Info: core.MultipartyContractInfo{
Subscription: "sub1",
},
},
Terminated: []*core.MultipartyContract{},
}

or.mem.On("GetPlugins").Return(mockEventPlugins)

or.mbi.On("GetContractListenerStatus", or.ctx, "ns", "sub1", false).Return(false, nil, core.ContractListenerStatusUnknown, fmt.Errorf("pop"))

_, err := or.GetMultipartyStatus(or.ctx)
assert.Regexp(t, "pop", err)

}
17 changes: 4 additions & 13 deletions pkg/core/namespace_status.go
Original file line number Diff line number Diff line change
Expand Up @@ -80,13 +80,13 @@ type NamespaceStatusMultiparty struct {
}

type NamespaceMultipartyStatusOrg struct {
Status NamespaceRegistrationStatus `ffstruct:"NamespaceStatusOrg" json:"status"`
RegistrationMessageID *fftypes.UUID `ffstruct:"NamespaceStatusOrg" json:"registrationMessageId,omitempty"`
Status NamespaceRegistrationStatus `ffstruct:"NamespaceStatusOrg" json:"status"`
PendingRegistrationMessageID *fftypes.UUID `ffstruct:"NamespaceStatusOrg" json:"pendingRegistrationMessageId,omitempty"`
}

type NamespaceMultipartyStatusNode struct {
Status NamespaceRegistrationStatus `ffstruct:"NamespaceStatusNode" json:"status"`
RegistrationMessageID *fftypes.UUID `ffstruct:"NamespaceStatusNode" json:"registrationMessageId,omitempty"`
Status NamespaceRegistrationStatus `ffstruct:"NamespaceStatusNode" json:"status"`
PendingRegistrationMessageID *fftypes.UUID `ffstruct:"NamespaceStatusNode" json:"pendingRegistrationMessageId,omitempty"`
}

type NamespaceMultipartyStatus struct {
Expand All @@ -95,12 +95,3 @@ type NamespaceMultipartyStatus struct {
Node NamespaceMultipartyStatusNode `ffstruct:"NamespaceMultipartyStatus" json:"node"`
Contracts *MultipartyContractsWithActiveStatus `ffstruct:"NamespaceMultipartyStatus" json:"contracts,omitempty"`
}

type MinimalListenerCheckpoint struct {
Block int64 `json:"block"`
}

type MinimalListenerStatus struct {
Checkpoint MinimalListenerCheckpoint `json:"checkpoint"`
Catchup bool `json:"catchup"`
}

0 comments on commit a927a4f

Please sign in to comment.