You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

220 lines
6.3 KiB

  1. package s3acl
  2. import (
  3. "github.com/aws/aws-sdk-go/service/s3"
  4. "github.com/seaweedfs/seaweedfs/weed/s3api/s3_constants"
  5. "github.com/seaweedfs/seaweedfs/weed/s3api/s3account"
  6. "github.com/seaweedfs/seaweedfs/weed/s3api/s3err"
  7. "testing"
  8. )
  9. func TestParseAclHeaders(t *testing.T) {
  10. accountManager := &s3account.AccountManager{
  11. IdNameMapping: map[string]string{
  12. s3account.AccountAdmin.Id: s3account.AccountAdmin.Name,
  13. s3account.AccountAnonymous.Id: s3account.AccountAnonymous.Name,
  14. },
  15. EmailIdMapping: map[string]string{
  16. s3account.AccountAdmin.EmailAddress: s3account.AccountAdmin.Id,
  17. s3account.AccountAnonymous.EmailAddress: s3account.AccountAnonymous.Id,
  18. },
  19. }
  20. //good value
  21. grants := make([]*s3.Grant, 0)
  22. validHeaderValue := `uri="http://acs.amazonaws.com/groups/global/AllUsers", id="anonymous", emailAddress="admin@example.com"`
  23. errCode := ParseCustomAclHeader(validHeaderValue, s3_constants.PermissionFullControl, &grants)
  24. if errCode != s3err.ErrNone {
  25. t.Fatal(errCode)
  26. }
  27. _, errCode = ValidateAndTransferGrants(accountManager, grants)
  28. if errCode != s3err.ErrNone {
  29. t.Fatal(errCode)
  30. }
  31. //bad case: acl header format error
  32. grants = make([]*s3.Grant, 0)
  33. formatErrCase := `uri, id="anonymous", emailAddress="admin@example.com"`
  34. errCode = ParseCustomAclHeader(formatErrCase, s3_constants.PermissionFullControl, &grants)
  35. if errCode != s3err.ErrInvalidRequest {
  36. t.Fatal(errCode)
  37. }
  38. //bad case: email not exists
  39. grants = make([]*s3.Grant, 0)
  40. badCaseOfEmail := `uri="http://acs.amazonaws.com/groups/global/AllUsers", id="anonymous", emailAddress="admin@example1.com"`
  41. errCode = ParseCustomAclHeader(badCaseOfEmail, s3_constants.PermissionFullControl, &grants)
  42. if errCode != s3err.ErrNone {
  43. t.Fatal(errCode)
  44. }
  45. _, errCode = ValidateAndTransferGrants(accountManager, grants)
  46. if errCode != s3err.ErrInvalidRequest {
  47. t.Fatal(errCode)
  48. }
  49. //bad case: account id not exists
  50. grants = make([]*s3.Grant, 0)
  51. badCaseOfAccountId := "uri=\"http://acs.amazonaws.com/groups/global/AllUsers\", id=\"xxxxxx\", emailAddress=\"admin@example.com\""
  52. errCode = ParseCustomAclHeader(badCaseOfAccountId, s3_constants.PermissionFullControl, &grants)
  53. if errCode != s3err.ErrNone {
  54. t.Fatal(errCode)
  55. }
  56. _, errCode = ValidateAndTransferGrants(accountManager, grants)
  57. if errCode != s3err.ErrInvalidRequest {
  58. t.Fatal(errCode)
  59. }
  60. //bad case: group url not valid
  61. grants = make([]*s3.Grant, 0)
  62. badCaseOfURL := "uri=\"http://acs.amazonaws.com/groups/global/AllUsers111xxxx\", id=\"anonymous\", emailAddress=\"admin@example.com\""
  63. errCode = ParseCustomAclHeader(badCaseOfURL, s3_constants.PermissionFullControl, &grants)
  64. if errCode != s3err.ErrNone {
  65. t.Fatal(errCode)
  66. }
  67. _, errCode = ValidateAndTransferGrants(accountManager, grants)
  68. if errCode != s3err.ErrInvalidRequest {
  69. t.Fatal(errCode)
  70. }
  71. }
  72. func TestGrantEquals(t *testing.T) {
  73. testCases := map[bool]bool{
  74. GrantEquals(nil, nil): true,
  75. GrantEquals(&s3.Grant{}, nil): false,
  76. GrantEquals(&s3.Grant{}, &s3.Grant{}): true,
  77. GrantEquals(&s3.Grant{
  78. Permission: &s3_constants.PermissionRead,
  79. }, &s3.Grant{}): false,
  80. GrantEquals(&s3.Grant{
  81. Permission: &s3_constants.PermissionRead,
  82. }, &s3.Grant{
  83. Permission: &s3_constants.PermissionRead,
  84. }): true,
  85. GrantEquals(&s3.Grant{
  86. Permission: &s3_constants.PermissionRead,
  87. Grantee: &s3.Grantee{},
  88. }, &s3.Grant{
  89. Permission: &s3_constants.PermissionRead,
  90. Grantee: &s3.Grantee{},
  91. }): true,
  92. GrantEquals(&s3.Grant{
  93. Permission: &s3_constants.PermissionRead,
  94. Grantee: &s3.Grantee{
  95. Type: &s3_constants.GrantTypeGroup,
  96. },
  97. }, &s3.Grant{
  98. Permission: &s3_constants.PermissionRead,
  99. Grantee: &s3.Grantee{},
  100. }): false,
  101. //type not present, compare other fields of grant is meaningless
  102. GrantEquals(&s3.Grant{
  103. Permission: &s3_constants.PermissionRead,
  104. Grantee: &s3.Grantee{
  105. ID: &s3account.AccountAdmin.Id,
  106. EmailAddress: &s3account.AccountAdmin.EmailAddress,
  107. },
  108. }, &s3.Grant{
  109. Permission: &s3_constants.PermissionRead,
  110. Grantee: &s3.Grantee{
  111. ID: &s3account.AccountAdmin.Id,
  112. },
  113. }): true,
  114. GrantEquals(&s3.Grant{
  115. Permission: &s3_constants.PermissionRead,
  116. Grantee: &s3.Grantee{
  117. Type: &s3_constants.GrantTypeGroup,
  118. },
  119. }, &s3.Grant{
  120. Permission: &s3_constants.PermissionRead,
  121. Grantee: &s3.Grantee{
  122. Type: &s3_constants.GrantTypeGroup,
  123. },
  124. }): true,
  125. GrantEquals(&s3.Grant{
  126. Permission: &s3_constants.PermissionRead,
  127. Grantee: &s3.Grantee{
  128. Type: &s3_constants.GrantTypeGroup,
  129. URI: &s3_constants.GranteeGroupAllUsers,
  130. },
  131. }, &s3.Grant{
  132. Permission: &s3_constants.PermissionRead,
  133. Grantee: &s3.Grantee{
  134. Type: &s3_constants.GrantTypeGroup,
  135. URI: &s3_constants.GranteeGroupAllUsers,
  136. },
  137. }): true,
  138. GrantEquals(&s3.Grant{
  139. Permission: &s3_constants.PermissionWrite,
  140. Grantee: &s3.Grantee{
  141. Type: &s3_constants.GrantTypeGroup,
  142. URI: &s3_constants.GranteeGroupAllUsers,
  143. },
  144. }, &s3.Grant{
  145. Permission: &s3_constants.PermissionRead,
  146. Grantee: &s3.Grantee{
  147. Type: &s3_constants.GrantTypeGroup,
  148. URI: &s3_constants.GranteeGroupAllUsers,
  149. },
  150. }): false,
  151. GrantEquals(&s3.Grant{
  152. Permission: &s3_constants.PermissionRead,
  153. Grantee: &s3.Grantee{
  154. Type: &s3_constants.GrantTypeGroup,
  155. ID: &s3account.AccountAdmin.Id,
  156. },
  157. }, &s3.Grant{
  158. Permission: &s3_constants.PermissionRead,
  159. Grantee: &s3.Grantee{
  160. Type: &s3_constants.GrantTypeGroup,
  161. ID: &s3account.AccountAdmin.Id,
  162. },
  163. }): true,
  164. GrantEquals(&s3.Grant{
  165. Permission: &s3_constants.PermissionRead,
  166. Grantee: &s3.Grantee{
  167. Type: &s3_constants.GrantTypeGroup,
  168. ID: &s3account.AccountAdmin.Id,
  169. URI: &s3_constants.GranteeGroupAllUsers,
  170. },
  171. }, &s3.Grant{
  172. Permission: &s3_constants.PermissionRead,
  173. Grantee: &s3.Grantee{
  174. Type: &s3_constants.GrantTypeGroup,
  175. ID: &s3account.AccountAdmin.Id,
  176. },
  177. }): false,
  178. GrantEquals(&s3.Grant{
  179. Permission: &s3_constants.PermissionRead,
  180. Grantee: &s3.Grantee{
  181. Type: &s3_constants.GrantTypeGroup,
  182. ID: &s3account.AccountAdmin.Id,
  183. URI: &s3_constants.GranteeGroupAllUsers,
  184. },
  185. }, &s3.Grant{
  186. Permission: &s3_constants.PermissionRead,
  187. Grantee: &s3.Grantee{
  188. Type: &s3_constants.GrantTypeGroup,
  189. URI: &s3_constants.GranteeGroupAllUsers,
  190. },
  191. }): true,
  192. }
  193. for tc, expect := range testCases {
  194. if tc != expect {
  195. t.Fatal("TestGrantEquals not expect!")
  196. }
  197. }
  198. }