using Rook Rest API instead of rook-client pod for testing.

This commit is contained in:
Divesh Angula committed 2017-05-15 13:58:59 -07:00
1 parent 5d619aaf6e
commit b0e25df837
24 files changed
+535 -716

No files matched your search

-1
View File
@@ -11,7 +11,6 @@ spec:
- name: rgw
port: 53390
protocol: TCP
targetPort: 53390
nodePort: 30001
selector:
app: rgw
+19
View File
@@ -0,0 +1,19 @@
apiVersion: v1
kind: Service
metadata:
name: rook-api-external
namespace: rook
labels:
app: rook-api
rook_cluster: rook
spec:
ports:
- name: rook-api
port: 8124
protocol: TCP
nodePort: 30002
selector:
app: rook-api
rook_cluster: rook
sessionAffinity: None
type: NodePort
@@ -3,21 +3,22 @@ package clients
import (
"fmt"
"github.com/rook/rook/e2e/framework/contracts"
"github.com/rook/rook/pkg/model"
)
type k8sRookBlock struct {
type blockOperation struct {
transportClient contracts.ITransportClient
restClient contracts.RestAPIOperator
}
var (
listCmd = []string{"rook", "block", "ls"}
writeDataToBlockPod = []string{"sh", "-c", "WRITE_DATA_CMD"}
readDataFromBlockPod = []string{"cat", "READ_DATA_CMD"}
)
// Constructor to create k8sRookBlock - client to perform rook Block operations on k8s
func CreateK8SRookBlock(client contracts.ITransportClient) *k8sRookBlock {
return &k8sRookBlock{transportClient: client}
// Constructor to create blockOperation - client to perform rook Block operations on k8s
func CreateK8BlockOperation(client contracts.ITransportClient, rookRestClient contracts.RestAPIOperator) *blockOperation {
return &blockOperation{transportClient: client, restClient: rookRestClient}
}
// Function to create a Block using Rook
@@ -25,7 +26,7 @@ func CreateK8SRookBlock(client contracts.ITransportClient) *k8sRookBlock {
//name - path to a yaml file that creates a pvc in k8s - yaml should describe name and size of pvc being created
//size - not user for k8s implementation since its descried on the pvc yaml definition
//Output - k8s create pvc operation output and/or error
func (rb *k8sRookBlock) BlockCreate(name string, size int) (string, error) {
func (rb *blockOperation) BlockCreate(name string, size int) (string, error) {
cmdArgs := []string{name}
out, err, status := rb.transportClient.Create(cmdArgs, nil)
if status == 0 {
@@ -37,9 +38,9 @@ func (rb *k8sRookBlock) BlockCreate(name string, size int) (string, error) {
// Function to delete a Block using Rook
// Input paramaters -
//name - path to a yaml file that where pvc is desirbed - delete is run on the the yaml definition
//name - path to a yaml file that where pvc is described - delete is run on the the yaml definition
//Output - k8s delete pvc operation output and/or error
func (rb *k8sRookBlock) BlockDelete(name string) (string, error) {
func (rb *blockOperation) BlockDelete(name string) (string, error) {
cmdArgs := []string{name}
out, err, status := rb.transportClient.Delete(cmdArgs, nil)
if status == 0 {
@@ -50,14 +51,9 @@ func (rb *k8sRookBlock) BlockDelete(name string) (string, error) {
}
// Function to list all the blocks created/being managed by rook
//Returns a ouput for rook cli for block list
func (rb *k8sRookBlock) BlockList() (string, error) {
out, err, status := rb.transportClient.Execute(listCmd, nil)
if status == 0 {
return out, nil
} else {
return err, fmt.Errorf("Unable to list all blocks -- : %s", err)
}
func (rb *blockOperation) BlockList() ([]model.BlockImage, error) {
return rb.restClient.GetBlockImages()
}
// Function to map a Block using Rook
@@ -65,7 +61,7 @@ func (rb *k8sRookBlock) BlockList() (string, error) {
//name - path to a yaml file that creates a pod - pod should be defined to use a pvc that was created earlier
//mountpath - not used in this impl since mountpath is defined in the pod definition
//Output - k8s create pod operation output and/or error
func (rb *k8sRookBlock) BlockMap(name string, mountpath string) (string, error) {
func (rb *blockOperation) BlockMap(name string, mountpath string) (string, error) {
cmdArgs := []string{name}
out, err, status := rb.transportClient.Create(cmdArgs, nil)
if status == 0 {
@@ -84,7 +80,7 @@ func (rb *k8sRookBlock) BlockMap(name string, mountpath string) (string, error)
//filename - file where data is written to
//namespace - optional param - namespace of the pod
//Output - k8s exec pod operation output and/or error
func (rb *k8sRookBlock) BlockWrite(name string, mountpath string, data string, filename string, namespace string) (string, error) {
func (rb *blockOperation) BlockWrite(name string, mountpath string, data string, filename string, namespace string) (string, error) {
wt := "echo \"" + data + "\">" + mountpath + "/" + filename
writeDataToBlockPod[2] = wt
option := []string{name}
@@ -106,7 +102,7 @@ func (rb *k8sRookBlock) BlockWrite(name string, mountpath string, data string, f
//filename - file to be read
//namespace - optional param - namespace of the pod
//Output - k8s exec pod operation output and/or error
func (rb *k8sRookBlock) BlockRead(name string, mountpath string, filename string, namespace string) (string, error) {
func (rb *blockOperation) BlockRead(name string, mountpath string, filename string, namespace string) (string, error) {
rd := mountpath + "/" + filename
readDataFromBlockPod[1] = rd
option := []string{name}
@@ -126,7 +122,7 @@ func (rb *k8sRookBlock) BlockRead(name string, mountpath string, filename string
//name - path to a yaml file - the pod described in yam file is deleted
//mountpath - not used in this impl since mountpath is defined in the pod definition
//Output - k8s delete pod operation output and/or error
func (rb *k8sRookBlock) BlockUnmap(name string, mountpath string) (string, error) {
func (rb *blockOperation) BlockUnmap(name string, mountpath string) (string, error) {
cmdArgs := []string{name}
out, err, status := rb.transportClient.Delete(cmdArgs, nil)
if status == 0 {
@@ -3,62 +3,46 @@ package clients
import (
"fmt"
"github.com/rook/rook/e2e/framework/contracts"
"github.com/rook/rook/pkg/model"
)
type k8sRookFileSystem struct {
type fileSystemOperation struct {
transportClient contracts.ITransportClient
restClient contracts.RestAPIOperator
}
var (
fileSystemCreate = []string{"rook", "filesystem", "create", "--name", "NAME"}
fileSystemDelete = []string{"rook", "filesystem", "delete", "--name", "NAME"}
fileSystemList = []string{"rook", "filesystem", "ls"}
writeDataToFilePod = []string{"sh", "-c", "WRITE_DATA_CMD"}
readDataFromFilePod = []string{"cat", "READ_DATA_CMD"}
)
// Constructor to create k8sRookFileSystem - client to perform rook file system operations on k8s
func CreateK8sRookFileSystem(client contracts.ITransportClient) *k8sRookFileSystem {
return &k8sRookFileSystem{transportClient: client}
// Constructor to create fileSystemOperation - client to perform rook file system operations on k8s
func CreateK8sFileSystemOperation(client contracts.ITransportClient, rookRestClient contracts.RestAPIOperator) *fileSystemOperation {
return &fileSystemOperation{transportClient: client, restClient: rookRestClient}
}
//Function to create a fileSystem in rook
//Input paramatres -
// name - name of the shared file system to be created
//Output - output returned by rook cli and/or error
func (rfs *k8sRookFileSystem) FSCreate(name string) (string, error) {
fileSystemCreate[4] = name
out, err, status := rfs.transportClient.Execute(fileSystemCreate, nil)
if status == 0 {
return out, nil
} else {
return err, fmt.Errorf("Unable to create FileSystem -- : %s",err)
}
//Output - output returned by rook rest API client
func (rfs *fileSystemOperation) FSCreate(name string) (string, error) {
createFilesystem := model.FilesystemRequest{Name: name}
return rfs.restClient.CreateFilesystem(createFilesystem)
}
//Function to delete a fileSystem in rook
//Input paramatres -
// name - name of the shared file system to be deleted
//Output - output returned by rook cli and/or error
func (rfs *k8sRookFileSystem) FSDelete(name string) (string, error) {
fileSystemDelete[4] = name
out, err, status := rfs.transportClient.Execute(fileSystemDelete, nil)
if status == 0 {
return out, nil
} else {
return err, fmt.Errorf("Unable to delete FileSystem -- : %s",err)
}
//Output - output returned by rook rest API client
func (rfs *fileSystemOperation) FSDelete(name string) (string, error) {
deleteFilesystem := model.FilesystemRequest{Name: name}
return rfs.restClient.DeleteFilesystem(deleteFilesystem)
}
//Function to list a fileSystem in rook
//Output - output returned by rook cli and/or error
func (rfs *k8sRookFileSystem) FSList() (string, error) {
out, err, status := rfs.transportClient.Execute(fileSystemList, nil)
if status == 0 {
return out, nil
} else {
return err, fmt.Errorf("Unable to list FileSystem -- : %s",err)
}
//Output - output returned by rook rest API client
func (rfs *fileSystemOperation) FSList() ([]model.Filesystem, error) {
return rfs.restClient.GetFilesystems()
}
@@ -67,13 +51,13 @@ func (rfs *k8sRookFileSystem) FSList() (string, error) {
//name - path to the yaml defintion file - definition of pod to be created that mounts existing file system
//path - ignored in this case - moount path is defined in the path definition
//output - output returned by k8s create pod operaton and/or error
func (rfs *k8sRookFileSystem) FSMount(name string, path string) (string, error) {
func (rfs *fileSystemOperation) FSMount(name string, path string) (string, error) {
cmdArgs := []string{name}
out, err, status := rfs.transportClient.Create(cmdArgs, nil)
if status == 0 {
return out, nil
} else {
return err, fmt.Errorf("Unable to mount FileSystem -- : %s",err)
return err, fmt.Errorf("Unable to mount FileSystem -- : %s", err)
}
}
@@ -86,7 +70,7 @@ func (rfs *k8sRookFileSystem) FSMount(name string, path string) (string, error)
//filename - file where data is written to
//namespace - optional param - namespace of the pod
//Output - k8s exec pod operation output and/or error
func (rfs *k8sRookFileSystem) FSWrite(name string, mountpath string, data string, filename string, namespace string) (string, error) {
func (rfs *fileSystemOperation) FSWrite(name string, mountpath string, data string, filename string, namespace string) (string, error) {
wt := "echo \"" + data + "\">" + mountpath + "/" + filename
writeDataToFilePod[2] = wt
option := []string{name}
@@ -97,7 +81,7 @@ func (rfs *k8sRookFileSystem) FSWrite(name string, mountpath string, data string
if status == 0 {
return out, nil
} else {
return err, fmt.Errorf("Unable to write data to pod -- : %s",err)
return err, fmt.Errorf("Unable to write data to pod -- : %s", err)
}
}
@@ -108,7 +92,7 @@ func (rfs *k8sRookFileSystem) FSWrite(name string, mountpath string, data string
//filename - file to be read
//namespace - optional param - namespace of the pod
//Output - k8s exec pod operation output and/or error
func (rfs *k8sRookFileSystem) FSRead(name string, mountpath string, filename string, namespace string) (string, error) {
func (rfs *fileSystemOperation) FSRead(name string, mountpath string, filename string, namespace string) (string, error) {
rd := mountpath + "/" + filename
readDataFromFilePod[1] = rd
option := []string{name}
@@ -119,7 +103,7 @@ func (rfs *k8sRookFileSystem) FSRead(name string, mountpath string, filename str
if status == 0 {
return out, nil
} else {
return err, fmt.Errorf("Unable to write data to pod -- : %s",err)
return err, fmt.Errorf("Unable to write data to pod -- : %s", err)
}
}
@@ -128,13 +112,13 @@ func (rfs *k8sRookFileSystem) FSRead(name string, mountpath string, filename str
//name - path to the yaml defintion file - definition of pod to be deleted that has a file system mounted
//path - ignored in this case - moount path is defined in the path definition
//output - output returned by k8s delete pod operaton and/or error
func (rfs *k8sRookFileSystem) FSUnmount(name string) (string, error) {
func (rfs *fileSystemOperation) FSUnmount(name string) (string, error) {
cmdArgs := []string{name}
out, err, status := rfs.transportClient.Delete(cmdArgs, nil)
if status == 0 {
return out, nil
} else {
return err, fmt.Errorf("Unable to unmount FileSystem -- : %s",err)
return err, fmt.Errorf("Unable to unmount FileSystem -- : %s", err)
}
}
-136
View File
@@ -1,136 +0,0 @@
package clients
import (
"fmt"
"github.com/rook/rook/e2e/framework/contracts"
)
type k8sRookObject struct {
transportClient contracts.ITransportClient
}
var (
objectStoreCreate = []string{"rook", "object", "create"}
objectStoreGetBuckets = []string{"rook", "object", "bucket", "list"}
objectStoreGetConnection = []string{"rook", "object", "connection", "REPLACE"}
objectStoreCreateUser = []string{"rook", "object", "user", "create", "USERID", "DISPALYNAME"}
objectStoreDeleteUser = []string{"rook", "object", "user", "delete", "USERID"}
objectStoreGetUser = []string{"rook", "object", "user", "get", "USERID"}
objectStoreGetUsers = []string{"rook", "object", "user", "list"}
objectStoreUpdateUser = []string{"rook", "object", "user", "update", "USERID", "--display-name", "DISPLAYNAME",
"--email", "EMAILID"}
)
func CreateK8sRookObject(client contracts.ITransportClient) *k8sRookObject {
return &k8sRookObject{transportClient: client}
}
//Function to create a object store in rook
//Input paramatres -None
//Output - output returned by rook cli and/or error
func (ro *k8sRookObject) ObjectCreate() (string, error) {
out, err, status := ro.transportClient.Execute(objectStoreCreate, nil)
if status == 0 {
return out, nil
} else {
return err, fmt.Errorf("Failed to create Object store -- : %s",err)
}
}
//Function to get Buckets present in rook object store
//Input paramatres - None
//Output - output returned by rook cli and/or error
func (ro *k8sRookObject) ObjectBucketList() (string, error) {
out, err, status := ro.transportClient.Execute(objectStoreGetBuckets, nil)
if status == 0 {
return out, nil
} else {
return err, fmt.Errorf("Failed to list buckets -- : %s",err)
}
}
//Function to get connection information for a user
//Input paramatres - userId
//Output - output returned by rook cli and/or error
func (ro *k8sRookObject) ObjectConnection(userid string) (string, error) {
objectStoreGetConnection[3] = userid
out, err, status := ro.transportClient.Execute(objectStoreGetConnection, nil)
if status == 0 {
return out, nil
} else {
return err, fmt.Errorf("Failed to connect to object store -- : %s",err)
}
}
//Function to create user on rook object store
//Input paramatres - userId and display Name
//Output - output returned by rook cli and/or error
func (ro *k8sRookObject) ObjectCreateUser(userid string, displayname string) (string, error) {
objectStoreCreateUser[4] = userid
objectStoreCreateUser[5] = displayname
out, err, status := ro.transportClient.Execute(objectStoreCreateUser, nil)
if status == 0 {
return out, nil
} else {
return err, fmt.Errorf("Failed to create user -- : %s",err)
}
}
//Function to delete user on rook object store
//Input paramatres - userId
//Output - output returned by rook cli and/or error
func (ro *k8sRookObject) ObjectDeleteUser(userid string) (string, error) {
objectStoreDeleteUser[4] = userid
out, err, status := ro.transportClient.Execute(objectStoreDeleteUser, nil)
if status == 0 {
return out, nil
} else {
return err, fmt.Errorf("Failed to delete user -- : %s",err)
}
}
//Function to get a user on rook object store
//Input paramatres - userId
//Output - output returned by rook cli and/or error
func (ro *k8sRookObject) ObjectGetUser(userid string) (string, error) {
objectStoreGetUser[4] = userid
out, err, status := ro.transportClient.Execute(objectStoreGetUser, nil)
if status == 0 {
return out, nil
} else {
return err, fmt.Errorf("Failed to get user -- : %s",err)
}
}
//Function to get all users on rook object store
//Input paramatres - none
//Output - output returned by rook cli and/or error
func (ro *k8sRookObject) ObjectListUser() (string, error) {
out, err, status := ro.transportClient.Execute(objectStoreGetUsers, nil)
if status == 0 {
return out, nil
} else {
return err, fmt.Errorf("Failed to list users -- : %s",err)
}
}
//Function to update a user on rook object store
//Input paramatres - userId,display Name and email address
//Output - output returned by rook cli and/or error
func (ro *k8sRookObject) ObjectUpdateUser(userid string, displayname string, emailid string) (string, error) {
objectStoreUpdateUser[4] = userid
objectStoreUpdateUser[6] = displayname
objectStoreUpdateUser[8] = emailid
out, err, status := ro.transportClient.Execute(objectStoreUpdateUser, nil)
if status == 0 {
return out, nil
} else {
return err, fmt.Errorf("Failed to update object user -- : %s",err)
}
}
-24
View File
@@ -1,24 +0,0 @@
package clients
import (
"fmt"
"github.com/rook/rook/e2e/framework/contracts"
)
type k8sRookPool struct {
transportClient contracts.ITransportClient
}
func CreateK8sPool(client contracts.ITransportClient) *k8sRookPool {
return &k8sRookPool{transportClient: client}
}
func (rp *k8sRookPool) PoolList() (string, error) {
//TODO - implement
return "Not YET IMPLEMENTED", fmt.Errorf("NOT YET IMPLEMENTED")
}
func (rp *k8sRookPool) PoolCreate() (string, error) {
//TODO - implement
return "Not YET IMPLEMENTED", fmt.Errorf("NOT YET IMPLEMENTED")
}
+76
View File
@@ -0,0 +1,76 @@
package clients
import (
"github.com/rook/rook/e2e/framework/contracts"
"github.com/rook/rook/pkg/model"
)
type ObjectOperation struct {
restClient contracts.RestAPIOperator
}
func CreateObjectOperation(rookRestClient contracts.RestAPIOperator) *ObjectOperation {
return &ObjectOperation{restClient: rookRestClient}
}
//Function to create a object store in rook
//Input paramatres -None
//Output - output returned by rook Rest API client
func (ro *ObjectOperation) ObjectCreate() (string, error) {
return ro.restClient.CreateObjectStore()
}
//Function to get Buckets present in rook object store
//Input paramatres - None
//Output - output returned by rook Rest API client
func (ro *ObjectOperation) ObjectBucketList() ([]model.ObjectBucket, error) {
return ro.restClient.ListBuckets()
}
//Function to get connection information for a user
//Input paramatres - None
//Output - output returned by rook Rest API client
func (ro *ObjectOperation) ObjectConnection() (*model.ObjectStoreConnectInfo, error) {
return ro.restClient.GetObjectStoreConnectionInfo()
}
//Function to create user on rook object store
//Input paramatres - userId and display Name
//Output - output returned by rook Rest API client
func (ro *ObjectOperation) ObjectCreateUser(userid string, displayname string) (*model.ObjectUser, error) {
objectUser := model.ObjectUser{UserID: userid, DisplayName: &displayname}
return ro.restClient.CreateObjectUser(objectUser)
}
//Function to update a user on rook object store
//Input paramatres - userId,display Name and email address
//Output - output returned by rook Rest API client
func (ro *ObjectOperation) ObjectUpdateUser(userid string, displayname string, emailid string) (*model.ObjectUser, error) {
objectUser := model.ObjectUser{UserID: userid, DisplayName: &displayname, Email: &emailid}
return ro.restClient.UpdateObjectUser(objectUser)
}
//Function to delete user on rook object store
//Input paramatres - userId
//Output - output returned by rook Rest API client
func (ro *ObjectOperation) ObjectDeleteUser(userid string) error {
return ro.restClient.DeleteObjectUser(userid)
}
//Function to get a user on rook object store
//Input paramatres - userId
//Output - output returned by rook Rest API client
func (ro *ObjectOperation) ObjectGetUser(userid string) (*model.ObjectUser, error) {
return ro.restClient.GetObjectUser(userid)
}
//Function to get all users on rook object store
//Input paramatres - none
//Output - output returned by rook Rest API client
func (ro *ObjectOperation) ObjectListUser() ([]model.ObjectUser, error) {
return ro.restClient.ListObjectUsers()
}
+23
View File
@@ -0,0 +1,23 @@
package clients
import (
"github.com/rook/rook/e2e/framework/contracts"
"github.com/rook/rook/pkg/model"
)
type PoolClient struct {
transportClient contracts.ITransportClient
restClient contracts.RestAPIOperator
}
func CreatePoolClient(rookRestClient contracts.RestAPIOperator) *PoolClient {
return &PoolClient{restClient: rookRestClient}
}
func (rp *PoolClient) PoolList() ([]model.Pool, error) {
return rp.restClient.GetPools()
}
func (rp *PoolClient) PoolCreate(pool model.Pool) (string, error) {
return rp.restClient.CreatePool(pool)
}
+110
View File
@@ -0,0 +1,110 @@
package clients
import (
"fmt"
"net/http"
"github.com/rook/rook/e2e/framework/enums"
"github.com/rook/rook/e2e/framework/utils"
"github.com/rook/rook/pkg/model"
rclient "github.com/rook/rook/pkg/rook/client"
)
type RestAPIClient struct {
rrc *rclient.RookNetworkRestClient
}
//Create Rook REST API client
func CreateRestAPIClient(platform enums.RookPlatformType) *RestAPIClient {
var endpoint string
switch {
case platform == enums.Kubernetes:
rkh := utils.CreatK8sHelper()
//Start rook_api_external server via nodePort if not it not already running.
_, err := rkh.GetService("rook-api-external")
if err != nil {
rkh.ResourceOperation("create", "../../data/smoke/rook_api_external.yaml")
}
apiIp, err := rkh.GetPodHostId("rook-api", "rook")
if err != nil {
panic(fmt.Errorf("Host Ip for Rook-api service not found"))
}
endpoint = "http://" + apiIp + ":30002"
case platform == enums.StandAlone:
endpoint = "http://localhost:8124"
default:
panic(fmt.Errorf("platfrom type %s not yet supported", platform))
}
client := rclient.NewRookNetworkRestClient(endpoint, http.DefaultClient)
return &RestAPIClient{client}
}
func (a *RestAPIClient) URL() string {
return a.rrc.RestURL
}
func (a *RestAPIClient) GetNodes() ([]model.Node, error) {
return a.rrc.GetNodes()
}
func (a *RestAPIClient) GetPools() ([]model.Pool, error) {
return a.rrc.GetPools()
}
func (a *RestAPIClient) CreatePool(pool model.Pool) (string, error) {
return a.rrc.CreatePool(pool)
}
func (a *RestAPIClient) GetBlockImages() ([]model.BlockImage, error) {
return a.rrc.GetBlockImages()
}
func (a *RestAPIClient) CreateBlockImage(image model.BlockImage) (string, error) {
return a.rrc.CreateBlockImage(image)
}
func (a *RestAPIClient) DeleteBlockImage(image model.BlockImage) (string, error) {
return a.rrc.DeleteBlockImage(image)
}
func (a *RestAPIClient) GetClientAccessInfo() (model.ClientAccessInfo, error) {
return a.rrc.GetClientAccessInfo()
}
func (a *RestAPIClient) GetFilesystems() ([]model.Filesystem, error) {
return a.rrc.GetFilesystems()
}
func (a *RestAPIClient) CreateFilesystem(fsmodel model.FilesystemRequest) (string, error) {
return a.rrc.CreateFilesystem(fsmodel)
}
func (a *RestAPIClient) DeleteFilesystem(fsmodel model.FilesystemRequest) (string, error) {
return a.rrc.DeleteFilesystem(fsmodel)
}
func (a *RestAPIClient) GetStatusDetails() (model.StatusDetails, error) {
return a.rrc.GetStatusDetails()
}
func (a *RestAPIClient) CreateObjectStore() (string, error) {
return a.rrc.CreateObjectStore()
}
func (a *RestAPIClient) GetObjectStoreConnectionInfo() (*model.ObjectStoreConnectInfo, error) {
return a.rrc.GetObjectStoreConnectionInfo()
}
func (a *RestAPIClient) ListBuckets() ([]model.ObjectBucket, error) {
return a.rrc.ListBuckets()
}
func (a *RestAPIClient) ListObjectUsers() ([]model.ObjectUser, error) {
return a.rrc.ListObjectUsers()
}
func (a *RestAPIClient) GetObjectUser(id string) (*model.ObjectUser, error) {
return a.rrc.GetObjectUser(id)
}
func (a *RestAPIClient) CreateObjectUser(user model.ObjectUser) (*model.ObjectUser, error) {
return a.rrc.CreateObjectUser(user)
}
func (a *RestAPIClient) UpdateObjectUser(user model.ObjectUser) (*model.ObjectUser, error) {
return a.rrc.UpdateObjectUser(user)
}
func (a *RestAPIClient) DeleteObjectUser(id string) error {
return a.rrc.DeleteObjectUser(id)
}
-105
View File
@@ -1,105 +0,0 @@
package clients
import (
"fmt"
"github.com/rook/rook/e2e/framework/contracts"
"github.com/rook/rook/e2e/framework/enums"
"github.com/rook/rook/e2e/framework/transport"
)
var (
STATUS_CMD = []string{"rook", "status"}
VERSION_CMD = []string{"rook", "version"}
NODE_CMD = []string{"rook", "node"}
)
type RookClient struct {
platform enums.RookPlatformType
transportClient contracts.ITransportClient
blockClient contracts.IRookBlock
fsClient contracts.IRookFilesystem
objectClient contracts.IRookObject
poolClient contracts.IRookPool
}
const (
unable_to_check_rook_status_msg = "Unable to check rook status - please check of rook is up and running"
)
func CreateRook_Client(platform enums.RookPlatformType) (*RookClient, error) {
var transportClient contracts.ITransportClient
var block_client contracts.IRookBlock
var fs_client contracts.IRookFilesystem
var object_client contracts.IRookObject
var pool_client contracts.IRookPool
switch {
case platform == enums.Kubernetes:
transportClient = transport.CreateNewk8sTransportClient()
block_client = CreateK8SRookBlock(transportClient)
fs_client = CreateK8sRookFileSystem(transportClient)
object_client = CreateK8sRookObject(transportClient)
pool_client = CreateK8sPool(transportClient)
case platform == enums.StandAlone:
transportClient = nil //TODO- Not yet implemented
block_client = nil //TODO- Not yet implemented
fs_client = nil //TODO- Not yet implemented
object_client = nil //TODO- Not yet implemented
pool_client = nil //TODO- Not yet implemented
default:
return &RookClient{}, fmt.Errorf("Unsupported Rook Platform Type")
}
return &RookClient{
platform,
transportClient,
block_client,
fs_client,
object_client,
pool_client,
}, nil
}
func (Client RookClient) Status() (string, error) {
out, err, status := Client.transportClient.Execute(STATUS_CMD, nil)
if status == 0 {
return out, nil
} else {
return err, fmt.Errorf(unable_to_check_rook_status_msg)
}
}
func (Client RookClient) Version() (string, error) {
out, err, status := Client.transportClient.Execute(VERSION_CMD, nil)
if status == 0 {
return out, nil
} else {
return err, fmt.Errorf(unable_to_check_rook_status_msg)
}
}
func (Client RookClient) Node() (string, error) {
out, err, status := Client.transportClient.Execute(NODE_CMD, nil)
if status == 0 {
return out, nil
} else {
return err, fmt.Errorf(unable_to_check_rook_status_msg)
}
}
func (Client RookClient) GetBlockClient() contracts.IRookBlock {
return Client.blockClient
}
func (Client RookClient) GetFileSystemClient() contracts.IRookFilesystem {
return Client.fsClient
}
func (Client RookClient) GetObjectClient() contracts.IRookObject {
return Client.objectClient
}
func (Client RookClient) GetPoolClient() contracts.IRookPool {
return Client.poolClient
}
+101
View File
@@ -0,0 +1,101 @@
package clients
import (
"fmt"
"github.com/rook/rook/e2e/framework/contracts"
"github.com/rook/rook/e2e/framework/enums"
"github.com/rook/rook/e2e/framework/transport"
"github.com/rook/rook/pkg/model"
)
var (
VERSION_CMD = []string{"rook", "version"}
)
type TestClient struct {
platform enums.RookPlatformType
transportClient contracts.ITransportClient
blockClient contracts.BlockOperator
fsClient contracts.FileSystemOperator
objectClient contracts.ObjectOperator
poolClient contracts.PoolOperator
restClient contracts.RestAPIOperator
}
const (
unable_to_check_rook_status_msg = "Unable to check rook status - please check of rook is up and running"
)
func CreateTestClient(platform enums.RookPlatformType) (*TestClient, error) {
var transportClient contracts.ITransportClient
var block_client contracts.BlockOperator
var fs_client contracts.FileSystemOperator
var object_client contracts.ObjectOperator
var pool_client contracts.PoolOperator
rookRestClient := CreateRestAPIClient(platform)
switch {
case platform == enums.Kubernetes:
transportClient = transport.CreateNewk8sTransportClient()
block_client = CreateK8BlockOperation(transportClient, rookRestClient)
fs_client = CreateK8sFileSystemOperation(transportClient, rookRestClient)
object_client = CreateObjectOperation(rookRestClient)
pool_client = CreatePoolClient(rookRestClient)
case platform == enums.StandAlone:
transportClient = nil //TODO- Not yet implemented
block_client = nil //TODO- Not yet implemented
fs_client = nil //TODO- Not yet implemented
object_client = nil //TODO- Not yet implemented
pool_client = nil //TODO- Not yet implemented
default:
return &TestClient{}, fmt.Errorf("Unsupported Rook Platform Type")
}
return &TestClient{
platform,
transportClient,
block_client,
fs_client,
object_client,
pool_client,
rookRestClient,
}, nil
}
func (c TestClient) Status() (model.StatusDetails, error) {
return c.restClient.GetStatusDetails()
}
func (c TestClient) Version() (string, error) {
out, err, status := c.transportClient.Execute(VERSION_CMD, nil)
if status == 0 {
return out, nil
} else {
return err, fmt.Errorf(unable_to_check_rook_status_msg)
}
}
func (c TestClient) Node() ([]model.Node, error) {
return c.restClient.GetNodes()
}
func (c TestClient) GetBlockClient() contracts.BlockOperator {
return c.blockClient
}
func (c TestClient) GetFileSystemClient() contracts.FileSystemOperator {
return c.fsClient
}
func (c TestClient) GetObjectClient() contracts.ObjectOperator {
return c.objectClient
}
func (c TestClient) GetPoolClient() contracts.PoolOperator {
return c.poolClient
}
func (c TestClient) GetRestAPIClient() contracts.RestAPIOperator {
return c.restClient
}
+62
View File
@@ -0,0 +1,62 @@
package contracts
import "github.com/rook/rook/pkg/model"
type BlockOperator interface {
BlockCreate(name string, size int) (string, error)
BlockDelete(name string) (string, error)
BlockList() ([]model.BlockImage, error)
BlockMap(name string, mountpath string) (string, error)
BlockWrite(name string, mountpath string, data string, filename string, namespace string) (string, error)
BlockRead(name string, mountpath string, filename string, namespace string) (string, error)
BlockUnmap(name string, mountpath string) (string, error)
}
type FileSystemOperator interface {
FSCreate(name string) (string, error)
FSDelete(name string) (string, error)
FSList() ([]model.Filesystem, error)
FSMount(name string, mountpath string) (string, error)
FSWrite(name string, mountpath string, data string, filename string, namespace string) (string, error)
FSRead(name string, mountpath string, filename string, namespace string) (string, error)
FSUnmount(mountpath string) (string, error)
}
type ObjectOperator interface {
ObjectCreate() (string, error)
ObjectBucketList() ([]model.ObjectBucket, error)
ObjectConnection() (*model.ObjectStoreConnectInfo, error)
ObjectCreateUser(userid string, displayname string) (*model.ObjectUser, error)
ObjectUpdateUser(userid string, displayname string, emailid string) (*model.ObjectUser, error)
ObjectDeleteUser(userid string) error
ObjectGetUser(userid string) (*model.ObjectUser, error)
ObjectListUser() ([]model.ObjectUser, error)
}
type PoolOperator interface {
PoolList() ([]model.Pool, error)
PoolCreate(pool model.Pool) (string, error)
}
type RestAPIOperator interface {
URL() string
GetNodes() ([]model.Node, error)
GetPools() ([]model.Pool, error)
CreatePool(pool model.Pool) (string, error)
GetBlockImages() ([]model.BlockImage, error)
CreateBlockImage(image model.BlockImage) (string, error)
DeleteBlockImage(image model.BlockImage) (string, error)
GetClientAccessInfo() (model.ClientAccessInfo, error)
GetFilesystems() ([]model.Filesystem, error)
CreateFilesystem(fsmodel model.FilesystemRequest) (string, error)
DeleteFilesystem(fsmodel model.FilesystemRequest) (string, error)
GetStatusDetails() (model.StatusDetails, error)
CreateObjectStore() (string, error)
GetObjectStoreConnectionInfo() (*model.ObjectStoreConnectInfo, error)
ListBuckets() ([]model.ObjectBucket, error)
ListObjectUsers() ([]model.ObjectUser, error)
GetObjectUser(id string) (*model.ObjectUser, error)
CreateObjectUser(user model.ObjectUser) (*model.ObjectUser, error)
UpdateObjectUser(user model.ObjectUser) (*model.ObjectUser, error)
DeleteObjectUser(id string) error
}
@@ -1,11 +0,0 @@
package contracts
type IRookBlock interface {
BlockCreate(name string, size int) (string, error)
BlockDelete(name string) (string, error)
BlockList() (string, error)
BlockMap(name string, mountpath string) (string, error)
BlockWrite(name string, mountpath string, data string, filename string, namespace string) (string, error)
BlockRead(name string, mountpath string, filename string, namespace string) (string, error)
BlockUnmap(name string, mountpath string) (string, error)
}
@@ -1,7 +0,0 @@
package contracts
type IRookClient interface {
Status() (string, error)
Version() (string, error)
Node() (string, error)
}
@@ -1,11 +0,0 @@
package contracts
type IRookFilesystem interface {
FSCreate(name string) (string, error)
FSDelete(name string) (string, error)
FSList() (string, error)
FSMount(name string, mountpath string) (string, error)
FSWrite(name string, mountpath string, data string, filename string, namespace string) (string, error)
FSRead(name string, mountpath string, filename string, namespace string) (string, error)
FSUnmount(mountpath string) (string, error)
}
@@ -1,12 +0,0 @@
package contracts
type IRookObject interface {
ObjectCreate() (string, error)
ObjectBucketList() (string, error)
ObjectConnection(uerid string) (string, error)
ObjectCreateUser(userid string, displayname string) (string, error)
ObjectDeleteUser(userid string) (string, error)
ObjectGetUser(userid string) (string, error)
ObjectListUser() (string, error)
ObjectUpdateUser(userid string, displayname string, emailid string) (string, error)
}
@@ -1,6 +0,0 @@
package contracts
type IRookPool interface {
PoolList() (string, error)
PoolCreate() (string, error)
}
+2 -2
View File
@@ -354,7 +354,7 @@ func createk8sRookCluster(k8sHelper *utils.K8sHelper, tag string) error {
return nil
}
func (r *rookTestInfraManager) InstallRook(tag string) (err error, client contracts.IRookClient) {
func (r *rookTestInfraManager) InstallRook(tag string) (err error) {
if r.isRookInstalled {
return
}
@@ -420,7 +420,7 @@ func (r *rookTestInfraManager) InstallRook(tag string) (err error, client contra
r.isRookInstalled = true
return nil, nil
return nil
}
func (r *rookTestInfraManager) isContainerRunning(containerId string) bool {
-9
View File
@@ -73,15 +73,6 @@ func (k8sh *K8sHelper) ResourceOperation(action string, poddefPath string) (stri
}
}
func (k8sh *K8sHelper) CleanUpDymaincCreatedPVC(blockList map[string]blockListData) {
for _, v := range blockList {
cmdArgs := []string{"exec", "-n", "rook", "rook-client", "--", "rook", "block", "delete",
"--name", v.name, "--pool-name", v.pool}
ExecuteCmd("kubectl", cmdArgs)
}
}
func (k8sh *K8sHelper) getMonitorPods() []string {
mons := []string{}
monIdx := 0
-222
View File
@@ -1,222 +0,0 @@
package utils
import (
"strconv"
"strings"
)
type RookHelper struct {
}
type blockListData struct {
name string
pool string
size string
device string
mount string
}
type fileSystemListData struct {
Name string
metadatapool string
datapool string
}
type ObjectUserListData struct {
UserId string
DisplayName string
Email string
}
type ObjectUserData struct {
UserId string
DisplayName string
Email string
AccessKey string
SecretKey string
}
type ObjectConnectionData struct {
AwsHost string
AwsEndpoint string
AwsAccessKey string
AwsSecretKey string
}
type ObjectBucketListData struct {
Name string
Owner string
Created string
Size int
NumberOfObjects int
}
func CreateRookHelper() *RookHelper {
return &RookHelper{}
}
func (rh *RookHelper) ParseBlockListData(rawdata string) map[string]blockListData {
data := make(map[string]blockListData)
lines := strings.Split(rawdata, "\n")
if len(lines) <= 1 {
return data
}
lines = lines[1 : len(lines)-1]
if len(lines) >= 1 {
for line := range lines {
blockrawdata := strings.Split(lines[line], " ")
var r []string
for _, str := range blockrawdata {
if str != "" {
r = append(r, strings.TrimSpace(str))
}
}
for len(r) < 5 {
r = append(r, "")
}
data[r[0]] = blockListData{r[0], r[1], r[2], r[3], r[4]}
}
}
return data
}
func (rh *RookHelper) ParseFileSystemData(rawdata string) fileSystemListData {
lines := strings.Split(rawdata, "\n")
lines = lines[1 : len(lines)-1]
if len(lines) != 1 {
return fileSystemListData{"ERROR OCCURED", "", ""}
}
filerawdata := strings.Split(lines[0], " ")
var r []string
for _, str := range filerawdata {
if str != "" {
r = append(r, strings.TrimSpace(str))
}
}
return fileSystemListData{r[0], r[1], r[2]}
}
func (rh *RookHelper) ParserObjectUserListData(rawdata string) map[string]ObjectUserListData {
data := make(map[string]ObjectUserListData)
lines := strings.Split(rawdata, "\n")
if len(lines) <= 1 {
return data
}
lines = lines[1 : len(lines)-1]
if len(lines) >= 1 {
for line := range lines {
usersrawdata := strings.Split(lines[line], " ")
var r []string
for _, str := range usersrawdata {
if str != "" {
r = append(r, strings.TrimSpace(str))
}
}
for len(r) < 3 {
r = append(r, "")
}
data[r[0]] = ObjectUserListData{r[0], r[1], r[2]}
}
}
//TODO -
return data
}
func (rh *RookHelper) ParserObjectUserData(rawdata string) ObjectUserData {
lines := strings.Split(rawdata, "\n")
lines = lines[:len(lines)-1]
var (
userId string
displayName string
email string
accesskey string
secretkey string
)
if len(lines) != 5 {
return ObjectUserData{UserId: "USER NOT FOUND"}
} else {
for line := range lines {
userrawdata := strings.Split(lines[line], ":")
switch userrawdata[0] {
case "User ID":
userId = strings.TrimSpace(userrawdata[1])
case "Display Name":
displayName = strings.TrimSpace(userrawdata[1])
case "Email":
email = strings.TrimSpace(userrawdata[1])
case "Access Key":
accesskey = strings.TrimSpace(userrawdata[1])
case "Secret Key":
secretkey = strings.TrimSpace(userrawdata[1])
}
}
}
return ObjectUserData{userId, displayName, email, accesskey, secretkey}
}
func (rh *RookHelper) ParserObjectConnectionData(rawdata string) ObjectConnectionData {
lines := strings.Split(rawdata, "\n")
lines = lines[1 : len(lines)-1]
var (
awshost string
endpoint string
accesskey string
secretkey string
)
if len(lines) != 4 {
return ObjectConnectionData{AwsHost: "CONNECTION INFO NOT FOUND FOR GIVEN USERID"}
} else {
for line := range lines {
connrawdata := strings.Split(lines[line], " ")
var r []string
for _, str := range connrawdata {
if str != "" {
r = append(r, strings.TrimSpace(str))
}
}
switch r[0] {
case "AWS_HOST":
awshost = r[1]
case "AWS_ENDPOINT":
endpoint = r[1]
case "AWS_ACCESS_KEY_ID":
accesskey = r[1]
case "AWS_SECRET_ACCESS_KEY":
secretkey = r[1]
}
}
}
return ObjectConnectionData{awshost, endpoint, accesskey, secretkey}
}
func (rh *RookHelper) ParserObjectBucketListData(rawdata string) map[string]ObjectBucketListData {
data := make(map[string]ObjectBucketListData)
lines := strings.Split(rawdata, "\n")
if len(lines) <= 1 {
return data
}
lines = lines[1 : len(lines)-1]
if len(lines) >= 1 {
for line := range lines {
bktsrawdata := strings.Split(lines[line], " ")
var r []string
for _, str := range bktsrawdata {
if str != "" {
r = append(r, strings.TrimSpace(str))
}
}
size, _ := strconv.Atoi(r[3])
objs, _ := strconv.Atoi(r[4])
data[r[0]] = ObjectBucketListData{r[0], r[1], r[2], size, objs}
}
}
return data
}
+21 -12
View File
@@ -6,6 +6,7 @@ import (
"github.com/stretchr/testify/require"
"github.com/stretchr/testify/suite"
"testing"
"time"
)
func TestBlockStorageSmokeSuite(t *testing.T) {
@@ -41,7 +42,7 @@ func (suite *BlockStorageTestSuite) SetupTest() {
rookInfra.ValidateAndSetupTestPlatform()
err, _ = rookInfra.InstallRook(suite.rookTag)
err = rookInfra.InstallRook(suite.rookTag)
require.Nil(suite.T(), err)
@@ -54,18 +55,14 @@ func (suite *BlockStorageTestSuite) TestBlockStorage_SmokeTest() {
suite.T().Log("Block Storage Smoke Test - Create,Mount,write to, read from and Unmount Block")
defer blockTestcleanup(suite.helper)
rh := suite.helper.rookHelp
rbc := suite.helper.GetBlockClient()
suite.T().Log("Step 0 : Get Initial List Block")
rawlistInit, _ := rbc.BlockList()
initblocklistMap := rh.ParseBlockListData(rawlistInit)
initBlockImages, _ := rbc.BlockList()
suite.T().Log("step 1: Create block storage")
_, cb_err := suite.helper.CreateBlockStorage()
require.Nil(suite.T(), cb_err)
rawlistAfterCreate, _ := rbc.BlockList()
blocklistMapAfterBlockCreate := rh.ParseBlockListData(rawlistAfterCreate)
require.Empty(suite.T(), len(initblocklistMap), len(blocklistMapAfterBlockCreate)+1, "Make sure a new block is created")
require.True(suite.T(), retryBlockImageCountCheck(suite.helper, len(initBlockImages), 1), "Make sure a new block is created")
suite.T().Log("Block Storage created successfully")
suite.T().Log("step 2: Mount block storage")
@@ -92,11 +89,7 @@ func (suite *BlockStorageTestSuite) TestBlockStorage_SmokeTest() {
suite.T().Log("step 6: Deleting block storage")
_, db_err := suite.helper.DeleteBlockStorage()
require.Nil(suite.T(), db_err)
rawlistAfterDelete, _ := rbc.BlockList()
blocklistMapAfterBlockDelete := rh.ParseBlockListData(rawlistAfterDelete)
//This is a stop gap, block storage is not deleted when pods are deleted
suite.helper.CleanUpDymanicBlockStorge()
require.Empty(suite.T(), len(initblocklistMap), len(blocklistMapAfterBlockDelete), "Make sure a new block is created")
require.True(suite.T(), retryBlockImageCountCheck(suite.helper, len(initBlockImages), 0), "Make sure a new block is created")
suite.T().Log("Block Storage deleted successfully")
}
@@ -106,3 +99,19 @@ func blockTestcleanup(h *SmokeTestHelper) {
h.DeleteBlockStorage()
h.CleanUpDymanicBlockStorge()
}
// periodically checking if block image count has changed to expected value
// When creating pvc in k8s platform, it may take some time for the block Image to be bounded
func retryBlockImageCountCheck(h *SmokeTestHelper, imageCount int, expectedChange int) bool {
inc := 0
for inc < 10 {
blockImages, _ := h.GetBlockClient().BlockList()
if imageCount+expectedChange == len(blockImages) {
return true
} else {
time.Sleep(time.Second * 2)
inc++
}
}
return false
}
+7 -8
View File
@@ -49,7 +49,7 @@ func (suite *FileSystemTestSuite) SetupTest() {
rookInfra.ValidateAndSetupTestPlatform()
err, _ = rookInfra.InstallRook(suite.rookTag)
err = rookInfra.InstallRook(suite.rookTag)
require.Nil(suite.T(), err)
@@ -63,14 +63,14 @@ func (suite *FileSystemTestSuite) TestFileStorage_SmokeTest() {
suite.T().Log("File Storage Smoke Test - Create,Mount,write to, read from and Unmount Filesystem")
defer fileSmokecleanUp(suite.helper)
rh := suite.helper.rookHelp
rfc := suite.helper.GetFileSystemClient()
suite.T().Log("Step 1: Create file System")
_, fsc_err := suite.helper.CreateFileStorage()
require.Nil(suite.T(), fsc_err)
rawlist, _ := rfc.FSList()
filesystemData := rh.ParseFileSystemData(rawlist)
fileSystemList, _ := rfc.FSList()
require.Equal(suite.T(), 1, len(fileSystemList), "There should one shared file system present")
filesystemData := fileSystemList[0]
require.Equal(suite.T(), "testfs", filesystemData.Name, "make sure filesystem name matches")
suite.T().Log("File system created")
@@ -96,14 +96,13 @@ func (suite *FileSystemTestSuite) TestFileStorage_SmokeTest() {
suite.T().Log("File system mounted successfully")
suite.T().Log("Step 6: Deleting file storage")
_, fsd_err := suite.helper.DeleteFileStorage()
require.Nil(suite.T(), fsd_err)
//Delete is not actually deleting filesystem
suite.helper.DeleteFileStorage()
//Delete is not deleting filesystem - known issue
//require.Nil(suite.T(), fsd_err)
suite.T().Log("File system deleted")
}
func fileSmokecleanUp(h *SmokeTestHelper) {
//suite.helper, _ := CreateSmokeTestClient(enums.Kubernetes)
h.UnmountFileStorage()
h.DeleteFileStorage()
}
+44 -39
View File
@@ -7,7 +7,7 @@ import (
"github.com/rook/rook/e2e/framework/enums"
"github.com/rook/rook/e2e/framework/manager"
"github.com/rook/rook/e2e/framework/utils"
"github.com/stretchr/testify/assert"
"github.com/rook/rook/pkg/model"
"github.com/stretchr/testify/require"
"github.com/stretchr/testify/suite"
)
@@ -55,7 +55,7 @@ func (suite *ObjectStorageTestSuite) SetupTest() {
rookInfra.ValidateAndSetupTestPlatform()
err, _ = rookInfra.InstallRook(suite.rookTag)
err = rookInfra.InstallRook(suite.rookTag)
require.Nil(suite.T(), err)
@@ -71,101 +71,106 @@ func (suite *ObjectStorageTestSuite) TestObjectStorage_SmokeTest() {
suite.T().Log("Step 0 : Create Object Store")
_, cobs_err := suite.helper.CreateObjectStore()
assert.Nil(suite.T(), cobs_err)
require.Nil(suite.T(), cobs_err)
suite.T().Log("Object store created successfully")
suite.T().Log("Step 1 : Create Object Store User")
initialUsers, _ := suite.helper.GetObjectStoreUsers()
_, cosu_err := suite.helper.CreateObjectStoreUser()
assert.Nil(suite.T(), cosu_err)
require.Nil(suite.T(), cosu_err)
usersAfterCrate, _ := suite.helper.GetObjectStoreUsers()
assert.Equal(suite.T(), len(initialUsers)+1, len(usersAfterCrate), "Make sure user list count is increaded by 1")
require.Equal(suite.T(), len(initialUsers)+1, len(usersAfterCrate), "Make sure user list count is increaded by 1")
getuserData, gu_err := suite.helper.GetObjectStoreUser(userid)
assert.Nil(suite.T(), gu_err)
assert.Equal(suite.T(), userid, getuserData.UserId, "Check user id returned")
assert.Equal(suite.T(), userdisplayname, getuserData.DisplayName, "Check user name returned")
require.Nil(suite.T(), gu_err)
require.Equal(suite.T(), userid, getuserData.UserID, "Check user id returned")
require.Equal(suite.T(), userdisplayname, *getuserData.DisplayName, "Check user name returned")
suite.T().Log("Object store user created successfully")
suite.T().Log("Step 2 : Get connection information")
conninfo, conninfo_error := suite.helper.GetObjectStoreConnection(userid)
assert.Nil(suite.T(), conninfo_error)
conninfo, conninfo_error := suite.helper.GetObjectStoreUser(userid)
require.Nil(suite.T(), conninfo_error)
s3endpoint, _ := suite.helper.GetRGWServiceUrl()
s3client := utils.CreateNewS3Helper(s3endpoint, conninfo.AwsAccessKey, conninfo.AwsSecretKey)
s3client := utils.CreateNewS3Helper(s3endpoint, *conninfo.AccessKey, *conninfo.SecretKey)
suite.T().Log("Step 3 : Create bucket")
initialBuckets, _ := suite.helper.GetObjectStoreBucketList()
s3client.CreateBucket(bucketname)
BucketsAfterCreate, _ := suite.helper.GetObjectStoreBucketList()
assert.Equal(suite.T(), len(initialBuckets)+1, len(BucketsAfterCreate), "Make sure new bucket is created")
require.Equal(suite.T(), len(initialBuckets)+1, len(BucketsAfterCreate), "Make sure new bucket is created")
bkt, _ := getBucket(bucketname, BucketsAfterCreate)
assert.Equal(suite.T(), bucketname, bkt.Name)
assert.Equal(suite.T(), userid, bkt.Owner)
require.Equal(suite.T(), bucketname, bkt.Name)
require.Equal(suite.T(), userid, bkt.Owner)
suite.T().Log("Bucket created in Object store successfully")
suite.T().Log("Step 4 : Put Object on bucket")
initObjSize, initObjNum, _ := getBucketSizeAndObjectes(bucketname, BucketsAfterCreate)
assert.Equal(suite.T(), 0, initObjSize)
assert.Equal(suite.T(), 0, initObjNum)
require.Equal(suite.T(), uint64(0), initObjSize)
require.Equal(suite.T(), uint64(0), initObjNum)
_, po_err := s3client.PutObjectInBucket(bucketname, objBody, objectKey, contentType)
assert.Nil(suite.T(), po_err)
require.Nil(suite.T(), po_err)
BucketsAfterPut, _ := suite.helper.GetObjectStoreBucketList()
ObjSize, ObjNum, _ := getBucketSizeAndObjectes(bucketname, BucketsAfterPut)
assert.NotEmpty(suite.T(), ObjSize)
assert.Equal(suite.T(), 1, ObjNum)
require.NotEmpty(suite.T(), ObjSize)
require.Equal(suite.T(), uint64(1), ObjNum)
suite.T().Log("Object Created on bucket successfully")
suite.T().Log("Step 5 : Put Object from bucket")
read, err := s3client.GetObjectInBucket(bucketname, objectKey)
assert.Nil(suite.T(), err)
assert.Equal(suite.T(), objBody, read)
require.Nil(suite.T(), err)
require.Equal(suite.T(), objBody, read)
suite.T().Log("Object retrived from bucket successfully")
suite.T().Log("Step 6 : Delete Object on bucket")
_, delobj_err := s3client.DeleteObjectInBucket(bucketname, objectKey)
assert.Nil(suite.T(), delobj_err)
require.Nil(suite.T(), delobj_err)
BucketsAfterOjbDelete, _ := suite.helper.GetObjectStoreBucketList()
ObjSize1, ObjNum1, _ := getBucketSizeAndObjectes(bucketname, BucketsAfterOjbDelete)
assert.Equal(suite.T(), 0, ObjSize1)
assert.Equal(suite.T(), 0, ObjNum1)
require.Equal(suite.T(), uint64(0), ObjSize1)
require.Equal(suite.T(), uint64(0), ObjNum1)
suite.T().Log("Object deleted on bucket successfully")
suite.T().Log("Step 6 : Delete bucket")
_, bkdel_err := s3client.DeleteBucket(bucketname)
assert.Nil(suite.T(), bkdel_err)
require.Nil(suite.T(), bkdel_err)
BucketsAfterDelete, _ := suite.helper.GetObjectStoreBucketList()
assert.Equal(suite.T(), len(initialBuckets), len(BucketsAfterDelete), "Make sure new bucket is deleted")
require.Equal(suite.T(), len(initialBuckets), len(BucketsAfterDelete), "Make sure new bucket is deleted")
suite.T().Log("Bucket deleted successfully")
suite.T().Log("Step 7 : Delete User")
usersBeforeDelete, _ := suite.helper.GetObjectStoreUsers()
_, dosu_err := suite.helper.DeleteObjectStoreUser()
assert.Nil(suite.T(), dosu_err)
suite.helper.DeleteObjectStoreUser()
usersAfterDelete, _ := suite.helper.GetObjectStoreUsers()
assert.Equal(suite.T(), len(usersBeforeDelete)-1, len(usersAfterDelete), "Make sure user list count is reducd by 1")
suite.T().Log("Object store user created successfully")
require.Equal(suite.T(), len(usersBeforeDelete)-1, len(usersAfterDelete), "Make sure user list count is reducd by 1")
suite.T().Log("Object store user deleted successfully")
}
func objectTestcleanup(h *SmokeTestHelper) {
conninfo, _ := h.GetObjectStoreConnection(userid)
userinfo, err := h.GetObjectStoreUser(userid)
if err != nil {
return //when user is not found
}
s3endpoint, _ := h.GetRGWServiceUrl()
s3client := utils.CreateNewS3Helper(s3endpoint, conninfo.AwsAccessKey, conninfo.AwsSecretKey)
s3client := utils.CreateNewS3Helper(s3endpoint, *userinfo.AccessKey, *userinfo.SecretKey)
s3client.DeleteObjectInBucket(bucketname, objectKey)
s3client.DeleteBucket(bucketname)
h.DeleteObjectStoreUser()
}
func getBucket(bucketname string, bucketdict map[string]utils.ObjectBucketListData) (utils.ObjectBucketListData, error) {
if val, ok := bucketdict[bucketname]; ok {
return val, nil
} else {
return utils.ObjectBucketListData{}, errors.New("Bucket not found")
func getBucket(bucketname string, bucketList []model.ObjectBucket) (model.ObjectBucket, error) {
for _, bucket := range bucketList {
if bucket.Name == bucketname {
return bucket, nil
}
}
return model.ObjectBucket{}, errors.New("Bucket not found")
}
func getBucketSizeAndObjectes(bucketname string, bucketdict map[string]utils.ObjectBucketListData) (int, int, error) {
bkt, err := getBucket(bucketname, bucketdict)
func getBucketSizeAndObjectes(bucketname string, bucketList []model.ObjectBucket) (uint64, uint64, error) {
bkt, err := getBucket(bucketname, bucketList)
if err != nil {
return 0, 0, errors.New("Bucket not found")
}
+29 -50
View File
@@ -6,12 +6,13 @@ import (
"github.com/rook/rook/e2e/framework/contracts"
"github.com/rook/rook/e2e/framework/enums"
"github.com/rook/rook/e2e/framework/utils"
"github.com/rook/rook/pkg/model"
"time"
)
type SmokeTestHelper struct {
platform enums.RookPlatformType
rookclient *clients.RookClient
rookHelp *utils.RookHelper
rookclient *clients.TestClient
k8sHelp *utils.K8sHelper
}
@@ -37,7 +38,7 @@ type objectUserData struct {
}
type objectConnectionData struct {
awsEndpoint string
awsEndpoint string
awsHost string
awsSecretKeyId string
awsSecretAccessKey string
@@ -57,24 +58,23 @@ func CreateSmokeTestClient(platform enums.RookPlatformType) (*SmokeTestHelper, e
return &SmokeTestHelper{platform: platform,
rookclient: rc,
rookHelp: utils.CreateRookHelper(),
k8sHelp: utils.CreatK8sHelper()}, err
}
func getRookClient(platform enums.RookPlatformType) (*clients.RookClient, error) {
return clients.CreateRook_Client(platform)
func getRookClient(platform enums.RookPlatformType) (*clients.TestClient, error) {
return clients.CreateTestClient(platform)
}
func (h *SmokeTestHelper) GetBlockClient() contracts.IRookBlock {
func (h *SmokeTestHelper) GetBlockClient() contracts.BlockOperator {
return h.rookclient.GetBlockClient()
}
func (h *SmokeTestHelper) GetFileSystemClient() contracts.IRookFilesystem {
func (h *SmokeTestHelper) GetFileSystemClient() contracts.FileSystemOperator {
return h.rookclient.GetFileSystemClient()
}
func (h *SmokeTestHelper) GetObjectClient() contracts.IRookObject {
func (h *SmokeTestHelper) GetObjectClient() contracts.ObjectOperator {
return h.rookclient.GetObjectClient()
}
@@ -224,9 +224,12 @@ func (h *SmokeTestHelper) CleanUpDymanicBlockStorge() {
switch h.platform {
case enums.Kubernetes:
// Delete storage pool, storage class and pvc
blocklistraw, _ := h.GetBlockClient().BlockList()
blocklistMap := h.rookHelp.ParseBlockListData(blocklistraw)
h.k8sHelp.CleanUpDymaincCreatedPVC(blocklistMap)
blockImagesList, _ := h.GetBlockClient().BlockList()
for _, blockImage := range blockImagesList {
h.rookclient.GetRestAPIClient().DeleteBlockImage(blockImage)
}
}
}
@@ -331,10 +334,8 @@ func (h *SmokeTestHelper) DeleteFileStorage() (string, error) {
func (h *SmokeTestHelper) CreateObjectStore() (string, error) {
switch h.platform {
case enums.Kubernetes:
_, err := h.GetObjectClient().ObjectCreate()
if err != nil {
return "Couldn't create object store ", err
}
h.GetObjectClient().ObjectCreate()
time.Sleep(time.Second * 2) //wait for rgw service to to started
if h.k8sHelp.IsServiceUpInNameSpace("rgw") {
_, err := h.k8sHelp.GetService("rgw-external")
if err != nil {
@@ -360,52 +361,30 @@ func (h *SmokeTestHelper) CreateObjectStoreUser() (string, error) {
return "USER CREATED ", nil
}
func (h *SmokeTestHelper) GetObjectStoreUsers() (map[string]utils.ObjectUserListData, error) {
rawdata, err := h.GetObjectClient().ObjectListUser()
if err != nil {
return nil, err
} else {
return h.rookHelp.ParserObjectUserListData(rawdata), nil
}
func (h *SmokeTestHelper) GetObjectStoreUsers() ([]model.ObjectUser, error) {
return h.GetObjectClient().ObjectListUser()
}
func (h *SmokeTestHelper) GetObjectStoreUser(userid string) (utils.ObjectUserData, error) {
rawdata, err := h.GetObjectClient().ObjectGetUser(userid)
if err != nil {
return utils.ObjectUserData{}, err
} else {
return h.rookHelp.ParserObjectUserData(rawdata), nil
}
func (h *SmokeTestHelper) GetObjectStoreUser(userid string) (*model.ObjectUser, error) {
return h.GetObjectClient().ObjectGetUser(userid)
}
func (h *SmokeTestHelper) GetObjectStoreConnection(userid string) (utils.ObjectConnectionData, error) {
rawdata, err := h.GetObjectClient().ObjectConnection(userid)
if err != nil {
return utils.ObjectConnectionData{}, err
} else {
return h.rookHelp.ParserObjectConnectionData(rawdata), nil
}
func (h *SmokeTestHelper) GetObjectStoreConnection() (*model.ObjectStoreConnectInfo, error) {
return h.GetObjectClient().ObjectConnection()
}
func (h *SmokeTestHelper) GetObjectStoreBucketList() (map[string]utils.ObjectBucketListData, error) {
rawdata, err := h.GetObjectClient().ObjectBucketList()
if err != nil {
return nil, err
} else {
return h.rookHelp.ParserObjectBucketListData(rawdata), nil
}
func (h *SmokeTestHelper) GetObjectStoreBucketList() ([]model.ObjectBucket, error) {
return h.GetObjectClient().ObjectBucketList()
}
func (h *SmokeTestHelper) DeleteObjectStoreUser() (string, error) {
func (h *SmokeTestHelper) DeleteObjectStoreUser() error {
objectUserdata := h.getObjectStoreUserData()
_, err := h.GetObjectClient().ObjectDeleteUser(objectUserdata.userId)
if err != nil {
return "USER NOT DELETED", fmt.Errorf("User not deleted for object store")
}
return "USER DELETED ", nil
return h.GetObjectClient().ObjectDeleteUser(objectUserdata.userId)
}
func (h *SmokeTestHelper) GetRGWServiceUrl() (string, error) {