mirror of
https://github.com/hanzos3/go.git
synced 2026-10-30 19:54:46 +00:00
1436 lines
29 KiB
Go
1436 lines
29 KiB
Go
/*
|
|
* MinIO Go Library for Amazon S3 Compatible Cloud Storage
|
|
* Copyright 2015-2020 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 notification
|
|
|
|
import (
|
|
"encoding/xml"
|
|
"testing"
|
|
)
|
|
|
|
func TestEqualEventTypeList(t *testing.T) {
|
|
type args struct {
|
|
a []EventType
|
|
b []EventType
|
|
}
|
|
tests := []struct {
|
|
name string
|
|
args args
|
|
want bool
|
|
}{
|
|
{
|
|
name: "same order",
|
|
args: args{
|
|
a: []EventType{ObjectCreatedAll, ObjectAccessedAll},
|
|
b: []EventType{ObjectCreatedAll, ObjectAccessedAll},
|
|
},
|
|
want: true,
|
|
},
|
|
{
|
|
name: "different order",
|
|
args: args{
|
|
a: []EventType{ObjectCreatedAll, ObjectAccessedAll},
|
|
b: []EventType{ObjectAccessedAll, ObjectCreatedAll},
|
|
},
|
|
want: true,
|
|
},
|
|
{
|
|
name: "not equal",
|
|
args: args{
|
|
a: []EventType{ObjectCreatedAll, ObjectAccessedAll},
|
|
b: []EventType{ObjectRemovedAll, ObjectAccessedAll},
|
|
},
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
if got := EqualEventTypeList(tt.args.a, tt.args.b); got != tt.want {
|
|
t.Errorf("EqualEventTypeList() = %v, want %v", got, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestEqualFilterRuleList(t *testing.T) {
|
|
type args struct {
|
|
a []FilterRule
|
|
b []FilterRule
|
|
}
|
|
tests := []struct {
|
|
name string
|
|
args args
|
|
want bool
|
|
}{
|
|
{
|
|
name: "same order",
|
|
args: args{
|
|
a: []FilterRule{{Name: "prefix", Value: "prefix1"}, {Name: "suffix", Value: "suffix1"}},
|
|
b: []FilterRule{{Name: "prefix", Value: "prefix1"}, {Name: "suffix", Value: "suffix1"}},
|
|
},
|
|
want: true,
|
|
},
|
|
{
|
|
name: "different order",
|
|
args: args{
|
|
a: []FilterRule{{Name: "prefix", Value: "prefix1"}, {Name: "suffix", Value: "suffix1"}},
|
|
b: []FilterRule{{Name: "suffix", Value: "suffix1"}, {Name: "prefix", Value: "prefix1"}},
|
|
},
|
|
want: true,
|
|
},
|
|
{
|
|
name: "not equal",
|
|
args: args{
|
|
a: []FilterRule{{Name: "prefix", Value: "prefix1"}, {Name: "suffix", Value: "suffix1"}},
|
|
b: []FilterRule{{Name: "prefix", Value: "prefix2"}, {Name: "suffix", Value: "suffix1"}},
|
|
},
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
if got := EqualFilterRuleList(tt.args.a, tt.args.b); got != tt.want {
|
|
t.Errorf("EqualFilterRuleList() = %v, want %v", got, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestConfig_Equal(t *testing.T) {
|
|
type fields struct {
|
|
ID string
|
|
Arn Arn
|
|
Events []EventType
|
|
Filter *Filter
|
|
}
|
|
type args struct {
|
|
events []EventType
|
|
prefix string
|
|
suffix string
|
|
}
|
|
tests := []struct {
|
|
name string
|
|
fields fields
|
|
args args
|
|
want bool
|
|
}{
|
|
{
|
|
name: "same order",
|
|
fields: fields{
|
|
Arn: NewArn("minio", "sqs", "", "1", "postgresql"),
|
|
Events: []EventType{ObjectCreatedAll, ObjectAccessedAll},
|
|
Filter: &Filter{
|
|
S3Key: S3Key{
|
|
FilterRules: []FilterRule{{Name: "prefix", Value: "prefix1"}, {Name: "suffix", Value: "suffix1"}},
|
|
},
|
|
},
|
|
},
|
|
args: args{
|
|
events: []EventType{ObjectCreatedAll, ObjectAccessedAll},
|
|
prefix: "prefix1",
|
|
suffix: "suffix1",
|
|
},
|
|
want: true,
|
|
},
|
|
{
|
|
name: "different order",
|
|
fields: fields{
|
|
Arn: NewArn("minio", "sqs", "", "1", "postgresql"),
|
|
Events: []EventType{ObjectAccessedAll, ObjectCreatedAll},
|
|
Filter: &Filter{
|
|
S3Key: S3Key{
|
|
FilterRules: []FilterRule{{Name: "suffix", Value: "suffix1"}, {Name: "prefix", Value: "prefix1"}},
|
|
},
|
|
},
|
|
},
|
|
args: args{
|
|
events: []EventType{ObjectCreatedAll, ObjectAccessedAll},
|
|
prefix: "prefix1",
|
|
suffix: "suffix1",
|
|
},
|
|
want: true,
|
|
},
|
|
{
|
|
name: "not equal",
|
|
fields: fields{
|
|
Arn: NewArn("minio", "sqs", "", "1", "postgresql"),
|
|
Events: []EventType{ObjectAccessedAll},
|
|
Filter: &Filter{
|
|
S3Key: S3Key{
|
|
FilterRules: []FilterRule{{Name: "suffix", Value: "suffix1"}, {Name: "prefix", Value: "prefix1"}},
|
|
},
|
|
},
|
|
},
|
|
args: args{
|
|
events: []EventType{ObjectCreatedAll, ObjectAccessedAll},
|
|
prefix: "prefix1",
|
|
suffix: "suffix1",
|
|
},
|
|
want: false,
|
|
},
|
|
{
|
|
name: "different arn",
|
|
fields: fields{
|
|
Events: []EventType{ObjectAccessedAll},
|
|
Filter: &Filter{
|
|
S3Key: S3Key{
|
|
FilterRules: []FilterRule{{Name: "suffix", Value: "suffix1"}, {Name: "prefix", Value: "prefix1"}},
|
|
},
|
|
},
|
|
},
|
|
args: args{
|
|
events: []EventType{ObjectCreatedAll, ObjectAccessedAll},
|
|
prefix: "prefix1",
|
|
suffix: "suffix1",
|
|
},
|
|
want: false,
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
nc := &Config{
|
|
ID: tt.fields.ID,
|
|
Arn: tt.fields.Arn,
|
|
Events: tt.fields.Events,
|
|
Filter: tt.fields.Filter,
|
|
}
|
|
if got := nc.Equal(tt.args.events, tt.args.prefix, tt.args.suffix); got != tt.want {
|
|
t.Errorf("Equal() = %v, want %v", got, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestConfiguration_RemoveQueueByArnEventsPrefixSuffix(t *testing.T) {
|
|
type fields struct {
|
|
XMLName xml.Name
|
|
LambdaConfigs []LambdaConfig
|
|
TopicConfigs []TopicConfig
|
|
QueueConfigs []QueueConfig
|
|
}
|
|
type args struct {
|
|
arn Arn
|
|
events []EventType
|
|
prefix string
|
|
suffix string
|
|
}
|
|
tests := []struct {
|
|
name string
|
|
fields fields
|
|
args args
|
|
wantErr bool
|
|
}{
|
|
{
|
|
name: "Queue Configuration Removed with events, prefix",
|
|
fields: fields{
|
|
XMLName: xml.Name{},
|
|
LambdaConfigs: nil,
|
|
TopicConfigs: nil,
|
|
QueueConfigs: []QueueConfig{
|
|
{
|
|
Config: Config{
|
|
ID: "",
|
|
Arn: Arn{
|
|
Partition: "minio",
|
|
Service: "sqs",
|
|
Region: "",
|
|
AccountID: "1",
|
|
Resource: "postgresql",
|
|
},
|
|
Events: []EventType{
|
|
ObjectAccessedAll,
|
|
},
|
|
Filter: &Filter{
|
|
S3Key: S3Key{
|
|
FilterRules: []FilterRule{
|
|
{
|
|
Name: "prefix",
|
|
Value: "x",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
Queue: "arn:minio:sqs::1:postgresql",
|
|
},
|
|
},
|
|
},
|
|
args: args{
|
|
arn: Arn{
|
|
Partition: "minio",
|
|
Service: "sqs",
|
|
Region: "",
|
|
AccountID: "1",
|
|
Resource: "postgresql",
|
|
},
|
|
events: []EventType{
|
|
ObjectAccessedAll,
|
|
},
|
|
prefix: "x",
|
|
suffix: "",
|
|
},
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "Queue Configuration Removed with events, prefix, suffix",
|
|
fields: fields{
|
|
XMLName: xml.Name{},
|
|
LambdaConfigs: nil,
|
|
TopicConfigs: nil,
|
|
QueueConfigs: []QueueConfig{
|
|
{
|
|
Config: Config{
|
|
ID: "",
|
|
Arn: Arn{
|
|
Partition: "minio",
|
|
Service: "sqs",
|
|
Region: "",
|
|
AccountID: "1",
|
|
Resource: "postgresql",
|
|
},
|
|
Events: []EventType{
|
|
ObjectAccessedAll,
|
|
},
|
|
Filter: &Filter{
|
|
S3Key: S3Key{
|
|
FilterRules: []FilterRule{
|
|
{
|
|
Name: "prefix",
|
|
Value: "x",
|
|
},
|
|
{
|
|
Name: "suffix",
|
|
Value: "y",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
Queue: "arn:minio:sqs::1:postgresql",
|
|
},
|
|
},
|
|
},
|
|
args: args{
|
|
arn: Arn{
|
|
Partition: "minio",
|
|
Service: "sqs",
|
|
Region: "",
|
|
AccountID: "1",
|
|
Resource: "postgresql",
|
|
},
|
|
events: []EventType{
|
|
ObjectAccessedAll,
|
|
},
|
|
prefix: "x",
|
|
suffix: "y",
|
|
},
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "Error Returned Queue Configuration Not Removed",
|
|
fields: fields{
|
|
XMLName: xml.Name{},
|
|
LambdaConfigs: nil,
|
|
TopicConfigs: nil,
|
|
QueueConfigs: []QueueConfig{
|
|
{
|
|
Config: Config{
|
|
ID: "",
|
|
Arn: Arn{
|
|
Partition: "minio",
|
|
Service: "sqs",
|
|
Region: "",
|
|
AccountID: "1",
|
|
Resource: "postgresql",
|
|
},
|
|
Events: []EventType{
|
|
ObjectAccessedAll,
|
|
},
|
|
Filter: &Filter{
|
|
S3Key: S3Key{
|
|
FilterRules: []FilterRule{
|
|
{
|
|
Name: "prefix",
|
|
Value: "x",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
Queue: "arn:minio:sqs::1:postgresql",
|
|
},
|
|
},
|
|
},
|
|
args: args{
|
|
arn: Arn{
|
|
Partition: "minio",
|
|
Service: "sqs",
|
|
Region: "",
|
|
AccountID: "1",
|
|
Resource: "postgresql",
|
|
},
|
|
events: []EventType{
|
|
ObjectAccessedAll,
|
|
},
|
|
prefix: "",
|
|
suffix: "",
|
|
},
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "Queue Configuration Removed with nil Filter",
|
|
fields: fields{
|
|
XMLName: xml.Name{},
|
|
LambdaConfigs: nil,
|
|
TopicConfigs: nil,
|
|
QueueConfigs: []QueueConfig{
|
|
{
|
|
Config: Config{
|
|
ID: "",
|
|
Arn: Arn{
|
|
Partition: "minio",
|
|
Service: "sqs",
|
|
Region: "",
|
|
AccountID: "1",
|
|
Resource: "postgresql",
|
|
},
|
|
Events: []EventType{
|
|
ObjectAccessedAll,
|
|
},
|
|
},
|
|
Queue: "arn:minio:sqs::1:postgresql",
|
|
},
|
|
},
|
|
},
|
|
args: args{
|
|
arn: Arn{
|
|
Partition: "minio",
|
|
Service: "sqs",
|
|
Region: "",
|
|
AccountID: "1",
|
|
Resource: "postgresql",
|
|
},
|
|
events: []EventType{
|
|
ObjectAccessedAll,
|
|
},
|
|
prefix: "",
|
|
suffix: "",
|
|
},
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "Queue Configuration not Removed with no prefix and Filter",
|
|
fields: fields{
|
|
XMLName: xml.Name{},
|
|
LambdaConfigs: nil,
|
|
TopicConfigs: nil,
|
|
QueueConfigs: []QueueConfig{
|
|
{
|
|
Config: Config{
|
|
ID: "",
|
|
Arn: Arn{
|
|
Partition: "minio",
|
|
Service: "sqs",
|
|
Region: "",
|
|
AccountID: "1",
|
|
Resource: "postgresql",
|
|
},
|
|
Events: []EventType{
|
|
ObjectAccessedAll,
|
|
},
|
|
Filter: &Filter{
|
|
S3Key: S3Key{
|
|
FilterRules: []FilterRule{
|
|
{
|
|
Name: "prefix",
|
|
Value: "x",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
Queue: "arn:minio:sqs::1:postgresql",
|
|
},
|
|
},
|
|
},
|
|
args: args{
|
|
arn: Arn{
|
|
Partition: "minio",
|
|
Service: "sqs",
|
|
Region: "",
|
|
AccountID: "1",
|
|
Resource: "postgresql",
|
|
},
|
|
events: []EventType{
|
|
ObjectAccessedAll,
|
|
},
|
|
prefix: "",
|
|
suffix: "",
|
|
},
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "Queue Configuration not Removed with prefix and nil Filter",
|
|
fields: fields{
|
|
XMLName: xml.Name{},
|
|
LambdaConfigs: nil,
|
|
TopicConfigs: nil,
|
|
QueueConfigs: []QueueConfig{
|
|
{
|
|
Config: Config{
|
|
ID: "",
|
|
Arn: Arn{
|
|
Partition: "minio",
|
|
Service: "sqs",
|
|
Region: "",
|
|
AccountID: "1",
|
|
Resource: "postgresql",
|
|
},
|
|
Events: []EventType{
|
|
ObjectAccessedAll,
|
|
},
|
|
},
|
|
Queue: "arn:minio:sqs::1:postgresql",
|
|
},
|
|
},
|
|
},
|
|
args: args{
|
|
arn: Arn{
|
|
Partition: "minio",
|
|
Service: "sqs",
|
|
Region: "",
|
|
AccountID: "1",
|
|
Resource: "postgresql",
|
|
},
|
|
events: []EventType{
|
|
ObjectAccessedAll,
|
|
},
|
|
prefix: "x",
|
|
suffix: "",
|
|
},
|
|
wantErr: true,
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
b := &Configuration{
|
|
XMLName: tt.fields.XMLName,
|
|
LambdaConfigs: tt.fields.LambdaConfigs,
|
|
TopicConfigs: tt.fields.TopicConfigs,
|
|
QueueConfigs: tt.fields.QueueConfigs,
|
|
}
|
|
if err := b.RemoveQueueByArnEventsPrefixSuffix(tt.args.arn, tt.args.events, tt.args.prefix, tt.args.suffix); (err != nil) != tt.wantErr {
|
|
t.Errorf("RemoveQueueByArnEventsPrefixSuffix() error = %v, wantErr %v", err, tt.wantErr)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestConfiguration_RemoveLambdaByArnEventsPrefixSuffix(t *testing.T) {
|
|
type fields struct {
|
|
XMLName xml.Name
|
|
LambdaConfigs []LambdaConfig
|
|
TopicConfigs []TopicConfig
|
|
QueueConfigs []QueueConfig
|
|
}
|
|
type args struct {
|
|
arn Arn
|
|
events []EventType
|
|
prefix string
|
|
suffix string
|
|
}
|
|
tests := []struct {
|
|
name string
|
|
fields fields
|
|
args args
|
|
wantErr bool
|
|
}{
|
|
{
|
|
name: "Lambda Configuration Removed with events, prefix",
|
|
fields: fields{
|
|
XMLName: xml.Name{},
|
|
QueueConfigs: nil,
|
|
TopicConfigs: nil,
|
|
LambdaConfigs: []LambdaConfig{
|
|
{
|
|
Config: Config{
|
|
ID: "",
|
|
Arn: Arn{
|
|
Partition: "minio",
|
|
Service: "lambda",
|
|
Region: "",
|
|
AccountID: "1",
|
|
Resource: "provider",
|
|
},
|
|
Events: []EventType{
|
|
ObjectAccessedAll,
|
|
},
|
|
Filter: &Filter{
|
|
S3Key: S3Key{
|
|
FilterRules: []FilterRule{
|
|
{
|
|
Name: "prefix",
|
|
Value: "x",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
Lambda: "arn:minio:lambda::1:provider",
|
|
},
|
|
},
|
|
},
|
|
args: args{
|
|
arn: Arn{
|
|
Partition: "minio",
|
|
Service: "lambda",
|
|
Region: "",
|
|
AccountID: "1",
|
|
Resource: "provider",
|
|
},
|
|
events: []EventType{
|
|
ObjectAccessedAll,
|
|
},
|
|
prefix: "x",
|
|
suffix: "",
|
|
},
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "Lambda Configuration Removed with events, prefix, suffix",
|
|
fields: fields{
|
|
XMLName: xml.Name{},
|
|
QueueConfigs: nil,
|
|
TopicConfigs: nil,
|
|
LambdaConfigs: []LambdaConfig{
|
|
{
|
|
Config: Config{
|
|
ID: "",
|
|
Arn: Arn{
|
|
Partition: "minio",
|
|
Service: "lambda",
|
|
Region: "",
|
|
AccountID: "1",
|
|
Resource: "provider",
|
|
},
|
|
Events: []EventType{
|
|
ObjectAccessedAll,
|
|
},
|
|
Filter: &Filter{
|
|
S3Key: S3Key{
|
|
FilterRules: []FilterRule{
|
|
{
|
|
Name: "prefix",
|
|
Value: "x",
|
|
},
|
|
{
|
|
Name: "suffix",
|
|
Value: "y",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
Lambda: "arn:minio:lambda::1:provider",
|
|
},
|
|
},
|
|
},
|
|
args: args{
|
|
arn: Arn{
|
|
Partition: "minio",
|
|
Service: "lambda",
|
|
Region: "",
|
|
AccountID: "1",
|
|
Resource: "provider",
|
|
},
|
|
events: []EventType{
|
|
ObjectAccessedAll,
|
|
},
|
|
prefix: "x",
|
|
suffix: "y",
|
|
},
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "Error Returned Lambda Configuration Not Removed",
|
|
fields: fields{
|
|
XMLName: xml.Name{},
|
|
QueueConfigs: nil,
|
|
TopicConfigs: nil,
|
|
LambdaConfigs: []LambdaConfig{
|
|
{
|
|
Config: Config{
|
|
ID: "",
|
|
Arn: Arn{
|
|
Partition: "minio",
|
|
Service: "lambda",
|
|
Region: "",
|
|
AccountID: "1",
|
|
Resource: "provider",
|
|
},
|
|
Events: []EventType{
|
|
ObjectAccessedAll,
|
|
},
|
|
Filter: &Filter{
|
|
S3Key: S3Key{
|
|
FilterRules: []FilterRule{
|
|
{
|
|
Name: "prefix",
|
|
Value: "x",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
Lambda: "arn:minio:lambda::1:provider",
|
|
},
|
|
},
|
|
},
|
|
args: args{
|
|
arn: Arn{
|
|
Partition: "minio",
|
|
Service: "lambda",
|
|
Region: "",
|
|
AccountID: "1",
|
|
Resource: "provider",
|
|
},
|
|
events: []EventType{
|
|
ObjectAccessedAll,
|
|
},
|
|
prefix: "",
|
|
suffix: "",
|
|
},
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "Error Returned Invalid ARN",
|
|
fields: fields{
|
|
XMLName: xml.Name{},
|
|
QueueConfigs: nil,
|
|
TopicConfigs: nil,
|
|
LambdaConfigs: []LambdaConfig{
|
|
{
|
|
Config: Config{
|
|
ID: "",
|
|
Arn: Arn{
|
|
Partition: "minio",
|
|
Service: "lambda",
|
|
Region: "",
|
|
AccountID: "1",
|
|
Resource: "provider",
|
|
},
|
|
Events: []EventType{
|
|
ObjectAccessedAll,
|
|
},
|
|
Filter: &Filter{
|
|
S3Key: S3Key{
|
|
FilterRules: []FilterRule{
|
|
{
|
|
Name: "prefix",
|
|
Value: "x",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
Lambda: "arn:minio:lambda::1:provider",
|
|
},
|
|
},
|
|
},
|
|
args: args{
|
|
arn: Arn{
|
|
Partition: "minio",
|
|
|
|
Service: "lambda",
|
|
Region: "",
|
|
AccountID: "2",
|
|
Resource: "provider",
|
|
},
|
|
events: []EventType{
|
|
ObjectAccessedAll,
|
|
},
|
|
prefix: "",
|
|
suffix: "",
|
|
},
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "Lambda Configuration Removed with nil Filter",
|
|
fields: fields{
|
|
XMLName: xml.Name{},
|
|
QueueConfigs: nil,
|
|
TopicConfigs: nil,
|
|
LambdaConfigs: []LambdaConfig{
|
|
{
|
|
Config: Config{
|
|
ID: "",
|
|
Arn: Arn{
|
|
Partition: "minio",
|
|
Service: "lambda",
|
|
Region: "",
|
|
AccountID: "1",
|
|
Resource: "provider",
|
|
},
|
|
Events: []EventType{
|
|
ObjectAccessedAll,
|
|
},
|
|
},
|
|
Lambda: "arn:minio:lambda::1:provider",
|
|
},
|
|
},
|
|
},
|
|
args: args{
|
|
arn: Arn{
|
|
Partition: "minio",
|
|
Service: "lambda",
|
|
Region: "",
|
|
AccountID: "1",
|
|
Resource: "provider",
|
|
},
|
|
events: []EventType{
|
|
ObjectAccessedAll,
|
|
},
|
|
prefix: "",
|
|
suffix: "",
|
|
},
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "Lambda Configuration Not Removed with no prefix and Filter",
|
|
fields: fields{
|
|
XMLName: xml.Name{},
|
|
QueueConfigs: nil,
|
|
TopicConfigs: nil,
|
|
LambdaConfigs: []LambdaConfig{
|
|
{
|
|
Config: Config{
|
|
ID: "",
|
|
Arn: Arn{
|
|
Partition: "minio",
|
|
Service: "lambda",
|
|
Region: "",
|
|
AccountID: "1",
|
|
Resource: "provider",
|
|
},
|
|
Events: []EventType{
|
|
ObjectAccessedAll,
|
|
},
|
|
Filter: &Filter{
|
|
S3Key: S3Key{
|
|
FilterRules: []FilterRule{
|
|
{
|
|
Name: "prefix",
|
|
Value: "x",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
Lambda: "arn:minio:lambda::1:provider",
|
|
},
|
|
},
|
|
},
|
|
args: args{
|
|
arn: Arn{
|
|
Partition: "minio",
|
|
Service: "lambda",
|
|
Region: "",
|
|
AccountID: "1",
|
|
Resource: "provider",
|
|
},
|
|
events: []EventType{
|
|
ObjectAccessedAll,
|
|
},
|
|
prefix: "",
|
|
suffix: "",
|
|
},
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "Lambda Configuration Not Removed with prefix and nil Filter",
|
|
fields: fields{
|
|
XMLName: xml.Name{},
|
|
QueueConfigs: nil,
|
|
TopicConfigs: nil,
|
|
LambdaConfigs: []LambdaConfig{
|
|
{
|
|
Config: Config{
|
|
ID: "",
|
|
Arn: Arn{
|
|
Partition: "minio",
|
|
Service: "lambda",
|
|
Region: "",
|
|
AccountID: "1",
|
|
Resource: "provider",
|
|
},
|
|
Events: []EventType{
|
|
ObjectAccessedAll,
|
|
},
|
|
},
|
|
Lambda: "arn:minio:lambda::1:provider",
|
|
},
|
|
},
|
|
},
|
|
args: args{
|
|
arn: Arn{
|
|
Partition: "minio",
|
|
Service: "lambda",
|
|
Region: "",
|
|
AccountID: "1",
|
|
Resource: "provider",
|
|
},
|
|
events: []EventType{
|
|
ObjectAccessedAll,
|
|
},
|
|
prefix: "x",
|
|
suffix: "",
|
|
},
|
|
wantErr: true,
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
b := &Configuration{
|
|
XMLName: tt.fields.XMLName,
|
|
LambdaConfigs: tt.fields.LambdaConfigs,
|
|
TopicConfigs: tt.fields.TopicConfigs,
|
|
QueueConfigs: tt.fields.QueueConfigs,
|
|
}
|
|
if err := b.RemoveLambdaByArnEventsPrefixSuffix(tt.args.arn, tt.args.events, tt.args.prefix, tt.args.suffix); (err != nil) != tt.wantErr {
|
|
t.Errorf("RemoveLambdaByArnEventsPrefixSuffix() error = %v, wantErr %v", err, tt.wantErr)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestConfiguration_RemoveTopicByArnEventsPrefixSuffix(t *testing.T) {
|
|
type fields struct {
|
|
XMLName xml.Name
|
|
LambdaConfigs []LambdaConfig
|
|
TopicConfigs []TopicConfig
|
|
QueueConfigs []QueueConfig
|
|
}
|
|
type args struct {
|
|
arn Arn
|
|
events []EventType
|
|
prefix string
|
|
suffix string
|
|
}
|
|
tests := []struct {
|
|
name string
|
|
fields fields
|
|
args args
|
|
wantErr bool
|
|
}{
|
|
{
|
|
name: "Topic Configuration Removed with events, prefix",
|
|
fields: fields{
|
|
XMLName: xml.Name{},
|
|
QueueConfigs: nil,
|
|
LambdaConfigs: nil,
|
|
TopicConfigs: []TopicConfig{
|
|
{
|
|
Config: Config{
|
|
ID: "",
|
|
Arn: Arn{
|
|
Partition: "minio",
|
|
Service: "sns",
|
|
Region: "",
|
|
AccountID: "1",
|
|
Resource: "kafka",
|
|
},
|
|
Events: []EventType{
|
|
ObjectAccessedAll,
|
|
},
|
|
Filter: &Filter{
|
|
S3Key: S3Key{
|
|
FilterRules: []FilterRule{
|
|
{
|
|
Name: "prefix",
|
|
Value: "x",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
Topic: "arn:minio:sns::1:kafka",
|
|
},
|
|
},
|
|
},
|
|
args: args{
|
|
arn: Arn{
|
|
Partition: "minio",
|
|
Service: "sns",
|
|
Region: "",
|
|
AccountID: "1",
|
|
Resource: "kafka",
|
|
},
|
|
events: []EventType{
|
|
ObjectAccessedAll,
|
|
},
|
|
prefix: "x",
|
|
suffix: "",
|
|
},
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "Topic Configuration Removed with events, prefix, suffix",
|
|
fields: fields{
|
|
XMLName: xml.Name{},
|
|
QueueConfigs: nil,
|
|
LambdaConfigs: nil,
|
|
TopicConfigs: []TopicConfig{
|
|
{
|
|
Config: Config{
|
|
ID: "",
|
|
Arn: Arn{
|
|
Partition: "minio",
|
|
Service: "sns",
|
|
Region: "",
|
|
AccountID: "1",
|
|
Resource: "kafka",
|
|
},
|
|
Events: []EventType{
|
|
ObjectAccessedAll,
|
|
},
|
|
Filter: &Filter{
|
|
S3Key: S3Key{
|
|
FilterRules: []FilterRule{
|
|
{
|
|
Name: "prefix",
|
|
Value: "x",
|
|
},
|
|
{
|
|
Name: "suffix",
|
|
Value: "y",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
Topic: "arn:minio:sns::1:kafka",
|
|
},
|
|
},
|
|
},
|
|
args: args{
|
|
arn: Arn{
|
|
Partition: "minio",
|
|
Service: "sns",
|
|
Region: "",
|
|
AccountID: "1",
|
|
Resource: "kafka",
|
|
},
|
|
events: []EventType{
|
|
ObjectAccessedAll,
|
|
},
|
|
prefix: "x",
|
|
suffix: "y",
|
|
},
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "Error Returned Topic Configuration Not Removed",
|
|
fields: fields{
|
|
XMLName: xml.Name{},
|
|
QueueConfigs: nil,
|
|
LambdaConfigs: nil,
|
|
TopicConfigs: []TopicConfig{
|
|
{
|
|
Config: Config{
|
|
ID: "",
|
|
Arn: Arn{
|
|
Partition: "minio",
|
|
Service: "sns",
|
|
Region: "",
|
|
AccountID: "1",
|
|
Resource: "kafka",
|
|
},
|
|
Events: []EventType{
|
|
ObjectAccessedAll,
|
|
},
|
|
Filter: &Filter{
|
|
S3Key: S3Key{
|
|
FilterRules: []FilterRule{
|
|
{
|
|
Name: "prefix",
|
|
Value: "x",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
Topic: "arn:minio:sns::1:kafka",
|
|
},
|
|
},
|
|
},
|
|
args: args{
|
|
arn: Arn{
|
|
Partition: "minio",
|
|
Service: "sns",
|
|
Region: "",
|
|
AccountID: "1",
|
|
Resource: "kafka",
|
|
},
|
|
events: []EventType{
|
|
ObjectAccessedAll,
|
|
},
|
|
prefix: "",
|
|
suffix: "",
|
|
},
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "Topic Configuration Removed with nil Filter",
|
|
fields: fields{
|
|
XMLName: xml.Name{},
|
|
QueueConfigs: nil,
|
|
LambdaConfigs: nil,
|
|
TopicConfigs: []TopicConfig{
|
|
{
|
|
Config: Config{
|
|
ID: "",
|
|
Arn: Arn{
|
|
Partition: "minio",
|
|
Service: "sns",
|
|
Region: "",
|
|
AccountID: "1",
|
|
Resource: "kafka",
|
|
},
|
|
Events: []EventType{
|
|
ObjectAccessedAll,
|
|
},
|
|
},
|
|
Topic: "arn:minio:sns::1:kafka",
|
|
},
|
|
},
|
|
},
|
|
args: args{
|
|
arn: Arn{
|
|
Partition: "minio",
|
|
Service: "sns",
|
|
Region: "",
|
|
AccountID: "1",
|
|
Resource: "kafka",
|
|
},
|
|
events: []EventType{
|
|
ObjectAccessedAll,
|
|
},
|
|
prefix: "",
|
|
suffix: "",
|
|
},
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "Topic Configuration Not Removed, prefix empty",
|
|
fields: fields{
|
|
XMLName: xml.Name{},
|
|
QueueConfigs: nil,
|
|
LambdaConfigs: nil,
|
|
TopicConfigs: []TopicConfig{
|
|
{
|
|
Config: Config{
|
|
ID: "",
|
|
Arn: Arn{
|
|
Partition: "minio",
|
|
Service: "sns",
|
|
Region: "",
|
|
AccountID: "1",
|
|
Resource: "kafka",
|
|
},
|
|
Events: []EventType{
|
|
ObjectAccessedAll,
|
|
},
|
|
Filter: &Filter{
|
|
S3Key: S3Key{
|
|
FilterRules: []FilterRule{
|
|
{
|
|
Name: "prefix",
|
|
Value: "x",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
Topic: "arn:minio:sns::1:kafka",
|
|
},
|
|
},
|
|
},
|
|
args: args{
|
|
arn: Arn{
|
|
Partition: "minio",
|
|
Service: "sns",
|
|
Region: "",
|
|
AccountID: "1",
|
|
Resource: "kafka",
|
|
},
|
|
events: []EventType{
|
|
ObjectAccessedAll,
|
|
},
|
|
prefix: "",
|
|
suffix: "",
|
|
},
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "Topic Configuration Not Removed, Config Events Empty",
|
|
fields: fields{
|
|
XMLName: xml.Name{},
|
|
QueueConfigs: nil,
|
|
LambdaConfigs: nil,
|
|
TopicConfigs: []TopicConfig{
|
|
{
|
|
Config: Config{
|
|
ID: "",
|
|
Arn: Arn{
|
|
Partition: "minio",
|
|
Service: "sns",
|
|
Region: "",
|
|
AccountID: "1",
|
|
Resource: "kafka",
|
|
},
|
|
Events: []EventType{
|
|
ObjectAccessedAll,
|
|
},
|
|
},
|
|
Topic: "arn:minio:sns::1:kafka",
|
|
},
|
|
},
|
|
},
|
|
args: args{
|
|
arn: Arn{
|
|
Partition: "minio",
|
|
Service: "sns",
|
|
Region: "",
|
|
AccountID: "1",
|
|
Resource: "kafka",
|
|
},
|
|
events: []EventType{
|
|
ObjectAccessedAll,
|
|
},
|
|
prefix: "x",
|
|
suffix: "",
|
|
},
|
|
wantErr: true,
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
b := &Configuration{
|
|
XMLName: tt.fields.XMLName,
|
|
LambdaConfigs: tt.fields.LambdaConfigs,
|
|
TopicConfigs: tt.fields.TopicConfigs,
|
|
QueueConfigs: tt.fields.QueueConfigs,
|
|
}
|
|
if err := b.RemoveTopicByArnEventsPrefixSuffix(tt.args.arn, tt.args.events, tt.args.prefix, tt.args.suffix); (err != nil) != tt.wantErr {
|
|
t.Errorf("RemoveTopicByArnEventsPrefixSuffix() error = %v, wantErr %v", err, tt.wantErr)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestConfigEqual(t *testing.T) {
|
|
type args struct {
|
|
config Config
|
|
events []EventType
|
|
prefix string
|
|
suffix string
|
|
}
|
|
tests := []struct {
|
|
name string
|
|
args args
|
|
expected bool
|
|
}{
|
|
{
|
|
name: "Config equal true",
|
|
args: args{
|
|
events: []EventType{ObjectAccessedAll},
|
|
prefix: "x",
|
|
suffix: "",
|
|
config: Config{
|
|
ID: "",
|
|
Events: []EventType{
|
|
ObjectAccessedAll,
|
|
},
|
|
Filter: &Filter{
|
|
S3Key: S3Key{
|
|
FilterRules: []FilterRule{
|
|
{
|
|
Name: "prefix",
|
|
Value: "x",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
expected: true,
|
|
},
|
|
{
|
|
name: "Config Events different",
|
|
args: args{
|
|
events: []EventType{ObjectCreatedAll},
|
|
prefix: "x",
|
|
suffix: "",
|
|
config: Config{
|
|
ID: "",
|
|
Events: []EventType{
|
|
ObjectAccessedAll,
|
|
},
|
|
Filter: &Filter{
|
|
S3Key: S3Key{
|
|
FilterRules: []FilterRule{
|
|
{
|
|
Name: "prefix",
|
|
Value: "x",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
expected: false,
|
|
},
|
|
{
|
|
name: "Config prefix, events and suffix equal",
|
|
args: args{
|
|
events: []EventType{ObjectCreatedAll},
|
|
prefix: "x",
|
|
suffix: "s",
|
|
config: Config{
|
|
ID: "",
|
|
Events: []EventType{
|
|
ObjectCreatedAll,
|
|
},
|
|
Filter: &Filter{
|
|
S3Key: S3Key{
|
|
FilterRules: []FilterRule{
|
|
{
|
|
Name: "prefix",
|
|
Value: "x",
|
|
},
|
|
{
|
|
Name: "suffix",
|
|
Value: "s",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
expected: true,
|
|
},
|
|
{
|
|
name: "Config.Filter nil, filter prefix and suffix empty",
|
|
args: args{
|
|
events: []EventType{ObjectCreatedAll},
|
|
prefix: "",
|
|
suffix: "",
|
|
config: Config{
|
|
ID: "",
|
|
Events: []EventType{
|
|
ObjectCreatedAll,
|
|
},
|
|
},
|
|
},
|
|
expected: true,
|
|
},
|
|
{
|
|
name: "Config.Filter nil and events, prefix and suffix empty",
|
|
args: args{
|
|
events: []EventType{},
|
|
prefix: "",
|
|
suffix: "",
|
|
config: Config{},
|
|
},
|
|
expected: true,
|
|
},
|
|
{
|
|
name: "Config prefix empty, Config.Filters not nil",
|
|
args: args{
|
|
events: []EventType{ObjectCreatedAll},
|
|
prefix: "",
|
|
suffix: "",
|
|
config: Config{
|
|
ID: "",
|
|
Events: []EventType{
|
|
ObjectCreatedAll,
|
|
},
|
|
Filter: &Filter{
|
|
S3Key: S3Key{
|
|
FilterRules: []FilterRule{
|
|
{
|
|
Name: "prefix",
|
|
Value: "x",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
expected: false,
|
|
},
|
|
{
|
|
name: "Config prefix not empty, Config.Filters nil",
|
|
args: args{
|
|
events: []EventType{ObjectCreatedAll},
|
|
prefix: "x",
|
|
suffix: "",
|
|
config: Config{
|
|
ID: "",
|
|
Events: []EventType{
|
|
ObjectCreatedAll,
|
|
},
|
|
},
|
|
},
|
|
expected: false,
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
if res := tt.args.config.Equal(tt.args.events, tt.args.prefix, tt.args.suffix); res != tt.expected {
|
|
t.Errorf("config.Equal() = %v, expected %v", res, tt.expected)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestNewArnFromString(t *testing.T) {
|
|
t.Run("valid ARN", func(t *testing.T) {
|
|
arn := NewArn("partition", "service", "region", "accountID", "resource")
|
|
arnString := arn.String()
|
|
arnFromString, err := NewArnFromString(arnString)
|
|
if err != nil {
|
|
t.Fatalf("did not exect an error, but got %v", err)
|
|
}
|
|
if arnFromString.String() != arnString {
|
|
t.Errorf("expected ARNs to be equal, but they are not: arnFromString = %s, arn = %s", arnFromString.String(), arnString)
|
|
}
|
|
})
|
|
|
|
t.Run("invalid ARN format", func(t *testing.T) {
|
|
_, err := NewArnFromString("arn:only:four:parts")
|
|
if err != ErrInvalidArnFormat {
|
|
t.Errorf("expected an error %v, but got %v", ErrInvalidArnFormat, err)
|
|
}
|
|
})
|
|
|
|
t.Run("invalid ARN prefix", func(t *testing.T) {
|
|
_, err := NewArnFromString("non-arn:partition:service:region:accountID:resource")
|
|
if err != ErrInvalidArnPrefix {
|
|
t.Errorf("expected an error %v, but got %v", ErrInvalidArnPrefix, err)
|
|
}
|
|
})
|
|
}
|