mirror of
https://github.com/ceph/ceph-csi.git
synced 2024-11-09 16:00:22 +00:00
rbd: add unit test for checkHealthyPrimary
Removed the code in checkHealthyPrimary which
makes the ceph call, passing it as input now.
Added unit test for checkHealthyPrimary function
Signed-off-by: Madhu Rajanna <madhupr007@gmail.com>
(cherry picked from commit 8a47904e8f
)
This commit is contained in:
parent
0e67c8da24
commit
08de15cebe
@ -580,7 +580,12 @@ func (rs *ReplicationServer) PromoteVolume(ctx context.Context,
|
||||
}
|
||||
}
|
||||
|
||||
err = checkHealthyPrimary(ctx, rbdVol)
|
||||
mirrorStatus, err := rbdVol.getImageMirroringStatus()
|
||||
if err != nil {
|
||||
return nil, status.Error(codes.Internal, err.Error())
|
||||
}
|
||||
|
||||
err = checkHealthyPrimary(ctx, rbdVol, mirrorStatus)
|
||||
if err != nil {
|
||||
return nil, status.Error(codes.Internal, err.Error())
|
||||
}
|
||||
@ -617,11 +622,7 @@ func (rs *ReplicationServer) PromoteVolume(ctx context.Context,
|
||||
// checkHealthyPrimary checks if the image is a healhty primary or not.
|
||||
// healthy primary image will be in up+stopped state, for states other
|
||||
// than this it returns an error message.
|
||||
func checkHealthyPrimary(ctx context.Context, rbdVol *rbdVolume) error {
|
||||
mirrorStatus, err := rbdVol.getImageMirroringStatus()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
func checkHealthyPrimary(ctx context.Context, rbdVol *rbdVolume, mirrorStatus *librbd.GlobalMirrorImageStatus) error {
|
||||
localStatus, err := mirrorStatus.LocalStatus()
|
||||
if err != nil {
|
||||
// LocalStatus can fail if the local site status is not found in
|
||||
|
@ -279,3 +279,75 @@ func TestCheckVolumeResyncStatus(t *testing.T) {
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func Test_checkHealthyPrimary(t *testing.T) {
|
||||
t.Parallel()
|
||||
rbdVol := &rbdVolume{
|
||||
rbdImage: rbdImage{
|
||||
RbdImageName: "test",
|
||||
Pool: "test-pool",
|
||||
},
|
||||
}
|
||||
tests := []struct {
|
||||
name string
|
||||
ctx context.Context
|
||||
rbdVol *rbdVolume
|
||||
mirrorStatus *librbd.GlobalMirrorImageStatus
|
||||
wantErr bool
|
||||
}{
|
||||
{
|
||||
name: "when image is in up+stopped state",
|
||||
ctx: context.TODO(),
|
||||
rbdVol: rbdVol,
|
||||
mirrorStatus: &librbd.GlobalMirrorImageStatus{
|
||||
SiteStatuses: []librbd.SiteMirrorImageStatus{
|
||||
{
|
||||
MirrorUUID: "",
|
||||
State: librbd.MirrorImageStatusStateStopped,
|
||||
Up: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
wantErr: false,
|
||||
},
|
||||
{
|
||||
name: "when image is in up+error state",
|
||||
ctx: context.TODO(),
|
||||
rbdVol: rbdVol,
|
||||
mirrorStatus: &librbd.GlobalMirrorImageStatus{
|
||||
SiteStatuses: []librbd.SiteMirrorImageStatus{
|
||||
{
|
||||
MirrorUUID: "",
|
||||
State: librbd.MirrorImageStatusStateError,
|
||||
Up: false,
|
||||
},
|
||||
},
|
||||
},
|
||||
wantErr: true,
|
||||
},
|
||||
{
|
||||
name: "when image is in up+replaying state",
|
||||
ctx: context.TODO(),
|
||||
rbdVol: rbdVol,
|
||||
mirrorStatus: &librbd.GlobalMirrorImageStatus{
|
||||
SiteStatuses: []librbd.SiteMirrorImageStatus{
|
||||
{
|
||||
MirrorUUID: "",
|
||||
State: librbd.MirrorImageStatusStateReplaying,
|
||||
Up: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
wantErr: true,
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
ts := tt
|
||||
t.Run(ts.name, func(t *testing.T) {
|
||||
t.Parallel()
|
||||
if err := checkHealthyPrimary(ts.ctx, ts.rbdVol, ts.mirrorStatus); (err != nil) != ts.wantErr {
|
||||
t.Errorf("checkHealthyPrimary() error = %v, wantErr %v", err, ts.wantErr)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user