diff --git a/app/namespace.go b/app/namespace.go index 4784d17..da72f9e 100644 --- a/app/namespace.go +++ b/app/namespace.go @@ -386,6 +386,20 @@ func (c *NamespaceClient) getNamespaceCloudApi(namespace string) (*cloudNamespac return res.Namespace, nil } +func (c *NamespaceClient) getNamespaceCapacityInfoCloudApi(namespace string) (*cloudNamespace.NamespaceCapacityInfo, error) { + res, err := c.cloudAPIClient.GetNamespaceCapacityInfo(c.ctx, &cloudservice.GetNamespaceCapacityInfoRequest{ + Namespace: namespace, + }) + if err != nil { + return nil, err + } + if res.GetCapacityInfo() == nil || res.GetCapacityInfo().Namespace == "" { + // this should never happen, the server should return an error when the namespace capacity info is not found or invalid + return nil, fmt.Errorf("invalid namespace capacity info returned by server") + } + return res.CapacityInfo, nil +} + // TODO: deprecate this and use getNamespaceCloudApi everywhere func (c *NamespaceClient) getNamespace(namespace string) (*namespace.Namespace, error) { res, err := c.client.GetNamespace(c.ctx, &namespaceservice.GetNamespaceRequest{ @@ -1912,22 +1926,22 @@ func NewNamespaceCommand(getNamespaceClientFn GetNamespaceClientFn) (CommandOut, }, { Name: "capacity", - Usage: "Manage namespace capacity settings", + Usage: "Manage namespace capacity", Aliases: []string{"cap"}, Subcommands: []*cli.Command{ { Name: "get", - Usage: "Get namespace capacity settings", + Usage: "Get namespace capacity information", Aliases: []string{"g"}, Flags: []cli.Flag{ NamespaceFlag, }, Action: func(ctx *cli.Context) error { - n, err := c.getNamespaceCloudApi(ctx.String(NamespaceFlagName)) + capacityInfo, err := c.getNamespaceCapacityInfoCloudApi(ctx.String(NamespaceFlagName)) if err != nil { return err } - return PrintProto(n.GetCapacity()) + return PrintProto(capacityInfo) }, }, { diff --git a/app/namespace_test.go b/app/namespace_test.go index fe4ab8e..23eb260 100644 --- a/app/namespace_test.go +++ b/app/namespace_test.go @@ -3302,16 +3302,17 @@ func (s *NamespaceTestSuite) TestGetNamespaceCapacity() { expectErr bool }{ { - name: "get namespace capacity - success", + name: "get namespace capacity - provisioned mode", args: []string{"namespace", "capacity", "get", "--namespace", "ns1"}, mock: func() { s.mockCloudApiClient.EXPECT(). - GetNamespace(gomock.Any(), &cloudservice.GetNamespaceRequest{ + GetNamespaceCapacityInfo(gomock.Any(), &cloudservice.GetNamespaceCapacityInfoRequest{ Namespace: "ns1", - }).Return(&cloudservice.GetNamespaceResponse{ - Namespace: &cloudNamespace.Namespace{ - Namespace: "ns1", - Capacity: &cloudNamespace.Capacity{ + }).Return(&cloudservice.GetNamespaceCapacityInfoResponse{ + CapacityInfo: &cloudNamespace.NamespaceCapacityInfo{ + Namespace: "ns1", + HasLegacyLimits: false, + CurrentCapacity: &cloudNamespace.Capacity{ CurrentMode: &cloudNamespace.Capacity_Provisioned_{ Provisioned: &cloudNamespace.Capacity_Provisioned{ CurrentValue: 16.0, @@ -3322,13 +3323,33 @@ func (s *NamespaceTestSuite) TestGetNamespaceCapacity() { }, nil).Times(1) }, }, + { + name: "get namespace capacity - on demand mode", + args: []string{"namespace", "capacity", "get", "--namespace", "ns2"}, + mock: func() { + s.mockCloudApiClient.EXPECT(). + GetNamespaceCapacityInfo(gomock.Any(), &cloudservice.GetNamespaceCapacityInfoRequest{ + Namespace: "ns2", + }).Return(&cloudservice.GetNamespaceCapacityInfoResponse{ + CapacityInfo: &cloudNamespace.NamespaceCapacityInfo{ + Namespace: "ns2", + HasLegacyLimits: false, + CurrentCapacity: &cloudNamespace.Capacity{ + CurrentMode: &cloudNamespace.Capacity_OnDemand_{ + OnDemand: &cloudNamespace.Capacity_OnDemand{}, + }, + }, + }, + }, nil).Times(1) + }, + }, { name: "get namespace capacity - fail", args: []string{"namespace", "capacity", "get", "--namespace", "ns1"}, expectErr: true, mock: func() { s.mockCloudApiClient.EXPECT(). - GetNamespace(gomock.Any(), &cloudservice.GetNamespaceRequest{ + GetNamespaceCapacityInfo(gomock.Any(), &cloudservice.GetNamespaceCapacityInfoRequest{ Namespace: "ns1", }).Return(nil, errors.New("some error")).Times(1) },