github.com/jfrog/jfrog-client-go@v1.40.2/tests/artifactorypermissiontarget_test.go (about) 1 package tests 2 3 import ( 4 "crypto/rand" 5 "fmt" 6 "github.com/jfrog/jfrog-client-go/utils" 7 "testing" 8 9 "github.com/jfrog/jfrog-client-go/artifactory/services" 10 11 "github.com/stretchr/testify/assert" 12 ) 13 14 const ( 15 PermissionTargetNamePrefix = "client-go-tests-target" 16 ) 17 18 func TestPermissionTarget(t *testing.T) { 19 initArtifactoryTest(t) 20 params := services.NewPermissionTargetParams() 21 params.Name = fmt.Sprintf("%s-%s", PermissionTargetNamePrefix, getRunId()) 22 params.Repo = &services.PermissionTargetSection{} 23 params.Repo.Repositories = []string{"ANY"} 24 params.Repo.ExcludePatterns = []string{"dir/*"} 25 params.Repo.Actions = &services.Actions{} 26 params.Repo.Actions.Users = map[string][]string{ 27 "anonymous": {"read"}, 28 } 29 params.Build = &services.PermissionTargetSection{} 30 params.Build.Repositories = []string{"artifactory-build-info"} 31 params.Build.Actions = &services.Actions{} 32 params.Build.Actions.Users = map[string][]string{ 33 "anonymous": {"annotate"}, 34 } 35 36 err := testsPermissionTargetService.Create(params) 37 assert.NoError(t, err) 38 // Fill in default values before validation 39 params.Repo.IncludePatterns = []string{"**"} 40 params.Build.Repositories = []string{"artifactory-build-info"} 41 params.Build.IncludePatterns = []string{"**"} 42 params.Build.ExcludePatterns = []string{} 43 validatePermissionTarget(t, params) 44 45 params.Repo.Actions.Users = nil 46 params.Repo.Repositories = []string{"ANY REMOTE"} 47 err = testsPermissionTargetService.Update(params) 48 validatePermissionTarget(t, params) 49 assert.NoError(t, err) 50 err = testsPermissionTargetService.Delete(params.Name) 51 assert.NoError(t, err) 52 targetParams, err := getPermissionTarget(params.Name) 53 assert.NoError(t, err) 54 assert.Nil(t, targetParams) 55 } 56 57 func validatePermissionTarget(t *testing.T, params services.PermissionTargetParams) { 58 targetConfig, err := getPermissionTarget(params.Name) 59 assert.NoError(t, err) 60 assert.NotNil(t, targetConfig) 61 if targetConfig == nil { 62 return 63 } 64 assert.Equal(t, params.Name, targetConfig.Name) 65 assert.Equal(t, params.Repo, targetConfig.Repo) 66 assert.Equal(t, params.Build, targetConfig.Build) 67 assert.Equal(t, params.ReleaseBundle, targetConfig.ReleaseBundle) 68 } 69 70 func getPermissionTarget(targetName string) (targetParams *services.PermissionTargetParams, err error) { 71 return testsPermissionTargetService.Get(targetName) 72 } 73 74 // Assert empty inner structs remain nil unless explicitly set. 75 func TestPermissionTargetEmptyFields(t *testing.T) { 76 initArtifactoryTest(t) 77 params := services.NewPermissionTargetParams() 78 params.Name = fmt.Sprintf("%s-%s", PermissionTargetNamePrefix, getRunId()) 79 80 assert.Nil(t, params.Repo) 81 params.Repo = &services.PermissionTargetSection{} 82 params.Repo.Repositories = []string{"ANY"} 83 params.Repo.IncludePatterns = []string{"**"} 84 params.Repo.ExcludePatterns = []string{"dir/*"} 85 params.Repo.Actions = &services.Actions{} 86 params.Repo.Actions.Users = map[string][]string{ 87 "anonymous": {"read"}, 88 } 89 90 assert.Nil(t, params.Build) 91 assert.Nil(t, params.ReleaseBundle) 92 assert.NoError(t, testsPermissionTargetService.Create(params)) 93 validatePermissionTarget(t, params) 94 err := testsPermissionTargetService.Delete(params.Name) 95 assert.NoError(t, err) 96 } 97 98 // This test directly copies the example in the documentation: 99 // - Creating and Updating Permission Targets 100 func TestDocumentationExampleCreateUpdateAndDeletePermissionTarget(t *testing.T) { 101 initArtifactoryTest(t) 102 103 // Preamble to get dependent entities setup 104 user1 := createRandomUser(t) 105 defer deleteUserAndAssert(t, user1) 106 107 user2 := createRandomUser(t) 108 defer deleteUserAndAssert(t, user2) 109 110 localRepo1 := createRandomRepo(t) 111 defer deleteRepo(t, localRepo1) 112 113 localRepo2 := createRandomRepo(t) 114 defer deleteRepo(t, localRepo2) 115 116 group1 := createRandomGroup(t) 117 defer deleteGroupAndAssert(t, group1) 118 119 group2 := createRandomGroup(t) 120 defer deleteGroupAndAssert(t, group2) 121 122 // Example code from Documentation 123 params := services.NewPermissionTargetParams() 124 params.Name = "java-developers" 125 params.Repo = &services.PermissionTargetSection{} 126 params.Repo.Repositories = []string{"ANY REMOTE", localRepo1, localRepo2} 127 params.Repo.ExcludePatterns = []string{"dir/*"} 128 params.Repo.Actions = &services.Actions{} 129 params.Repo.Actions.Users = map[string][]string{ 130 user1: {"read", "write"}, 131 user2: {"write", "annotate", "read"}, 132 } 133 params.Repo.Actions.Groups = map[string][]string{ 134 group1: {"manage", "read", "annotate"}, 135 } 136 // This is the default value that cannot be changed 137 params.Build = &services.PermissionTargetSection{} 138 params.Build.Repositories = []string{"artifactory-build-info"} 139 params.Build.Actions = &services.Actions{} 140 params.Build.Actions.Groups = map[string][]string{ 141 group1: {"manage", "read", "write", "annotate", "delete"}, 142 group2: {"read"}, 143 } 144 145 // Creating the Permission Target 146 err := testsPermissionTargetService.Create(params) 147 assert.NoError(t, err) 148 149 // Update the permission target 150 err = testsPermissionTargetService.Update(params) 151 assert.NoError(t, err) 152 153 // Fetch a permission target 154 _, err = testsPermissionTargetService.Get("java-developers") 155 assert.NoError(t, err) 156 157 // Delete the permission target 158 err = testsPermissionTargetService.Delete("java-developers") 159 assert.NoError(t, err) 160 } 161 162 func createRandomUser(t *testing.T) string { 163 name := fmt.Sprintf("test-%s-%s", timestampStr, randomString(t, 16)) 164 userDetails := services.User{ 165 Name: name, 166 Email: name + "@jfrog.com", 167 Password: "Password1*", 168 Admin: utils.Pointer(false), 169 Realm: "internal", 170 ShouldInvite: utils.Pointer(false), 171 ProfileUpdatable: utils.Pointer(true), 172 DisableUIAccess: utils.Pointer(false), 173 InternalPasswordDisabled: utils.Pointer(false), 174 WatchManager: utils.Pointer(false), 175 ReportsManager: utils.Pointer(false), 176 PolicyManager: utils.Pointer(false), 177 } 178 179 err := testUserService.CreateUser(services.UserParams{ 180 UserDetails: userDetails, 181 ReplaceIfExists: true, 182 }) 183 184 assert.NoError(t, err) 185 186 return name 187 } 188 189 func createRandomRepo(t *testing.T) string { 190 repoKey := fmt.Sprintf("test-%s-%s", timestampStr, randomString(t, 16)) 191 glp := services.NewGenericLocalRepositoryParams() 192 glp.Key = repoKey 193 setLocalRepositoryBaseParams(&glp.LocalRepositoryBaseParams, false) 194 195 err := testsCreateLocalRepositoryService.Generic(glp) 196 assert.NoError(t, err) 197 198 return repoKey 199 } 200 201 func createRandomGroup(t *testing.T) string { 202 name := fmt.Sprintf("test-%s-%s", timestampStr, randomString(t, 16)) 203 204 groupDetails := services.Group{ 205 Name: name, 206 Description: "hello", 207 AutoJoin: utils.Pointer(false), 208 AdminPrivileges: utils.Pointer(false), 209 Realm: "internal", 210 RealmAttributes: "", 211 } 212 213 groupParams := services.GroupParams{ 214 GroupDetails: groupDetails, 215 IncludeUsers: false, 216 } 217 218 err := testGroupService.CreateGroup(groupParams) 219 assert.NoError(t, err) 220 221 return name 222 } 223 224 func randomString(t *testing.T, length int) string { 225 b := make([]byte, length) 226 _, err := rand.Read(b) 227 assert.NoError(t, err) 228 return fmt.Sprintf("%x", b)[:length] 229 }