This commit is contained in:
asteam
2025-08-29 12:51:25 +03:00
parent e10ee7f801
commit 825b1a0a00
177 changed files with 4821 additions and 349 deletions

View File

@@ -17,12 +17,15 @@ import (
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/lb"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/locations"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/rg"
securitygroup "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/security_group"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/sep"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/stack"
storagepolicy "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/storage_policy"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/tasks"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/trunk"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/vins"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/zone"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/sdn/acsgroups"
account_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/account"
audit_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/audit"
@@ -39,8 +42,10 @@ import (
node_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/node"
pcidevice_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/pcidevice"
rg_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/rg"
securitygroup_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/security_group"
sep_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/sep"
stack_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/stack"
storagepolicy_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/storage_policy"
tasks_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/tasks"
trunk_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/trunk"
vins_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/vins"
@@ -301,6 +306,46 @@ func TestGetListCloudAPI(t *testing.T) {
}
getResult("Stack list", bytes, stack.ListStacks{}, t)
// Storage policy
// List
bytes, err = client.CloudAPI().StoragePolicy().ListRaw(context.Background(), storagepolicy.ListRequest{})
if err != nil {
t.Error(err)
}
getResult("Storage policy list", bytes, storagepolicy.ListStoragePolicies{}, t)
// Get
listStoragePolicies, _ := client.CloudAPI().StoragePolicy().List(context.Background(), storagepolicy.ListRequest{})
if len(listStoragePolicies.Data) > 0 {
id := listStoragePolicies.Data[0].ID
bytes, err = client.CloudAPI().StoragePolicy().GetRaw(context.Background(), storagepolicy.GetRequest{StoragePolicyID: id})
if err != nil {
t.Error(err)
}
getResult("Storage policy get", bytes, storagepolicy.InfoStoragePolicy{}, t)
} else {
t.Errorf("Can not test Storage policy get because Storage policy list is empty")
}
// Security group
// List
bytes, err = client.CloudAPI().SecurityGroup().ListRaw(context.Background(), securitygroup.ListRequest{})
if err != nil {
t.Error(err)
}
getResult("Security group list", bytes, securitygroup.ListSecurityGroups{}, t)
// Get
listSecurityGroups, _ := client.CloudAPI().SecurityGroup().List(context.Background(), securitygroup.ListRequest{})
if len(listSecurityGroups.Data) > 0 {
id := listSecurityGroups.Data[0].ID
bytes, err = client.CloudAPI().SecurityGroup().GetRaw(context.Background(), securitygroup.GetRequest{SecurityGroupID: id})
if err != nil {
t.Error(err)
}
getResult("Security group get", bytes, securitygroup.RecordSecurityGroup{}, t)
} else {
t.Errorf("Can not test Security group get because Security group list is empty")
}
// Tasks
// List
bytes, err = client.CloudAPI().Tasks().ListRaw(context.Background(), tasks.ListRequest{})
@@ -681,6 +726,26 @@ func TestGetListCloudbroker(t *testing.T) {
t.Errorf("Can not test RG get because RG list is empty")
}
// Security group
// List
bytes, err = client.CloudBroker().SecurityGroup().ListRaw(context.Background(), securitygroup_cb.ListRequest{})
if err != nil {
t.Error(err)
}
getResult("Security group list", bytes, securitygroup_cb.ListSecurityGroups{}, t)
// Get
listSecurityGroups, _ := client.CloudBroker().SecurityGroup().List(context.Background(), securitygroup_cb.ListRequest{})
if len(listSecurityGroups.Data) > 0 {
id := listSecurityGroups.Data[0].ID
bytes, err = client.CloudBroker().SecurityGroup().GetRaw(context.Background(), securitygroup_cb.GetRequest{SecurityGroupID: id})
if err != nil {
t.Error(err)
}
getResult("Security group get", bytes, securitygroup_cb.RecordSecurityGroup{}, t)
} else {
t.Errorf("Can not test Security group get because Security group list is empty")
}
// SEP
// List
bytes, err = client.CloudBroker().SEP().ListRaw(context.Background(), sep_cb.ListRequest{})
@@ -727,6 +792,26 @@ func TestGetListCloudbroker(t *testing.T) {
t.Errorf("Can not test Stack get because Stack list is empty")
}
// Storage policy
// List
bytes, err = client.CloudBroker().StoragePolicy().ListRaw(context.Background(), storagepolicy_cb.ListRequest{})
if err != nil {
t.Error(err)
}
getResult("Storage policy list", bytes, storagepolicy_cb.ListStoragePolicies{}, t)
// Get
listStoragePolicies, _ := client.CloudBroker().StoragePolicy().List(context.Background(), storagepolicy_cb.ListRequest{})
if len(listStoragePolicies.Data) > 0 {
id := listStoragePolicies.Data[0].ID
bytes, err = client.CloudBroker().StoragePolicy().GetRaw(context.Background(), storagepolicy_cb.GetRequest{StoragePolicyID: id})
if err != nil {
t.Error(err)
}
getResult("Storage policy get", bytes, storagepolicy_cb.InfoStoragePolicy{}, t)
} else {
t.Errorf("Can not test Storage policy get because Storage policy list is empty")
}
// Tasks
// List
bytes, err = client.CloudBroker().Tasks().ListRaw(context.Background(), tasks_cb.ListRequest{})
@@ -796,6 +881,40 @@ func TestGetListCloudbroker(t *testing.T) {
}
}
// TestGetListSDNAPI tests platforms responses vs. json tags of golang structures in cloudapi get/list methods
func TestGetListSDNAPI(t *testing.T) {
var bytes []byte
var err error
client, err := getClient()
if err != nil {
t.Fatalf("Cannot get client: %v", err)
}
// AccessGroups
// List
bytes, err = client.SDN().AccessGroups().ListRaw(context.Background(), acsgroups.ListGroupsRequest{})
if err != nil {
t.Error(err)
}
getResult("access groups list", bytes, acsgroups.AccessGroup{}, t)
// Users AccessGroups
// list
listAcsGroups, _ := client.SDN().AccessGroups().List(context.Background(), acsgroups.ListGroupsRequest{})
if len(listAcsGroups.AccessGroups) > 0 {
id := listAcsGroups.AccessGroups[0].ID
bytes, err = client.SDN().AccessGroups().UserListRaw(context.Background(), acsgroups.UsersListRequest{AccessGroupID: id})
if err != nil {
t.Error(err)
}
getResult("access groups users list", bytes, acsgroups.User{}, t)
} else {
t.Errorf("Can not test users get because acs groups list is empty")
}
}
// TestRequestsCloudAPI tests platform requests vs. golang request structures in sdk for cloudapi requests
func TestRequestsCloudAPI(t *testing.T) {
bytes := getBytesFromJSON("input.json", t)
@@ -808,6 +927,11 @@ func TestRequestsCloudbroker(t *testing.T) {
getErrorsFromJSON(bytes, t, "cloudbroker")
}
func TestRequestsSDN(t *testing.T) {
bytes := getBytesFromJSON("input.json", t)
getErrorsFromJSON(bytes, t, "sdn")
}
// TestGetAllPaths tests if platform has any handlers that golang sdk doesn't. In this case, list of missing handlers is provided.
// Note that DEPRECATED_GROUPS stores list of groups that are considered deprecated. You can add additional grops to DEPRECATED_GROUPS if required.
func TestGetAllPaths(t *testing.T) {
@@ -839,8 +963,9 @@ func TestGetAllPaths(t *testing.T) {
caTestUrls := getRequestsMapCloudAPI()
cbTestUrls := getRequestsMapCloudbroker()
sdnTestUrls := getRequestsMapSDN()
urlsInTest := make([]string, len(caTestUrls)+len(cbTestUrls))
urlsInTest := make([]string, len(caTestUrls)+len(cbTestUrls)+len(sdnTestUrls))
i := 0
for k := range caTestUrls {
@@ -851,6 +976,10 @@ func TestGetAllPaths(t *testing.T) {
urlsInTest[i] = k
i++
}
for k := range sdnTestUrls {
urlsInTest[i] = k
i++
}
missingUrls = getMissingDecortUrls(jsonUrls, urlsInTest)
if len(missingUrls) > 0 {

View File

@@ -18,14 +18,17 @@ import (
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/pcidevice"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/prometheus"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/rg"
securitygroup "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/security_group"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/sep"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/stack"
storagepolicy "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/storage_policy"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/tasks"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/trunk"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/user"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/vfpool"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/vins"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/zone"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/sdn/acsgroups"
account_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/account"
apiaccess_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/apiaccess"
@@ -47,8 +50,10 @@ import (
pcidevice_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/pcidevice"
prometheus_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/prometheus"
rg_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/rg"
securitygroup_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/security_group"
sep_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/sep"
stack_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/stack"
storagepolicy_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/storage_policy"
tasks_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/tasks"
trunk_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/trunk"
user_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/user"
@@ -141,6 +146,7 @@ func getRequestsMapCloudAPI() map[string]interface{} {
"/restmachine/cloudapi/compute/cdEject": compute.CDEjectRequest{},
"/restmachine/cloudapi/compute/cdInsert": compute.CDInsertRequest{},
"/restmachine/cloudapi/compute/changeLinkState": compute.ChangeLinkStateRequest{},
"/restmachine/cloudapi/compute/change_security_groups": compute.ChangeSecGroupsRequest{},
"/restmachine/cloudapi/compute/clone": compute.CloneRequest{},
"/restmachine/cloudapi/compute/createTemplate": compute.CreateTemplateRequest{},
"/restmachine/cloudapi/compute/createTemplateFromBlank": compute.CreateTemplateFromBlankRequest{},
@@ -207,31 +213,32 @@ func getRequestsMapCloudAPI() map[string]interface{} {
"/restmachine/cloudapi/compute/guest_agent_feature_update": compute.GuestAgentFeatureUpdateRequest{},
// disks
"/restmachine/cloudapi/disks/create": disks.CreateRequest{},
"/restmachine/cloudapi/disks/delete": disks.DeleteRequest{},
"/restmachine/cloudapi/disks/deleteDisks": disks.DisksDeleteRequest{},
"/restmachine/cloudapi/disks/fromPlatformDisk": disks.FromPlatformDiskRequest{},
"/restmachine/cloudapi/disks/get": disks.GetRequest{},
"/restmachine/cloudapi/disks/limitIO": disks.LimitIORequest{},
"/restmachine/cloudapi/disks/list": disks.ListRequest{},
"/restmachine/cloudapi/disks/listDeleted": disks.ListDeletedRequest{},
"/restmachine/cloudapi/disks/listTypes": disks.ListTypesRequest{},
"/restmachine/cloudapi/disks/listUnattached": disks.ListUnattachedRequest{},
"/restmachine/cloudapi/disks/rename": disks.RenameRequest{},
"/restmachine/cloudapi/disks/replicate": disks.ReplicateRequest{},
"/restmachine/cloudapi/disks/replicationResume": disks.ReplicationResumeRequest{},
"/restmachine/cloudapi/disks/replicationReverse": disks.ReplicationReverseRequest{},
"/restmachine/cloudapi/disks/replicationStart": disks.ReplicationStartRequest{},
"/restmachine/cloudapi/disks/replicationStatus": disks.ReplicationStatusRequest{},
"/restmachine/cloudapi/disks/replicationStop": disks.ReplicationStopRequest{},
"/restmachine/cloudapi/disks/replicationSuspend": disks.ReplicationSuspendRequest{},
"/restmachine/cloudapi/disks/resize2": disks.ResizeRequest{},
"/restmachine/cloudapi/disks/restore": disks.RestoreRequest{},
"/restmachine/cloudapi/disks/search": disks.SearchRequest{},
"/restmachine/cloudapi/disks/share": disks.ShareRequest{},
"/restmachine/cloudapi/disks/snapshotDelete": disks.SnapshotDeleteRequest{},
"/restmachine/cloudapi/disks/snapshotRollback": disks.SnapshotRollbackRequest{},
"/restmachine/cloudapi/disks/unshare": disks.UnshareRequest{},
"/restmachine/cloudapi/disks/change_disk_storage_policy": disks.ChangeDiskStoragePolicyRequest{},
"/restmachine/cloudapi/disks/create": disks.CreateRequest{},
"/restmachine/cloudapi/disks/delete": disks.DeleteRequest{},
"/restmachine/cloudapi/disks/deleteDisks": disks.DisksDeleteRequest{},
"/restmachine/cloudapi/disks/fromPlatformDisk": disks.FromPlatformDiskRequest{},
"/restmachine/cloudapi/disks/get": disks.GetRequest{},
"/restmachine/cloudapi/disks/limitIO": disks.LimitIORequest{},
"/restmachine/cloudapi/disks/list": disks.ListRequest{},
"/restmachine/cloudapi/disks/listDeleted": disks.ListDeletedRequest{},
"/restmachine/cloudapi/disks/listTypes": disks.ListTypesRequest{},
"/restmachine/cloudapi/disks/listUnattached": disks.ListUnattachedRequest{},
"/restmachine/cloudapi/disks/rename": disks.RenameRequest{},
"/restmachine/cloudapi/disks/replicate": disks.ReplicateRequest{},
"/restmachine/cloudapi/disks/replicationResume": disks.ReplicationResumeRequest{},
"/restmachine/cloudapi/disks/replicationReverse": disks.ReplicationReverseRequest{},
"/restmachine/cloudapi/disks/replicationStart": disks.ReplicationStartRequest{},
"/restmachine/cloudapi/disks/replicationStatus": disks.ReplicationStatusRequest{},
"/restmachine/cloudapi/disks/replicationStop": disks.ReplicationStopRequest{},
"/restmachine/cloudapi/disks/replicationSuspend": disks.ReplicationSuspendRequest{},
"/restmachine/cloudapi/disks/resize2": disks.ResizeRequest{},
"/restmachine/cloudapi/disks/restore": disks.RestoreRequest{},
"/restmachine/cloudapi/disks/search": disks.SearchRequest{},
"/restmachine/cloudapi/disks/share": disks.ShareRequest{},
"/restmachine/cloudapi/disks/snapshotDelete": disks.SnapshotDeleteRequest{},
"/restmachine/cloudapi/disks/snapshotRollback": disks.SnapshotRollbackRequest{},
"/restmachine/cloudapi/disks/unshare": disks.UnshareRequest{},
//dpdknet
"/restmachine/cloudapi/dpdknet/get": dpdknet.GetRequest{},
@@ -254,13 +261,14 @@ func getRequestsMapCloudAPI() map[string]interface{} {
"/restmachine/cloudapi/flipgroup/list": flipgroup.ListRequest{},
// image
"/restmachine/cloudapi/image/create": image.CreateRequest{},
"/restmachine/cloudapi/image/createVirtual": image.CreateVirtualRequest{},
"/restmachine/cloudapi/image/delete": image.DeleteRequest{},
"/restmachine/cloudapi/image/get": image.GetRequest{},
"/restmachine/cloudapi/image/link": image.LinkRequest{},
"/restmachine/cloudapi/image/list": image.ListRequest{},
"/restmachine/cloudapi/image/rename": image.RenameRequest{},
"/restmachine/cloudapi/image/change_storage_policy": image.ChangeStoragePolicyRequest{},
"/restmachine/cloudapi/image/create": image.CreateRequest{},
"/restmachine/cloudapi/image/createVirtual": image.CreateVirtualRequest{},
"/restmachine/cloudapi/image/delete": image.DeleteRequest{},
"/restmachine/cloudapi/image/get": image.GetRequest{},
"/restmachine/cloudapi/image/link": image.LinkRequest{},
"/restmachine/cloudapi/image/list": image.ListRequest{},
"/restmachine/cloudapi/image/rename": image.RenameRequest{},
// k8ci, k8s
"/restmachine/cloudapi/k8ci/get": k8ci.GetRequest{},
@@ -375,6 +383,15 @@ func getRequestsMapCloudAPI() map[string]interface{} {
"/restmachine/cloudapi/rg/usage": rg.UsageRequest{},
"/restmachine/cloudapi/rg/removeDefNet": rg.RemoveDefNetRequest{},
// security_group
"/restmachine/cloudapi/security_group/create": securitygroup.CreateRequest{},
"/restmachine/cloudapi/security_group/create_rule": securitygroup.CreateRuleRequest{},
"/restmachine/cloudapi/security_group/delete": securitygroup.DeleteRequest{},
"/restmachine/cloudapi/security_group/delete_rule": securitygroup.DeleteRuleRequest{},
"/restmachine/cloudapi/security_group/get": securitygroup.GetRequest{},
"/restmachine/cloudapi/security_group/list": securitygroup.ListRequest{},
"/restmachine/cloudapi/security_group/update": securitygroup.UpdateRequest{},
// sep
"/restmachine/cloudapi/sep/listAvailableSepAndPools": sep.ListAvailableSEPAndPoolsRequest{},
@@ -384,6 +401,10 @@ func getRequestsMapCloudAPI() map[string]interface{} {
"/restmachine/cloudapi/tasks/get": tasks.GetRequest{},
"/restmachine/cloudapi/tasks/list": tasks.ListRequest{},
// storage policy
"/restmachine/cloudapi/storage_policy/get": storagepolicy.GetRequest{},
"/restmachine/cloudapi/storage_policy/list": storagepolicy.ListRequest{},
// trunk
"/restmachine/cloudapi/trunk/get": trunk.GetRequest{},
"/restmachine/cloudapi/trunk/list": trunk.ListRequest{},
@@ -442,8 +463,10 @@ func getRequestsMapCloudbroker() map[string]interface{} {
return map[string]interface{}{
// account_cb
"/restmachine/cloudbroker/account/addUser": account_cb.AddUserRequest{},
"/restmachine/cloudbroker/account/add_storage_policy": account_cb.AddStoragePolicyRequest{},
"/restmachine/cloudbroker/account/audits": account_cb.AuditsRequest{},
"/restmachine/cloudbroker/account/create": account_cb.CreateRequest{},
"/restmachine/cloudbroker/account/del_storage_policy": account_cb.DelStoragePolicyRequest{},
"/restmachine/cloudbroker/account/delete": account_cb.DeleteRequest{},
"/restmachine/cloudbroker/account/deleteAccounts": account_cb.DeleteAccountsRequest{},
"/restmachine/cloudbroker/account/deleteUser": account_cb.DeleteUserRequest{},
@@ -527,6 +550,7 @@ func getRequestsMapCloudbroker() map[string]interface{} {
"/restmachine/cloudbroker/compute/cdInsert": compute_cb.CDInsertRequest{},
"/restmachine/cloudbroker/compute/changeLinkState": compute_cb.ChangeLinkStateRequest{},
"/restmachine/cloudbroker/compute/change_mtu": compute_cb.ChangeMTURequest{},
"/restmachine/cloudbroker/compute/change_security_groups": compute_cb.ChangeSecGroupsRequest{},
"/restmachine/cloudbroker/compute/clone": compute_cb.CloneRequest{},
"/restmachine/cloudbroker/compute/computeciSet": compute_cb.ComputeCISetRequest{},
"/restmachine/cloudbroker/compute/computeciUnset": compute_cb.ComputeCIUnsetRequest{},
@@ -608,33 +632,34 @@ func getRequestsMapCloudbroker() map[string]interface{} {
"/restmachine/cloudbroker/compute/guest_agent_feature_update": compute_cb.GuestAgentFeatureUpdateRequest{},
// disks
"/restmachine/cloudbroker/disks/create": disks_cb.CreateRequest{},
"/restmachine/cloudbroker/disks/delete": disks_cb.DeleteRequest{},
"/restmachine/cloudbroker/disks/deleteDisks": disks_cb.DeleteDisksRequest{},
"/restmachine/cloudbroker/disks/depresent": disks_cb.DepresentRequest{},
"/restmachine/cloudbroker/disks/fromPlatformDisk": disks_cb.FromPlatformDiskRequest{},
"/restmachine/cloudbroker/disks/get": disks_cb.GetRequest{},
"/restmachine/cloudbroker/disks/limitIO": disks_cb.LimitIORequest{},
"/restmachine/cloudbroker/disks/list": disks_cb.ListRequest{},
"/restmachine/cloudbroker/disks/listDeleted": disks_cb.ListDeletedRequest{},
"/restmachine/cloudbroker/disks/listTypes": disks_cb.ListTypesRequest{},
"/restmachine/cloudbroker/disks/listUnattached": disks_cb.ListUnattachedRequest{},
"/restmachine/cloudbroker/disks/rename": disks_cb.RenameRequest{},
"/restmachine/cloudbroker/disks/present": disks_cb.PresentRequest{},
"/restmachine/cloudbroker/disks/replicate": disks_cb.ReplicateRequest{},
"/restmachine/cloudbroker/disks/replicationResume": disks_cb.ReplicationResumeRequest{},
"/restmachine/cloudbroker/disks/replicationReverse": disks_cb.ReplicationReverseRequest{},
"/restmachine/cloudbroker/disks/replicationStart": disks_cb.ReplicationStartRequest{},
"/restmachine/cloudbroker/disks/replicationStatus": disks_cb.ReplicationStatusRequest{},
"/restmachine/cloudbroker/disks/replicationStop": disks_cb.ReplicationStopRequest{},
"/restmachine/cloudbroker/disks/replicationSuspend": disks_cb.ReplicationSuspendRequest{},
"/restmachine/cloudbroker/disks/resize2": disks_cb.ResizeRequest{},
"/restmachine/cloudbroker/disks/restore": disks_cb.RestoreRequest{},
"/restmachine/cloudbroker/disks/search": disks_cb.SearchRequest{},
"/restmachine/cloudbroker/disks/share": disks_cb.ShareRequest{},
"/restmachine/cloudbroker/disks/snapshotDelete": disks_cb.SnapshotDeleteRequest{},
"/restmachine/cloudbroker/disks/snapshotRollback": disks_cb.SnapshotRollbackRequest{},
"/restmachine/cloudbroker/disks/unshare": disks_cb.UnshareRequest{},
"/restmachine/cloudbroker/disks/change_disk_storage_policy": disks_cb.ChangeDiskStoragePolicyRequest{},
"/restmachine/cloudbroker/disks/create": disks_cb.CreateRequest{},
"/restmachine/cloudbroker/disks/delete": disks_cb.DeleteRequest{},
"/restmachine/cloudbroker/disks/deleteDisks": disks_cb.DeleteDisksRequest{},
"/restmachine/cloudbroker/disks/depresent": disks_cb.DepresentRequest{},
"/restmachine/cloudbroker/disks/fromPlatformDisk": disks_cb.FromPlatformDiskRequest{},
"/restmachine/cloudbroker/disks/get": disks_cb.GetRequest{},
"/restmachine/cloudbroker/disks/limitIO": disks_cb.LimitIORequest{},
"/restmachine/cloudbroker/disks/list": disks_cb.ListRequest{},
"/restmachine/cloudbroker/disks/listDeleted": disks_cb.ListDeletedRequest{},
"/restmachine/cloudbroker/disks/listTypes": disks_cb.ListTypesRequest{},
"/restmachine/cloudbroker/disks/listUnattached": disks_cb.ListUnattachedRequest{},
"/restmachine/cloudbroker/disks/rename": disks_cb.RenameRequest{},
"/restmachine/cloudbroker/disks/present": disks_cb.PresentRequest{},
"/restmachine/cloudbroker/disks/replicate": disks_cb.ReplicateRequest{},
"/restmachine/cloudbroker/disks/replicationResume": disks_cb.ReplicationResumeRequest{},
"/restmachine/cloudbroker/disks/replicationReverse": disks_cb.ReplicationReverseRequest{},
"/restmachine/cloudbroker/disks/replicationStart": disks_cb.ReplicationStartRequest{},
"/restmachine/cloudbroker/disks/replicationStatus": disks_cb.ReplicationStatusRequest{},
"/restmachine/cloudbroker/disks/replicationStop": disks_cb.ReplicationStopRequest{},
"/restmachine/cloudbroker/disks/replicationSuspend": disks_cb.ReplicationSuspendRequest{},
"/restmachine/cloudbroker/disks/resize2": disks_cb.ResizeRequest{},
"/restmachine/cloudbroker/disks/restore": disks_cb.RestoreRequest{},
"/restmachine/cloudbroker/disks/search": disks_cb.SearchRequest{},
"/restmachine/cloudbroker/disks/share": disks_cb.ShareRequest{},
"/restmachine/cloudbroker/disks/snapshotDelete": disks_cb.SnapshotDeleteRequest{},
"/restmachine/cloudbroker/disks/snapshotRollback": disks_cb.SnapshotRollbackRequest{},
"/restmachine/cloudbroker/disks/unshare": disks_cb.UnshareRequest{},
// dpdknet
"/restmachine/cloudbroker/dpdknet/get": dpdknet_cb.GetRequest{},
@@ -717,26 +742,27 @@ func getRequestsMapCloudbroker() map[string]interface{} {
"/restmachine/cloudbroker/group/list": group_cb.ListRequest{},
// image
"/restmachine/cloudbroker/image/computeciSet": image_cb.ComputeCISetRequest{},
"/restmachine/cloudbroker/image/computeciUnset": image_cb.ComputeCIUnsetRequest{},
"/restmachine/cloudbroker/image/createCDROMImage": image_cb.CreateCDROMImageRequest{},
"/restmachine/cloudbroker/image/createImage": image_cb.CreateRequest{},
"/restmachine/cloudbroker/image/createVirtual": image_cb.CreateVirtualRequest{},
"/restmachine/cloudbroker/image/delete": image_cb.DeleteRequest{},
"/restmachine/cloudbroker/image/deleteCDROMImage": image_cb.DeleteCDROMImageRequest{},
"/restmachine/cloudbroker/image/deleteImages": image_cb.DeleteImagesRequest{},
"/restmachine/cloudbroker/image/disable": image_cb.DisableRequest{},
"/restmachine/cloudbroker/image/edit": image_cb.EditRequest{},
"/restmachine/cloudbroker/image/enable": image_cb.EnableRequest{},
"/restmachine/cloudbroker/image/get": image_cb.GetRequest{},
"/restmachine/cloudbroker/image/grantAccess": image_cb.GrantAccessRequest{},
"/restmachine/cloudbroker/image/link": image_cb.LinkRequest{},
"/restmachine/cloudbroker/image/list": image_cb.ListRequest{},
"/restmachine/cloudbroker/image/listStacks": image_cb.ListStacksRequest{},
"/restmachine/cloudbroker/image/rename": image_cb.RenameRequest{},
"/restmachine/cloudbroker/image/revokeAccess": image_cb.RevokeAccessRequest{},
"/restmachine/cloudbroker/image/share": image_cb.ShareRequest{},
"/restmachine/cloudbroker/image/updateNodes": image_cb.UpdateNodesRequest{},
"/restmachine/cloudbroker/image/change_storage_policy": image_cb.ChangeStoragePolicyRequest{},
"/restmachine/cloudbroker/image/computeciSet": image_cb.ComputeCISetRequest{},
"/restmachine/cloudbroker/image/computeciUnset": image_cb.ComputeCIUnsetRequest{},
"/restmachine/cloudbroker/image/createCDROMImage": image_cb.CreateCDROMImageRequest{},
"/restmachine/cloudbroker/image/createImage": image_cb.CreateRequest{},
"/restmachine/cloudbroker/image/createVirtual": image_cb.CreateVirtualRequest{},
"/restmachine/cloudbroker/image/delete": image_cb.DeleteRequest{},
"/restmachine/cloudbroker/image/deleteCDROMImage": image_cb.DeleteCDROMImageRequest{},
"/restmachine/cloudbroker/image/deleteImages": image_cb.DeleteImagesRequest{},
"/restmachine/cloudbroker/image/disable": image_cb.DisableRequest{},
"/restmachine/cloudbroker/image/edit": image_cb.EditRequest{},
"/restmachine/cloudbroker/image/enable": image_cb.EnableRequest{},
"/restmachine/cloudbroker/image/get": image_cb.GetRequest{},
"/restmachine/cloudbroker/image/grantAccess": image_cb.GrantAccessRequest{},
"/restmachine/cloudbroker/image/link": image_cb.LinkRequest{},
"/restmachine/cloudbroker/image/list": image_cb.ListRequest{},
"/restmachine/cloudbroker/image/listStacks": image_cb.ListStacksRequest{},
"/restmachine/cloudbroker/image/rename": image_cb.RenameRequest{},
"/restmachine/cloudbroker/image/revokeAccess": image_cb.RevokeAccessRequest{},
"/restmachine/cloudbroker/image/share": image_cb.ShareRequest{},
"/restmachine/cloudbroker/image/updateNodes": image_cb.UpdateNodesRequest{},
// k8ci
"/restmachine/cloudbroker/k8ci/accessAdd": k8ci_cb.AccessAddRequest{},
@@ -855,11 +881,13 @@ func getRequestsMapCloudbroker() map[string]interface{} {
// rg
"/restmachine/cloudbroker/rg/accessGrant": rg_cb.AccessGrantRequest{},
"/restmachine/cloudbroker/rg/accessRevoke": rg_cb.AccessRevokeRequest{},
"/restmachine/cloudbroker/rg/add_storage_policy": rg_cb.AddStoragePolicyRequest{},
"/restmachine/cloudbroker/rg/affinityGroupComputes": rg_cb.AffinityGroupComputesRequest{},
"/restmachine/cloudbroker/rg/affinityGroupsGet": rg_cb.AffinityGroupsGetRequest{},
"/restmachine/cloudbroker/rg/affinityGroupsList": rg_cb.AffinityGroupsListRequest{},
"/restmachine/cloudbroker/rg/audits": rg_cb.AuditsRequest{},
"/restmachine/cloudbroker/rg/create": rg_cb.CreateRequest{},
"/restmachine/cloudbroker/rg/del_storage_policy": rg_cb.DelStoragePolicyRequest{},
"/restmachine/cloudbroker/rg/delete": rg_cb.DeleteRequest{},
"/restmachine/cloudbroker/rg/disable": rg_cb.DisableRequest{},
"/restmachine/cloudbroker/rg/enable": rg_cb.EnableRequest{},
@@ -885,6 +913,15 @@ func getRequestsMapCloudbroker() map[string]interface{} {
"/restmachine/cloudbroker/rg/usage": rg_cb.UsageRequest{},
"/restmachine/cloudbroker/rg/removeDefNet": rg_cb.RemoveDefNetRequest{},
// security_group
"/restmachine/cloudbroker/security_group/create": securitygroup_cb.CreateRequest{},
"/restmachine/cloudbroker/security_group/create_rule": securitygroup_cb.CreateRuleRequest{},
"/restmachine/cloudbroker/security_group/delete": securitygroup_cb.DeleteRequest{},
"/restmachine/cloudbroker/security_group/delete_rule": securitygroup_cb.DeleteRuleRequest{},
"/restmachine/cloudbroker/security_group/get": securitygroup_cb.GetRequest{},
"/restmachine/cloudbroker/security_group/list": securitygroup_cb.ListRequest{},
"/restmachine/cloudbroker/security_group/update": securitygroup_cb.UpdateRequest{},
// sep
"/restmachine/cloudbroker/sep/accessGrant": sep_cb.AccessGrantRequest{},
"/restmachine/cloudbroker/sep/accessGrantToPool": sep_cb.AccessGrantToPoolRequest{},
@@ -920,6 +957,17 @@ func getRequestsMapCloudbroker() map[string]interface{} {
"/restmachine/cloudbroker/stack/setCpuAllocationRatio": stack_cb.SetCpuAllocationRatioRequest{},
"/restmachine/cloudbroker/stack/setMemAllocationRatio": stack_cb.SetMemAllocationRatioRequest{},
// storage_policy
"/restmachine/cloudbroker/storage_policy/get": storagepolicy_cb.GetRequest{},
"/restmachine/cloudbroker/storage_policy/list": storagepolicy_cb.ListRequest{},
"/restmachine/cloudbroker/storage_policy/create": storagepolicy_cb.CreateRequest{},
"/restmachine/cloudbroker/storage_policy/update": storagepolicy_cb.UpdateRequest{},
"/restmachine/cloudbroker/storage_policy/add_pool": storagepolicy_cb.AddPoolRequest{},
"/restmachine/cloudbroker/storage_policy/delete": storagepolicy_cb.DeleteRequest{},
"/restmachine/cloudbroker/storage_policy/disable": storagepolicy_cb.DisableRequest{},
"/restmachine/cloudbroker/storage_policy/enable": storagepolicy_cb.EnableRequest{},
"/restmachine/cloudbroker/storage_policy/delete_pool": storagepolicy_cb.DeletePollRequest{},
// tasks
"/restmachine/cloudbroker/tasks/get": tasks_cb.GetRequest{},
"/restmachine/cloudbroker/tasks/list": tasks_cb.ListRequest{},
@@ -1000,6 +1048,7 @@ func getRequestsMapCloudbroker() map[string]interface{} {
"/restmachine/cloudbroker/vins/staticRouteAdd": vins_cb.StaticRouteAddRequest{},
"/restmachine/cloudbroker/vins/staticRouteDel": vins_cb.StaticRouteDelRequest{},
"/restmachine/cloudbroker/vins/staticRouteList": vins_cb.StaticRouteListRequest{},
"/restmachine/cloudbroker/vins/update": vins_cb.UpdateRequest{},
"/restmachine/cloudbroker/vins/vnfdevRedeploy": vins_cb.VNFDevRedeployRequest{},
"/restmachine/cloudbroker/vins/vnfdevRestart": vins_cb.VNFDevRestartRequest{},
"/restmachine/cloudbroker/vins/vnfdevReset": vins_cb.VNFDevResetRequest{},
@@ -1016,3 +1065,18 @@ func getRequestsMapCloudbroker() map[string]interface{} {
"/restmachine/cloudbroker/zone/delNode": zone_cb.DelNodeRequest{},
}
}
// getRequestsMapSDN maps request path with request golang sdk structures for sdn most used requests
func getRequestsMapSDN() map[string]interface{} {
return map[string]interface{}{
// access_groups
"/restmachine/sdn/access_group/list": acsgroups.ListGroupsRequest{},
"/restmachine/sdn/access_group/user_list": acsgroups.UsersListRequest{},
"/restmachine/sdn/access_group/create": acsgroups.CreateRequest{},
"/restmachine/sdn/access_group/delete": acsgroups.DeleteRequest{},
"/restmachine/sdn/access_group/user_add": acsgroups.UserAddRequest{},
"/restmachine/sdn/access_group/patch": acsgroups.PatchRequest{},
"/restmachine/sdn/access_group/user_delete": acsgroups.UserDeleteRequest{},
"/restmachine/sdn/access_group/update_role": acsgroups.UserUpdateRoleRequest{},
}
}

View File

@@ -72,22 +72,25 @@ func getResult(testName string, bytes []byte, structure any, t *testing.T) strin
t.Errorf(result)
return result
}
return ""
result := fmt.Sprint(testName, ": ok")
t.Log(result)
return result
}
// getDifference tells which fields are present in bytesMap and not present in structMap and vice versa.
func getDifference(testName string, bytesMap, structMap map[string]interface{}) string {
var result string
bytesFields, _ := evaluate(bytesMap, structMap)
// structFields, _ := evaluate(structMap, bytesMap)
result += fmt.Sprintf("%s: ", testName)
if len(bytesFields) > 0 {
result += fmt.Sprintf("\nPlatform has these fields that golang struct doesn't: %v\n", bytesFields)
}
//if len(structFields) > 0 {
// result += fmt.Sprintf("Golang struct has these fields that platform doesn't: %v\n", structFields)
//}
// if len(structFields) > 0 {
// result += fmt.Sprintf("Golang struct has these fields that platform doesn't: %v\n", structFields)
// }
if len(bytesFields) == 0 {
result += "OK"
@@ -172,13 +175,25 @@ func appendSelectedElements(slice []string, elements []string) []string {
// GetMapFromBytes converts []byte to map[string]interface{}
func GetMapFromBytes(bytes []byte) (map[string]interface{}, error) {
var x map[string]interface{}
err := json.Unmarshal(bytes, &x)
var unmarshalMaps map[string]interface{}
err := json.Unmarshal(bytes, &unmarshalMaps)
if err != nil {
var unmarshalSlice []interface{}
err = json.Unmarshal(bytes, &unmarshalSlice)
if err != nil {
return nil, err
}
t, ok := unmarshalSlice[0].(map[string]interface{})
if !ok {
return nil, err
}
unmarshalMaps = t
}
if err != nil {
return nil, err
}
return getMapBytes(x), nil
return getMapBytes(unmarshalMaps), nil
}
func getMapBytes(value map[string]interface{}) map[string]interface{} {

View File

@@ -11,12 +11,24 @@ import (
func getParameters(input map[string]interface{}) []interface{} {
var emptySlice []interface{}
post, ok := input["post"]
if !ok {
methods := []string{"get", "post", "put", "delete", "patch", "head", "options"}
var methodData interface{}
found := false
for _, method := range methods {
if data, ok := input[method]; ok {
methodData = data
found = true
break
}
}
if !found {
return emptySlice
}
parameters, ok := post.(map[string]interface{})
parameters, ok := methodData.(map[string]interface{})
if !ok {
return emptySlice
}
@@ -30,7 +42,47 @@ func getParameters(input map[string]interface{}) []interface{} {
if !ok {
return emptySlice
}
// Check if there's a body parameter
for _, p := range res {
param, ok := p.(map[string]interface{})
if !ok {
continue
}
if param["name"] == "body" {
schema, ok := param["schema"].(map[string]interface{})
if !ok {
continue
}
properties, ok := schema["properties"].(map[string]interface{})
if !ok {
continue
}
requiredFields := make(map[string]bool)
if req, ok := schema["required"].([]interface{}); ok {
for _, r := range req {
requiredFields[r.(string)] = true
}
}
var newParams []interface{}
for name, prop := range properties {
propMap, ok := prop.(map[string]interface{})
if !ok {
continue
}
newParam := make(map[string]interface{})
newParam["name"] = name
newParam["type"] = propMap["type"]
newParam["required"] = requiredFields[name]
if propMap["type"] == "array" {
if items, ok := propMap["items"].(map[string]interface{}); ok {
newParam["items"] = items
}
}
newParams = append(newParams, newParam)
}
return newParams
}
}
return res
}
@@ -57,8 +109,10 @@ func getErrorsFromJSON(bytes []byte, t *testing.T, cloud string) {
requests = getRequestsMapCloudAPI()
case "cloudbroker":
requests = getRequestsMapCloudbroker()
case "sdn":
requests = getRequestsMapSDN()
default:
t.Fatalf("Wrong cloud provided, expected `cloudapi` or `cloudbroker`, got %s", cloud)
t.Fatalf("Wrong cloud provided, expected `cloudapi`, `cloudbroker` or `sdn`, got %s", cloud)
}
var dataLogs []string
@@ -96,12 +150,18 @@ func getErrorsFromJSON(bytes []byte, t *testing.T, cloud string) {
continue
}
name := param["name"].(string)
name, ok := param["name"].(string)
if !ok {
name = ""
}
required, ok := param["required"].(bool)
if !ok {
required = false
}
typ := p.(map[string]interface{})["type"].(string)
typ, ok := p.(map[string]interface{})["type"].(string)
if !ok {
typ = ""
}
var items string
if p.(map[string]interface{})["items"] != nil {
@@ -109,7 +169,10 @@ func getErrorsFromJSON(bytes []byte, t *testing.T, cloud string) {
if itemsTemp != nil {
itemsType := itemsTemp.(map[string]interface{})["type"]
if itemsType != nil {
items = itemsType.(string)
items, ok = itemsType.(string)
if !ok {
items = ""
}
}
}
}
@@ -143,7 +206,7 @@ func getErrorsFromJSON(bytes []byte, t *testing.T, cloud string) {
}
if len(requests) != i {
msg := fmt.Sprintf("Amount of structure checked (%d) is not the same as amount of platform requests available (%d), please check getRequestsMapCloudAPI func in code.",
msg := fmt.Sprintf("Amount of structure checked (%d) is not the same as amount of platform requests available (%d), please check getRequests func in code.",
i, len(requests))
t.Error(msg)
dataLogs = append(dataLogs, msg)

View File

@@ -67,7 +67,7 @@ func getUrlsFromBytes(bytes []byte) ([]string, error) {
}
func validateUrlFromJson(url string) bool {
if !strings.HasPrefix(url, "/restmachine/cloudapi/") && !strings.HasPrefix(url, "/restmachine/cloudbroker/") {
if !strings.HasPrefix(url, "/restmachine/cloudapi/") && !strings.HasPrefix(url, "/restmachine/cloudbroker/") && !strings.HasPrefix(url, "/restmachine/sdn/") {
return false
}
@@ -189,6 +189,11 @@ func readUrlFromFile(fileName string) ([]string, error) {
url := strings.Trim(scanner.Text()[indexStart:], `"`)
result = append(result, "/restmachine"+url)
}
if strings.Contains(scanner.Text(), `"/sdn/`) {
indexStart := strings.Index(scanner.Text(), "/sdn/")
url := strings.Trim(scanner.Text()[indexStart:], `"`)
result = append(result, "/restmachine"+url)
}
}
if len(result) == 0 {