Skip to content

Commit

Permalink
add test
Browse files Browse the repository at this point in the history
  • Loading branch information
nithyatsu committed Jan 7, 2025
1 parent 1d71f5d commit 76430a0
Show file tree
Hide file tree
Showing 7 changed files with 112 additions and 36 deletions.
2 changes: 1 addition & 1 deletion pkg/cli/clivalidation.go
Original file line number Diff line number Diff line change
Expand Up @@ -474,7 +474,7 @@ func RequireResourceTypeNameArgs(cmd *cobra.Command, args []string) (string, err
// ReadResourceTypeNameArgs is used to get the resource type name that is supplied as the first argument
func ReadResourceTypeNameArgs(cmd *cobra.Command, args []string) (string, error) {
if len(args) < 1 {
return "", errors.New("resource type name is provided")
return "", errors.New("resource type name is not provided")
}
return args[0], nil
}
Expand Down
2 changes: 1 addition & 1 deletion pkg/cli/cmd/resourceprovider/create/create_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ func Test_Run(t *testing.T) {
expectedResourceType := "testResources"
expectedAPIVersion := "2025-01-01-preview"

clientFactory, err := manifest.NewTestClientFactory()
clientFactory, err := manifest.NewTestClientFactory(manifest.WithResourceProviderServerNoError)
require.NoError(t, err)

var logBuffer bytes.Buffer
Expand Down
14 changes: 7 additions & 7 deletions pkg/cli/cmd/resourcetype/create/create.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,6 @@ package create
import (
"context"

aztoken "github.com/radius-project/radius/pkg/azure/tokencredentials"

"github.com/radius-project/radius/pkg/cli"
"github.com/radius-project/radius/pkg/cli/clierrors"
"github.com/radius-project/radius/pkg/cli/cmd/commonflags"
Expand All @@ -32,6 +30,8 @@ import (
"github.com/radius-project/radius/pkg/sdk"
"github.com/radius-project/radius/pkg/ucp/api/v20231001preview"
"github.com/spf13/cobra"

aztoken "github.com/radius-project/radius/pkg/azure/tokencredentials"
)

// NewCommand creates an instance of the `rad resource-type create` command and runner.
Expand Down Expand Up @@ -137,16 +137,16 @@ func (r *Runner) Run(ctx context.Context) error {
}

// If resource provider does not exist or if there is any other error, first register the resource provider.
response, err := r.UCPClientFactory.NewResourceTypesClient().Get(ctx, "local", r.ResourceProvider.Name, r.ResourceTypeName, nil)
response, err := r.UCPClientFactory.NewResourceProvidersClient().Get(ctx, "local", r.ResourceProvider.Name, nil)
if err != nil {
r.Output.LogInfo("Resource provider %q not found.", r.ResourceProvider.Name)
if err := manifest.RegisterFile(ctx, r.UCPClientFactory, "local", r.ResourceProviderManifestFilePath, r.Logger); err != nil {
return err
if registerErr := manifest.RegisterFile(ctx, r.UCPClientFactory, "local", r.ResourceProviderManifestFilePath, r.Logger); err != nil {
return registerErr
}
} else {
r.Output.LogInfo("Resource provider %q found. Registering resource type %q.", r.ResourceProvider.Name, r.ResourceTypeName)
if err := manifest.RegisterType(ctx, r.UCPClientFactory, "local", r.ResourceProviderManifestFilePath, r.ResourceTypeName, r.Logger); err != nil {
return err
if registerErr := manifest.RegisterType(ctx, r.UCPClientFactory, "local", r.ResourceProviderManifestFilePath, r.ResourceTypeName, r.Logger); err != nil {
return registerErr
}
}

Expand Down
36 changes: 34 additions & 2 deletions pkg/cli/cmd/resourcetype/create/create_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -63,13 +63,12 @@ func Test_Validate(t *testing.T) {

func Test_Run(t *testing.T) {
t.Run("Success: resource type created", func(t *testing.T) {

resourceProviderData, err := manifest.ReadFile("testdata/valid.yaml")
require.NoError(t, err)

expectedResourceType := "testResources"

clientFactory, err := manifest.NewTestClientFactory()
clientFactory, err := manifest.NewTestClientFactory(manifest.WithResourceProviderServerNoError)
require.NoError(t, err)

var logBuffer bytes.Buffer
Expand All @@ -92,6 +91,39 @@ func Test_Run(t *testing.T) {
require.NoError(t, err)

logOutput := logBuffer.String()
require.NotContains(t, logOutput, fmt.Sprintf("Creating resource provider %s", runner.ResourceProvider.Name))
require.Contains(t, logOutput, fmt.Sprintf("Resource type %s/%s created successfully", resourceProviderData.Name, expectedResourceType))
})
// another test for failure
t.Run("Resource provider does not exist", func(t *testing.T) {
resourceProviderData, err := manifest.ReadFile("testdata/valid.yaml")
require.NoError(t, err)

expectedResourceType := "testResources"

clientFactory, err := manifest.NewTestClientFactory(manifest.WithResourceProviderServerNotFoundError)
require.NoError(t, err)

var logBuffer bytes.Buffer
logger := func(format string, args ...any) {
fmt.Fprintf(&logBuffer, format+"\n", args...)
}

runner := &Runner{
UCPClientFactory: clientFactory,
Output: &output.MockOutput{},
Workspace: &workspaces.Workspace{},
ResourceProvider: resourceProviderData,
Format: "table",
Logger: logger,
ResourceProviderManifestFilePath: "testdata/valid.yaml",
ResourceTypeName: expectedResourceType,
}

_ = runner.Run(context.Background())
logOutput := logBuffer.String()
require.Contains(t, logOutput, fmt.Sprintf("Creating resource provider %s", runner.ResourceProvider.Name))

})

}
1 change: 0 additions & 1 deletion pkg/cli/manifest/registermanifest.go
Original file line number Diff line number Diff line change
Expand Up @@ -214,7 +214,6 @@ func RegisterType(ctx context.Context, clientFactory *v20231001preview.ClientFac
},
}

//set it back to resource provider
logIfEnabled(logger, "Updating location %s/%s with new resource type", resourceProvider.Name, v1.LocationGlobal)
locationPoller, err := clientFactory.NewLocationsClient().BeginCreateOrUpdate(ctx, planeName, resourceProvider.Name, v1.LocationGlobal, locationResource, nil)
if err != nil {
Expand Down
4 changes: 2 additions & 2 deletions pkg/cli/manifest/registermanifest_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ func TestRegisterDirectory(t *testing.T) {

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
clientFactory, err := NewTestClientFactory()
clientFactory, err := NewTestClientFactory(WithResourceProviderServerNoError)
require.NoError(t, err)

err = RegisterDirectory(context.Background(), clientFactory, tt.planeName, tt.directoryPath, nil)
Expand Down Expand Up @@ -129,7 +129,7 @@ func TestRegisterFile(t *testing.T) {
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {

clientFactory, err := NewTestClientFactory()
clientFactory, err := NewTestClientFactory(WithResourceProviderServerNoError)
require.NoError(t, err, "Failed to create client factory")

var logBuffer bytes.Buffer
Expand Down
89 changes: 67 additions & 22 deletions pkg/cli/manifest/testclientfactory.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,31 @@ import (
)

// NewTestClientFactory creates a new client factory for testing purposes.
func NewTestClientFactory() (*v20231001preview.ClientFactory, error) {
// Create fake servers for each client
func NewTestClientFactory(resourceProvidersServer func() ucpfake.ResourceProvidersServer) (*v20231001preview.ClientFactory, error) {
serverFactory := ucpfake.ServerFactory{
ResourceProvidersServer: resourceProvidersServer(),
ResourceTypesServer: WithResourceTypeServerNoError(),
APIVersionsServer: WithAPIVersionServerNoError(),
LocationsServer: WithLocationServerNoError(),
}

serverFactoryTransport := ucpfake.NewServerFactoryTransport(&serverFactory)

clientOptions := &armpolicy.ClientOptions{
ClientOptions: policy.ClientOptions{
Transport: serverFactoryTransport,
},
}

clientFactory, err := v20231001preview.NewClientFactory(&azfake.TokenCredential{}, clientOptions)
if err != nil {
return nil, err
}

return clientFactory, err
}

func WithResourceProviderServerNoError() ucpfake.ResourceProvidersServer {
resourceProvidersServer := ucpfake.ResourceProvidersServer{
BeginCreateOrUpdate: func(
ctx context.Context,
Expand Down Expand Up @@ -64,7 +87,10 @@ func NewTestClientFactory() (*v20231001preview.ClientFactory, error) {
return
},
}
return resourceProvidersServer
}

func WithResourceTypeServerNoError() ucpfake.ResourceTypesServer {
resourceTypesServer := ucpfake.ResourceTypesServer{
BeginCreateOrUpdate: func(
ctx context.Context,
Expand Down Expand Up @@ -99,7 +125,10 @@ func NewTestClientFactory() (*v20231001preview.ClientFactory, error) {
return
},
}
return resourceTypesServer
}

func WithAPIVersionServerNoError() ucpfake.APIVersionsServer {
apiVersionsServer := ucpfake.APIVersionsServer{
BeginCreateOrUpdate: func(
ctx context.Context,
Expand All @@ -119,7 +148,10 @@ func NewTestClientFactory() (*v20231001preview.ClientFactory, error) {
return
},
}
return apiVersionsServer
}

func WithLocationServerNoError() ucpfake.LocationsServer {
locationsServer := ucpfake.LocationsServer{
BeginCreateOrUpdate: func(
ctx context.Context,
Expand Down Expand Up @@ -158,28 +190,41 @@ func NewTestClientFactory() (*v20231001preview.ClientFactory, error) {
return
},
}
//func(ctx context.Context, planeName string, resourceProviderName string, locationName string, options *v20231001preview.LocationsClientGetOptions)
// (resp "github.com/Azure/azure-sdk-for-go/sdk/azcore/fake".Responder[v20231001preview.LocationsClientGetResponse], errResp "github.com/Azure/azure-sdk-for-go/sdk/azcore/fake".ErrorResponder)
//(ctx, planeName, resourceProvider.Name, v1.LocationGlobal, nil)
serverFactory := ucpfake.ServerFactory{
ResourceProvidersServer: resourceProvidersServer,
ResourceTypesServer: resourceTypesServer,
APIVersionsServer: apiVersionsServer,
LocationsServer: locationsServer,
}
return locationsServer
}

serverFactoryTransport := ucpfake.NewServerFactoryTransport(&serverFactory)
func WithResourceProviderServerNotFoundError() ucpfake.ResourceProvidersServer {
resourceProvidersNotFoundServer := ucpfake.ResourceProvidersServer{
BeginCreateOrUpdate: func(
ctx context.Context,
planeName string,
resourceProviderName string,
resource v20231001preview.ResourceProviderResource,
options *v20231001preview.ResourceProvidersClientBeginCreateOrUpdateOptions,
) (resp azfake.PollerResponder[v20231001preview.ResourceProvidersClientCreateOrUpdateResponse], errResp azfake.ErrorResponder) {
// Simulate successful creation
result := v20231001preview.ResourceProvidersClientCreateOrUpdateResponse{
ResourceProviderResource: resource,
}
resp.AddNonTerminalResponse(http.StatusCreated, nil)
resp.SetTerminalResponse(http.StatusOK, result, nil)

clientOptions := &armpolicy.ClientOptions{
ClientOptions: policy.ClientOptions{
Transport: serverFactoryTransport,
return
},
Get: func(
ctx context.Context,
planeName string,
resourceProviderName string,
options *v20231001preview.ResourceProvidersClientGetOptions, // Add this parameter
) (resp azfake.Responder[v20231001preview.ResourceProvidersClientGetResponse], errResp azfake.ErrorResponder) {
response := v20231001preview.ResourceProvidersClientGetResponse{
ResourceProviderResource: v20231001preview.ResourceProviderResource{
Name: to.Ptr(resourceProviderName),
},
}
resp.SetResponse(http.StatusNotFound, response, nil)
return
},
}

clientFactory, err := v20231001preview.NewClientFactory(&azfake.TokenCredential{}, clientOptions)
if err != nil {
return nil, err
}

return clientFactory, err
return resourceProvidersNotFoundServer
}

0 comments on commit 76430a0

Please sign in to comment.