diff --git a/sdk/resourcemanager/marketplaceordering/armmarketplaceordering/CHANGELOG.md b/sdk/resourcemanager/marketplaceordering/armmarketplaceordering/CHANGELOG.md index 68e79b3c61b1..3ee455aa8ab6 100644 --- a/sdk/resourcemanager/marketplaceordering/armmarketplaceordering/CHANGELOG.md +++ b/sdk/resourcemanager/marketplaceordering/armmarketplaceordering/CHANGELOG.md @@ -1,5 +1,11 @@ # Release History +## 1.2.0-beta.2 (2023-07-19) + +### Bug Fixes + +- Fixed a potential panic in faked paged and long-running operations. + ## 1.2.0-beta.1 (2023-06-13) ### Features Added diff --git a/sdk/resourcemanager/marketplaceordering/armmarketplaceordering/autorest.md b/sdk/resourcemanager/marketplaceordering/armmarketplaceordering/autorest.md index 86c5acafb92d..9447a895c2b8 100644 --- a/sdk/resourcemanager/marketplaceordering/armmarketplaceordering/autorest.md +++ b/sdk/resourcemanager/marketplaceordering/armmarketplaceordering/autorest.md @@ -9,8 +9,8 @@ require: - https://github.com/Azure/azure-rest-api-specs/blob/d55b8005f05b040b852c15e74a0f3e36494a15e1/specification/marketplaceordering/resource-manager/readme.go.md license-header: MICROSOFT_MIT_NO_VERSION module: github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/marketplaceordering/armmarketplaceordering -module-version: 1.2.0-beta.1 -azcore-version: 1.7.0-beta.2 +module-version: 1.2.0-beta.2 +azcore-version: 1.8.0-beta.1 generate-fakes: true inject-spans: true ``` diff --git a/sdk/resourcemanager/marketplaceordering/armmarketplaceordering/build.go b/sdk/resourcemanager/marketplaceordering/armmarketplaceordering/build.go index 8aaa8e4638e6..0a6d738d1061 100644 --- a/sdk/resourcemanager/marketplaceordering/armmarketplaceordering/build.go +++ b/sdk/resourcemanager/marketplaceordering/armmarketplaceordering/build.go @@ -2,6 +2,6 @@ // Licensed under the MIT License. See License.txt in the project root for license information. // This file enables 'go generate' to regenerate this specific SDK -//go:generate pwsh ../../../../eng/scripts/build.ps1 -goExtension "@autorest/go@4.0.0-preview.51" -skipBuild -cleanGenerated -format -tidy -generate resourcemanager/marketplaceordering/armmarketplaceordering +//go:generate pwsh ../../../../eng/scripts/build.ps1 -goExtension "@autorest/go@4.0.0-preview.53" -skipBuild -cleanGenerated -format -tidy -generate resourcemanager/marketplaceordering/armmarketplaceordering package armmarketplaceordering diff --git a/sdk/resourcemanager/marketplaceordering/armmarketplaceordering/constants.go b/sdk/resourcemanager/marketplaceordering/armmarketplaceordering/constants.go index 6714dc25c89c..53dac8edfb11 100644 --- a/sdk/resourcemanager/marketplaceordering/armmarketplaceordering/constants.go +++ b/sdk/resourcemanager/marketplaceordering/armmarketplaceordering/constants.go @@ -10,7 +10,7 @@ package armmarketplaceordering const ( moduleName = "armmarketplaceordering" - moduleVersion = "v1.2.0-beta.1" + moduleVersion = "v1.2.0-beta.2" ) // CreatedByType - The type of identity that created the resource. diff --git a/sdk/resourcemanager/marketplaceordering/armmarketplaceordering/fake/internal.go b/sdk/resourcemanager/marketplaceordering/armmarketplaceordering/fake/internal.go index e9c8222f2199..03b635903572 100644 --- a/sdk/resourcemanager/marketplaceordering/armmarketplaceordering/fake/internal.go +++ b/sdk/resourcemanager/marketplaceordering/armmarketplaceordering/fake/internal.go @@ -12,6 +12,9 @@ import ( "io" "net/http" "reflect" + "regexp" + "strings" + "sync" ) type nonRetriableError struct { @@ -76,3 +79,45 @@ func contains[T comparable](s []T, v T) bool { } return false } + +func newTracker[T any]() *tracker[T] { + return &tracker[T]{ + items: map[string]*T{}, + } +} + +type tracker[T any] struct { + items map[string]*T + mu sync.Mutex +} + +func (p *tracker[T]) key(req *http.Request) string { + path := req.URL.Path + if match, _ := regexp.Match(`/page_\d+$`, []byte(path)); match { + path = path[:strings.LastIndex(path, "/")] + } else if strings.HasSuffix(path, "/get/fake/status") { + path = path[:len(path)-16] + } + return path +} + +func (p *tracker[T]) get(req *http.Request) *T { + p.mu.Lock() + defer p.mu.Unlock() + if item, ok := p.items[p.key(req)]; ok { + return item + } + return nil +} + +func (p *tracker[T]) add(req *http.Request, item *T) { + p.mu.Lock() + defer p.mu.Unlock() + p.items[p.key(req)] = item +} + +func (p *tracker[T]) remove(req *http.Request) { + p.mu.Lock() + defer p.mu.Unlock() + delete(p.items, p.key(req)) +} diff --git a/sdk/resourcemanager/marketplaceordering/armmarketplaceordering/fake/marketplaceagreements_server.go b/sdk/resourcemanager/marketplaceordering/armmarketplaceordering/fake/marketplaceagreements_server.go index 002ab8e33055..45346d8f0683 100644 --- a/sdk/resourcemanager/marketplaceordering/armmarketplaceordering/fake/marketplaceagreements_server.go +++ b/sdk/resourcemanager/marketplaceordering/armmarketplaceordering/fake/marketplaceagreements_server.go @@ -49,8 +49,8 @@ type MarketplaceAgreementsServer struct { } // NewMarketplaceAgreementsServerTransport creates a new instance of MarketplaceAgreementsServerTransport with the provided implementation. -// The returned MarketplaceAgreementsServerTransport instance is connected to an instance of armmarketplaceordering.MarketplaceAgreementsClient by way of the -// undefined.Transporter field. +// The returned MarketplaceAgreementsServerTransport instance is connected to an instance of armmarketplaceordering.MarketplaceAgreementsClient via the +// azcore.ClientOptions.Transporter field in the client's constructor parameters. func NewMarketplaceAgreementsServerTransport(srv *MarketplaceAgreementsServer) *MarketplaceAgreementsServerTransport { return &MarketplaceAgreementsServerTransport{srv: srv} } diff --git a/sdk/resourcemanager/marketplaceordering/armmarketplaceordering/fake/operations_server.go b/sdk/resourcemanager/marketplaceordering/armmarketplaceordering/fake/operations_server.go index 499f549ce625..33313f0f0448 100644 --- a/sdk/resourcemanager/marketplaceordering/armmarketplaceordering/fake/operations_server.go +++ b/sdk/resourcemanager/marketplaceordering/armmarketplaceordering/fake/operations_server.go @@ -27,17 +27,20 @@ type OperationsServer struct { } // NewOperationsServerTransport creates a new instance of OperationsServerTransport with the provided implementation. -// The returned OperationsServerTransport instance is connected to an instance of armmarketplaceordering.OperationsClient by way of the -// undefined.Transporter field. +// The returned OperationsServerTransport instance is connected to an instance of armmarketplaceordering.OperationsClient via the +// azcore.ClientOptions.Transporter field in the client's constructor parameters. func NewOperationsServerTransport(srv *OperationsServer) *OperationsServerTransport { - return &OperationsServerTransport{srv: srv} + return &OperationsServerTransport{ + srv: srv, + newListPager: newTracker[azfake.PagerResponder[armmarketplaceordering.OperationsClientListResponse]](), + } } // OperationsServerTransport connects instances of armmarketplaceordering.OperationsClient to instances of OperationsServer. // Don't use this type directly, use NewOperationsServerTransport instead. type OperationsServerTransport struct { srv *OperationsServer - newListPager *azfake.PagerResponder[armmarketplaceordering.OperationsClientListResponse] + newListPager *tracker[azfake.PagerResponder[armmarketplaceordering.OperationsClientListResponse]] } // Do implements the policy.Transporter interface for OperationsServerTransport. @@ -69,22 +72,25 @@ func (o *OperationsServerTransport) dispatchNewListPager(req *http.Request) (*ht if o.srv.NewListPager == nil { return nil, &nonRetriableError{errors.New("fake for method NewListPager not implemented")} } - if o.newListPager == nil { + newListPager := o.newListPager.get(req) + if newListPager == nil { resp := o.srv.NewListPager(nil) - o.newListPager = &resp - server.PagerResponderInjectNextLinks(o.newListPager, req, func(page *armmarketplaceordering.OperationsClientListResponse, createLink func() string) { + newListPager = &resp + o.newListPager.add(req, newListPager) + server.PagerResponderInjectNextLinks(newListPager, req, func(page *armmarketplaceordering.OperationsClientListResponse, createLink func() string) { page.NextLink = to.Ptr(createLink()) }) } - resp, err := server.PagerResponderNext(o.newListPager, req) + resp, err := server.PagerResponderNext(newListPager, req) if err != nil { return nil, err } if !contains([]int{http.StatusOK}, resp.StatusCode) { + o.newListPager.remove(req) return nil, &nonRetriableError{fmt.Errorf("unexpected status code %d. acceptable values are http.StatusOK", resp.StatusCode)} } - if !server.PagerResponderMore(o.newListPager) { - o.newListPager = nil + if !server.PagerResponderMore(newListPager) { + o.newListPager.remove(req) } return resp, nil } diff --git a/sdk/resourcemanager/marketplaceordering/armmarketplaceordering/go.mod b/sdk/resourcemanager/marketplaceordering/armmarketplaceordering/go.mod index 6b3f0a19e671..758df417b65d 100644 --- a/sdk/resourcemanager/marketplaceordering/armmarketplaceordering/go.mod +++ b/sdk/resourcemanager/marketplaceordering/armmarketplaceordering/go.mod @@ -3,7 +3,7 @@ module github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/marketplaceordering go 1.18 require ( - github.com/Azure/azure-sdk-for-go/sdk/azcore v1.7.0-beta.2 + github.com/Azure/azure-sdk-for-go/sdk/azcore v1.8.0-beta.1 github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.2.2 ) diff --git a/sdk/resourcemanager/marketplaceordering/armmarketplaceordering/go.sum b/sdk/resourcemanager/marketplaceordering/armmarketplaceordering/go.sum index b9280dc6acaf..3cb20742c931 100644 --- a/sdk/resourcemanager/marketplaceordering/armmarketplaceordering/go.sum +++ b/sdk/resourcemanager/marketplaceordering/armmarketplaceordering/go.sum @@ -1,5 +1,5 @@ -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.7.0-beta.2 h1:C3zKsGguxcLd8a2uEytB8+TFtBGd75bXRxEs0QBwsv0= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.7.0-beta.2/go.mod h1:bjGvMhVMb+EEm3VRNQawDMUyMMjo+S5ewNjflkep/0Q= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.8.0-beta.1 h1:8t6ZZtkOCl+rx7uBn40Nj62ABVGkXK69U/En44wJIlE= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.8.0-beta.1/go.mod h1:bjGvMhVMb+EEm3VRNQawDMUyMMjo+S5ewNjflkep/0Q= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.2.2 h1:uqM+VoHjVH6zdlkLF2b6O0ZANcHoj3rO0PoQ3jglUJA= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.2.2/go.mod h1:twTKAa1E6hLmSDjLhaCkbTMQKc7p/rNLU40rLxGEOCI= github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0 h1:sXr+ck84g/ZlZUOZiNELInmMgOsuGwdjjVkEIde0OtY= diff --git a/sdk/resourcemanager/marketplaceordering/armmarketplaceordering/models.go b/sdk/resourcemanager/marketplaceordering/armmarketplaceordering/models.go index 5d49977aa043..7ec2e5a00f44 100644 --- a/sdk/resourcemanager/marketplaceordering/armmarketplaceordering/models.go +++ b/sdk/resourcemanager/marketplaceordering/armmarketplaceordering/models.go @@ -74,37 +74,6 @@ type ErrorResponseError struct { Message *string } -// MarketplaceAgreementsClientCancelOptions contains the optional parameters for the MarketplaceAgreementsClient.Cancel method. -type MarketplaceAgreementsClientCancelOptions struct { - // placeholder for future optional parameters -} - -// MarketplaceAgreementsClientCreateOptions contains the optional parameters for the MarketplaceAgreementsClient.Create method. -type MarketplaceAgreementsClientCreateOptions struct { - // placeholder for future optional parameters -} - -// MarketplaceAgreementsClientGetAgreementOptions contains the optional parameters for the MarketplaceAgreementsClient.GetAgreement -// method. -type MarketplaceAgreementsClientGetAgreementOptions struct { - // placeholder for future optional parameters -} - -// MarketplaceAgreementsClientGetOptions contains the optional parameters for the MarketplaceAgreementsClient.Get method. -type MarketplaceAgreementsClientGetOptions struct { - // placeholder for future optional parameters -} - -// MarketplaceAgreementsClientListOptions contains the optional parameters for the MarketplaceAgreementsClient.List method. -type MarketplaceAgreementsClientListOptions struct { - // placeholder for future optional parameters -} - -// MarketplaceAgreementsClientSignOptions contains the optional parameters for the MarketplaceAgreementsClient.Sign method. -type MarketplaceAgreementsClientSignOptions struct { - // placeholder for future optional parameters -} - // Operation - Microsoft.MarketplaceOrdering REST API operation type Operation struct { // The object that represents the operation. @@ -139,11 +108,6 @@ type OperationListResult struct { NextLink *string } -// OperationsClientListOptions contains the optional parameters for the OperationsClient.NewListPager method. -type OperationsClientListOptions struct { - // placeholder for future optional parameters -} - // Resource - ARM resource. type Resource struct { // READ-ONLY; Resource ID. diff --git a/sdk/resourcemanager/marketplaceordering/armmarketplaceordering/options.go b/sdk/resourcemanager/marketplaceordering/armmarketplaceordering/options.go new file mode 100644 index 000000000000..a695542e4354 --- /dev/null +++ b/sdk/resourcemanager/marketplaceordering/armmarketplaceordering/options.go @@ -0,0 +1,45 @@ +//go:build go1.18 +// +build go1.18 + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// Code generated by Microsoft (R) AutoRest Code Generator. DO NOT EDIT. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +package armmarketplaceordering + +// MarketplaceAgreementsClientCancelOptions contains the optional parameters for the MarketplaceAgreementsClient.Cancel method. +type MarketplaceAgreementsClientCancelOptions struct { + // placeholder for future optional parameters +} + +// MarketplaceAgreementsClientCreateOptions contains the optional parameters for the MarketplaceAgreementsClient.Create method. +type MarketplaceAgreementsClientCreateOptions struct { + // placeholder for future optional parameters +} + +// MarketplaceAgreementsClientGetAgreementOptions contains the optional parameters for the MarketplaceAgreementsClient.GetAgreement +// method. +type MarketplaceAgreementsClientGetAgreementOptions struct { + // placeholder for future optional parameters +} + +// MarketplaceAgreementsClientGetOptions contains the optional parameters for the MarketplaceAgreementsClient.Get method. +type MarketplaceAgreementsClientGetOptions struct { + // placeholder for future optional parameters +} + +// MarketplaceAgreementsClientListOptions contains the optional parameters for the MarketplaceAgreementsClient.List method. +type MarketplaceAgreementsClientListOptions struct { + // placeholder for future optional parameters +} + +// MarketplaceAgreementsClientSignOptions contains the optional parameters for the MarketplaceAgreementsClient.Sign method. +type MarketplaceAgreementsClientSignOptions struct { + // placeholder for future optional parameters +} + +// OperationsClientListOptions contains the optional parameters for the OperationsClient.NewListPager method. +type OperationsClientListOptions struct { + // placeholder for future optional parameters +} diff --git a/sdk/resourcemanager/marketplaceordering/armmarketplaceordering/response_types.go b/sdk/resourcemanager/marketplaceordering/armmarketplaceordering/response_types.go index 659b5eec26f1..c4cad3572ba5 100644 --- a/sdk/resourcemanager/marketplaceordering/armmarketplaceordering/response_types.go +++ b/sdk/resourcemanager/marketplaceordering/armmarketplaceordering/response_types.go @@ -10,21 +10,25 @@ package armmarketplaceordering // MarketplaceAgreementsClientCancelResponse contains the response from method MarketplaceAgreementsClient.Cancel. type MarketplaceAgreementsClientCancelResponse struct { + // Terms properties for provided Publisher/Offer/Plan tuple AgreementTerms } // MarketplaceAgreementsClientCreateResponse contains the response from method MarketplaceAgreementsClient.Create. type MarketplaceAgreementsClientCreateResponse struct { + // Terms properties for provided Publisher/Offer/Plan tuple AgreementTerms } // MarketplaceAgreementsClientGetAgreementResponse contains the response from method MarketplaceAgreementsClient.GetAgreement. type MarketplaceAgreementsClientGetAgreementResponse struct { + // Terms properties for provided Publisher/Offer/Plan tuple AgreementTerms } // MarketplaceAgreementsClientGetResponse contains the response from method MarketplaceAgreementsClient.Get. type MarketplaceAgreementsClientGetResponse struct { + // Terms properties for provided Publisher/Offer/Plan tuple AgreementTerms } @@ -36,10 +40,13 @@ type MarketplaceAgreementsClientListResponse struct { // MarketplaceAgreementsClientSignResponse contains the response from method MarketplaceAgreementsClient.Sign. type MarketplaceAgreementsClientSignResponse struct { + // Terms properties for provided Publisher/Offer/Plan tuple AgreementTerms } // OperationsClientListResponse contains the response from method OperationsClient.NewListPager. type OperationsClientListResponse struct { + // Result of the request to list MarketplaceOrdering operations. It contains a list of operations and a URL link to get the + // next set of results. OperationListResult }