You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
174 lines
4.2 KiB
174 lines
4.2 KiB
package test
|
|
|
|
import (
|
|
"bufio"
|
|
"fmt"
|
|
"os"
|
|
"strings"
|
|
)
|
|
|
|
// DEPRECATED_GROUPS stores API groups that are deprecated and therefore are not supported in further developement
|
|
var DEPRECATED_GROUPS = []string{
|
|
"/cloudapi/machine/",
|
|
"/cloudapi/cloudspace/",
|
|
"/cloudapi/prometheus/",
|
|
"//cloudbroker/pgpu/",
|
|
"/cloudapi/gpu/",
|
|
"/cloudapi/portforwarding/",
|
|
"/cloudapi/account/listVMs",
|
|
"/cloudapi/account/listCS",
|
|
"/cloudapi/account/getStats",
|
|
"/cloudapi/vgpu/list",
|
|
|
|
"/cloudbroker/account/listVMs",
|
|
"/cloudbroker/account/listCS",
|
|
"/cloudbroker/machine/",
|
|
"/cloudbroker/bservice/",
|
|
"/cloudbroker/prometheus/",
|
|
"/cloudbroker/auditcollector/",
|
|
"/cloudbroker/health/",
|
|
"/cloudbroker/metering/",
|
|
"/cloudbroker/cloudspace/",
|
|
"/cloudbroker/vnfdev/",
|
|
"/cloudbroker/auditbeat/",
|
|
"/cloudbroker/zeroaccess/",
|
|
"/cloudbroker/qos/",
|
|
"/cloudbroker/backupcreator/",
|
|
"/cloudbroker/resmon/",
|
|
"/cloudbroker/pgpu/",
|
|
"/cloudbroker/job/",
|
|
"/cloudbroker/tlock/",
|
|
"/cloudbroker/eco/",
|
|
"/cloudbroker/iaas/",
|
|
"/cloudbroker/diagnostics/",
|
|
"/cloudbroker/milestones/",
|
|
}
|
|
|
|
// getUrlsFromBytes converts bytes to array of urls strings
|
|
func getUrlsFromBytes(bytes []byte) ([]string, error) {
|
|
paths, err := getMapFromFile(bytes)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
urls := make([]string, 0, len(paths))
|
|
for p := range paths {
|
|
if validateUrlFromJson(p) {
|
|
urls = append(urls, p)
|
|
}
|
|
}
|
|
|
|
return urls, nil
|
|
}
|
|
|
|
func validateUrlFromJson(url string) bool {
|
|
if !strings.HasPrefix(url, "/restmachine/cloudapi/") && !strings.HasPrefix(url, "/restmachine/cloudbroker/") {
|
|
return false
|
|
}
|
|
|
|
for _, deprecated := range DEPRECATED_GROUPS {
|
|
if strings.Contains(url, deprecated) {
|
|
return false
|
|
}
|
|
}
|
|
|
|
return true
|
|
}
|
|
|
|
// getMissingDecortUrls returns array of url strings that are present in json swagger docs and absent in decort-sdk handlers.
|
|
func getMissingDecortUrls(jsonUrls, decortUrls []string) []string {
|
|
result := make([]string, 0, len(jsonUrls))
|
|
for _, jsonUrl := range jsonUrls {
|
|
var found bool
|
|
for _, decortUrl := range decortUrls {
|
|
if jsonUrl == decortUrl {
|
|
found = true
|
|
break
|
|
}
|
|
}
|
|
|
|
if !found {
|
|
result = append(result, jsonUrl)
|
|
}
|
|
}
|
|
|
|
return result
|
|
}
|
|
|
|
// readUrlFromDir reads all url addresses from given directory and its subdirectories and subfiles and returns array of urls found. Capacity will
|
|
func readUrlFromDir(dirName string, capacity int) []string {
|
|
result := make([]string, 0, capacity)
|
|
|
|
items, _ := os.ReadDir(dirName)
|
|
|
|
for _, item := range items {
|
|
itemName := dirName + "/" + item.Name()
|
|
if item.IsDir() {
|
|
subitems, _ := os.ReadDir(itemName)
|
|
|
|
for _, subitem := range subitems {
|
|
subName := itemName + "/" + subitem.Name()
|
|
files, _ := os.ReadDir(subName)
|
|
if item.IsDir() {
|
|
for _, file := range files {
|
|
fileName := dirName + "/" + item.Name() + "/" + subitem.Name() + "/" + file.Name()
|
|
if !file.IsDir() {
|
|
url, err := readUrlFromFile(fileName)
|
|
if err != nil {
|
|
continue
|
|
}
|
|
result = append(result, url...)
|
|
}
|
|
}
|
|
}
|
|
|
|
if !subitem.IsDir() {
|
|
url, err := readUrlFromFile(subName)
|
|
if err != nil {
|
|
continue
|
|
}
|
|
result = append(result, url...)
|
|
}
|
|
}
|
|
|
|
} else {
|
|
url, err := readUrlFromFile(itemName)
|
|
if err != nil {
|
|
continue
|
|
}
|
|
result = append(result, url...)
|
|
|
|
}
|
|
}
|
|
return result
|
|
}
|
|
|
|
// readUrlFromFile reads url address of format url := "/cloudapi/vins/audits" or url := "/cloudbroker/vins/audits" from file with name fileName.
|
|
func readUrlFromFile(fileName string) ([]string, error) {
|
|
var result []string
|
|
file, err := os.Open(fileName)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer file.Close()
|
|
|
|
scanner := bufio.NewScanner(file)
|
|
for scanner.Scan() {
|
|
if strings.Contains(scanner.Text(), `"/cloudapi/`) {
|
|
indexStart := strings.Index(scanner.Text(), "/cloudapi/")
|
|
url := strings.Trim(scanner.Text()[indexStart:], `"`)
|
|
result = append(result, "/restmachine"+url)
|
|
}
|
|
if strings.Contains(scanner.Text(), `"/cloudbroker/`) {
|
|
indexStart := strings.Index(scanner.Text(), "/cloudbroker/")
|
|
url := strings.Trim(scanner.Text()[indexStart:], `"`)
|
|
result = append(result, "/restmachine"+url)
|
|
}
|
|
}
|
|
|
|
if len(result) == 0 {
|
|
return nil, fmt.Errorf("file %s doesn't contain any url", fileName)
|
|
}
|
|
return result, nil
|
|
}
|