Skip to content

Commit 512d4a7

Browse files
allmightyspiffGitHub Enterprise
authored andcommitted
Merge pull request #786 from Ramkishor-Chaladi/issue_748
added sortby feature and unit test cases for sl file volume count
2 parents e87b210 + 9f45a27 commit 512d4a7

2 files changed

Lines changed: 58 additions & 3 deletions

File tree

plugin/commands/file/volume_count.go

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,15 @@ import (
99
. "github.ibm.com/SoftLayer/softlayer-cli/plugin/i18n"
1010
"github.ibm.com/SoftLayer/softlayer-cli/plugin/managers"
1111
"github.ibm.com/SoftLayer/softlayer-cli/plugin/metadata"
12+
"github.ibm.com/SoftLayer/softlayer-cli/plugin/utils"
1213
)
1314

1415
type VolumeCountCommand struct {
1516
*metadata.SoftlayerStorageCommand
1617
Command *cobra.Command
1718
StorageManager managers.StorageManager
1819
Datacenter string
20+
SortBy string
1921
}
2022

2123
func NewVolumeCountCommand(sl *metadata.SoftlayerStorageCommand) (cmd *VolumeCountCommand) {
@@ -32,11 +34,14 @@ func NewVolumeCountCommand(sl *metadata.SoftlayerStorageCommand) (cmd *VolumeCou
3234
},
3335
}
3436
cobraCmd.Flags().StringVarP(&thisCmd.Datacenter, "datacenter", "d", "", T("Filter by datacenter shortname"))
37+
cobraCmd.Flags().StringVarP(&thisCmd.SortBy, "sortby", "s", "", T("Column to sort by"))
3538
thisCmd.Command = cobraCmd
3639
return thisCmd
3740
}
3841

3942
func (cmd *VolumeCountCommand) Run(args []string) error {
43+
sortby := cmd.SortBy
44+
flag := false
4045
mask := "mask[id,serviceResource.datacenter.name]"
4146
volumes, err := cmd.StorageManager.ListVolumes(managers.VOLUME_TYPE_FILE, cmd.Datacenter, "", "", "", 0, mask)
4247
if err != nil {
@@ -56,11 +61,36 @@ func (cmd *VolumeCountCommand) Run(args []string) error {
5661
var datacenters []string
5762
for key, _ := range result {
5863
datacenters = append(datacenters, key)
64+
flag = true
5965
}
6066
sort.Strings(datacenters)
67+
68+
sortColumns := []string{"Datacenter", "Count"}
69+
70+
keys := make([]string, 0, len(result))
71+
_, err = utils.ValidateColumns2(sortby, nil, nil, nil, sortColumns)
72+
if err != nil {
73+
return err
74+
}
75+
6176
table := cmd.UI.Table([]string{T("Data center"), T("Count")})
62-
for _, dc := range datacenters {
63-
table.Add(dc, strconv.Itoa(result[dc]))
77+
78+
if sortby == "Count" || sortby == "count" {
79+
for key := range result {
80+
keys = append(keys, key)
81+
}
82+
sort.SliceStable(keys, func(i, j int) bool {
83+
return result[keys[i]] < result[keys[j]]
84+
})
85+
for _, k := range keys {
86+
table.Add(k, strconv.Itoa(result[k]))
87+
}
88+
flag = false
89+
}
90+
if flag == true {
91+
for _, dc := range datacenters {
92+
table.Add(dc, strconv.Itoa(result[dc]))
93+
}
6494
}
6595
table.Print()
6696
return nil

plugin/commands/file/volume_count_test.go

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import (
1919
var listVolumeReturns = []datatypes.Network_Storage{
2020
datatypes.Network_Storage{
2121
ServiceResource: &datatypes.Network_Service_Resource{
22-
Datacenter: &datatypes.Location{Name: sl.String("dal10")},
22+
Datacenter: &datatypes.Location{Name: sl.String("dal10"), RegionCount: sl.Uint(4)},
2323
},
2424
},
2525
}
@@ -80,5 +80,30 @@ var _ = Describe("Volume cancel", func() {
8080
Expect(err.Error()).To(ContainSubstring("Failed to list volumes on your account."))
8181
})
8282
})
83+
Context("sortby count", func() {
84+
BeforeEach(func() {
85+
FakeStorageManager.ListVolumesReturns(listVolumeReturns, nil)
86+
})
87+
It("Sorting the Count Column", func() {
88+
err := testhelpers.RunCobraCommand(cliCommand.Command, "--sortby", "Count")
89+
Expect(err).NotTo(HaveOccurred())
90+
Expect(fakeUI.Outputs()).To(ContainSubstring("Data center Count"))
91+
Expect(fakeUI.Outputs()).To(ContainSubstring("dal10 1"))
92+
})
93+
})
94+
Context("sortby blank value passed Error", func() {
95+
It("return error", func() {
96+
err := testhelpers.RunCobraCommand(cliCommand.Command, "--sortby")
97+
Expect(err).To(HaveOccurred())
98+
Expect(err.Error()).To(ContainSubstring("flag needs an argument: --sortby"))
99+
})
100+
})
101+
Context("sortby wrong value passed Error", func() {
102+
It("return error", func() {
103+
err := testhelpers.RunCobraCommand(cliCommand.Command, "--sortby", "zc,.//")
104+
Expect(err).To(HaveOccurred())
105+
Expect(err.Error()).To(ContainSubstring("Incorrect Usage: --sortby zc,.// is not supported."))
106+
})
107+
})
83108
})
84109
})

0 commit comments

Comments
 (0)