mirror of
https://github.com/kastenhq/kubestr.git
synced 2024-12-15 17:50:57 +00:00
2cf1758a0c
* Adding the kubestr browse pvc command. Handling kubestr browse support for backward compatibility. * Adding browse snapshot command. Updating browse command to browse pvc command. * chore(deps): bump github/codeql-action in the github-actions group (#272) Bumps the github-actions group with 1 update: [github/codeql-action](https://github.com/github/codeql-action). Updates `github/codeql-action` from 3.25.12 to 3.25.13 - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](4fa2a79536...2d790406f5
) --- updated-dependencies: - dependency-name: github/codeql-action dependency-type: direct:production update-type: version-update:semver-patch dependency-group: github-actions ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump docker/build-push-action in the docker group (#273) Bumps the docker group with 1 update: [docker/build-push-action](https://github.com/docker/build-push-action). Updates `docker/build-push-action` from 6.3.0 to 6.4.1 - [Release notes](https://github.com/docker/build-push-action/releases) - [Commits](1a162644f9...1ca370b3a9
) --- updated-dependencies: - dependency-name: docker/build-push-action dependency-type: direct:production update-type: version-update:semver-minor dependency-group: docker ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Removing unused snapshot function parameter in cleanup * Adding mock tests for SnapshotBrowserStepper * Adding Deprecated msg to the 'browse' command * Adding fake tests for snapshot_inspector.go * Renamed testcase CSITestSuite.TestCreateInspectorApplication to TestCreateInspectorApplicationForPVC * Adding snapshot_inspector_steps_test.go * Updating Deprecated msg for 'browse' command * Making namespace, runAsUser & localport flags persistent * Removing namespace, runAsUser & localport flags for browse snapshot because we made those persistent * Removing storage class flag * Update cmd/rootCmd.go Co-authored-by: Sirish Bathina <sirish@kasten.io> --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Sirish Bathina <sirish@kasten.io>
192 lines
5.6 KiB
Go
192 lines
5.6 KiB
Go
package csi
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"github.com/golang/mock/gomock"
|
|
"github.com/kastenhq/kubestr/pkg/csi/mocks"
|
|
"github.com/kastenhq/kubestr/pkg/csi/types"
|
|
snapv1 "github.com/kubernetes-csi/external-snapshotter/client/v4/apis/volumesnapshot/v1"
|
|
. "gopkg.in/check.v1"
|
|
v1 "k8s.io/api/core/v1"
|
|
sv1 "k8s.io/api/storage/v1"
|
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
"k8s.io/apimachinery/pkg/runtime"
|
|
"k8s.io/client-go/dynamic"
|
|
fakedynamic "k8s.io/client-go/dynamic/fake"
|
|
"k8s.io/client-go/kubernetes"
|
|
"k8s.io/client-go/kubernetes/fake"
|
|
)
|
|
|
|
func (s *CSITestSuite) TestRunSnapshotBrowseHelper(c *C) {
|
|
ctx := context.Background()
|
|
type fields struct {
|
|
stepperOps *mocks.MockSnapshotBrowserStepper
|
|
}
|
|
for _, tc := range []struct {
|
|
kubeCli kubernetes.Interface
|
|
dynCli dynamic.Interface
|
|
args *types.SnapshotBrowseArgs
|
|
prepare func(f *fields)
|
|
errChecker Checker
|
|
}{
|
|
{
|
|
// success
|
|
kubeCli: fake.NewSimpleClientset(),
|
|
dynCli: fakedynamic.NewSimpleDynamicClient(runtime.NewScheme()),
|
|
args: &types.SnapshotBrowseArgs{},
|
|
prepare: func(f *fields) {
|
|
gomock.InOrder(
|
|
f.stepperOps.EXPECT().ValidateArgs(gomock.Any(), gomock.Any()).Return(
|
|
&snapv1.VolumeSnapshot{}, &sv1.StorageClass{}, nil,
|
|
),
|
|
f.stepperOps.EXPECT().CreateInspectorApplication(gomock.Any(), gomock.Any(),
|
|
&snapv1.VolumeSnapshot{}, &sv1.StorageClass{},
|
|
).Return(
|
|
&v1.Pod{
|
|
ObjectMeta: metav1.ObjectMeta{
|
|
Name: "pod1",
|
|
Namespace: "ns",
|
|
},
|
|
},
|
|
&v1.PersistentVolumeClaim{
|
|
ObjectMeta: metav1.ObjectMeta{
|
|
Name: "pvc1",
|
|
Namespace: "ns",
|
|
},
|
|
},
|
|
nil,
|
|
),
|
|
f.stepperOps.EXPECT().PortForwardAPod(gomock.Any(),
|
|
&v1.Pod{
|
|
ObjectMeta: metav1.ObjectMeta{
|
|
Name: "pod1",
|
|
Namespace: "ns",
|
|
},
|
|
}, gomock.Any(),
|
|
).Return(nil),
|
|
f.stepperOps.EXPECT().Cleanup(gomock.Any(),
|
|
&v1.PersistentVolumeClaim{
|
|
ObjectMeta: metav1.ObjectMeta{
|
|
Name: "pvc1",
|
|
Namespace: "ns",
|
|
},
|
|
},
|
|
&v1.Pod{
|
|
ObjectMeta: metav1.ObjectMeta{
|
|
Name: "pod1",
|
|
Namespace: "ns",
|
|
},
|
|
},
|
|
),
|
|
)
|
|
},
|
|
errChecker: IsNil,
|
|
},
|
|
{
|
|
// portforward failure
|
|
kubeCli: fake.NewSimpleClientset(),
|
|
dynCli: fakedynamic.NewSimpleDynamicClient(runtime.NewScheme()),
|
|
args: &types.SnapshotBrowseArgs{},
|
|
prepare: func(f *fields) {
|
|
gomock.InOrder(
|
|
f.stepperOps.EXPECT().ValidateArgs(gomock.Any(), gomock.Any()).Return(nil, nil, nil),
|
|
f.stepperOps.EXPECT().CreateInspectorApplication(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(nil, nil, nil),
|
|
f.stepperOps.EXPECT().PortForwardAPod(gomock.Any(), gomock.Any(), gomock.Any()).Return(fmt.Errorf("portforward error")),
|
|
f.stepperOps.EXPECT().Cleanup(gomock.Any(), gomock.Any(), gomock.Any()),
|
|
)
|
|
},
|
|
errChecker: NotNil,
|
|
},
|
|
{
|
|
// createapp failure
|
|
kubeCli: fake.NewSimpleClientset(),
|
|
dynCli: fakedynamic.NewSimpleDynamicClient(runtime.NewScheme()),
|
|
args: &types.SnapshotBrowseArgs{},
|
|
prepare: func(f *fields) {
|
|
gomock.InOrder(
|
|
f.stepperOps.EXPECT().ValidateArgs(gomock.Any(), gomock.Any()).Return(nil, nil, nil),
|
|
f.stepperOps.EXPECT().CreateInspectorApplication(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(nil, nil, fmt.Errorf("createapp error")),
|
|
f.stepperOps.EXPECT().Cleanup(gomock.Any(), gomock.Any(), gomock.Any()),
|
|
)
|
|
},
|
|
errChecker: NotNil,
|
|
},
|
|
{
|
|
// fetch snapshot failure
|
|
kubeCli: fake.NewSimpleClientset(),
|
|
dynCli: fakedynamic.NewSimpleDynamicClient(runtime.NewScheme()),
|
|
args: &types.SnapshotBrowseArgs{},
|
|
prepare: func(f *fields) {
|
|
gomock.InOrder(
|
|
f.stepperOps.EXPECT().ValidateArgs(gomock.Any(), gomock.Any()).Return(nil, nil, fmt.Errorf("snapshot error")),
|
|
f.stepperOps.EXPECT().Cleanup(gomock.Any(), gomock.Any(), gomock.Any()),
|
|
)
|
|
},
|
|
errChecker: NotNil,
|
|
},
|
|
{
|
|
// validate failure
|
|
kubeCli: fake.NewSimpleClientset(),
|
|
dynCli: fakedynamic.NewSimpleDynamicClient(runtime.NewScheme()),
|
|
args: &types.SnapshotBrowseArgs{},
|
|
prepare: func(f *fields) {
|
|
gomock.InOrder(
|
|
f.stepperOps.EXPECT().ValidateArgs(gomock.Any(), gomock.Any()).Return(nil, nil, fmt.Errorf("validate error")),
|
|
f.stepperOps.EXPECT().Cleanup(gomock.Any(), gomock.Any(), gomock.Any()),
|
|
)
|
|
},
|
|
errChecker: NotNil,
|
|
},
|
|
{
|
|
// emptycli failure
|
|
kubeCli: nil,
|
|
dynCli: fakedynamic.NewSimpleDynamicClient(runtime.NewScheme()),
|
|
args: &types.SnapshotBrowseArgs{},
|
|
prepare: func(f *fields) {
|
|
gomock.InOrder(
|
|
f.stepperOps.EXPECT().Cleanup(gomock.Any(), gomock.Any(), gomock.Any()),
|
|
)
|
|
},
|
|
errChecker: NotNil,
|
|
},
|
|
{
|
|
// emptydyncli failure
|
|
kubeCli: fake.NewSimpleClientset(),
|
|
dynCli: nil,
|
|
args: &types.SnapshotBrowseArgs{},
|
|
prepare: func(f *fields) {
|
|
gomock.InOrder(
|
|
f.stepperOps.EXPECT().Cleanup(gomock.Any(), gomock.Any(), gomock.Any()),
|
|
)
|
|
},
|
|
errChecker: NotNil,
|
|
},
|
|
} {
|
|
ctrl := gomock.NewController(c)
|
|
defer ctrl.Finish()
|
|
f := fields{
|
|
stepperOps: mocks.NewMockSnapshotBrowserStepper(ctrl),
|
|
}
|
|
if tc.prepare != nil {
|
|
tc.prepare(&f)
|
|
}
|
|
runner := &SnapshotBrowseRunner{
|
|
KubeCli: tc.kubeCli,
|
|
DynCli: tc.dynCli,
|
|
browserSteps: f.stepperOps,
|
|
}
|
|
err := runner.RunSnapshotBrowseHelper(ctx, tc.args)
|
|
c.Check(err, tc.errChecker)
|
|
}
|
|
}
|
|
|
|
func (s *CSITestSuite) TestSnapshotBrowseRunner(c *C) {
|
|
ctx := context.Background()
|
|
r := &SnapshotBrowseRunner{
|
|
browserSteps: &snapshotBrowserSteps{},
|
|
}
|
|
err := r.RunSnapshotBrowseHelper(ctx, nil)
|
|
c.Check(err, NotNil)
|
|
}
|