storj.io/minio@v0.0.0-20230509071714-0cbc90f649b1/pkg/event/arn_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/xml" 21 "reflect" 22 "testing" 23 ) 24 25 func TestARNString(t *testing.T) { 26 testCases := []struct { 27 arn ARN 28 expectedResult string 29 }{ 30 {ARN{}, ""}, 31 {ARN{TargetID{"1", "webhook"}, ""}, "arn:minio:sqs::1:webhook"}, 32 {ARN{TargetID{"1", "webhook"}, "us-east-1"}, "arn:minio:sqs:us-east-1:1:webhook"}, 33 } 34 35 for i, testCase := range testCases { 36 result := testCase.arn.String() 37 38 if result != testCase.expectedResult { 39 t.Fatalf("test %v: result: expected: %v, got: %v", i+1, testCase.expectedResult, result) 40 } 41 } 42 } 43 44 func TestARNMarshalXML(t *testing.T) { 45 testCases := []struct { 46 arn ARN 47 expectedData []byte 48 expectErr bool 49 }{ 50 {ARN{}, []byte("<ARN></ARN>"), false}, 51 {ARN{TargetID{"1", "webhook"}, ""}, []byte("<ARN>arn:minio:sqs::1:webhook</ARN>"), false}, 52 {ARN{TargetID{"1", "webhook"}, "us-east-1"}, []byte("<ARN>arn:minio:sqs:us-east-1:1:webhook</ARN>"), false}, 53 } 54 55 for i, testCase := range testCases { 56 data, err := xml.Marshal(testCase.arn) 57 expectErr := (err != nil) 58 59 if expectErr != testCase.expectErr { 60 t.Fatalf("test %v: error: expected: %v, got: %v", i+1, testCase.expectErr, expectErr) 61 } 62 63 if !testCase.expectErr { 64 if !reflect.DeepEqual(data, testCase.expectedData) { 65 t.Fatalf("test %v: data: expected: %v, got: %v", i+1, string(testCase.expectedData), string(data)) 66 } 67 } 68 } 69 } 70 71 func TestARNUnmarshalXML(t *testing.T) { 72 testCases := []struct { 73 data []byte 74 expectedARN *ARN 75 expectErr bool 76 }{ 77 {[]byte("<ARN></ARN>"), nil, true}, 78 {[]byte("<ARN>arn:minio:sqs:::</ARN>"), nil, true}, 79 {[]byte("<ARN>arn:minio:sqs::1:webhook</ARN>"), &ARN{TargetID{"1", "webhook"}, ""}, false}, 80 {[]byte("<ARN>arn:minio:sqs:us-east-1:1:webhook</ARN>"), &ARN{TargetID{"1", "webhook"}, "us-east-1"}, false}, 81 } 82 83 for i, testCase := range testCases { 84 arn := &ARN{} 85 err := xml.Unmarshal(testCase.data, &arn) 86 expectErr := (err != nil) 87 88 if expectErr != testCase.expectErr { 89 t.Fatalf("test %v: error: expected: %v, got: %v", i+1, testCase.expectErr, expectErr) 90 } 91 92 if !testCase.expectErr { 93 if *arn != *testCase.expectedARN { 94 t.Fatalf("test %v: data: expected: %v, got: %v", i+1, testCase.expectedARN, arn) 95 } 96 } 97 } 98 } 99 100 func TestParseARN(t *testing.T) { 101 testCases := []struct { 102 s string 103 expectedARN *ARN 104 expectErr bool 105 }{ 106 {"", nil, true}, 107 {"arn:minio:sqs:::", nil, true}, 108 {"arn:minio:sqs::1:webhook:remote", nil, true}, 109 {"arn:aws:sqs::1:webhook", nil, true}, 110 {"arn:minio:sns::1:webhook", nil, true}, 111 {"arn:minio:sqs::1:webhook", &ARN{TargetID{"1", "webhook"}, ""}, false}, 112 {"arn:minio:sqs:us-east-1:1:webhook", &ARN{TargetID{"1", "webhook"}, "us-east-1"}, false}, 113 } 114 115 for i, testCase := range testCases { 116 arn, err := parseARN(testCase.s) 117 expectErr := (err != nil) 118 119 if expectErr != testCase.expectErr { 120 t.Fatalf("test %v: error: expected: %v, got: %v", i+1, testCase.expectErr, expectErr) 121 } 122 123 if !testCase.expectErr { 124 if *arn != *testCase.expectedARN { 125 t.Fatalf("test %v: data: expected: %v, got: %v", i+1, testCase.expectedARN, arn) 126 } 127 } 128 } 129 }