Skip to content
This repository was archived by the owner on Oct 29, 2023. It is now read-only.

Commit 798a786

Browse files
authored
Develop (#1)
* refactor: Move functions and constants in resource utils * chore: Update gitignore to ignore coverage report * test: Add test for resources utils * fix: Fix dependency lock file * test: Add tests for version * feat: Test if configuration is valid before using it * refactor: Rename function in resource * fix: Errors not constants * fix: variable already exists
1 parent 7b44409 commit 798a786

10 files changed

Lines changed: 225 additions & 26 deletions

File tree

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -333,3 +333,6 @@ ASALocalRun/
333333
bin/
334334
vendor/
335335
_dist/
336+
c.out
337+
coverage.html
338+

Gopkg.lock

Lines changed: 62 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Gopkg.toml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,3 +80,7 @@
8080
[[constraint]]
8181
branch = "master"
8282
name = "github.com/dimiro1/health"
83+
84+
[[constraint]]
85+
name = "github.com/stretchr/testify"
86+
version = "1.1.4"

Makefile

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -74,10 +74,11 @@ docker-publish-latest:
7474
docker push oxynozeta/kubernetes-tagger:latest
7575

7676
test: dep ## Run unittests
77-
$(GO) test -short ${PKG_LIST}
77+
$(GO) test -short -cover -coverprofile=c.out ${PKG_LIST}
7878

79-
race: dep ## Run data race detector
80-
$(GO) test -race -short ${PKG_LIST}
79+
.PHONY: coverage-report
80+
coverage-report:
81+
$(GO) tool cover -html=c.out -o coverage.html
8182

8283
.PHONY: clean
8384
clean:

pkg/kubernetes-tagger/business/model.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,12 @@ func (context *Context) runForPV(pv *v1.PersistentVolume) error {
5656
return nil
5757
}
5858

59+
// Check if configuration is valid before continue
60+
err = resource.CheckIfConfigurationValid()
61+
if err != nil {
62+
return err
63+
}
64+
5965
// Get actual tags
6066
actualTags, err := resource.GetActualTags()
6167
if err != nil {

pkg/kubernetes-tagger/resources/awsvolume.go

Lines changed: 19 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package resources
22

33
import (
4+
"errors"
45
"fmt"
56
"net/url"
67
"strings"
@@ -12,11 +13,15 @@ import (
1213
"github.com/aws/aws-sdk-go/service/ec2"
1314
"github.com/oxyno-zeta/kubernetes-tagger/pkg/kubernetes-tagger/config"
1415
v1 "k8s.io/api/core/v1"
15-
k8serrors "k8s.io/apimachinery/pkg/api/errors"
16-
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1716
"k8s.io/client-go/kubernetes"
1817
)
1918

19+
// ErrEmptyAWSConfiguration Error Empty AWS Configuration
20+
var ErrEmptyAWSConfiguration = errors.New("AWS configuration is empty")
21+
22+
// ErrEmptyAWSRegionConfiguration Error Empty AWS Region Configuration
23+
var ErrEmptyAWSRegionConfiguration = errors.New("AWS Region is empty in configuration")
24+
2025
// AWSVolume AWS Volume
2126
type AWSVolume struct {
2227
resourceType string
@@ -28,12 +33,6 @@ type AWSVolume struct {
2833
log *logrus.Entry
2934
}
3035

31-
// AWSVolumeResourceType AWS Volume Resource Type
32-
const AWSVolumeResourceType = "volume"
33-
34-
// AWSResourcePlatform AWS Resource Platform
35-
const AWSResourcePlatform = "aws"
36-
3736
// Type Get type
3837
func (av *AWSVolume) Type() string {
3938
return av.resourceType
@@ -84,9 +83,20 @@ func isAWSVolumeResource(pv *v1.PersistentVolume) bool {
8483
return pv.Spec.AWSElasticBlockStore != nil
8584
}
8685

86+
// CheckIfConfigurationValid Check if configuration is valid
87+
func (av *AWSVolume) CheckIfConfigurationValid() error {
88+
if av.awsConfig == nil {
89+
return ErrEmptyAWSConfiguration
90+
}
91+
if av.awsConfig.Region == "" {
92+
return ErrEmptyAWSRegionConfiguration
93+
}
94+
return nil
95+
}
96+
8797
// GetAvailableTagValues Get available tags
8898
func (av *AWSVolume) GetAvailableTagValues() (map[string]interface{}, error) {
89-
pvc, err := av.getPersistentVolumeClaim()
99+
pvc, err := getPersistentVolumeClaim(av.persistentVolume, av.k8sClient)
90100
if err != nil {
91101
return nil, err
92102
}
@@ -222,16 +232,3 @@ func (av *AWSVolume) getAWSEC2Client() (*ec2.EC2, error) {
222232
svc := ec2.New(sess)
223233
return svc, nil
224234
}
225-
226-
func (av *AWSVolume) getPersistentVolumeClaim() (*v1.PersistentVolumeClaim, error) {
227-
claimRef := av.persistentVolume.Spec.ClaimRef
228-
if claimRef == nil {
229-
return nil, nil
230-
}
231-
232-
pvc, err := av.k8sClient.CoreV1().PersistentVolumeClaims(claimRef.Namespace).Get(claimRef.Name, metav1.GetOptions{})
233-
if err != nil && !k8serrors.IsNotFound(err) {
234-
return nil, err
235-
}
236-
return pvc, nil
237-
}

pkg/kubernetes-tagger/resources/model.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ type Resource interface {
2323
Type() string
2424
Platform() string
2525
CanBeProcessed() bool
26+
CheckIfConfigurationValid() error
2627
GetAvailableTagValues() (map[string]interface{}, error)
2728
GetActualTags() ([]*Tag, error)
2829
ManageTags(delta *TagDelta) error
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package resources
2+
3+
import (
4+
v1 "k8s.io/api/core/v1"
5+
k8serrors "k8s.io/apimachinery/pkg/api/errors"
6+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
7+
"k8s.io/client-go/kubernetes"
8+
)
9+
10+
// AWSVolumeResourceType AWS Volume Resource Type
11+
const AWSVolumeResourceType = "volume"
12+
13+
// AWSResourcePlatform AWS Resource Platform
14+
const AWSResourcePlatform = "aws"
15+
16+
func getPersistentVolumeClaim(persistentVolume *v1.PersistentVolume, k8sClient kubernetes.Interface) (*v1.PersistentVolumeClaim, error) {
17+
claimRef := persistentVolume.Spec.ClaimRef
18+
if claimRef == nil {
19+
return nil, nil
20+
}
21+
22+
pvc, err := k8sClient.CoreV1().PersistentVolumeClaims(claimRef.Namespace).Get(claimRef.Name, metav1.GetOptions{})
23+
if err != nil && !k8serrors.IsNotFound(err) {
24+
return nil, err
25+
}
26+
return pvc, nil
27+
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package resources
2+
3+
import (
4+
"testing"
5+
6+
"github.com/stretchr/testify/assert"
7+
8+
v1 "k8s.io/api/core/v1"
9+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
10+
testclient "k8s.io/client-go/kubernetes/fake"
11+
)
12+
13+
func TestGetPersistentVolumeClaimWithoutClaimRef(t *testing.T) {
14+
spec := v1.PersistentVolumeSpec{ClaimRef: nil}
15+
pv := v1.PersistentVolume{Spec: spec}
16+
17+
// Call code
18+
res, err := getPersistentVolumeClaim(&pv, nil)
19+
20+
assert.Nil(t, res)
21+
assert.Nil(t, err)
22+
}
23+
24+
func TestGetPersistentVolumeClaimWithClaimNotFound(t *testing.T) {
25+
claimRef := v1.ObjectReference{Namespace: "test-claim-ref-namespace", Name: "test-claim-ref-name"}
26+
spec := v1.PersistentVolumeSpec{ClaimRef: &claimRef}
27+
pv := v1.PersistentVolume{Spec: spec}
28+
29+
client := testclient.NewSimpleClientset()
30+
31+
// Call code
32+
res, err := getPersistentVolumeClaim(&pv, client)
33+
34+
assert.Nil(t, res)
35+
assert.Nil(t, err)
36+
}
37+
38+
func TestGetPersistentVolumeClaimWithClaimFound(t *testing.T) {
39+
claimRefNamespace := "test-claim-ref-namespace"
40+
claimRefName := "test-claim-ref-name"
41+
claimRef := v1.ObjectReference{Namespace: claimRefNamespace, Name: claimRefName}
42+
spec := v1.PersistentVolumeSpec{ClaimRef: &claimRef}
43+
pv := v1.PersistentVolume{Spec: spec}
44+
45+
// PVC
46+
pvc := &v1.PersistentVolumeClaim{ObjectMeta: metav1.ObjectMeta{Name: claimRefName, Namespace: claimRefNamespace}}
47+
48+
client := testclient.NewSimpleClientset(pvc)
49+
50+
// Call code
51+
res, err := getPersistentVolumeClaim(&pv, client)
52+
53+
assert.NotNil(t, res)
54+
assert.Nil(t, err)
55+
assert.Equal(t, pvc, res)
56+
}

0 commit comments

Comments
 (0)