tags_test.go 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. package s3api
  2. import (
  3. "encoding/xml"
  4. "github.com/seaweedfs/seaweedfs/weed/s3api/s3err"
  5. "github.com/stretchr/testify/assert"
  6. "testing"
  7. )
  8. func TestXMLUnmarshall(t *testing.T) {
  9. input := `<?xml version="1.0" encoding="UTF-8"?>
  10. <Tagging xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
  11. <TagSet>
  12. <Tag>
  13. <Key>key1</Key>
  14. <Value>value1</Value>
  15. </Tag>
  16. </TagSet>
  17. </Tagging>
  18. `
  19. tags := &Tagging{}
  20. xml.Unmarshal([]byte(input), tags)
  21. assert.Equal(t, len(tags.TagSet.Tag), 1)
  22. assert.Equal(t, tags.TagSet.Tag[0].Key, "key1")
  23. assert.Equal(t, tags.TagSet.Tag[0].Value, "value1")
  24. }
  25. func TestXMLMarshall(t *testing.T) {
  26. tags := &Tagging{
  27. Xmlns: "http://s3.amazonaws.com/doc/2006-03-01/",
  28. TagSet: TagSet{
  29. []Tag{
  30. {
  31. Key: "key1",
  32. Value: "value1",
  33. },
  34. },
  35. },
  36. }
  37. actual := string(s3err.EncodeXMLResponse(tags))
  38. expected := `<?xml version="1.0" encoding="UTF-8"?>
  39. <Tagging xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><TagSet><Tag><Key>key1</Key><Value>value1</Value></Tag></TagSet></Tagging>`
  40. assert.Equal(t, expected, actual)
  41. }
  42. type TestTags map[string]string
  43. var ValidateTagsTestCases = []struct {
  44. testCaseID int
  45. tags TestTags
  46. wantErrString string
  47. }{
  48. {
  49. 1,
  50. TestTags{"key-1": "value-1"},
  51. "",
  52. },
  53. {
  54. 2,
  55. TestTags{"key-1": "valueOver256R59YI9bahPwAVqvLeKCvM2S1RjzgP8fNDKluCbol0XTTFY6VcMwTBmdnqjsddilXztSGfEoZS1wDAIMBA0rW0CLNSoE2zNg4TT0vDbLHEtZBoZjdZ5E0JNIAqwb9ptIk2VizYmhWjb1G4rJ0CqDGWxcy3usXaQg6Dk6kU8N4hlqwYWeGw7uqdghcQ3ScfF02nHW9QFMN7msLR5fe90mbFBBp3Tjq34i0LEr4By2vxoRa2RqdBhEJhi23Tm"},
  56. "validate tags: tag value longer than 256",
  57. },
  58. {
  59. 3,
  60. TestTags{"keyLenOver128a5aUUGcPexMELsz3RyROzIzfO6BKABeApH2nbbagpOxZh2MgBWYDZtFxQaCuQeP1xR7dUJLwfFfDHguVIyxvTStGDk51BemKETIwZ0zkhR7lhfHBp2y0nFnV": "value-1"},
  61. "validate tags: tag key longer than 128",
  62. },
  63. {
  64. 4,
  65. TestTags{"key-1*": "value-1"},
  66. "validate tags key key-1* error, incorrect key",
  67. },
  68. {
  69. 5,
  70. TestTags{"key-1": "value-1?"},
  71. "validate tags value value-1? error, incorrect value",
  72. },
  73. {
  74. 6,
  75. TestTags{
  76. "key-1": "value",
  77. "key-2": "value",
  78. "key-3": "value",
  79. "key-4": "value",
  80. "key-5": "value",
  81. "key-6": "value",
  82. "key-7": "value",
  83. "key-8": "value",
  84. "key-9": "value",
  85. "key-10": "value",
  86. "key-11": "value",
  87. },
  88. "validate tags: 11 tags more than 10",
  89. },
  90. }
  91. func TestValidateTags(t *testing.T) {
  92. for _, testCase := range ValidateTagsTestCases {
  93. err := ValidateTags(testCase.tags)
  94. if testCase.wantErrString == "" {
  95. assert.NoErrorf(t, err, "no error")
  96. } else {
  97. assert.EqualError(t, err, testCase.wantErrString)
  98. }
  99. }
  100. }