зеркало из https://github.com/Azure/ARO-RP.git
update with get
This commit is contained in:
Родитель
e4be577423
Коммит
f519a8eede
|
@ -0,0 +1,65 @@
|
|||
package frontend
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
// Licensed under the Apache License 2.0.
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"net/http"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
"github.com/go-chi/chi/v5"
|
||||
"github.com/sirupsen/logrus"
|
||||
|
||||
"github.com/Azure/ARO-RP/pkg/api"
|
||||
"github.com/Azure/ARO-RP/pkg/api/admin"
|
||||
"github.com/Azure/ARO-RP/pkg/frontend/middleware"
|
||||
)
|
||||
|
||||
func (f *frontend) getSingleAdminMaintManifest(w http.ResponseWriter, r *http.Request) {
|
||||
ctx := r.Context()
|
||||
log := ctx.Value(middleware.ContextKeyLog).(*logrus.Entry)
|
||||
resourceID := strings.TrimPrefix(filepath.Dir(r.URL.Path), "/admin")
|
||||
b, err := f._getSingleAdminMaintManifest(ctx, r, resourceID)
|
||||
|
||||
if cloudErr, ok := err.(*api.CloudError); ok {
|
||||
api.WriteCloudError(w, cloudErr)
|
||||
return
|
||||
}
|
||||
|
||||
adminReply(log, w, nil, b, err)
|
||||
}
|
||||
|
||||
func (f *frontend) _getSingleAdminMaintManifest(ctx context.Context, r *http.Request, resourceID string) ([]byte, error) {
|
||||
manifestId := chi.URLParam(r, "manifestId")
|
||||
|
||||
converter := f.apis[admin.APIVersion].MaintenanceManifestConverter
|
||||
|
||||
dbOpenShiftClusters, err := f.dbGroup.OpenShiftClusters()
|
||||
if err != nil {
|
||||
return nil, api.NewCloudError(http.StatusInternalServerError, api.CloudErrorCodeInternalServerError, "", err.Error())
|
||||
}
|
||||
|
||||
dbMaintenanceManifests, err := f.dbGroup.MaintenanceManifests()
|
||||
if err != nil {
|
||||
return nil, api.NewCloudError(http.StatusInternalServerError, api.CloudErrorCodeInternalServerError, "", err.Error())
|
||||
}
|
||||
|
||||
doc, err := dbOpenShiftClusters.Get(ctx, resourceID)
|
||||
if err != nil {
|
||||
return nil, api.NewCloudError(http.StatusNotFound, api.CloudErrorCodeNotFound, "", "cluster not found")
|
||||
}
|
||||
|
||||
if doc.OpenShiftCluster.Properties.ProvisioningState == api.ProvisioningStateDeleting {
|
||||
return nil, api.NewCloudError(http.StatusNotFound, api.CloudErrorCodeNotFound, "", "cluster being deleted")
|
||||
}
|
||||
|
||||
manifest, err := dbMaintenanceManifests.Get(ctx, resourceID, manifestId)
|
||||
if err != nil {
|
||||
return nil, api.NewCloudError(http.StatusNotFound, api.CloudErrorCodeInternalServerError, "", err.Error())
|
||||
}
|
||||
|
||||
return json.MarshalIndent(converter.ToExternal(manifest), "", " ")
|
||||
}
|
|
@ -0,0 +1,152 @@
|
|||
package frontend
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
// Licensed under the Apache License 2.0.
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"strings"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/Azure/ARO-RP/pkg/api"
|
||||
"github.com/Azure/ARO-RP/pkg/api/admin"
|
||||
"github.com/Azure/ARO-RP/pkg/metrics/noop"
|
||||
testdatabase "github.com/Azure/ARO-RP/test/database"
|
||||
)
|
||||
|
||||
func TestMIMOGet(t *testing.T) {
|
||||
mockSubID := "00000000-0000-0000-0000-000000000000"
|
||||
mockTenantID := "00000000-0000-0000-0000-000000000000"
|
||||
resourceID := fmt.Sprintf("/subscriptions/%s/resourcegroups/resourceGroup/providers/Microsoft.RedHatOpenShift/openShiftClusters/resourceName", mockSubID)
|
||||
ctx := context.Background()
|
||||
|
||||
type test struct {
|
||||
name string
|
||||
fixtures func(f *testdatabase.Fixture)
|
||||
wantStatusCode int
|
||||
wantResponse *admin.MaintenanceManifest
|
||||
wantError string
|
||||
}
|
||||
|
||||
for _, tt := range []*test{
|
||||
// {
|
||||
// name: "no cluster",
|
||||
// wantError: "404: NotFound: : cluster not found",
|
||||
// fixtures: func(f *testdatabase.Fixture) {},
|
||||
// wantStatusCode: http.StatusNotFound,
|
||||
// },
|
||||
{
|
||||
name: "cluster being deleted",
|
||||
fixtures: func(f *testdatabase.Fixture) {
|
||||
f.AddOpenShiftClusterDocuments(&api.OpenShiftClusterDocument{
|
||||
Key: strings.ToLower(resourceID),
|
||||
OpenShiftCluster: &api.OpenShiftCluster{
|
||||
ID: resourceID,
|
||||
Name: "resourceName",
|
||||
Type: "Microsoft.RedHatOpenShift/openshiftClusters",
|
||||
Properties: api.OpenShiftClusterProperties{
|
||||
ProvisioningState: api.ProvisioningStateDeleting,
|
||||
},
|
||||
},
|
||||
})
|
||||
},
|
||||
wantError: "404: NotFound: : cluster being deleted",
|
||||
wantStatusCode: http.StatusNotFound,
|
||||
},
|
||||
{
|
||||
name: "no item",
|
||||
fixtures: func(f *testdatabase.Fixture) {
|
||||
f.AddOpenShiftClusterDocuments(&api.OpenShiftClusterDocument{
|
||||
Key: strings.ToLower(resourceID),
|
||||
OpenShiftCluster: &api.OpenShiftCluster{
|
||||
ID: resourceID,
|
||||
Name: "resourceName",
|
||||
Type: "Microsoft.RedHatOpenShift/openshiftClusters",
|
||||
},
|
||||
})
|
||||
},
|
||||
wantError: "404: NotFound: : cluster not found",
|
||||
wantStatusCode: http.StatusNotFound,
|
||||
},
|
||||
{
|
||||
name: "get entry",
|
||||
fixtures: func(f *testdatabase.Fixture) {
|
||||
f.AddOpenShiftClusterDocuments(&api.OpenShiftClusterDocument{
|
||||
Key: strings.ToLower(resourceID),
|
||||
OpenShiftCluster: &api.OpenShiftCluster{
|
||||
ID: resourceID,
|
||||
Name: "resourceName",
|
||||
Type: "Microsoft.RedHatOpenShift/openshiftClusters",
|
||||
},
|
||||
})
|
||||
f.AddMaintenanceManifestDocuments(&api.MaintenanceManifestDocument{
|
||||
ClusterResourceID: strings.ToLower(resourceID),
|
||||
MaintenanceManifest: &api.MaintenanceManifest{
|
||||
MaintenanceSetID: "exampleset",
|
||||
State: api.MaintenanceManifestStatePending,
|
||||
RunAfter: 1,
|
||||
RunBefore: 1,
|
||||
},
|
||||
})
|
||||
},
|
||||
wantResponse: &admin.MaintenanceManifest{
|
||||
ID: "07070707-0707-0707-0707-070707070001",
|
||||
MaintenanceSetID: "exampleset",
|
||||
State: admin.MaintenanceManifestStatePending,
|
||||
Priority: 0,
|
||||
RunAfter: 1,
|
||||
RunBefore: 1,
|
||||
},
|
||||
wantStatusCode: http.StatusOK,
|
||||
},
|
||||
} {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
now := func() time.Time { return time.Unix(1000, 0) }
|
||||
|
||||
ti := newTestInfra(t).WithOpenShiftClusters().WithSubscriptions().WithMaintenanceManifests(now)
|
||||
defer ti.done()
|
||||
|
||||
ti.fixture.AddSubscriptionDocuments(&api.SubscriptionDocument{
|
||||
ID: mockSubID,
|
||||
Subscription: &api.Subscription{
|
||||
State: api.SubscriptionStateRegistered,
|
||||
Properties: &api.SubscriptionProperties{
|
||||
TenantID: mockTenantID,
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
if tt.fixtures != nil {
|
||||
tt.fixtures(ti.fixture)
|
||||
}
|
||||
|
||||
err := ti.buildFixtures(nil)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
f, err := NewFrontend(ctx, ti.audit, ti.log, ti.env, ti.dbGroup, api.APIs, &noop.Noop{}, &noop.Noop{}, testdatabase.NewFakeAEAD(), nil, nil, nil, nil, nil)
|
||||
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
go f.Run(ctx, nil, nil)
|
||||
|
||||
resp, b, err := ti.request(http.MethodGet,
|
||||
fmt.Sprintf("https://server/admin%s/maintenancemanifests/07070707-0707-0707-0707-070707070001", resourceID),
|
||||
nil, nil)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
err = validateResponse(resp, b, tt.wantStatusCode, tt.wantError, tt.wantResponse)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
|
@ -330,6 +330,9 @@ func (f *frontend) chiAuthenticatedRoutes(router chi.Router) {
|
|||
|
||||
// MIMO
|
||||
r.Get("/maintenancemanifests", f.getAdminMaintManifests)
|
||||
r.Route("/maintenancemanifests/{manifestId}", func(r chi.Router) {
|
||||
r.Get("/", f.getSingleAdminMaintManifest)
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче