storj.io/minio@v0.0.0-20230509071714-0cbc90f649b1/pkg/event/name_test.go (about) 1 /* 2 * MinIO Cloud Storage, (C) 2018 MinIO, Inc. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package event 18 19 import ( 20 "encoding/json" 21 "encoding/xml" 22 "reflect" 23 "testing" 24 ) 25 26 func TestNameExpand(t *testing.T) { 27 testCases := []struct { 28 name Name 29 expectedResult []Name 30 }{ 31 {BucketCreated, []Name{BucketCreated}}, 32 {BucketRemoved, []Name{BucketRemoved}}, 33 {ObjectAccessedAll, []Name{ObjectAccessedGet, ObjectAccessedHead, ObjectAccessedGetRetention, ObjectAccessedGetLegalHold}}, 34 {ObjectCreatedAll, []Name{ObjectCreatedCompleteMultipartUpload, ObjectCreatedCopy, ObjectCreatedPost, ObjectCreatedPut, 35 ObjectCreatedPutRetention, ObjectCreatedPutLegalHold, ObjectCreatedPutTagging, ObjectCreatedDeleteTagging}}, 36 {ObjectRemovedAll, []Name{ObjectRemovedDelete, ObjectRemovedDeleteMarkerCreated}}, 37 {ObjectAccessedHead, []Name{ObjectAccessedHead}}, 38 } 39 40 for i, testCase := range testCases { 41 result := testCase.name.Expand() 42 43 if !reflect.DeepEqual(result, testCase.expectedResult) { 44 t.Errorf("test %v: result: expected: %v, got: %v", i+1, testCase.expectedResult, result) 45 } 46 } 47 } 48 49 func TestNameString(t *testing.T) { 50 var blankName Name 51 52 testCases := []struct { 53 name Name 54 expectedResult string 55 }{ 56 {BucketCreated, "s3:BucketCreated:*"}, 57 {BucketRemoved, "s3:BucketRemoved:*"}, 58 {ObjectAccessedAll, "s3:ObjectAccessed:*"}, 59 {ObjectAccessedGet, "s3:ObjectAccessed:Get"}, 60 {ObjectAccessedHead, "s3:ObjectAccessed:Head"}, 61 {ObjectCreatedAll, "s3:ObjectCreated:*"}, 62 {ObjectCreatedCompleteMultipartUpload, "s3:ObjectCreated:CompleteMultipartUpload"}, 63 {ObjectCreatedCopy, "s3:ObjectCreated:Copy"}, 64 {ObjectCreatedPost, "s3:ObjectCreated:Post"}, 65 {ObjectCreatedPut, "s3:ObjectCreated:Put"}, 66 {ObjectRemovedAll, "s3:ObjectRemoved:*"}, 67 {ObjectRemovedDelete, "s3:ObjectRemoved:Delete"}, 68 {ObjectCreatedPutRetention, "s3:ObjectCreated:PutRetention"}, 69 {ObjectCreatedPutLegalHold, "s3:ObjectCreated:PutLegalHold"}, 70 {ObjectAccessedGetRetention, "s3:ObjectAccessed:GetRetention"}, 71 {ObjectAccessedGetLegalHold, "s3:ObjectAccessed:GetLegalHold"}, 72 73 {blankName, ""}, 74 } 75 76 for i, testCase := range testCases { 77 result := testCase.name.String() 78 79 if result != testCase.expectedResult { 80 t.Fatalf("test %v: result: expected: %v, got: %v", i+1, testCase.expectedResult, result) 81 } 82 } 83 } 84 85 func TestNameMarshalXML(t *testing.T) { 86 var blankName Name 87 88 testCases := []struct { 89 name Name 90 expectedData []byte 91 expectErr bool 92 }{ 93 {ObjectAccessedAll, []byte("<Name>s3:ObjectAccessed:*</Name>"), false}, 94 {ObjectRemovedDelete, []byte("<Name>s3:ObjectRemoved:Delete</Name>"), false}, 95 {blankName, []byte("<Name></Name>"), false}, 96 } 97 98 for i, testCase := range testCases { 99 data, err := xml.Marshal(testCase.name) 100 expectErr := (err != nil) 101 102 if expectErr != testCase.expectErr { 103 t.Fatalf("test %v: error: expected: %v, got: %v", i+1, testCase.expectErr, expectErr) 104 } 105 106 if !testCase.expectErr { 107 if !reflect.DeepEqual(data, testCase.expectedData) { 108 t.Fatalf("test %v: data: expected: %v, got: %v", i+1, string(testCase.expectedData), string(data)) 109 } 110 } 111 } 112 } 113 114 func TestNameUnmarshalXML(t *testing.T) { 115 var blankName Name 116 117 testCases := []struct { 118 data []byte 119 expectedName Name 120 expectErr bool 121 }{ 122 {[]byte("<Name>s3:ObjectAccessed:*</Name>"), ObjectAccessedAll, false}, 123 {[]byte("<Name>s3:ObjectRemoved:Delete</Name>"), ObjectRemovedDelete, false}, 124 {[]byte("<Name></Name>"), blankName, true}, 125 } 126 127 for i, testCase := range testCases { 128 var name Name 129 err := xml.Unmarshal(testCase.data, &name) 130 expectErr := (err != nil) 131 132 if expectErr != testCase.expectErr { 133 t.Fatalf("test %v: error: expected: %v, got: %v", i+1, testCase.expectErr, expectErr) 134 } 135 136 if !testCase.expectErr { 137 if !reflect.DeepEqual(name, testCase.expectedName) { 138 t.Fatalf("test %v: data: expected: %v, got: %v", i+1, testCase.expectedName, name) 139 } 140 } 141 } 142 } 143 144 func TestNameMarshalJSON(t *testing.T) { 145 var blankName Name 146 147 testCases := []struct { 148 name Name 149 expectedData []byte 150 expectErr bool 151 }{ 152 {ObjectAccessedAll, []byte(`"s3:ObjectAccessed:*"`), false}, 153 {ObjectRemovedDelete, []byte(`"s3:ObjectRemoved:Delete"`), false}, 154 {blankName, []byte(`""`), false}, 155 } 156 157 for i, testCase := range testCases { 158 data, err := json.Marshal(testCase.name) 159 expectErr := (err != nil) 160 161 if expectErr != testCase.expectErr { 162 t.Fatalf("test %v: error: expected: %v, got: %v", i+1, testCase.expectErr, expectErr) 163 } 164 165 if !testCase.expectErr { 166 if !reflect.DeepEqual(data, testCase.expectedData) { 167 t.Fatalf("test %v: data: expected: %v, got: %v", i+1, string(testCase.expectedData), string(data)) 168 } 169 } 170 } 171 } 172 173 func TestNameUnmarshalJSON(t *testing.T) { 174 var blankName Name 175 176 testCases := []struct { 177 data []byte 178 expectedName Name 179 expectErr bool 180 }{ 181 {[]byte(`"s3:ObjectAccessed:*"`), ObjectAccessedAll, false}, 182 {[]byte(`"s3:ObjectRemoved:Delete"`), ObjectRemovedDelete, false}, 183 {[]byte(`""`), blankName, true}, 184 } 185 186 for i, testCase := range testCases { 187 var name Name 188 err := json.Unmarshal(testCase.data, &name) 189 expectErr := (err != nil) 190 191 if expectErr != testCase.expectErr { 192 t.Fatalf("test %v: error: expected: %v, got: %v", i+1, testCase.expectErr, expectErr) 193 } 194 195 if !testCase.expectErr { 196 if !reflect.DeepEqual(name, testCase.expectedName) { 197 t.Fatalf("test %v: data: expected: %v, got: %v", i+1, testCase.expectedName, name) 198 } 199 } 200 } 201 } 202 203 func TestParseName(t *testing.T) { 204 var blankName Name 205 206 testCases := []struct { 207 s string 208 expectedName Name 209 expectErr bool 210 }{ 211 {"s3:ObjectAccessed:*", ObjectAccessedAll, false}, 212 {"s3:ObjectRemoved:Delete", ObjectRemovedDelete, false}, 213 {"", blankName, true}, 214 } 215 216 for i, testCase := range testCases { 217 name, err := ParseName(testCase.s) 218 expectErr := (err != nil) 219 220 if expectErr != testCase.expectErr { 221 t.Fatalf("test %v: error: expected: %v, got: %v", i+1, testCase.expectErr, expectErr) 222 } 223 224 if !testCase.expectErr { 225 if !reflect.DeepEqual(name, testCase.expectedName) { 226 t.Fatalf("test %v: data: expected: %v, got: %v", i+1, testCase.expectedName, name) 227 } 228 } 229 } 230 }