From 3ec0feea9ea8f24c6c311046b19007f9576cc1ed Mon Sep 17 00:00:00 2001 From: Lucas Di Pentima Date: Thu, 16 Sep 2021 15:35:09 -0300 Subject: [PATCH] 18097: Accept '-case-insensitive' flag on sync-groups. Adds test. Arvados-DCO-1.1-Signed-off-by: Lucas Di Pentima --- tools/sync-groups/sync-groups.go | 14 ++++++----- tools/sync-groups/sync-groups_test.go | 35 ++++++++++++++++++++++----- 2 files changed, 37 insertions(+), 12 deletions(-) diff --git a/tools/sync-groups/sync-groups.go b/tools/sync-groups/sync-groups.go index 24e838c8f1..6314a52469 100644 --- a/tools/sync-groups/sync-groups.go +++ b/tools/sync-groups/sync-groups.go @@ -119,6 +119,7 @@ type ConfigParams struct { Path string UserID string Verbose bool + CaseInsensitive bool ParentGroupUUID string ParentGroupName string SysUserUUID string @@ -152,6 +153,10 @@ func ParseFlags(config *ConfigParams) error { "user-id", "email", "Attribute by which every user is identified. Valid values are: email and username.") + caseInsensitive := flags.Bool( + "case-insensitive", + false, + "Performs case insensitive matching on user IDs. Off by default.") verbose := flags.Bool( "verbose", false, @@ -196,6 +201,7 @@ func ParseFlags(config *ConfigParams) error { config.ParentGroupUUID = *parentGroupUUID config.UserID = *userID config.Verbose = *verbose + config.CaseInsensitive = *caseInsensitive return nil } @@ -494,9 +500,7 @@ func GetAll(c *arvados.Client, res string, params arvados.ResourceListParams, pa if page.Len() == 0 { break } - for _, i := range page.GetItems() { - allItems = append(allItems, i) - } + allItems = append(allItems, page.GetItems()...) params.Offset += page.Len() } return allItems, nil @@ -714,9 +718,7 @@ func RemoveMemberLinksFromGroup(cfg *ConfigParams, user arvados.User, linkNames userID, _ := GetUserID(user, cfg.UserID) return fmt.Errorf("error getting links needed to remove user %q from group %q: %s", userID, group.Name, err) } - for _, link := range l { - links = append(links, link) - } + links = append(links, l...) } for _, item := range links { link := item.(arvados.Link) diff --git a/tools/sync-groups/sync-groups_test.go b/tools/sync-groups/sync-groups_test.go index ec2f18a307..c176210847 100644 --- a/tools/sync-groups/sync-groups_test.go +++ b/tools/sync-groups/sync-groups_test.go @@ -50,6 +50,7 @@ func (s *TestSuite) SetUpTest(c *C) { os.Args = []string{"cmd", "somefile.csv"} config, err := GetConfig() c.Assert(err, IsNil) + config.UserID = "email" // Confirm that the parent group was created gl = arvados.GroupList{} ac.RequestAndDecode(&gl, "GET", "/arvados/v1/groups", nil, params) @@ -145,10 +146,7 @@ func GroupMembershipExists(ac *arvados.Client, userUUID string, groupUUID string }}, } ac.RequestAndDecode(&ll, "GET", "/arvados/v1/links", nil, params) - if ll.Len() != 1 { - return false - } - return true + return ll.Len() == 1 } // If named group exists, return its UUID @@ -450,7 +448,7 @@ func (s *TestSuite) TestIgnoreNonexistantUsers(c *C) { c.Assert(GroupMembershipExists(s.cfg.Client, activeUserUUID, groupUUID, "can_write"), Equals, true) } -// Users listed on the file that don't exist on the system are ignored +// Entries with missing data are ignored. func (s *TestSuite) TestIgnoreEmptyFields(c *C) { activeUserEmail := s.users[arvadostest.ActiveUserUUID].Email activeUserUUID := s.users[arvadostest.ActiveUserUUID].UUID @@ -502,7 +500,32 @@ func (s *TestSuite) TestUseUsernames(c *C) { s.cfg.Path = tmpfile.Name() s.cfg.UserID = "username" err = doMain(s.cfg) - s.cfg.UserID = "email" + c.Assert(err, IsNil) + // Confirm that memberships exist + groupUUID, err = RemoteGroupExists(s.cfg, "TestGroup1") + c.Assert(err, IsNil) + c.Assert(groupUUID, Not(Equals), "") + c.Assert(GroupMembershipExists(s.cfg.Client, activeUserUUID, groupUUID, "can_write"), Equals, true) +} + +func (s *TestSuite) TestUseUsernamesWithCaseInsensitiveMatching(c *C) { + activeUserName := strings.ToUpper(s.users[arvadostest.ActiveUserUUID].Username) + activeUserUUID := s.users[arvadostest.ActiveUserUUID].UUID + // Confirm that group doesn't exist + groupUUID, err := RemoteGroupExists(s.cfg, "TestGroup1") + c.Assert(err, IsNil) + c.Assert(groupUUID, Equals, "") + // Create file & run command + data := [][]string{ + {"TestGroup1", activeUserName}, + } + tmpfile, err := MakeTempCSVFile(data) + c.Assert(err, IsNil) + defer os.Remove(tmpfile.Name()) // clean up + s.cfg.Path = tmpfile.Name() + s.cfg.UserID = "username" + s.cfg.CaseInsensitive = true + err = doMain(s.cfg) c.Assert(err, IsNil) // Confirm that memberships exist groupUUID, err = RemoteGroupExists(s.cfg, "TestGroup1") -- 2.30.2