fix: remove any duplicate statements in policy input (#9385)

Add support for removing duplicate statements automatically
This commit is contained in:
Harshavardhana
2020-04-17 21:26:42 -07:00
committed by GitHub
parent c4464e36c8
commit 75107d7698
4 changed files with 80 additions and 48 deletions

View File

@@ -393,8 +393,8 @@ func TestPolicyIsValid(t *testing.T) {
{case6Policy, true},
// Duplicate statement success different effects.
{case7Policy, false},
// Duplicate statement error.
{case8Policy, true},
// Duplicate statement success, duplicate statement dropped.
{case8Policy, false},
}
for i, testCase := range testCases {
@@ -991,6 +991,20 @@ func TestPolicyUnmarshalJSON(t *testing.T) {
]
}`)
case10Policy := Policy{
ID: "MyPolicyForMyBucket1",
Version: DefaultVersion,
Statements: []Statement{
NewStatement(
Allow,
NewPrincipal("*"),
NewActionSet(PutObjectAction),
NewResourceSet(NewResource("mybucket", "myobject*")),
condition.NewFunctions(),
),
},
}
case11Data := []byte(`{
"ID": "MyPolicyForMyBucket1",
"Version": "2012-10-17",
@@ -1046,8 +1060,8 @@ func TestPolicyUnmarshalJSON(t *testing.T) {
{case8Data, case8Policy, false},
// Invalid version error.
{case9Data, Policy{}, true},
// Duplicate statement error.
{case10Data, Policy{}, true},
// Duplicate statement success, duplicate statement removed.
{case10Data, case10Policy, false},
// Duplicate statement success (Effect differs).
{case11Data, case11Policy, false},
}
@@ -1058,12 +1072,12 @@ func TestPolicyUnmarshalJSON(t *testing.T) {
expectErr := (err != nil)
if expectErr != testCase.expectErr {
t.Fatalf("case %v: error: expected: %v, got: %v", i+1, testCase.expectErr, expectErr)
t.Errorf("case %v: error: expected: %v, got: %v", i+1, testCase.expectErr, expectErr)
}
if !testCase.expectErr {
if !reflect.DeepEqual(result, testCase.expectedResult) {
t.Fatalf("case %v: result: expected: %v, got: %v", i+1, testCase.expectedResult, result)
t.Errorf("case %v: result: expected: %v, got: %v", i+1, testCase.expectedResult, result)
}
}
}