Skip to content

Commit

Permalink
Merge pull request #4109 from MartinForReal/shafan/transport
Browse files Browse the repository at this point in the history
track2 sdk:add ut for azclient
  • Loading branch information
k8s-ci-robot authored Jun 20, 2023
2 parents 9fe9edf + 95aa18c commit 98054b4
Show file tree
Hide file tree
Showing 133 changed files with 18,633 additions and 1,376 deletions.
31 changes: 15 additions & 16 deletions pkg/azclient/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -72,26 +72,25 @@ generate: install-dependencies build generatecode generateimpl vet-all

.PHONY: generatecode
generatecode: build ## Generate client
$(TYPESCAFFOLD) --package github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/containerservice/armcontainerservice/v2 --package-alias armcontainerservice --resource ManagedCluster --client-name ManagedClustersClient
$(TYPESCAFFOLD) --package github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/containerservice/armcontainerservice/v4 --package-alias armcontainerservice --resource ManagedCluster --client-name ManagedClustersClient
$(TYPESCAFFOLD) --package github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources --package-alias resources --resource Deployment --client-name DeploymentsClient --verbs delete
$(TYPESCAFFOLD) --package github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v4 --package-alias armcompute --resource Disk --client-name DisksClient
$(TYPESCAFFOLD) --package github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v4 --package-alias armcompute --resource AvailabilitySet --client-name AvailabilitySetsClient --verbs get,list
$(TYPESCAFFOLD) --package github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v4 --package-alias armcompute --resource VirtualMachine --client-name VirtualMachinesClient --verbs createorupdate,delete,list --expand
$(TYPESCAFFOLD) --package github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v4 --package-alias armcompute --resource VirtualMachineScaleSet --client-name VirtualMachineScaleSetsClient --verbs get,createorupdate,delete,list
$(TYPESCAFFOLD) --package github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v4 --package-alias armcompute --resource VirtualMachineScaleSet --subresource VirtualMachineScaleSetVM --client-name VirtualMachineScaleSetVMsClient --verbs get,delete,list
$(TYPESCAFFOLD) --package github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v4 --package-alias armcompute --resource Snapshot --client-name SnapshotsClient --verbs get,createorupdate,delete
$(TYPESCAFFOLD) --package github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v3 --package-alias armnetwork --resource VirtualNetwork --subresource Subnet --client-name SubnetsClient --verbs get,createorupdate,delete,list --expand
$(TYPESCAFFOLD) --package github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v3 --package-alias armnetwork --resource Interface --client-name InterfacesClient --verbs get,createorupdate,delete,list --expand
$(TYPESCAFFOLD) --package github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v3 --package-alias armnetwork --resource LoadBalancer --client-name LoadBalancersClient --verbs get,createorupdate,delete,list --expand
$(TYPESCAFFOLD) --package github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v3 --package-alias armnetwork --resource PrivateEndpoint --client-name PrivateEndpointsClient --verbs get,createorupdate --expand
$(TYPESCAFFOLD) --package github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v3 --package-alias armnetwork --resource PublicIPAddress --client-name PublicIPAddressesClient --verbs get,createorupdate,delete,list --expand
$(TYPESCAFFOLD) --package github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v3 --package-alias armnetwork --resource PublicIPPrefix --client-name PublicIPPrefixesClient --verbs get,createorupdate,delete,list --expand
$(TYPESCAFFOLD) --package github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v3 --package-alias armnetwork --resource RouteTable --client-name RouteTablesClient --verbs createorupdate,delete
$(TYPESCAFFOLD) --package github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5 --package-alias armcompute --resource Disk --client-name DisksClient
$(TYPESCAFFOLD) --package github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5 --package-alias armcompute --resource AvailabilitySet --client-name AvailabilitySetsClient --verbs get,list
$(TYPESCAFFOLD) --package github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5 --package-alias armcompute --resource VirtualMachine --client-name VirtualMachinesClient --verbs createorupdate,delete,list --expand
$(TYPESCAFFOLD) --package github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5 --package-alias armcompute --resource VirtualMachineScaleSet --client-name VirtualMachineScaleSetsClient --verbs get,createorupdate,delete,list
$(TYPESCAFFOLD) --package github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5 --package-alias armcompute --resource VirtualMachineScaleSet --subresource VirtualMachineScaleSetVM --client-name VirtualMachineScaleSetVMsClient --verbs get,delete,list -
$(TYPESCAFFOLD) --package github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5 --package-alias armcompute --resource Snapshot --client-name SnapshotsClient --verbs get,createorupdate,delete
$(TYPESCAFFOLD) --package github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v3 --package-alias armnetwork --resource VirtualNetwork --subresource Subnet --client-name SubnetsClient --verbs get,createorupdate,delete,list --expand
$(TYPESCAFFOLD) --package github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v3 --package-alias armnetwork --resource Interface --client-name InterfacesClient --verbs get,createorupdate,delete,list --expand
$(TYPESCAFFOLD) --package github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v3 --package-alias armnetwork --resource LoadBalancer --client-name LoadBalancersClient --verbs get,createorupdate,delete,list --expand
$(TYPESCAFFOLD) --package github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v3 --package-alias armnetwork --resource PrivateEndpoint --client-name PrivateEndpointsClient --verbs get,createorupdate --expand
$(TYPESCAFFOLD) --package github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v3 --package-alias armnetwork --resource PublicIPAddress --client-name PublicIPAddressesClient --verbs get,createorupdate,delete,list --expand
$(TYPESCAFFOLD) --package github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v3 --package-alias armnetwork --resource PublicIPPrefix --client-name PublicIPPrefixesClient --verbs get,createorupdate,delete,list --expand
$(TYPESCAFFOLD) --package github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v3 --package-alias armnetwork --resource RouteTable --client-name RouteTablesClient --verbs createorupdate,delete
$(TYPESCAFFOLD) --package github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v3 --package-alias armnetwork --resource SecurityGroup --client-name SecurityGroupsClient --verbs get,createorupdate,delete,list
$(TYPESCAFFOLD) --package github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v3 --package-alias armnetwork --resource PrivateLinkService --client-name PrivateLinkServicesClient --verbs get,createorupdate,delete,list --expand
$(TYPESCAFFOLD) --package github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v3 --package-alias armnetwork --resource PrivateLinkService --client-name PrivateLinkServicesClient --verbs get,createorupdate,delete,list --expand
$(TYPESCAFFOLD) --package github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/privatedns/armprivatedns --package-alias armprivatedns --resource PrivateZone --client-name PrivateZonesClient --verbs get,createorupdate
## $(TYPESCAFFOLD) --package github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage --package-alias armstorage --resource FileShare --client-name FileSharesClient --expand
# #$(TYPESCAFFOLD) --package github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v3 --package-alias armnetwork --resource Subnet --client-name SubnetsClient --verbs get,createorupdate,delete,list --expand

.PHONY: generateimpl
generateimpl: build ## Generate client
Expand Down
1 change: 1 addition & 0 deletions pkg/azclient/arm_conf.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ package azclient
import (
"github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/policy"
"github.com/Azure/azure-sdk-for-go/sdk/azcore/cloud"

"sigs.k8s.io/cloud-provider-azure/pkg/azclient/utils"
)

Expand Down
16 changes: 4 additions & 12 deletions pkg/azclient/auth.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,14 +20,14 @@ import (
"crypto/rsa"
"crypto/x509"
"fmt"
"net/http"
"os"
"strings"

"github.com/Azure/azure-sdk-for-go/sdk/azcore"
"github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/policy"
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
"golang.org/x/crypto/pkcs12"

"sigs.k8s.io/cloud-provider-azure/pkg/azclient/utils"
)

Expand Down Expand Up @@ -71,20 +71,12 @@ type AuthProvider struct {
ClientCertificateCredential azcore.TokenCredential
}

const (
AzureClientID = "AZURE_CLIENT_ID"
AzureFederatedTokenFile = "AZURE_FEDERATED_TOKEN_FILE"
AzureTenantID = "AZURE_TENANT_ID"
)

func GetDefaultAuthClientOption(armConfig *ARMClientConfig) (*policy.ClientOptions, error) {
//Get default settings
options, err := NewClientOptionFromARMClientConfig(armConfig)
if err != nil {
return nil, err
}
// armloadbalancer doesn't support login.microsoft.com
options.Transport = &http.Client{Transport: utils.DefaultTransport}
return options, nil
}

Expand All @@ -93,16 +85,16 @@ func NewAuthProvider(config AzureAuthConfig, clientOption *policy.ClientOptions)
clientOption = &policy.ClientOptions{}
}
// these environment variables are injected by workload identity webhook
if tenantID := os.Getenv(AzureTenantID); tenantID != "" {
if tenantID := os.Getenv(utils.AzureTenantID); tenantID != "" {
config.TenantID = tenantID
}
if clientID := os.Getenv(AzureClientID); clientID != "" {
if clientID := os.Getenv(utils.AzureClientID); clientID != "" {
config.AADClientID = clientID
}
var err error
// federatedIdentityCredential is used for workload identity federation
var federatedIdentityCredential azcore.TokenCredential
if federatedTokenFile := os.Getenv(AzureFederatedTokenFile); federatedTokenFile != "" {
if federatedTokenFile := os.Getenv(utils.AzureFederatedTokenFile); federatedTokenFile != "" {
config.AADFederatedTokenFile = federatedTokenFile
config.UseFederatedWorkloadIdentityExtension = true
}
Expand Down
81 changes: 15 additions & 66 deletions pkg/azclient/auth_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,19 +18,16 @@ package azclient_test

import (
"context"
"os"
"strings"

"github.com/Azure/azure-sdk-for-go/sdk/azcore"
"github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/policy"
"github.com/Azure/azure-sdk-for-go/sdk/azcore/arm"
azpolicy "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy"
"gopkg.in/dnaeon/go-vcr.v3/cassette"

. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
"gopkg.in/dnaeon/go-vcr.v3/recorder"

"sigs.k8s.io/cloud-provider-azure/pkg/azclient"
"sigs.k8s.io/cloud-provider-azure/pkg/azclient/utils"
"sigs.k8s.io/cloud-provider-azure/pkg/azclient/recording"
)

var _ = Describe("Auth", Ordered, func() {
Expand All @@ -39,75 +36,26 @@ var _ = Describe("Auth", Ordered, func() {

var cred azcore.TokenCredential
var authProvider *azclient.AuthProvider
var httpRecorder *recorder.Recorder
var clientOptions *policy.ClientOptions
var httpRecorder *recording.Recorder
var err error
BeforeAll(func() {
httpRecorder, err = recorder.NewWithOptions(&recorder.Options{
CassetteName: "testdata/auth",
Mode: recorder.ModeRecordOnce,
RealTransport: utils.DefaultTransport,
SkipRequestLatency: true,
})
httpRecorder.SetReplayableInteractions(true)

Expect(err).NotTo(HaveOccurred())
if httpRecorder.IsNewCassette() {
tenantID = os.Getenv(azclient.AzureTenantID)
clientID = os.Getenv(azclient.AzureClientID)
}
httpRecorder.AddHook(func(i *cassette.Interaction) error {
i.Request.URL = strings.Replace(i.Request.URL, tenantID, "tenantid", -1)
i.Request.Body = strings.Replace(i.Request.Body, tenantID, "tenantid", -1)
i.Response.Body = strings.Replace(i.Response.Body, tenantID, "tenantid", -1)

i.Request.URL = strings.Replace(i.Request.URL, clientID, "clientid", -1)
i.Request.Body = strings.Replace(i.Request.Body, clientID, "clientid", -1)
i.Response.Body = strings.Replace(i.Response.Body, clientID, "clientid", -1)
if i.Request.Form.Has("client_id") {
i.Request.Form.Set("client_id", clientID)
}

delete(i.Response.Headers, "Set-Cookie")
delete(i.Response.Headers, "Date")
delete(i.Response.Headers, "X-Ms-Request-Id")
delete(i.Response.Headers, "X-Ms-Ests-Server")
delete(i.Response.Headers, "Content-Security-Policy-Report-Only")

if strings.Contains(i.Response.Body, "access_token") {
i.Response.Body = `{"token_type":"Bearer","expires_in":86399,"ext_expires_in":86399,"access_token":"faketoken"}`
}

return nil
}, recorder.BeforeSaveHook)
clientOptions, err = azclient.GetDefaultAuthClientOption(nil)
httpRecorder, err = recording.NewRecorder("testdata/auth")
Expect(err).NotTo(HaveOccurred())

// armloadbalancer doesn't support ligin.microsoft.com
clientOptions.Transport = httpRecorder.GetDefaultClient()
tenantID = httpRecorder.TenantID()
clientID = httpRecorder.ClientID()
})

When("AADClientSecret is set", func() {
It("should return a valid token", func() {
clientSecret := "clientSecret"
if httpRecorder.IsNewCassette() {
clientSecret = os.Getenv("AZURE_CLIENT_SECRET")
}
httpRecorder.AddHook(func(i *cassette.Interaction) error {
i.Request.URL = strings.Replace(i.Request.URL, clientSecret, "clientsecret", -1)
i.Request.Body = strings.Replace(i.Request.Body, clientSecret, "clientsecret", -1)
i.Response.Body = strings.Replace(i.Response.Body, clientSecret, "clientsecret", -1)
if i.Request.Form.Has("client_secret") {
i.Request.Form.Set("client_secret", "clientsecret")
}
return nil
}, recorder.BeforeSaveHook)
Expect(err).NotTo(HaveOccurred())
authProvider, err = azclient.NewAuthProvider(azclient.AzureAuthConfig{
TenantID: tenantID,
AADClientID: clientID,
AADClientSecret: clientSecret,
}, clientOptions)
AADClientSecret: httpRecorder.ClientSecret(),
}, &arm.ClientOptions{
ClientOptions: azpolicy.ClientOptions{
Transport: httpRecorder.HTTPClient(),
},
})
Expect(err).NotTo(HaveOccurred())
cred, err = authProvider.GetAzIdentity()
Expect(err).NotTo(HaveOccurred())
Expand All @@ -121,6 +69,7 @@ var _ = Describe("Auth", Ordered, func() {
})
})
AfterAll(func() {
httpRecorder.Stop()
err := httpRecorder.Stop()
Expect(err).NotTo(HaveOccurred())
})
})

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

75 changes: 75 additions & 0 deletions pkg/azclient/availabilitysetclient/availabilitysetclient_test.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit 98054b4

Please sign in to comment.