Skip to content

Commit 0db3dfb

Browse files
authored
Update to latest internal module (Azure#20553)
Removed LRO and payload helpers that are now in the internal module. Complimentary to Azure#20539
1 parent 35c31e9 commit 0db3dfb

File tree

21 files changed

+111
-523
lines changed

21 files changed

+111
-523
lines changed

sdk/azcore/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
* Added non-conformant LRO terminal states `Cancelled` and `Completed`.
1515

1616
### Other Changes
17+
* Updated to latest `internal` module.
1718

1819
## 1.5.0-beta.1 (2023-03-02)
1920

sdk/azcore/go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ module github.com/Azure/azure-sdk-for-go/sdk/azcore
33
go 1.18
44

55
require (
6-
github.com/Azure/azure-sdk-for-go/sdk/internal v1.2.0
6+
github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0
77
github.com/stretchr/testify v1.7.0
88
golang.org/x/net v0.8.0
99
)

sdk/azcore/go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
github.com/Azure/azure-sdk-for-go/sdk/internal v1.2.0 h1:leh5DwKv6Ihwi+h60uHtn6UWAxBbZ0q8DwQVMzf61zw=
2-
github.com/Azure/azure-sdk-for-go/sdk/internal v1.2.0/go.mod h1:eWRD7oawr1Mu1sLCawqVc0CUiF43ia3qQMxLscsKQ9w=
1+
github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0 h1:sXr+ck84g/ZlZUOZiNELInmMgOsuGwdjjVkEIde0OtY=
2+
github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0/go.mod h1:okt5dMMTOFjX/aovMlrjvvXoPMBVSPzk9185BT0+eZM=
33
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
44
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
55
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=

sdk/azcore/internal/exported/exported.go

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@ import (
1111
"io"
1212
"net/http"
1313
"time"
14-
15-
"github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/shared"
1614
)
1715

1816
type nopCloser struct {
@@ -43,24 +41,6 @@ func HasStatusCode(resp *http.Response, statusCodes ...int) bool {
4341
return false
4442
}
4543

46-
// Payload reads and returns the response body or an error.
47-
// On a successful read, the response body is cached.
48-
// Subsequent reads will access the cached value.
49-
// Exported as runtime.Payload().
50-
func Payload(resp *http.Response) ([]byte, error) {
51-
// r.Body won't be a nopClosingBytesReader if downloading was skipped
52-
if buf, ok := resp.Body.(*shared.NopClosingBytesReader); ok {
53-
return buf.Bytes(), nil
54-
}
55-
bytesBody, err := io.ReadAll(resp.Body)
56-
resp.Body.Close()
57-
if err != nil {
58-
return nil, err
59-
}
60-
resp.Body = shared.NewNopClosingBytesReader(bytesBody)
61-
return bytesBody, nil
62-
}
63-
6444
// AccessToken represents an Azure service bearer access token with expiry information.
6545
// Exported as azcore.AccessToken.
6646
type AccessToken struct {

sdk/azcore/internal/exported/exported_test.go

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
package exported
88

99
import (
10-
"io"
1110
"net/http"
1211
"strings"
1312
"testing"
@@ -34,24 +33,3 @@ func TestHasStatusCode(t *testing.T) {
3433
t.Fatal("unexpected failure")
3534
}
3635
}
37-
38-
func TestPayload(t *testing.T) {
39-
const val = "payload"
40-
resp := &http.Response{
41-
Body: io.NopCloser(strings.NewReader(val)),
42-
}
43-
b, err := Payload(resp)
44-
if err != nil {
45-
t.Fatal(err)
46-
}
47-
if string(b) != val {
48-
t.Fatalf("got %s, want %s", string(b), val)
49-
}
50-
b, err = Payload(resp)
51-
if err != nil {
52-
t.Fatal(err)
53-
}
54-
if string(b) != val {
55-
t.Fatalf("got %s, want %s", string(b), val)
56-
}
57-
}

sdk/azcore/internal/exported/response_error.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ import (
1212
"fmt"
1313
"net/http"
1414
"regexp"
15+
16+
"github.com/Azure/azure-sdk-for-go/sdk/internal/exported"
1517
)
1618

1719
// NewResponseError creates a new *ResponseError from the provided HTTP response.
@@ -29,7 +31,7 @@ func NewResponseError(resp *http.Response) error {
2931
}
3032

3133
// if we didn't get x-ms-error-code, check in the response body
32-
body, err := Payload(resp)
34+
body, err := exported.Payload(resp, nil)
3335
if err != nil {
3436
return err
3537
}
@@ -121,7 +123,7 @@ func (e *ResponseError) Error() string {
121123
fmt.Fprintln(msg, "ERROR CODE UNAVAILABLE")
122124
}
123125
fmt.Fprintln(msg, "--------------------------------------------------------------------------------")
124-
body, err := Payload(e.RawResponse)
126+
body, err := exported.Payload(e.RawResponse, nil)
125127
if err != nil {
126128
// this really shouldn't fail at this point as the response
127129
// body is already cached (it was read in NewResponseError)

sdk/azcore/internal/pollers/async/async.go

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import (
1616
"github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/log"
1717
"github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers"
1818
"github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/shared"
19+
"github.com/Azure/azure-sdk-for-go/sdk/internal/poller"
1920
)
2021

2122
// see https://github.com/Azure/azure-resource-manager-rpc/blob/master/v1.0/async-api-reference.md
@@ -68,15 +69,15 @@ func New[T any](pl exported.Pipeline, resp *http.Response, finalState pollers.Fi
6869
if asyncURL == "" {
6970
return nil, errors.New("response is missing Azure-AsyncOperation header")
7071
}
71-
if !pollers.IsValidURL(asyncURL) {
72+
if !poller.IsValidURL(asyncURL) {
7273
return nil, fmt.Errorf("invalid polling URL %s", asyncURL)
7374
}
7475
// check for provisioning state. if the operation is a RELO
7576
// and terminates synchronously this will prevent extra polling.
7677
// it's ok if there's no provisioning state.
77-
state, _ := pollers.GetProvisioningState(resp)
78+
state, _ := poller.GetProvisioningState(resp)
7879
if state == "" {
79-
state = pollers.StatusInProgress
80+
state = poller.StatusInProgress
8081
}
8182
p := &Poller[T]{
8283
pl: pl,
@@ -93,17 +94,17 @@ func New[T any](pl exported.Pipeline, resp *http.Response, finalState pollers.Fi
9394

9495
// Done returns true if the LRO is in a terminal state.
9596
func (p *Poller[T]) Done() bool {
96-
return pollers.IsTerminalState(p.CurState)
97+
return poller.IsTerminalState(p.CurState)
9798
}
9899

99100
// Poll retrieves the current state of the LRO.
100101
func (p *Poller[T]) Poll(ctx context.Context) (*http.Response, error) {
101102
err := pollers.PollHelper(ctx, p.AsyncURL, p.pl, func(resp *http.Response) (string, error) {
102-
if !pollers.StatusCodeValid(resp) {
103+
if !poller.StatusCodeValid(resp) {
103104
p.resp = resp
104105
return "", exported.NewResponseError(resp)
105106
}
106-
state, err := pollers.GetStatus(resp)
107+
state, err := poller.GetStatus(resp)
107108
if err != nil {
108109
return "", err
109110
} else if state == "" {
@@ -122,7 +123,7 @@ func (p *Poller[T]) Poll(ctx context.Context) (*http.Response, error) {
122123
func (p *Poller[T]) Result(ctx context.Context, out *T) error {
123124
if p.resp.StatusCode == http.StatusNoContent {
124125
return nil
125-
} else if pollers.Failed(p.CurState) {
126+
} else if poller.Failed(p.CurState) {
126127
return exported.NewResponseError(p.resp)
127128
}
128129
var req *exported.Request
@@ -154,5 +155,5 @@ func (p *Poller[T]) Result(ctx context.Context, out *T) error {
154155
p.resp = resp
155156
}
156157

157-
return pollers.ResultHelper(p.resp, pollers.Failed(p.CurState), out)
158+
return pollers.ResultHelper(p.resp, poller.Failed(p.CurState), out)
158159
}

sdk/azcore/internal/pollers/async/async_test.go

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import (
1818
"github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported"
1919
"github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers"
2020
"github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/shared"
21+
"github.com/Azure/azure-sdk-for-go/sdk/internal/poller"
2122
"github.com/stretchr/testify/require"
2223
)
2324

@@ -55,29 +56,29 @@ func TestCanResume(t *testing.T) {
5556
}
5657

5758
func TestNew(t *testing.T) {
58-
poller, err := New[struct{}](exported.Pipeline{}, nil, "")
59+
ap, err := New[struct{}](exported.Pipeline{}, nil, "")
5960
require.NoError(t, err)
60-
require.Empty(t, poller.CurState)
61+
require.Empty(t, ap.CurState)
6162

62-
poller, err = New[struct{}](exported.Pipeline{}, &http.Response{Header: http.Header{}}, "")
63+
ap, err = New[struct{}](exported.Pipeline{}, &http.Response{Header: http.Header{}}, "")
6364
require.Error(t, err)
64-
require.Nil(t, poller)
65+
require.Nil(t, ap)
6566

6667
resp := initialResponse(http.MethodPut, http.NoBody)
6768
resp.Header.Set(shared.HeaderAzureAsync, "this is an invalid polling URL")
68-
poller, err = New[struct{}](exported.Pipeline{}, resp, "")
69+
ap, err = New[struct{}](exported.Pipeline{}, resp, "")
6970
require.Error(t, err)
70-
require.Nil(t, poller)
71+
require.Nil(t, ap)
7172

7273
resp = initialResponse(http.MethodPut, http.NoBody)
7374
resp.Header.Set(shared.HeaderAzureAsync, fakePollingURL)
7475
resp.Header.Set(shared.HeaderLocation, fakeResourceURL)
75-
poller, err = New[struct{}](exported.Pipeline{}, resp, "")
76+
ap, err = New[struct{}](exported.Pipeline{}, resp, "")
7677
require.NoError(t, err)
77-
require.Equal(t, fakePollingURL, poller.AsyncURL)
78-
require.Equal(t, fakeResourceURL, poller.LocURL)
79-
require.Equal(t, pollers.StatusInProgress, poller.CurState)
80-
require.False(t, poller.Done())
78+
require.Equal(t, fakePollingURL, ap.AsyncURL)
79+
require.Equal(t, fakeResourceURL, ap.LocURL)
80+
require.Equal(t, poller.StatusInProgress, ap.CurState)
81+
require.False(t, ap.Done())
8182
}
8283

8384
func TestNewDeleteNoProvState(t *testing.T) {
@@ -273,10 +274,10 @@ func TestSynchronousCompletion(t *testing.T) {
273274
resp := initialResponse(http.MethodPut, io.NopCloser(strings.NewReader(`{ "properties": { "provisioningState": "Succeeded" } }`)))
274275
resp.Header.Set(shared.HeaderAzureAsync, fakePollingURL)
275276
resp.Header.Set(shared.HeaderLocation, fakeResourceURL)
276-
poller, err := New[struct{}](exported.Pipeline{}, resp, "")
277+
ap, err := New[struct{}](exported.Pipeline{}, resp, "")
277278
require.NoError(t, err)
278-
require.Equal(t, fakePollingURL, poller.AsyncURL)
279-
require.Equal(t, fakeResourceURL, poller.LocURL)
280-
require.Equal(t, pollers.StatusSucceeded, poller.CurState)
281-
require.True(t, poller.Done())
279+
require.Equal(t, fakePollingURL, ap.AsyncURL)
280+
require.Equal(t, fakeResourceURL, ap.LocURL)
281+
require.Equal(t, poller.StatusSucceeded, ap.CurState)
282+
require.True(t, ap.Done())
282283
}

sdk/azcore/internal/pollers/body/body.go

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
"github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported"
1515
"github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/log"
1616
"github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers"
17+
"github.com/Azure/azure-sdk-for-go/sdk/internal/poller"
1718
)
1819

1920
// Kind is the identifier of this type in a resume token.
@@ -72,9 +73,9 @@ func New[T any](pl exported.Pipeline, resp *http.Response) (*Poller[T], error) {
7273
}
7374
// default initial state to InProgress. depending on the HTTP
7475
// status code and provisioning state, we might change the value.
75-
curState := pollers.StatusInProgress
76-
provState, err := pollers.GetProvisioningState(resp)
77-
if err != nil && !errors.Is(err, pollers.ErrNoBody) {
76+
curState := poller.StatusInProgress
77+
provState, err := poller.GetProvisioningState(resp)
78+
if err != nil && !errors.Is(err, poller.ErrNoBody) {
7879
return nil, err
7980
}
8081
if resp.StatusCode == http.StatusCreated && provState != "" {
@@ -85,37 +86,37 @@ func New[T any](pl exported.Pipeline, resp *http.Response) (*Poller[T], error) {
8586
curState = provState
8687
} else if provState == "" {
8788
// for a 200, absense of provisioning state indicates success
88-
curState = pollers.StatusSucceeded
89+
curState = poller.StatusSucceeded
8990
}
9091
} else if resp.StatusCode == http.StatusNoContent {
91-
curState = pollers.StatusSucceeded
92+
curState = poller.StatusSucceeded
9293
}
9394
p.CurState = curState
9495
return p, nil
9596
}
9697

9798
func (p *Poller[T]) Done() bool {
98-
return pollers.IsTerminalState(p.CurState)
99+
return poller.IsTerminalState(p.CurState)
99100
}
100101

101102
func (p *Poller[T]) Poll(ctx context.Context) (*http.Response, error) {
102103
err := pollers.PollHelper(ctx, p.PollURL, p.pl, func(resp *http.Response) (string, error) {
103-
if !pollers.StatusCodeValid(resp) {
104+
if !poller.StatusCodeValid(resp) {
104105
p.resp = resp
105106
return "", exported.NewResponseError(resp)
106107
}
107108
if resp.StatusCode == http.StatusNoContent {
108109
p.resp = resp
109-
p.CurState = pollers.StatusSucceeded
110+
p.CurState = poller.StatusSucceeded
110111
return p.CurState, nil
111112
}
112-
state, err := pollers.GetProvisioningState(resp)
113-
if errors.Is(err, pollers.ErrNoBody) {
113+
state, err := poller.GetProvisioningState(resp)
114+
if errors.Is(err, poller.ErrNoBody) {
114115
// a missing response body in non-204 case is an error
115116
return "", err
116117
} else if state == "" {
117118
// a response body without provisioning state is considered terminal success
118-
state = pollers.StatusSucceeded
119+
state = poller.StatusSucceeded
119120
} else if err != nil {
120121
return "", err
121122
}
@@ -130,5 +131,5 @@ func (p *Poller[T]) Poll(ctx context.Context) (*http.Response, error) {
130131
}
131132

132133
func (p *Poller[T]) Result(ctx context.Context, out *T) error {
133-
return pollers.ResultHelper(p.resp, pollers.Failed(p.CurState), out)
134+
return pollers.ResultHelper(p.resp, poller.Failed(p.CurState), out)
134135
}

sdk/azcore/internal/pollers/body/body_test.go

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ import (
1515
"testing"
1616

1717
"github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported"
18-
"github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers"
1918
"github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/shared"
19+
"github.com/Azure/azure-sdk-for-go/sdk/internal/poller"
2020
"github.com/stretchr/testify/require"
2121
)
2222

@@ -62,33 +62,33 @@ func TestCanResume(t *testing.T) {
6262
}
6363

6464
func TestNew(t *testing.T) {
65-
poller, err := New[struct{}](exported.Pipeline{}, nil)
65+
bp, err := New[struct{}](exported.Pipeline{}, nil)
6666
require.NoError(t, err)
67-
require.Empty(t, poller.CurState)
67+
require.Empty(t, bp.CurState)
6868

6969
resp := initialResponse(http.MethodPut, strings.NewReader(`{ "properties": { "provisioningState": "Started" } }`))
7070
resp.StatusCode = http.StatusCreated
71-
poller, err = New[struct{}](exported.Pipeline{}, resp)
71+
bp, err = New[struct{}](exported.Pipeline{}, resp)
7272
require.NoError(t, err)
73-
require.Equal(t, "Started", poller.CurState)
73+
require.Equal(t, "Started", bp.CurState)
7474

7575
resp = initialResponse(http.MethodPut, strings.NewReader(`{ "properties": { "provisioningState": "Started" } }`))
7676
resp.StatusCode = http.StatusOK
77-
poller, err = New[struct{}](exported.Pipeline{}, resp)
77+
bp, err = New[struct{}](exported.Pipeline{}, resp)
7878
require.NoError(t, err)
79-
require.Equal(t, "Started", poller.CurState)
79+
require.Equal(t, "Started", bp.CurState)
8080

8181
resp = initialResponse(http.MethodPut, http.NoBody)
8282
resp.StatusCode = http.StatusOK
83-
poller, err = New[struct{}](exported.Pipeline{}, resp)
83+
bp, err = New[struct{}](exported.Pipeline{}, resp)
8484
require.NoError(t, err)
85-
require.Equal(t, pollers.StatusSucceeded, poller.CurState)
85+
require.Equal(t, poller.StatusSucceeded, bp.CurState)
8686

8787
resp = initialResponse(http.MethodPut, http.NoBody)
8888
resp.StatusCode = http.StatusNoContent
89-
poller, err = New[struct{}](exported.Pipeline{}, resp)
89+
bp, err = New[struct{}](exported.Pipeline{}, resp)
9090
require.NoError(t, err)
91-
require.Equal(t, pollers.StatusSucceeded, poller.CurState)
91+
require.Equal(t, poller.StatusSucceeded, bp.CurState)
9292
}
9393

9494
type widget struct {
@@ -98,18 +98,18 @@ type widget struct {
9898
func TestUpdateNoProvStateFail(t *testing.T) {
9999
resp := initialResponse(http.MethodPut, strings.NewReader(`{ "properties": { "provisioningState": "Started" } }`))
100100
resp.StatusCode = http.StatusOK
101-
poller, err := New[widget](exported.NewPipeline(shared.TransportFunc(func(req *http.Request) (*http.Response, error) {
101+
bp, err := New[widget](exported.NewPipeline(shared.TransportFunc(func(req *http.Request) (*http.Response, error) {
102102
return &http.Response{
103103
StatusCode: http.StatusOK,
104104
Body: http.NoBody,
105105
}, nil
106106
})), resp)
107107
require.NoError(t, err)
108-
require.False(t, poller.Done())
109-
resp, err = poller.Poll(context.Background())
110-
require.ErrorIs(t, err, pollers.ErrNoBody)
108+
require.False(t, bp.Done())
109+
resp, err = bp.Poll(context.Background())
110+
require.ErrorIs(t, err, poller.ErrNoBody)
111111
require.Nil(t, resp)
112-
require.False(t, poller.Done())
112+
require.False(t, bp.Done())
113113
}
114114

115115
func TestUpdateNoProvStateSuccess(t *testing.T) {

0 commit comments

Comments
 (0)