Skip to content

Commit

Permalink
fix service & tests
Browse files Browse the repository at this point in the history
Signed-off-by: dmitry.lopatin <dmitry.lopatin@flant.com>
  • Loading branch information
LopatinDmitr committed Oct 22, 2024
1 parent 84b586b commit 405e71e
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 46 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -32,58 +32,58 @@ func NewVirtualImageStorageClassService(settings config.VirtualImageStorageClass
}
}

func (svc *VirtualImageStorageClassService) GetStorageClass(storageClassFromSpec, clusterDefaultStorageClassName string) (string, error) {
func (svc *VirtualImageStorageClassService) GetStorageClass(storageClassFromSpec *string, clusterDefaultStorageClassName string) (*string, error) {
if svc.storageClassSettings.DefaultStorageClassName == "" && len(svc.storageClassSettings.AllowedStorageClassNames) == 0 {
if svc.storageClassSettings.StorageClassName == "" {
return storageClassFromSpec, nil
}

if storageClassFromSpec == "" || storageClassFromSpec == svc.storageClassSettings.StorageClassName {
return svc.storageClassSettings.StorageClassName, nil
if storageClassFromSpec == nil || *storageClassFromSpec == "" || *storageClassFromSpec == svc.storageClassSettings.StorageClassName {
return &svc.storageClassSettings.StorageClassName, nil
}

return "", ErrStorageClassNotAvailable
return nil, ErrStorageClassNotAvailable
}

if len(svc.storageClassSettings.AllowedStorageClassNames) > 0 && svc.storageClassSettings.DefaultStorageClassName == "" {
if storageClassFromSpec != "" {
if slices.Contains(svc.storageClassSettings.AllowedStorageClassNames, storageClassFromSpec) {
if storageClassFromSpec != nil && *storageClassFromSpec != "" {
if slices.Contains(svc.storageClassSettings.AllowedStorageClassNames, *storageClassFromSpec) {
return storageClassFromSpec, nil
}

return "", ErrStorageClassNotAvailable
return nil, ErrStorageClassNotAvailable
} else {
if clusterDefaultStorageClassName == "" {
return "", ErrDefaultStorageClassNotFound
return nil, ErrDefaultStorageClassNotFound
}

if slices.Contains(svc.storageClassSettings.AllowedStorageClassNames, clusterDefaultStorageClassName) {
return clusterDefaultStorageClassName, nil
return &clusterDefaultStorageClassName, nil
}

return "", ErrStorageClassNotAvailable
return nil, ErrStorageClassNotAvailable
}
}

if len(svc.storageClassSettings.AllowedStorageClassNames) == 0 && svc.storageClassSettings.DefaultStorageClassName != "" {
if storageClassFromSpec == "" {
return svc.storageClassSettings.DefaultStorageClassName, nil
if storageClassFromSpec == nil || *storageClassFromSpec == "" {
return &svc.storageClassSettings.DefaultStorageClassName, nil
}

if storageClassFromSpec == svc.storageClassSettings.DefaultStorageClassName {
if *storageClassFromSpec == svc.storageClassSettings.DefaultStorageClassName {
return storageClassFromSpec, nil
}

return "", ErrStorageClassNotAvailable
return nil, ErrStorageClassNotAvailable
}

if storageClassFromSpec == "" {
return svc.storageClassSettings.DefaultStorageClassName, nil
if storageClassFromSpec == nil || *storageClassFromSpec == "" {
return &svc.storageClassSettings.DefaultStorageClassName, nil
}

if slices.Contains(svc.storageClassSettings.AllowedStorageClassNames, storageClassFromSpec) {
if slices.Contains(svc.storageClassSettings.AllowedStorageClassNames, *storageClassFromSpec) {
return storageClassFromSpec, nil
}

return "", ErrStorageClassNotAvailable
return nil, ErrStorageClassNotAvailable
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ package service
import (
. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
"k8s.io/utils/ptr"

"github.com/deckhouse/virtualization-controller/pkg/config"
)
Expand All @@ -38,11 +39,11 @@ var _ = Describe("VirtualImageStorageClassService", func() {
It("returns the storageClassFromSpec", func() {
storageClassSettings = config.VirtualImageStorageClassSettings{}
service = NewVirtualImageStorageClassService(storageClassSettings)

storageClass, err := service.GetStorageClass("requested-storage-class", clusterDefaultStorageClass)
sc := ptr.To("requested-storage-class")
storageClass, err := service.GetStorageClass(sc, clusterDefaultStorageClass)

Expect(err).To(BeNil())
Expect(storageClass).To(Equal("requested-storage-class"))
Expect(storageClass).To(Equal(sc))
})
})

Expand All @@ -51,22 +52,22 @@ var _ = Describe("VirtualImageStorageClassService", func() {
storageClassSettings = config.VirtualImageStorageClassSettings{}
service = NewVirtualImageStorageClassService(storageClassSettings)

storageClass, err := service.GetStorageClass("", clusterDefaultStorageClass)
storageClass, err := service.GetStorageClass(nil, clusterDefaultStorageClass)

Expect(err).To(BeNil())
Expect(storageClass).To(Equal(""))
Expect(storageClass).To(BeNil())
})
})

Context("when settings and clusterDefaultStorageClass are empty", func() {
It("returns the storageClassFromSpec", func() {
storageClassSettings = config.VirtualImageStorageClassSettings{}
service = NewVirtualImageStorageClassService(storageClassSettings)

storageClass, err := service.GetStorageClass("requested-storage-class", "")
sc := ptr.To("requested-storage-class")
storageClass, err := service.GetStorageClass(sc, "")

Expect(err).To(BeNil())
Expect(storageClass).To(Equal("requested-storage-class"))
Expect(storageClass).To(Equal(sc))
})
})

Expand All @@ -79,21 +80,21 @@ var _ = Describe("VirtualImageStorageClassService", func() {
})

It("return the StorageClassName if storageClassFromSpec is empty", func() {
storageClass, err := service.GetStorageClass("", "")
storageClass, err := service.GetStorageClass(nil, "")
Expect(err).To(BeNil())
Expect(storageClass).To(Equal(storageClassSettings.StorageClassName))
Expect(storageClass).To(Equal(&storageClassSettings.StorageClassName))
})

It("return the StorageClassName if storageClassFromSpec equal StorageClassName", func() {
storageClass, err := service.GetStorageClass(storageClassSettings.StorageClassName, "")
storageClass, err := service.GetStorageClass(&storageClassSettings.StorageClassName, "")
Expect(err).To(BeNil())
Expect(storageClass).To(Equal(storageClassSettings.StorageClassName))
Expect(storageClass).To(Equal(&storageClassSettings.StorageClassName))
})

It("return the err if storageClassFromSpec not equal StorageClassName", func() {
storageClass, err := service.GetStorageClass("requested-storage-class", "")
sc := ptr.To("requested-storage-class")
_, err := service.GetStorageClass(sc, "")
Expect(err).To(Equal(ErrStorageClassNotAvailable))
Expect(storageClass).To(Equal(""))
})
})

Expand All @@ -107,20 +108,21 @@ var _ = Describe("VirtualImageStorageClassService", func() {
})

It("returns the requested storage class if it's in the allowed list", func() {
storageClass, err := service.GetStorageClass("allowed-storage-class", clusterDefaultStorageClass)
sc := ptr.To("allowed-storage-class")
storageClass, err := service.GetStorageClass(sc, clusterDefaultStorageClass)

Expect(err).To(BeNil())
Expect(storageClass).To(Equal("allowed-storage-class"))
Expect(storageClass).To(Equal(sc))
})

It("returns an error if the requested storage class is not in the allowed list", func() {
_, err := service.GetStorageClass("not-allowed-storage-class", clusterDefaultStorageClass)
_, err := service.GetStorageClass(ptr.To("not-allowed-storage-class"), clusterDefaultStorageClass)

Expect(err).To(Equal(ErrStorageClassNotAvailable))
})

It("returns an error if storageClassFromSpec is empty", func() {
_, err := service.GetStorageClass("", clusterDefaultStorageClass)
_, err := service.GetStorageClass(nil, clusterDefaultStorageClass)

Expect(err).To(Equal(ErrStorageClassNotAvailable))
})
Expand All @@ -136,21 +138,22 @@ var _ = Describe("VirtualImageStorageClassService", func() {
})

It("returns the default storage class if storageClassFromSpec is empty", func() {
storageClass, err := service.GetStorageClass("", clusterDefaultStorageClass)
storageClass, err := service.GetStorageClass(nil, clusterDefaultStorageClass)

Expect(err).To(BeNil())
Expect(storageClass).To(Equal("default-storage-class"))
Expect(storageClass).To(Equal(ptr.To("default-storage-class")))
})

It("returns the requested storage class if it matches the default storage class", func() {
storageClass, err := service.GetStorageClass("default-storage-class", clusterDefaultStorageClass)
sc := ptr.To("default-storage-class")
storageClass, err := service.GetStorageClass(sc, clusterDefaultStorageClass)

Expect(err).To(BeNil())
Expect(storageClass).To(Equal("default-storage-class"))
Expect(storageClass).To(Equal(sc))
})

It("returns an error if the requested storage class does not match the default", func() {
_, err := service.GetStorageClass("different-storage-class", clusterDefaultStorageClass)
_, err := service.GetStorageClass(ptr.To("different-storage-class"), clusterDefaultStorageClass)

Expect(err).To(Equal(ErrStorageClassNotAvailable))
})
Expand All @@ -166,21 +169,22 @@ var _ = Describe("VirtualImageStorageClassService", func() {
})

It("returns the default storage class if storageClassFromSpec is empty", func() {
storageClass, err := service.GetStorageClass("", clusterDefaultStorageClass)
storageClass, err := service.GetStorageClass(nil, clusterDefaultStorageClass)

Expect(err).To(BeNil())
Expect(storageClass).To(Equal("default-storage-class"))
Expect(storageClass).To(Equal(ptr.To("default-storage-class")))
})

It("returns the requested storage class if it's in the allowed list", func() {
storageClass, err := service.GetStorageClass("allowed-storage-class", clusterDefaultStorageClass)
sc := ptr.To("allowed-storage-class")
storageClass, err := service.GetStorageClass(sc, clusterDefaultStorageClass)

Expect(err).To(BeNil())
Expect(storageClass).To(Equal("allowed-storage-class"))
Expect(storageClass).To(Equal(sc))
})

It("returns an error if the requested storage class is not in the allowed list", func() {
_, err := service.GetStorageClass("not-allowed-storage-class", clusterDefaultStorageClass)
_, err := service.GetStorageClass(ptr.To("not-allowed-storage-class"), clusterDefaultStorageClass)

Expect(err).To(Equal(ErrStorageClassNotAvailable))
})
Expand Down

0 comments on commit 405e71e

Please sign in to comment.