mirror of
				https://github.com/minio/minio.git
				synced 2025-11-04 10:11:09 +01:00 
			
		
		
		
	This is to ensure that there are no projects that try to import `minio/minio/pkg` into their own repo. Any such common packages should go to `https://github.com/minio/pkg`
		
			
				
	
	
		
			277 lines
		
	
	
		
			8.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			277 lines
		
	
	
		
			8.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
// Copyright (c) 2015-2021 MinIO, Inc.
 | 
						|
//
 | 
						|
// This file is part of MinIO Object Storage stack
 | 
						|
//
 | 
						|
// This program is free software: you can redistribute it and/or modify
 | 
						|
// it under the terms of the GNU Affero General Public License as published by
 | 
						|
// the Free Software Foundation, either version 3 of the License, or
 | 
						|
// (at your option) any later version.
 | 
						|
//
 | 
						|
// This program is distributed in the hope that it will be useful
 | 
						|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
						|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
						|
// GNU Affero General Public License for more details.
 | 
						|
//
 | 
						|
// You should have received a copy of the GNU Affero General Public License
 | 
						|
// along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
						|
 | 
						|
package event
 | 
						|
 | 
						|
import (
 | 
						|
	"reflect"
 | 
						|
	"testing"
 | 
						|
)
 | 
						|
 | 
						|
func TestNewPattern(t *testing.T) {
 | 
						|
	testCases := []struct {
 | 
						|
		prefix         string
 | 
						|
		suffix         string
 | 
						|
		expectedResult string
 | 
						|
	}{
 | 
						|
		{"", "", ""},
 | 
						|
		{"*", "", "*"},
 | 
						|
		{"", "*", "*"},
 | 
						|
		{"images/", "", "images/*"},
 | 
						|
		{"images/*", "", "images/*"},
 | 
						|
		{"", "jpg", "*jpg"},
 | 
						|
		{"", "*jpg", "*jpg"},
 | 
						|
		{"images/", "jpg", "images/*jpg"},
 | 
						|
		{"images/*", "jpg", "images/*jpg"},
 | 
						|
		{"images/", "*jpg", "images/*jpg"},
 | 
						|
		{"images/*", "*jpg", "images/*jpg"},
 | 
						|
		{"201*/images/", "jpg", "201*/images/*jpg"},
 | 
						|
	}
 | 
						|
 | 
						|
	for i, testCase := range testCases {
 | 
						|
		result := NewPattern(testCase.prefix, testCase.suffix)
 | 
						|
 | 
						|
		if result != testCase.expectedResult {
 | 
						|
			t.Fatalf("test %v: result: expected: %v, got: %v", i+1, testCase.expectedResult, result)
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestRulesAdd(t *testing.T) {
 | 
						|
	rulesCase1 := make(Rules)
 | 
						|
 | 
						|
	rulesCase2 := make(Rules)
 | 
						|
	rulesCase2.Add(NewPattern("2010*", ""), TargetID{"1", "webhook"})
 | 
						|
 | 
						|
	rulesCase3 := make(Rules)
 | 
						|
	rulesCase3.Add(NewPattern("2010*", ""), TargetID{"1", "webhook"})
 | 
						|
 | 
						|
	rulesCase4 := make(Rules)
 | 
						|
	rulesCase4.Add(NewPattern("", "*.jpg"), TargetID{"1", "webhook"})
 | 
						|
 | 
						|
	rulesCase5 := make(Rules)
 | 
						|
 | 
						|
	rulesCase6 := make(Rules)
 | 
						|
	rulesCase6.Add(NewPattern("", "*.jpg"), TargetID{"1", "webhook"})
 | 
						|
 | 
						|
	rulesCase7 := make(Rules)
 | 
						|
	rulesCase7.Add(NewPattern("", "*.jpg"), TargetID{"1", "webhook"})
 | 
						|
 | 
						|
	rulesCase8 := make(Rules)
 | 
						|
	rulesCase8.Add(NewPattern("2010*", ""), TargetID{"1", "webhook"})
 | 
						|
 | 
						|
	testCases := []struct {
 | 
						|
		rules          Rules
 | 
						|
		pattern        string
 | 
						|
		targetID       TargetID
 | 
						|
		expectedResult int
 | 
						|
	}{
 | 
						|
		{rulesCase1, NewPattern("*", ""), TargetID{"1", "webhook"}, 1},
 | 
						|
		{rulesCase2, NewPattern("*", ""), TargetID{"2", "amqp"}, 2},
 | 
						|
		{rulesCase3, NewPattern("2010*", ""), TargetID{"1", "webhook"}, 1},
 | 
						|
		{rulesCase4, NewPattern("*", ""), TargetID{"1", "webhook"}, 2},
 | 
						|
		{rulesCase5, NewPattern("", "*.jpg"), TargetID{"1", "webhook"}, 1},
 | 
						|
		{rulesCase6, NewPattern("", "*"), TargetID{"2", "amqp"}, 2},
 | 
						|
		{rulesCase7, NewPattern("", "*.jpg"), TargetID{"1", "webhook"}, 1},
 | 
						|
		{rulesCase8, NewPattern("", "*.jpg"), TargetID{"1", "webhook"}, 2},
 | 
						|
	}
 | 
						|
 | 
						|
	for i, testCase := range testCases {
 | 
						|
		testCase.rules.Add(testCase.pattern, testCase.targetID)
 | 
						|
		result := len(testCase.rules)
 | 
						|
 | 
						|
		if result != testCase.expectedResult {
 | 
						|
			t.Fatalf("test %v: result: expected: %v, got: %v", i+1, testCase.expectedResult, result)
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestRulesMatch(t *testing.T) {
 | 
						|
	rulesCase1 := make(Rules)
 | 
						|
 | 
						|
	rulesCase2 := make(Rules)
 | 
						|
	rulesCase2.Add(NewPattern("*", "*"), TargetID{"1", "webhook"})
 | 
						|
 | 
						|
	rulesCase3 := make(Rules)
 | 
						|
	rulesCase3.Add(NewPattern("2010*", ""), TargetID{"1", "webhook"})
 | 
						|
	rulesCase3.Add(NewPattern("", "*.png"), TargetID{"2", "amqp"})
 | 
						|
 | 
						|
	rulesCase4 := make(Rules)
 | 
						|
	rulesCase4.Add(NewPattern("2010*", ""), TargetID{"1", "webhook"})
 | 
						|
 | 
						|
	testCases := []struct {
 | 
						|
		rules          Rules
 | 
						|
		objectName     string
 | 
						|
		expectedResult TargetIDSet
 | 
						|
	}{
 | 
						|
		{rulesCase1, "photos.jpg", NewTargetIDSet()},
 | 
						|
		{rulesCase2, "photos.jpg", NewTargetIDSet(TargetID{"1", "webhook"})},
 | 
						|
		{rulesCase3, "2010/photos.jpg", NewTargetIDSet(TargetID{"1", "webhook"})},
 | 
						|
		{rulesCase4, "2000/photos.jpg", NewTargetIDSet()},
 | 
						|
	}
 | 
						|
 | 
						|
	for i, testCase := range testCases {
 | 
						|
		result := testCase.rules.Match(testCase.objectName)
 | 
						|
 | 
						|
		if !reflect.DeepEqual(testCase.expectedResult, result) {
 | 
						|
			t.Fatalf("test %v: result: expected: %v, got: %v", i+1, testCase.expectedResult, result)
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestRulesClone(t *testing.T) {
 | 
						|
	rulesCase1 := make(Rules)
 | 
						|
 | 
						|
	rulesCase2 := make(Rules)
 | 
						|
	rulesCase2.Add(NewPattern("2010*", ""), TargetID{"1", "webhook"})
 | 
						|
 | 
						|
	rulesCase3 := make(Rules)
 | 
						|
	rulesCase3.Add(NewPattern("", "*.jpg"), TargetID{"1", "webhook"})
 | 
						|
 | 
						|
	testCases := []struct {
 | 
						|
		rules    Rules
 | 
						|
		prefix   string
 | 
						|
		targetID TargetID
 | 
						|
	}{
 | 
						|
		{rulesCase1, "2010*", TargetID{"1", "webhook"}},
 | 
						|
		{rulesCase2, "2000*", TargetID{"2", "amqp"}},
 | 
						|
		{rulesCase3, "2010*", TargetID{"1", "webhook"}},
 | 
						|
	}
 | 
						|
 | 
						|
	for i, testCase := range testCases {
 | 
						|
		result := testCase.rules.Clone()
 | 
						|
 | 
						|
		if !reflect.DeepEqual(result, testCase.rules) {
 | 
						|
			t.Fatalf("test %v: result: expected: %v, got: %v", i+1, testCase.rules, result)
 | 
						|
		}
 | 
						|
 | 
						|
		result.Add(NewPattern(testCase.prefix, ""), testCase.targetID)
 | 
						|
		if reflect.DeepEqual(result, testCase.rules) {
 | 
						|
			t.Fatalf("test %v: result: expected: not equal, got: equal", i+1)
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestRulesUnion(t *testing.T) {
 | 
						|
	rulesCase1 := make(Rules)
 | 
						|
	rules2Case1 := make(Rules)
 | 
						|
	expectedResultCase1 := make(Rules)
 | 
						|
 | 
						|
	rulesCase2 := make(Rules)
 | 
						|
	rules2Case2 := make(Rules)
 | 
						|
	rules2Case2.Add(NewPattern("*", ""), TargetID{"1", "webhook"})
 | 
						|
	expectedResultCase2 := make(Rules)
 | 
						|
	expectedResultCase2.Add(NewPattern("*", ""), TargetID{"1", "webhook"})
 | 
						|
 | 
						|
	rulesCase3 := make(Rules)
 | 
						|
	rulesCase3.Add(NewPattern("", "*"), TargetID{"1", "webhook"})
 | 
						|
	rules2Case3 := make(Rules)
 | 
						|
	expectedResultCase3 := make(Rules)
 | 
						|
	expectedResultCase3.Add(NewPattern("", "*"), TargetID{"1", "webhook"})
 | 
						|
 | 
						|
	rulesCase4 := make(Rules)
 | 
						|
	rulesCase4.Add(NewPattern("2010*", ""), TargetID{"1", "webhook"})
 | 
						|
	rules2Case4 := make(Rules)
 | 
						|
	rules2Case4.Add(NewPattern("2010*", ""), TargetID{"1", "webhook"})
 | 
						|
	expectedResultCase4 := make(Rules)
 | 
						|
	expectedResultCase4.Add(NewPattern("2010*", ""), TargetID{"1", "webhook"})
 | 
						|
 | 
						|
	rulesCase5 := make(Rules)
 | 
						|
	rulesCase5.Add(NewPattern("2010*", ""), TargetID{"1", "webhook"})
 | 
						|
	rulesCase5.Add(NewPattern("", "*.png"), TargetID{"2", "amqp"})
 | 
						|
	rules2Case5 := make(Rules)
 | 
						|
	rules2Case5.Add(NewPattern("*", ""), TargetID{"1", "webhook"})
 | 
						|
	expectedResultCase5 := make(Rules)
 | 
						|
	expectedResultCase5.Add(NewPattern("2010*", ""), TargetID{"1", "webhook"})
 | 
						|
	expectedResultCase5.Add(NewPattern("", "*.png"), TargetID{"2", "amqp"})
 | 
						|
	expectedResultCase5.Add(NewPattern("*", ""), TargetID{"1", "webhook"})
 | 
						|
 | 
						|
	testCases := []struct {
 | 
						|
		rules          Rules
 | 
						|
		rules2         Rules
 | 
						|
		expectedResult Rules
 | 
						|
	}{
 | 
						|
		{rulesCase1, rules2Case1, expectedResultCase1},
 | 
						|
		{rulesCase2, rules2Case2, expectedResultCase2},
 | 
						|
		{rulesCase3, rules2Case3, expectedResultCase3},
 | 
						|
		{rulesCase4, rules2Case4, expectedResultCase4},
 | 
						|
		{rulesCase5, rules2Case5, expectedResultCase5},
 | 
						|
	}
 | 
						|
 | 
						|
	for i, testCase := range testCases {
 | 
						|
		result := testCase.rules.Union(testCase.rules2)
 | 
						|
 | 
						|
		if !reflect.DeepEqual(testCase.expectedResult, result) {
 | 
						|
			t.Fatalf("test %v: result: expected: %v, got: %v", i+1, testCase.expectedResult, result)
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestRulesDifference(t *testing.T) {
 | 
						|
	rulesCase1 := make(Rules)
 | 
						|
	rules2Case1 := make(Rules)
 | 
						|
	expectedResultCase1 := make(Rules)
 | 
						|
 | 
						|
	rulesCase2 := make(Rules)
 | 
						|
	rules2Case2 := make(Rules)
 | 
						|
	rules2Case2.Add(NewPattern("*", "*"), TargetID{"1", "webhook"})
 | 
						|
	expectedResultCase2 := make(Rules)
 | 
						|
 | 
						|
	rulesCase3 := make(Rules)
 | 
						|
	rulesCase3.Add(NewPattern("*", "*"), TargetID{"1", "webhook"})
 | 
						|
	rules2Case3 := make(Rules)
 | 
						|
	expectedResultCase3 := make(Rules)
 | 
						|
	expectedResultCase3.Add(NewPattern("*", "*"), TargetID{"1", "webhook"})
 | 
						|
 | 
						|
	rulesCase4 := make(Rules)
 | 
						|
	rulesCase4.Add(NewPattern("*", "*"), TargetID{"1", "webhook"})
 | 
						|
	rules2Case4 := make(Rules)
 | 
						|
	rules2Case4.Add(NewPattern("2010*", ""), TargetID{"1", "webhook"})
 | 
						|
	rules2Case4.Add(NewPattern("", "*.png"), TargetID{"2", "amqp"})
 | 
						|
	expectedResultCase4 := make(Rules)
 | 
						|
	expectedResultCase4.Add(NewPattern("*", "*"), TargetID{"1", "webhook"})
 | 
						|
 | 
						|
	rulesCase5 := make(Rules)
 | 
						|
	rulesCase5.Add(NewPattern("*", ""), TargetID{"1", "webhook"})
 | 
						|
	rulesCase5.Add(NewPattern("", "*"), TargetID{"2", "amqp"})
 | 
						|
	rules2Case5 := make(Rules)
 | 
						|
	rules2Case5.Add(NewPattern("2010*", ""), TargetID{"1", "webhook"})
 | 
						|
	rules2Case5.Add(NewPattern("", "*"), TargetID{"2", "amqp"})
 | 
						|
	expectedResultCase5 := make(Rules)
 | 
						|
	expectedResultCase5.Add(NewPattern("*", ""), TargetID{"1", "webhook"})
 | 
						|
 | 
						|
	testCases := []struct {
 | 
						|
		rules          Rules
 | 
						|
		rules2         Rules
 | 
						|
		expectedResult Rules
 | 
						|
	}{
 | 
						|
		{rulesCase1, rules2Case1, expectedResultCase1},
 | 
						|
		{rulesCase2, rules2Case2, expectedResultCase2},
 | 
						|
		{rulesCase3, rules2Case3, expectedResultCase3},
 | 
						|
		{rulesCase4, rules2Case4, expectedResultCase4},
 | 
						|
		{rulesCase5, rules2Case5, expectedResultCase5},
 | 
						|
	}
 | 
						|
 | 
						|
	for i, testCase := range testCases {
 | 
						|
		result := testCase.rules.Difference(testCase.rules2)
 | 
						|
 | 
						|
		if !reflect.DeepEqual(testCase.expectedResult, result) {
 | 
						|
			t.Fatalf("test %v: result: expected: %v, got: %v", i+1, testCase.expectedResult, result)
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 |