This commit is contained in:
Mikalai Radchuk 2022-10-10 17:04:18 +01:00
Родитель b53c7d2e81
Коммит 61669a737c
6 изменённых файлов: 59 добавлений и 65 удалений

Просмотреть файл

@ -83,10 +83,40 @@ func adminRequest(ctx context.Context, method, path string, params url.Values, i
return resp, nil
}
func getCluster(ctx context.Context, resourceID string) *admin.OpenShiftCluster {
// adminGetCluster returns admin representation of an ARO cluster
func adminGetCluster(ctx context.Context, resourceID string) *admin.OpenShiftCluster {
var oc admin.OpenShiftCluster
resp, err := adminRequest(ctx, http.MethodGet, resourceID, nil, nil, &oc)
Expect(err).NotTo(HaveOccurred())
Expect(resp.StatusCode).To(Equal(http.StatusOK))
return &oc
}
// adminListClusters returns a list of ARO clusters in admin representation.
// It handles pagination: function returns all the clusters from all pages.
func adminListClusters(ctx context.Context, path string) []*admin.OpenShiftCluster {
ocs := make([]*admin.OpenShiftCluster, 0)
params := url.Values{}
for {
var list admin.OpenShiftClusterList
resp, err := adminRequest(ctx, http.MethodGet, path, params, nil, &list)
Expect(err).NotTo(HaveOccurred())
Expect(resp.StatusCode).To(Equal(http.StatusOK))
ocs = append(ocs, list.OpenShiftClusters...)
if list.NextLink == "" {
break
}
params = nextParams(list.NextLink)
}
return ocs
}
func nextParams(nextLink string) url.Values {
url, err := url.Parse(nextLink)
Expect(err).NotTo(HaveOccurred())
return url.Query()
}

Просмотреть файл

@ -13,12 +13,12 @@ import (
var _ = Describe("[Admin API] Get cluster action", func() {
BeforeEach(skipIfNotInDevelopmentEnv)
It("should be able to return single cluster with admin fields", func() {
It("must return single cluster with admin fields", func() {
ctx := context.Background()
resourceID := resourceIDFromEnv()
By("requesting the cluster document via RP admin API")
oc := getCluster(ctx, resourceID)
oc := adminGetCluster(ctx, resourceID)
By("checking that we received the expected cluster")
Expect(oc.ID).To(Equal(resourceID))

Просмотреть файл

@ -6,8 +6,6 @@ package e2e
import (
"context"
"fmt"
"net/http"
"net/url"
. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
@ -18,24 +16,14 @@ import (
var _ = Describe("[Admin API] List clusters action", func() {
BeforeEach(skipIfNotInDevelopmentEnv)
It("should be able to return list of all clusters with admin fields", func() {
It("must return list of clusters with admin fields", func() {
ctx := context.Background()
resourceID := resourceIDFromEnv()
By("requesting the cluster document via RP admin API")
ocs := adminClustersList(ctx, "/admin/providers/Microsoft.RedHatOpenShift/openShiftClusters")
By("checking that we received the expected cluster")
var oc *admin.OpenShiftCluster
for i := range ocs {
if ocs[i].ID == resourceID {
oc = ocs[i]
}
}
Expect(oc).ToNot(BeNil())
testAdminClustersList(ctx, "/admin/providers/Microsoft.RedHatOpenShift/openShiftClusters", resourceID)
})
It("should be able to return list clusters with admin fields by subscription", func() {
It("must return list of clusters with admin fields by subscription", func() {
ctx := context.Background()
resourceID := resourceIDFromEnv()
@ -43,7 +31,7 @@ var _ = Describe("[Admin API] List clusters action", func() {
testAdminClustersList(ctx, path, resourceID)
})
It("should be able to return list clusters with admin fields by resource group", func() {
It("must return list of clusters with admin fields by resource group", func() {
ctx := context.Background()
resourceID := resourceIDFromEnv()
@ -52,32 +40,11 @@ var _ = Describe("[Admin API] List clusters action", func() {
})
})
func adminClustersList(ctx context.Context, path string) []*admin.OpenShiftCluster {
By("requesting the cluster document via RP admin API")
ocs := make([]*admin.OpenShiftCluster, 0)
params := url.Values{}
for {
var list admin.OpenShiftClusterList
resp, err := adminRequest(ctx, http.MethodGet, path, params, nil, &list)
Expect(err).NotTo(HaveOccurred())
Expect(resp.StatusCode).To(Equal(http.StatusOK))
ocs = append(ocs, list.OpenShiftClusters...)
if list.NextLink == "" {
break
}
params = nextParams(list.NextLink)
}
return ocs
}
func testAdminClustersList(ctx context.Context, path, wantResourceID string) {
By("requesting the cluster document via RP admin API")
ocs := adminClustersList(ctx, path)
By("listing the cluster documents via RP admin API")
ocs := adminListClusters(ctx, path)
By("checking that we received the expected cluster")
By("verifying that we received the expected cluster")
var oc *admin.OpenShiftCluster
for i := range ocs {
if ocs[i].ID == wantResourceID {
@ -85,16 +52,11 @@ func testAdminClustersList(ctx context.Context, path, wantResourceID string) {
}
}
Expect(oc).ToNot(BeNil())
Expect(oc.ID).To(Equal(wantResourceID))
By("checking that fields available only in Admin API have values")
// Note: some fields will have empty values
// on successfully provisioned cluster (oc.Properties.Install, for example)
Expect(oc.Properties.StorageSuffix).ToNot(BeEmpty())
}
func nextParams(nextLink string) url.Values {
url, err := url.Parse(nextLink)
Expect(err).NotTo(HaveOccurred())
return url.Query()
Expect(oc.Properties.InfraID).ToNot(BeEmpty())
}

Просмотреть файл

@ -20,7 +20,7 @@ import (
var _ = Describe("[Admin API] Cluster admin update action", func() {
BeforeEach(skipIfNotInDevelopmentEnv)
It("should be able to run cluster update operation on a cluster", func() {
It("must run cluster update operation on a cluster", func() {
var oc = &admin.OpenShiftCluster{}
ctx := context.Background()
resourceID := resourceIDFromEnv()
@ -36,7 +36,7 @@ var _ = Describe("[Admin API] Cluster admin update action", func() {
By("waiting for the update to complete")
err = wait.PollImmediate(10*time.Second, 30*time.Minute, func() (bool, error) {
oc = getCluster(ctx, resourceID)
oc = adminGetCluster(ctx, resourceID)
return oc.Properties.ProvisioningState == admin.ProvisioningStateSucceeded, nil
})
Expect(err).NotTo(HaveOccurred())

Просмотреть файл

@ -31,7 +31,7 @@ const (
var _ = Describe("[Admin API] VM redeploy action", func() {
BeforeEach(skipIfNotInDevelopmentEnv)
It("should trigger a selected VM to redeploy", func() {
It("must trigger a selected VM to redeploy", func() {
ctx := context.Background()
resourceID := resourceIDFromEnv()
@ -56,7 +56,7 @@ var _ = Describe("[Admin API] VM redeploy action", func() {
Expect(err).NotTo(HaveOccurred())
Expect(resp.StatusCode).To(Equal(http.StatusOK))
By("verifying node power state is eventually Running in Azure")
By("waiting for the redeployed VM to report Running power state in Azure")
// we can pollimmediate without fear of false positive because we have
// already waited on the redeploy future
err = wait.PollImmediate(1*time.Minute, 10*time.Minute, func() (bool, error) {
@ -74,7 +74,7 @@ var _ = Describe("[Admin API] VM redeploy action", func() {
})
Expect(err).NotTo(HaveOccurred())
By("verifying redeployed node is eventually Ready in OpenShift")
By("waiting for the redeployed node to eventually become Ready in OpenShift")
// wait 1 minute - this will guarantee we pass the minimum (default) threshold of Node heartbeats (40 seconds)
err = wait.Poll(1*time.Minute, 10*time.Minute, func() (bool, error) {
node, err := clients.Kubernetes.CoreV1().Nodes().Get(ctx, *vm.Name, metav1.GetOptions{})

Просмотреть файл

@ -22,7 +22,7 @@ import (
var _ = Describe("[Admin API] List Azure resources action", func() {
BeforeEach(skipIfNotInDevelopmentEnv)
It("should list Azure resources", func() {
It("must list Azure resources for a cluster", func() {
ctx := context.Background()
resourceID := resourceIDFromEnv()
@ -31,21 +31,27 @@ var _ = Describe("[Admin API] List Azure resources action", func() {
Expect(err).NotTo(HaveOccurred())
clusterResourceGroup := stringutils.LastTokenByte(*oc.OpenShiftClusterProperties.ClusterProfile.ResourceGroupID, '/')
By("building a list of valid Azure resource IDs via the Azure API")
By("getting a list of resources from the cluster resource group via ARM")
expectedResources, err := clients.Resources.ListByResourceGroup(ctx, clusterResourceGroup, "", "", nil)
Expect(err).NotTo(HaveOccurred())
By("building a list of expected Azure resource IDs")
expectedResourceIDs := make([]string, 0, len(expectedResources)+1)
for _, r := range expectedResources {
expectedResourceIDs = append(expectedResourceIDs, strings.ToLower(*r.ID))
}
By("adding VNet to list of valid Azure resource IDs")
By("adding disk encryption sets to the the list of expected resource IDs")
diskEncryptionSet, err := clients.DiskEncryptionSets.Get(ctx, vnetResourceGroup, fmt.Sprintf("%s-disk-encryption-set", vnetResourceGroup))
Expect(err).NotTo(HaveOccurred())
expectedResourceIDs = append(expectedResourceIDs, strings.ToLower(*diskEncryptionSet.ID))
By("adding VNet to the list of expected resource IDs")
vnetID, _, err := subnet.Split(*oc.OpenShiftClusterProperties.MasterProfile.SubnetID)
Expect(err).NotTo(HaveOccurred())
expectedResourceIDs = append(expectedResourceIDs, strings.ToLower(vnetID))
By("adding RouteTables to list of valid Azure resource IDs")
By("adding RouteTables to the list of expected resource IDs")
r, err := azure.ParseResourceID(vnetID)
Expect(err).NotTo(HaveOccurred())
@ -59,10 +65,6 @@ var _ = Describe("[Admin API] List Azure resources action", func() {
vnet, err := clients.VirtualNetworks.Get(ctx, r.ResourceGroup, r.ResourceName, "")
Expect(err).NotTo(HaveOccurred())
diskEncryptionSet, err := clients.DiskEncryptionSets.Get(ctx, vnetResourceGroup, fmt.Sprintf("%s-disk-encryption-set", vnetResourceGroup))
Expect(err).NotTo(HaveOccurred())
expectedResourceIDs = append(expectedResourceIDs, strings.ToLower(*diskEncryptionSet.ID))
for _, subnet := range *vnet.Subnets {
if _, ok := subnets[strings.ToLower(*subnet.ID)]; !ok {
continue
@ -74,7 +76,7 @@ var _ = Describe("[Admin API] List Azure resources action", func() {
}
}
By("getting the actual Azure resource IDs via admin actions API")
By("getting the actual Azure resource IDs via RP admin API")
var actualResources []mgmtfeatures.GenericResourceExpanded
resp, err := adminRequest(ctx, http.MethodGet, "/admin"+resourceID+"/resources", nil, nil, &actualResources)
Expect(err).NotTo(HaveOccurred())
@ -87,7 +89,7 @@ var _ = Describe("[Admin API] List Azure resources action", func() {
actualResourceIDs = append(actualResourceIDs, id)
}
By("comparing lists of resources")
By("verifying the list of resources")
Expect(actualResourceIDs).To(ConsistOf(expectedResourceIDs))
})
})