Merge pull request #1085 from dangula/pr_fix_blockTest_issues
adding clean up check to wait until pvc is deleted
This commit is contained in:
commit
fc794d7835
4 files changed
+44
-58
No files matched your search
@@ -533,15 +533,16 @@ func (k8sh *K8sHelper) IsStorageClassPresent(name string) (bool, error) {
|
||||
}
|
||||
|
||||
//GetPVCStatus returns status of PVC
|
||||
func (k8sh *K8sHelper) GetPVCStatus(name string) (string, error) {
|
||||
args := []string{"get", "pvc", "-o", "jsonpath='{.items[*].metadata.name}'"}
|
||||
result, err := k8sh.Kubectl(args...)
|
||||
if strings.Contains(result, name) {
|
||||
args := []string{"get", "pvc", name, "-o", "jsonpath='{.status.phase}'"}
|
||||
res, _ := k8sh.Kubectl(args...)
|
||||
return res, nil
|
||||
func (k8sh *K8sHelper) GetPVCStatus(namespace string, name string) (v1.PersistentVolumeClaimPhase, error) {
|
||||
getOpts := metav1.GetOptions{}
|
||||
|
||||
pvc, err := k8sh.Clientset.PersistentVolumeClaims(namespace).Get(name, getOpts)
|
||||
if err != nil {
|
||||
return v1.ClaimLost, fmt.Errorf("PVC %s not found,err->%v", name, err)
|
||||
}
|
||||
return "PVC NOT FOUND", fmt.Errorf("PVC %s not found,err->%v", name, err)
|
||||
|
||||
return pvc.Status.Phase, nil
|
||||
|
||||
}
|
||||
|
||||
//IsPodInExpectedState waits for 90s for a pod to be an expected state
|
||||
@@ -638,16 +639,32 @@ func (k8sh *K8sHelper) WaitUntilPodIsDeleted(podNamePattern string) bool {
|
||||
|
||||
//WaitUntilPVCIsBound waits for a PVC to be in bound state for 90 seconds
|
||||
//if PVC goes to Bound state within 90s True is returned, if not false
|
||||
func (k8sh *K8sHelper) WaitUntilPVCIsBound(pvcname string) bool {
|
||||
func (k8sh *K8sHelper) WaitUntilPVCIsBound(namespace string, pvcname string) bool {
|
||||
|
||||
inc := 0
|
||||
for inc < RetryLoop {
|
||||
out, err := k8sh.GetPVCStatus(pvcname)
|
||||
if strings.Contains(out, "Bound") {
|
||||
out, err := k8sh.GetPVCStatus(namespace, pvcname)
|
||||
if err == nil {
|
||||
if out == v1.PersistentVolumeClaimPhase(v1.ClaimBound) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
logger.Infof("waiting for PVC %s to be bound. current=%s. err=%+v", pvcname, out, err)
|
||||
inc++
|
||||
time.Sleep(RetryInterval * time.Second)
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (k8sh *K8sHelper) WaitUntilPVCIsDeleted(namespace string, pvcname string) bool {
|
||||
getOpts := metav1.GetOptions{}
|
||||
inc := 0
|
||||
for inc < RetryLoop {
|
||||
_, err := k8sh.Clientset.PersistentVolumeClaims(namespace).Get(pvcname, getOpts)
|
||||
if err != nil {
|
||||
return true
|
||||
}
|
||||
|
||||
logger.Infof("waiting for PVC to be bound. current=%s. err=%+v", out, err)
|
||||
logger.Infof("waiting for PVC %s to be deleted.", pvcname)
|
||||
inc++
|
||||
time.Sleep(RetryInterval * time.Second)
|
||||
}
|
||||
|
||||
@@ -20,8 +20,6 @@ import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"strings"
|
||||
|
||||
"github.com/rook/rook/tests/framework/clients"
|
||||
"github.com/rook/rook/tests/framework/utils"
|
||||
"github.com/stretchr/testify/assert"
|
||||
@@ -55,7 +53,7 @@ func runBlockE2ETest(helper *clients.TestClient, k8sh *utils.K8sHelper, s suite.
|
||||
require.Nil(s.T(), cbErr)
|
||||
require.True(s.T(), retryBlockImageCountCheck(helper, k8sh, len(initBlockImages), 1), "Make sure a new block is created")
|
||||
logger.Infof("Block Storage created successfully")
|
||||
require.True(s.T(), k8sh.WaitUntilPVCIsBound(blockName), "Make sure PVC is Bound")
|
||||
require.True(s.T(), k8sh.WaitUntilPVCIsBound(defaultNamespace, blockName), "Make sure PVC is Bound")
|
||||
|
||||
logger.Infof("step 2: Mount block storage")
|
||||
_, mtErr := rbc.BlockMap(getBlockPodDefintion(podName, blockName), blockMountPath)
|
||||
@@ -121,7 +119,7 @@ func runBlockE2ETestLite(helper *clients.TestClient, k8sh *utils.K8sHelper, s su
|
||||
require.Contains(s.T(), res1, "persistentvolumeclaim \"test-block-claim\" created", "Make sure pvc is created")
|
||||
require.NoError(s.T(), err)
|
||||
|
||||
require.True(s.T(), isPVCBound(k8sh, "test-block-claim"))
|
||||
require.True(s.T(), k8sh.WaitUntilPVCIsBound(defaultNamespace, "test-block-claim"))
|
||||
|
||||
//Make sure new block is created
|
||||
b, _ := bc.BlockList()
|
||||
@@ -131,11 +129,13 @@ func runBlockE2ETestLite(helper *clients.TestClient, k8sh *utils.K8sHelper, s su
|
||||
|
||||
//Delete pvc and storageclass
|
||||
_, err = k8sh.ResourceOperationFromTemplate("delete", volumeDef, sc)
|
||||
require.NoError(s.T(), err)
|
||||
time.Sleep(2 * time.Second)
|
||||
assert.NoError(s.T(), err)
|
||||
|
||||
assert.True(s.T(), k8sh.WaitUntilPVCIsDeleted(defaultNamespace, "test-block-claim"))
|
||||
require.True(s.T(), retryBlockImageCountCheck(helper, k8sh, initBlockCount, 0), "Make sure a new block is deleted")
|
||||
|
||||
b, _ = bc.BlockList()
|
||||
require.Equal(s.T(), initBlockCount, len(b), "Make sure new block image is deleted")
|
||||
assert.Equal(s.T(), initBlockCount, len(b), "Make sure new block image is deleted")
|
||||
|
||||
checkPoolDeleted(helper, s, poolName)
|
||||
}
|
||||
@@ -260,17 +260,3 @@ spec:
|
||||
claimName: ` + blockName + `
|
||||
restartPolicy: Never`
|
||||
}
|
||||
|
||||
func isPVCBound(k8sh *utils.K8sHelper, name string) bool {
|
||||
inc := 0
|
||||
for inc < utils.RetryLoop {
|
||||
status, _ := k8sh.GetPVCStatus(name)
|
||||
if strings.TrimRight(status, "\n") == "'Bound'" {
|
||||
return true
|
||||
}
|
||||
time.Sleep(time.Second * utils.RetryInterval)
|
||||
inc++
|
||||
|
||||
}
|
||||
return false
|
||||
}
|
||||
@@ -18,9 +18,7 @@ package integration
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/rook/rook/tests/framework/clients"
|
||||
"github.com/rook/rook/tests/framework/contracts"
|
||||
@@ -117,7 +115,7 @@ func (s *K8sBlockImageCreateSuite) TestCreatePVCWhenNoStorageClassExists() {
|
||||
require.NoError(s.T(), err)
|
||||
|
||||
//check status of PVC
|
||||
pvcStatus, err := s.kh.GetPVCStatus(claimName)
|
||||
pvcStatus, err := s.kh.GetPVCStatus(defaultNamespace, claimName)
|
||||
require.Nil(s.T(), err)
|
||||
require.Contains(s.T(), pvcStatus, "Pending", "Makes sure PVC is in Pending state")
|
||||
|
||||
@@ -151,7 +149,7 @@ func (s *K8sBlockImageCreateSuite) TestCreatePVCWhenStorageClassExists() {
|
||||
require.NoError(s.T(), err2)
|
||||
|
||||
//check status of PVC
|
||||
require.True(s.T(), s.isPVCBound(claimName))
|
||||
require.True(s.T(), s.kh.WaitUntilPVCIsBound(defaultNamespace, claimName))
|
||||
|
||||
//check block image count
|
||||
b, _ := s.bc.BlockList()
|
||||
@@ -165,7 +163,7 @@ func (s *K8sBlockImageCreateSuite) TestCreateSamePVCTwice() {
|
||||
claimName := "test-twice-claim"
|
||||
poolName := "test-twice-pool"
|
||||
defer s.tearDownTest(claimName, poolName)
|
||||
status, _ := s.kh.GetPVCStatus(claimName)
|
||||
status, _ := s.kh.GetPVCStatus(defaultNamespace, claimName)
|
||||
logger.Infof("PVC %s status: %s", claimName, status)
|
||||
s.bc.BlockList()
|
||||
|
||||
@@ -186,7 +184,7 @@ func (s *K8sBlockImageCreateSuite) TestCreateSamePVCTwice() {
|
||||
require.NoError(s.T(), err2)
|
||||
|
||||
logger.Infof("check status of PVC")
|
||||
require.True(s.T(), s.isPVCBound(claimName))
|
||||
require.True(s.T(), s.kh.WaitUntilPVCIsBound(defaultNamespace, claimName))
|
||||
|
||||
b1, err := s.bc.BlockList()
|
||||
assert.Nil(s.T(), err)
|
||||
@@ -198,7 +196,7 @@ func (s *K8sBlockImageCreateSuite) TestCreateSamePVCTwice() {
|
||||
require.NoError(s.T(), err3)
|
||||
|
||||
logger.Infof("check status of PVC")
|
||||
require.True(s.T(), s.isPVCBound(claimName))
|
||||
require.True(s.T(), s.kh.WaitUntilPVCIsBound(defaultNamespace, claimName))
|
||||
|
||||
logger.Infof("check block image count")
|
||||
b2, _ := s.bc.BlockList()
|
||||
@@ -233,21 +231,6 @@ func (s *K8sBlockImageCreateSuite) pvcOperation(claimName string, action string)
|
||||
|
||||
}
|
||||
|
||||
func (s *K8sBlockImageCreateSuite) isPVCBound(name string) bool {
|
||||
inc := 0
|
||||
for inc < utils.RetryLoop {
|
||||
status, _ := s.kh.GetPVCStatus(name)
|
||||
logger.Infof("PVC %s status: %s", name, status)
|
||||
if strings.TrimRight(status, "\n") == "'Bound'" {
|
||||
return true
|
||||
}
|
||||
time.Sleep(time.Second * utils.RetryInterval)
|
||||
inc++
|
||||
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (s *K8sBlockImageCreateSuite) TearDownSuite() {
|
||||
s.installer.UninstallRookFromK8s("rook", false)
|
||||
}
|
||||
@@ -171,14 +171,14 @@ spec:
|
||||
require.True(s.T(), present, "Make sure storageclass is present")
|
||||
}
|
||||
//create mysql pod
|
||||
if _, err := s.kh.GetPVCStatus("mysql-pv-claim"); err != nil {
|
||||
if _, err := s.kh.GetPVCStatus(defaultNamespace, "mysql-pv-claim"); err != nil {
|
||||
logger.Infof("Create PVC")
|
||||
|
||||
s.kh.ResourceOperation("create", s.mysqlAppPath)
|
||||
|
||||
//wait till mysql pod is up
|
||||
require.True(s.T(), s.kh.IsPodInExpectedState("mysqldb", "", "Running"))
|
||||
pvcStatus, err := s.kh.GetPVCStatus("mysql-pv-claim")
|
||||
pvcStatus, err := s.kh.GetPVCStatus(defaultNamespace, "mysql-pv-claim")
|
||||
require.Nil(s.T(), err)
|
||||
require.Contains(s.T(), pvcStatus, "Bound")
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user