storj.io/minio@v0.0.0-20230509071714-0cbc90f649b1/pkg/bucket/policy/condition/boolfunc_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 condition 18 19 import ( 20 "reflect" 21 "testing" 22 ) 23 24 func TestBooleanFuncEvaluate(t *testing.T) { 25 case1Function, err := newBooleanFunc(AWSSecureTransport, NewValueSet(NewBoolValue(true))) 26 if err != nil { 27 t.Fatalf("unexpected error. %v\n", err) 28 } 29 30 case2Function, err := newBooleanFunc(AWSSecureTransport, NewValueSet(NewBoolValue(false))) 31 if err != nil { 32 t.Fatalf("unexpected error. %v\n", err) 33 } 34 35 testCases := []struct { 36 function Function 37 values map[string][]string 38 expectedResult bool 39 }{ 40 {case1Function, map[string][]string{"SecureTransport": {"true"}}, true}, 41 {case2Function, map[string][]string{"SecureTransport": {"false"}}, true}, 42 } 43 44 for i, testCase := range testCases { 45 result := testCase.function.evaluate(testCase.values) 46 47 if result != testCase.expectedResult { 48 t.Errorf("case %v: expected: %v, got: %v\n", i+1, testCase.expectedResult, result) 49 } 50 } 51 } 52 53 func TestBooleanFuncKey(t *testing.T) { 54 case1Function, err := newBooleanFunc(AWSSecureTransport, NewValueSet(NewBoolValue(true))) 55 if err != nil { 56 t.Fatalf("unexpected error. %v\n", err) 57 } 58 59 testCases := []struct { 60 function Function 61 expectedResult Key 62 }{ 63 {case1Function, AWSSecureTransport}, 64 } 65 66 for i, testCase := range testCases { 67 result := testCase.function.key() 68 69 if result != testCase.expectedResult { 70 t.Fatalf("case %v: expected: %v, got: %v\n", i+1, testCase.expectedResult, result) 71 } 72 } 73 } 74 75 func TestBooleanFuncToMap(t *testing.T) { 76 case1Function, err := newBooleanFunc(AWSSecureTransport, NewValueSet(NewBoolValue(true))) 77 if err != nil { 78 t.Fatalf("unexpected error. %v\n", err) 79 } 80 81 case1Result := map[Key]ValueSet{ 82 AWSSecureTransport: NewValueSet(NewStringValue("true")), 83 } 84 85 case2Function, err := newBooleanFunc(AWSSecureTransport, NewValueSet(NewBoolValue(false))) 86 if err != nil { 87 t.Fatalf("unexpected error. %v\n", err) 88 } 89 90 case2Result := map[Key]ValueSet{ 91 AWSSecureTransport: NewValueSet(NewStringValue("false")), 92 } 93 94 testCases := []struct { 95 f Function 96 expectedResult map[Key]ValueSet 97 }{ 98 {case1Function, case1Result}, 99 {case2Function, case2Result}, 100 } 101 102 for i, testCase := range testCases { 103 result := testCase.f.toMap() 104 105 if !reflect.DeepEqual(result, testCase.expectedResult) { 106 t.Fatalf("case %v: result: expected: %v, got: %v\n", i+1, testCase.expectedResult, result) 107 } 108 } 109 } 110 111 func TestNewBooleanFunc(t *testing.T) { 112 case1Function, err := newBooleanFunc(AWSSecureTransport, NewValueSet(NewBoolValue(true))) 113 if err != nil { 114 t.Fatalf("unexpected error. %v\n", err) 115 } 116 117 case2Function, err := newBooleanFunc(AWSSecureTransport, NewValueSet(NewBoolValue(false))) 118 if err != nil { 119 t.Fatalf("unexpected error. %v\n", err) 120 } 121 122 testCases := []struct { 123 key Key 124 values ValueSet 125 expectedResult Function 126 expectErr bool 127 }{ 128 {AWSSecureTransport, NewValueSet(NewBoolValue(true)), case1Function, false}, 129 {AWSSecureTransport, NewValueSet(NewStringValue("false")), case2Function, false}, 130 // Multiple values error. 131 {AWSSecureTransport, NewValueSet(NewStringValue("true"), NewStringValue("false")), nil, true}, 132 // Invalid boolean string error. 133 {AWSSecureTransport, NewValueSet(NewStringValue("foo")), nil, true}, 134 // Invalid value error. 135 {AWSSecureTransport, NewValueSet(NewIntValue(7)), nil, true}, 136 } 137 138 for i, testCase := range testCases { 139 result, err := newBooleanFunc(testCase.key, testCase.values) 140 expectErr := (err != nil) 141 142 if expectErr != testCase.expectErr { 143 t.Fatalf("case %v: error: expected: %v, got: %v\n", i+1, testCase.expectErr, expectErr) 144 } 145 146 if !testCase.expectErr { 147 if !reflect.DeepEqual(result, testCase.expectedResult) { 148 t.Fatalf("case %v: result: expected: %v, got: %v\n", i+1, testCase.expectedResult, result) 149 } 150 } 151 } 152 }