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:
Travis Nielsen authored and GitHub committed 2017-10-17 10:01:48 -07:00
commit fc794d7835
4 files changed
+44 -58

No files matched your search

+30 -13
View File
@@ -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)
}
+7 -21
View File
@@ -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)
}
+2 -2
View File
@@ -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")
}