Skip to content

Commit

Permalink
Merge pull request #4886 from spacemeshos/fix-nil-pointer
Browse files Browse the repository at this point in the history
Fix nil pointer dereference
  • Loading branch information
fasmat committed Aug 21, 2023
2 parents 11eb5db + e2b7c1d commit 4441f52
Show file tree
Hide file tree
Showing 2 changed files with 83 additions and 0 deletions.
1 change: 1 addition & 0 deletions api/grpcserver/smesher_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -258,6 +258,7 @@ func statusToPbStatus(status *activation.PostSetupStatus) *pb.PostSetupStatus {
if status.LastOpts != nil {
var providerID *uint32
if status.LastOpts.ProviderID.Value() != nil {
providerID = new(uint32)
*providerID = uint32(*status.LastOpts.ProviderID.Value())
}

Expand Down
82 changes: 82 additions & 0 deletions api/grpcserver/smesher_service_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -117,3 +117,85 @@ func TestSmesherService_PostSetupProviders(t *testing.T) {
require.EqualValues(t, providers[1].ID, resp.Providers[1].Id)
require.Equal(t, uint64(100_000), resp.Providers[1].Performance)
}

func TestSmesherService_PostSetupStatus(t *testing.T) {
t.Run("completed", func(t *testing.T) {
ctrl := gomock.NewController(t)
postSetupProvider := activation.NewMockpostSetupProvider(ctrl)
smeshingProvider := activation.NewMockSmeshingProvider(ctrl)
svc := grpcserver.NewSmesherService(postSetupProvider, smeshingProvider, time.Second, activation.DefaultPostSetupOpts(), logtest.New(t).WithName("grpc.Smesher"))

postSetupProvider.EXPECT().Status().Return(&activation.PostSetupStatus{
State: activation.PostSetupStateComplete,
NumLabelsWritten: 1_000,
LastOpts: nil,
})
resp, err := svc.PostSetupStatus(context.Background(), &emptypb.Empty{})
require.NoError(t, err)
require.Equal(t, pb.PostSetupStatus_STATE_COMPLETE, resp.Status.State)
require.EqualValues(t, 1_000, resp.Status.NumLabelsWritten)
require.Nil(t, resp.Status.Opts)
})

t.Run("completed with last Opts", func(t *testing.T) {
ctrl := gomock.NewController(t)
postSetupProvider := activation.NewMockpostSetupProvider(ctrl)
smeshingProvider := activation.NewMockSmeshingProvider(ctrl)
svc := grpcserver.NewSmesherService(postSetupProvider, smeshingProvider, time.Second, activation.DefaultPostSetupOpts(), logtest.New(t).WithName("grpc.Smesher"))

id := activation.PostProviderID{}
id.SetInt64(1)
opts := activation.PostSetupOpts{
DataDir: "data-dir",
NumUnits: 4,
MaxFileSize: 1024,
ProviderID: id,
Throttle: true,
}
postSetupProvider.EXPECT().Status().Return(&activation.PostSetupStatus{
State: activation.PostSetupStateComplete,
NumLabelsWritten: 1_000,
LastOpts: &opts,
})
resp, err := svc.PostSetupStatus(context.Background(), &emptypb.Empty{})
require.NoError(t, err)
require.Equal(t, pb.PostSetupStatus_STATE_COMPLETE, resp.Status.State)
require.EqualValues(t, 1_000, resp.Status.NumLabelsWritten)
require.Equal(t, "data-dir", resp.Status.Opts.DataDir)
require.EqualValues(t, 4, resp.Status.Opts.NumUnits)
require.EqualValues(t, 1024, resp.Status.Opts.MaxFileSize)
require.EqualValues(t, 1, *resp.Status.Opts.ProviderId)
require.True(t, resp.Status.Opts.Throttle)
})

t.Run("in progress", func(t *testing.T) {
ctrl := gomock.NewController(t)
postSetupProvider := activation.NewMockpostSetupProvider(ctrl)
smeshingProvider := activation.NewMockSmeshingProvider(ctrl)
svc := grpcserver.NewSmesherService(postSetupProvider, smeshingProvider, time.Second, activation.DefaultPostSetupOpts(), logtest.New(t).WithName("grpc.Smesher"))

id := activation.PostProviderID{}
id.SetInt64(100)
opts := activation.PostSetupOpts{
DataDir: "data-dir",
NumUnits: 4,
MaxFileSize: 1024,
ProviderID: id,
Throttle: false,
}
postSetupProvider.EXPECT().Status().Return(&activation.PostSetupStatus{
State: activation.PostSetupStateInProgress,
NumLabelsWritten: 1_000,
LastOpts: &opts,
})
resp, err := svc.PostSetupStatus(context.Background(), &emptypb.Empty{})
require.NoError(t, err)
require.Equal(t, pb.PostSetupStatus_STATE_IN_PROGRESS, resp.Status.State)
require.EqualValues(t, 1_000, resp.Status.NumLabelsWritten)
require.Equal(t, "data-dir", resp.Status.Opts.DataDir)
require.EqualValues(t, 4, resp.Status.Opts.NumUnits)
require.EqualValues(t, 1024, resp.Status.Opts.MaxFileSize)
require.EqualValues(t, 100, *resp.Status.Opts.ProviderId)
require.False(t, resp.Status.Opts.Throttle)
})
}

0 comments on commit 4441f52

Please sign in to comment.