summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/minio/minio-go/pkg/policy/bucket-policy-condition_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/minio/minio-go/pkg/policy/bucket-policy-condition_test.go')
-rw-r--r--vendor/github.com/minio/minio-go/pkg/policy/bucket-policy-condition_test.go289
1 files changed, 289 insertions, 0 deletions
diff --git a/vendor/github.com/minio/minio-go/pkg/policy/bucket-policy-condition_test.go b/vendor/github.com/minio/minio-go/pkg/policy/bucket-policy-condition_test.go
new file mode 100644
index 000000000..419868f38
--- /dev/null
+++ b/vendor/github.com/minio/minio-go/pkg/policy/bucket-policy-condition_test.go
@@ -0,0 +1,289 @@
+/*
+ * Minio Go Library for Amazon S3 Compatible Cloud Storage (C) 2015 Minio, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package policy
+
+import (
+ "encoding/json"
+ "testing"
+
+ "github.com/minio/minio-go/pkg/set"
+)
+
+// ConditionKeyMap.Add() is called and the result is validated.
+func TestConditionKeyMapAdd(t *testing.T) {
+ condKeyMap := make(ConditionKeyMap)
+ testCases := []struct {
+ key string
+ value set.StringSet
+ expectedResult string
+ }{
+ // Add new key and value.
+ {"s3:prefix", set.CreateStringSet("hello"), `{"s3:prefix":["hello"]}`},
+ // Add existing key and value.
+ {"s3:prefix", set.CreateStringSet("hello"), `{"s3:prefix":["hello"]}`},
+ // Add existing key and not value.
+ {"s3:prefix", set.CreateStringSet("world"), `{"s3:prefix":["hello","world"]}`},
+ }
+
+ for _, testCase := range testCases {
+ condKeyMap.Add(testCase.key, testCase.value)
+ if data, err := json.Marshal(condKeyMap); err != nil {
+ t.Fatalf("Unable to marshal ConditionKeyMap to JSON, %s", err)
+ } else {
+ if string(data) != testCase.expectedResult {
+ t.Fatalf("case: %+v: expected: %s, got: %s", testCase, testCase.expectedResult, string(data))
+ }
+ }
+ }
+}
+
+// ConditionKeyMap.Remove() is called and the result is validated.
+func TestConditionKeyMapRemove(t *testing.T) {
+ condKeyMap := make(ConditionKeyMap)
+ condKeyMap.Add("s3:prefix", set.CreateStringSet("hello", "world"))
+
+ testCases := []struct {
+ key string
+ value set.StringSet
+ expectedResult string
+ }{
+ // Remove non-existent key and value.
+ {"s3:myprefix", set.CreateStringSet("hello"), `{"s3:prefix":["hello","world"]}`},
+ // Remove existing key and value.
+ {"s3:prefix", set.CreateStringSet("hello"), `{"s3:prefix":["world"]}`},
+ // Remove existing key to make the key also removed.
+ {"s3:prefix", set.CreateStringSet("world"), `{}`},
+ }
+
+ for _, testCase := range testCases {
+ condKeyMap.Remove(testCase.key, testCase.value)
+ if data, err := json.Marshal(condKeyMap); err != nil {
+ t.Fatalf("Unable to marshal ConditionKeyMap to JSON, %s", err)
+ } else {
+ if string(data) != testCase.expectedResult {
+ t.Fatalf("case: %+v: expected: %s, got: %s", testCase, testCase.expectedResult, string(data))
+ }
+ }
+ }
+}
+
+// ConditionKeyMap.RemoveKey() is called and the result is validated.
+func TestConditionKeyMapRemoveKey(t *testing.T) {
+ condKeyMap := make(ConditionKeyMap)
+ condKeyMap.Add("s3:prefix", set.CreateStringSet("hello", "world"))
+
+ testCases := []struct {
+ key string
+ expectedResult string
+ }{
+ // Remove non-existent key.
+ {"s3:myprefix", `{"s3:prefix":["hello","world"]}`},
+ // Remove existing key.
+ {"s3:prefix", `{}`},
+ }
+
+ for _, testCase := range testCases {
+ condKeyMap.RemoveKey(testCase.key)
+ if data, err := json.Marshal(condKeyMap); err != nil {
+ t.Fatalf("Unable to marshal ConditionKeyMap to JSON, %s", err)
+ } else {
+ if string(data) != testCase.expectedResult {
+ t.Fatalf("case: %+v: expected: %s, got: %s", testCase, testCase.expectedResult, string(data))
+ }
+ }
+ }
+}
+
+// CopyConditionKeyMap() is called and the result is validated.
+func TestCopyConditionKeyMap(t *testing.T) {
+ emptyCondKeyMap := make(ConditionKeyMap)
+ nonEmptyCondKeyMap := make(ConditionKeyMap)
+ nonEmptyCondKeyMap.Add("s3:prefix", set.CreateStringSet("hello", "world"))
+
+ testCases := []struct {
+ condKeyMap ConditionKeyMap
+ expectedResult string
+ }{
+ // To test empty ConditionKeyMap.
+ {emptyCondKeyMap, `{}`},
+ // To test non-empty ConditionKeyMap.
+ {nonEmptyCondKeyMap, `{"s3:prefix":["hello","world"]}`},
+ }
+
+ for _, testCase := range testCases {
+ condKeyMap := CopyConditionKeyMap(testCase.condKeyMap)
+ if data, err := json.Marshal(condKeyMap); err != nil {
+ t.Fatalf("Unable to marshal ConditionKeyMap to JSON, %s", err)
+ } else {
+ if string(data) != testCase.expectedResult {
+ t.Fatalf("case: %+v: expected: %s, got: %s", testCase, testCase.expectedResult, string(data))
+ }
+ }
+ }
+}
+
+// mergeConditionKeyMap() is called and the result is validated.
+func TestMergeConditionKeyMap(t *testing.T) {
+ condKeyMap1 := make(ConditionKeyMap)
+ condKeyMap1.Add("s3:prefix", set.CreateStringSet("hello"))
+
+ condKeyMap2 := make(ConditionKeyMap)
+ condKeyMap2.Add("s3:prefix", set.CreateStringSet("world"))
+
+ condKeyMap3 := make(ConditionKeyMap)
+ condKeyMap3.Add("s3:myprefix", set.CreateStringSet("world"))
+
+ testCases := []struct {
+ condKeyMap1 ConditionKeyMap
+ condKeyMap2 ConditionKeyMap
+ expectedResult string
+ }{
+ // Both arguments are empty.
+ {make(ConditionKeyMap), make(ConditionKeyMap), `{}`},
+ // First argument is empty.
+ {make(ConditionKeyMap), condKeyMap1, `{"s3:prefix":["hello"]}`},
+ // Second argument is empty.
+ {condKeyMap1, make(ConditionKeyMap), `{"s3:prefix":["hello"]}`},
+ // Both arguments are same value.
+ {condKeyMap1, condKeyMap1, `{"s3:prefix":["hello"]}`},
+ // Value of second argument will be merged.
+ {condKeyMap1, condKeyMap2, `{"s3:prefix":["hello","world"]}`},
+ // second argument will be added.
+ {condKeyMap1, condKeyMap3, `{"s3:myprefix":["world"],"s3:prefix":["hello"]}`},
+ }
+
+ for _, testCase := range testCases {
+ condKeyMap := mergeConditionKeyMap(testCase.condKeyMap1, testCase.condKeyMap2)
+ if data, err := json.Marshal(condKeyMap); err != nil {
+ t.Fatalf("Unable to marshal ConditionKeyMap to JSON, %s", err)
+ } else {
+ if string(data) != testCase.expectedResult {
+ t.Fatalf("case: %+v: expected: %s, got: %s", testCase, testCase.expectedResult, string(data))
+ }
+ }
+ }
+}
+
+// ConditionMap.Add() is called and the result is validated.
+func TestConditionMapAdd(t *testing.T) {
+ condMap := make(ConditionMap)
+
+ condKeyMap1 := make(ConditionKeyMap)
+ condKeyMap1.Add("s3:prefix", set.CreateStringSet("hello"))
+
+ condKeyMap2 := make(ConditionKeyMap)
+ condKeyMap2.Add("s3:prefix", set.CreateStringSet("hello", "world"))
+
+ testCases := []struct {
+ key string
+ value ConditionKeyMap
+ expectedResult string
+ }{
+ // Add new key and value.
+ {"StringEquals", condKeyMap1, `{"StringEquals":{"s3:prefix":["hello"]}}`},
+ // Add existing key and value.
+ {"StringEquals", condKeyMap1, `{"StringEquals":{"s3:prefix":["hello"]}}`},
+ // Add existing key and not value.
+ {"StringEquals", condKeyMap2, `{"StringEquals":{"s3:prefix":["hello","world"]}}`},
+ }
+
+ for _, testCase := range testCases {
+ condMap.Add(testCase.key, testCase.value)
+ if data, err := json.Marshal(condMap); err != nil {
+ t.Fatalf("Unable to marshal ConditionKeyMap to JSON, %s", err)
+ } else {
+ if string(data) != testCase.expectedResult {
+ t.Fatalf("case: %+v: expected: %s, got: %s", testCase, testCase.expectedResult, string(data))
+ }
+ }
+ }
+}
+
+// ConditionMap.Remove() is called and the result is validated.
+func TestConditionMapRemove(t *testing.T) {
+ condMap := make(ConditionMap)
+ condKeyMap := make(ConditionKeyMap)
+ condKeyMap.Add("s3:prefix", set.CreateStringSet("hello", "world"))
+ condMap.Add("StringEquals", condKeyMap)
+
+ testCases := []struct {
+ key string
+ expectedResult string
+ }{
+ // Remove non-existent key.
+ {"StringNotEquals", `{"StringEquals":{"s3:prefix":["hello","world"]}}`},
+ // Remove existing key.
+ {"StringEquals", `{}`},
+ }
+
+ for _, testCase := range testCases {
+ condMap.Remove(testCase.key)
+ if data, err := json.Marshal(condMap); err != nil {
+ t.Fatalf("Unable to marshal ConditionKeyMap to JSON, %s", err)
+ } else {
+ if string(data) != testCase.expectedResult {
+ t.Fatalf("case: %+v: expected: %s, got: %s", testCase, testCase.expectedResult, string(data))
+ }
+ }
+ }
+}
+
+// mergeConditionMap() is called and the result is validated.
+func TestMergeConditionMap(t *testing.T) {
+ condKeyMap1 := make(ConditionKeyMap)
+ condKeyMap1.Add("s3:prefix", set.CreateStringSet("hello"))
+ condMap1 := make(ConditionMap)
+ condMap1.Add("StringEquals", condKeyMap1)
+
+ condKeyMap2 := make(ConditionKeyMap)
+ condKeyMap2.Add("s3:prefix", set.CreateStringSet("world"))
+ condMap2 := make(ConditionMap)
+ condMap2.Add("StringEquals", condKeyMap2)
+
+ condMap3 := make(ConditionMap)
+ condMap3.Add("StringNotEquals", condKeyMap2)
+
+ testCases := []struct {
+ condMap1 ConditionMap
+ condMap2 ConditionMap
+ expectedResult string
+ }{
+ // Both arguments are empty.
+ {make(ConditionMap), make(ConditionMap), `{}`},
+ // First argument is empty.
+ {make(ConditionMap), condMap1, `{"StringEquals":{"s3:prefix":["hello"]}}`},
+ // Second argument is empty.
+ {condMap1, make(ConditionMap), `{"StringEquals":{"s3:prefix":["hello"]}}`},
+ // Both arguments are same value.
+ {condMap1, condMap1, `{"StringEquals":{"s3:prefix":["hello"]}}`},
+ // Value of second argument will be merged.
+ {condMap1, condMap2, `{"StringEquals":{"s3:prefix":["hello","world"]}}`},
+ // second argument will be added.
+ {condMap1, condMap3, `{"StringEquals":{"s3:prefix":["hello"]},"StringNotEquals":{"s3:prefix":["world"]}}`},
+ }
+
+ for _, testCase := range testCases {
+ condMap := mergeConditionMap(testCase.condMap1, testCase.condMap2)
+ if data, err := json.Marshal(condMap); err != nil {
+ t.Fatalf("Unable to marshal ConditionKeyMap to JSON, %s", err)
+ } else {
+ if string(data) != testCase.expectedResult {
+ t.Fatalf("case: %+v: expected: %s, got: %s", testCase, testCase.expectedResult, string(data))
+ }
+ }
+ }
+}