mirror of
				https://github.com/traefik/traefik.git
				synced 2025-10-30 07:51:32 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			382 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			382 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package redactor
 | |
| 
 | |
| import (
 | |
| 	"reflect"
 | |
| 	"testing"
 | |
| 
 | |
| 	"github.com/stretchr/testify/assert"
 | |
| 	"github.com/stretchr/testify/require"
 | |
| )
 | |
| 
 | |
| type Courgette struct {
 | |
| 	Ji string
 | |
| 	Ho string
 | |
| }
 | |
| 
 | |
| type Tomate struct {
 | |
| 	Ji string
 | |
| 	Ho string
 | |
| }
 | |
| 
 | |
| type Carotte struct {
 | |
| 	Name         string
 | |
| 	EName        string `export:"true"`
 | |
| 	EFName       string `export:"false"`
 | |
| 	Value        int
 | |
| 	EValue       int `export:"true"`
 | |
| 	EFValue      int `export:"false"`
 | |
| 	List         []string
 | |
| 	EList        []string `export:"true"`
 | |
| 	EFList       []string `export:"false"`
 | |
| 	Courgette    Courgette
 | |
| 	ECourgette   Courgette `export:"true"`
 | |
| 	EFCourgette  Courgette `export:"false"`
 | |
| 	Pourgette    *Courgette
 | |
| 	EPourgette   *Courgette `export:"true"`
 | |
| 	EFPourgette  *Courgette `export:"false"`
 | |
| 	Aubergine    map[string]string
 | |
| 	EAubergine   map[string]string `export:"true"`
 | |
| 	EFAubergine  map[string]string `export:"false"`
 | |
| 	SAubergine   map[string]Tomate
 | |
| 	ESAubergine  map[string]Tomate `export:"true"`
 | |
| 	EFSAubergine map[string]Tomate `export:"false"`
 | |
| 	PSAubergine  map[string]*Tomate
 | |
| 	EPAubergine  map[string]*Tomate `export:"true"`
 | |
| 	EFPAubergine map[string]*Tomate `export:"false"`
 | |
| }
 | |
| 
 | |
| func Test_doOnStruct(t *testing.T) {
 | |
| 	testCase := []struct {
 | |
| 		name            string
 | |
| 		base            *Carotte
 | |
| 		expected        *Carotte
 | |
| 		redactByDefault bool
 | |
| 	}{
 | |
| 		{
 | |
| 			name: "primitive",
 | |
| 			base: &Carotte{
 | |
| 				Name:   "koko",
 | |
| 				EName:  "kiki",
 | |
| 				Value:  666,
 | |
| 				EValue: 666,
 | |
| 				List:   []string{"test"},
 | |
| 				EList:  []string{"test"},
 | |
| 			},
 | |
| 			expected: &Carotte{
 | |
| 				Name:   "xxxx",
 | |
| 				EName:  "kiki",
 | |
| 				EValue: 666,
 | |
| 				List:   []string{"xxxx"},
 | |
| 				EList:  []string{"test"},
 | |
| 			},
 | |
| 			redactByDefault: true,
 | |
| 		},
 | |
| 		{
 | |
| 			name: "primitive2",
 | |
| 			base: &Carotte{
 | |
| 				Name:    "koko",
 | |
| 				EFName:  "keke",
 | |
| 				Value:   666,
 | |
| 				EFValue: 777,
 | |
| 				List:    []string{"test"},
 | |
| 				EFList:  []string{"test"},
 | |
| 			},
 | |
| 			expected: &Carotte{
 | |
| 				Name:   "koko",
 | |
| 				EFName: "xxxx",
 | |
| 				Value:  666,
 | |
| 				List:   []string{"test"},
 | |
| 				EFList: []string{"xxxx"},
 | |
| 			},
 | |
| 			redactByDefault: false,
 | |
| 		},
 | |
| 		{
 | |
| 			name: "struct",
 | |
| 			base: &Carotte{
 | |
| 				Name: "koko",
 | |
| 				Courgette: Courgette{
 | |
| 					Ji: "huu",
 | |
| 				},
 | |
| 			},
 | |
| 			expected: &Carotte{
 | |
| 				Name: "xxxx",
 | |
| 			},
 | |
| 			redactByDefault: true,
 | |
| 		},
 | |
| 		{
 | |
| 			name: "struct2",
 | |
| 			base: &Carotte{
 | |
| 				Name:   "koko",
 | |
| 				EFName: "keke",
 | |
| 				Courgette: Courgette{
 | |
| 					Ji: "huu",
 | |
| 				},
 | |
| 				EFCourgette: Courgette{
 | |
| 					Ji: "huu",
 | |
| 				},
 | |
| 			},
 | |
| 			expected: &Carotte{
 | |
| 				Name:   "koko",
 | |
| 				EFName: "xxxx",
 | |
| 				Courgette: Courgette{
 | |
| 					Ji: "huu",
 | |
| 					Ho: "",
 | |
| 				},
 | |
| 			},
 | |
| 			redactByDefault: false,
 | |
| 		},
 | |
| 		{
 | |
| 			name: "pointer",
 | |
| 			base: &Carotte{
 | |
| 				Name: "koko",
 | |
| 				Pourgette: &Courgette{
 | |
| 					Ji: "hoo",
 | |
| 				},
 | |
| 			},
 | |
| 			expected: &Carotte{
 | |
| 				Name:      "xxxx",
 | |
| 				Pourgette: nil,
 | |
| 			},
 | |
| 			redactByDefault: true,
 | |
| 		},
 | |
| 		{
 | |
| 			name: "pointer2",
 | |
| 			base: &Carotte{
 | |
| 				Name:   "koko",
 | |
| 				EFName: "keke",
 | |
| 				Pourgette: &Courgette{
 | |
| 					Ji: "hoo",
 | |
| 				},
 | |
| 				EFPourgette: &Courgette{
 | |
| 					Ji: "hoo",
 | |
| 				},
 | |
| 			},
 | |
| 			expected: &Carotte{
 | |
| 				Name:   "koko",
 | |
| 				EFName: "xxxx",
 | |
| 				Pourgette: &Courgette{
 | |
| 					Ji: "hoo",
 | |
| 				},
 | |
| 				EFPourgette: nil,
 | |
| 			},
 | |
| 			redactByDefault: false,
 | |
| 		},
 | |
| 		{
 | |
| 			name: "export struct",
 | |
| 			base: &Carotte{
 | |
| 				Name: "koko",
 | |
| 				ECourgette: Courgette{
 | |
| 					Ji: "huu",
 | |
| 				},
 | |
| 			},
 | |
| 			expected: &Carotte{
 | |
| 				Name: "xxxx",
 | |
| 				ECourgette: Courgette{
 | |
| 					Ji: "xxxx",
 | |
| 				},
 | |
| 			},
 | |
| 			redactByDefault: true,
 | |
| 		},
 | |
| 		{
 | |
| 			name: "export struct 2",
 | |
| 			base: &Carotte{
 | |
| 				Name:   "koko",
 | |
| 				EFName: "keke",
 | |
| 				ECourgette: Courgette{
 | |
| 					Ji: "huu",
 | |
| 				},
 | |
| 				EFCourgette: Courgette{
 | |
| 					Ji: "huu",
 | |
| 				},
 | |
| 			},
 | |
| 			expected: &Carotte{
 | |
| 				Name:   "koko",
 | |
| 				EFName: "xxxx",
 | |
| 				ECourgette: Courgette{
 | |
| 					Ji: "huu",
 | |
| 				},
 | |
| 			},
 | |
| 			redactByDefault: false,
 | |
| 		},
 | |
| 		{
 | |
| 			name: "export pointer struct",
 | |
| 			base: &Carotte{
 | |
| 				Name: "koko",
 | |
| 				EPourgette: &Courgette{
 | |
| 					Ji: "huu",
 | |
| 				},
 | |
| 			},
 | |
| 			expected: &Carotte{
 | |
| 				Name: "xxxx",
 | |
| 				EPourgette: &Courgette{
 | |
| 					Ji: "xxxx",
 | |
| 				},
 | |
| 			},
 | |
| 			redactByDefault: true,
 | |
| 		},
 | |
| 		{
 | |
| 			name: "export pointer struct 2",
 | |
| 			base: &Carotte{
 | |
| 				Name:   "koko",
 | |
| 				EFName: "keke",
 | |
| 				EPourgette: &Courgette{
 | |
| 					Ji: "huu",
 | |
| 				},
 | |
| 				EFPourgette: &Courgette{
 | |
| 					Ji: "huu",
 | |
| 				},
 | |
| 			},
 | |
| 			expected: &Carotte{
 | |
| 				Name:   "koko",
 | |
| 				EFName: "xxxx",
 | |
| 				EPourgette: &Courgette{
 | |
| 					Ji: "huu",
 | |
| 				},
 | |
| 				EFPourgette: nil,
 | |
| 			},
 | |
| 			redactByDefault: false,
 | |
| 		},
 | |
| 		{
 | |
| 			name: "export map string/string",
 | |
| 			base: &Carotte{
 | |
| 				Name: "koko",
 | |
| 				EAubergine: map[string]string{
 | |
| 					"foo": "bar",
 | |
| 				},
 | |
| 			},
 | |
| 			expected: &Carotte{
 | |
| 				Name: "xxxx",
 | |
| 				EAubergine: map[string]string{
 | |
| 					"foo": "bar",
 | |
| 				},
 | |
| 			},
 | |
| 			redactByDefault: true,
 | |
| 		},
 | |
| 		{
 | |
| 			name: "export map string/string 2",
 | |
| 			base: &Carotte{
 | |
| 				Name:   "koko",
 | |
| 				EFName: "keke",
 | |
| 				EAubergine: map[string]string{
 | |
| 					"foo": "bar",
 | |
| 				},
 | |
| 				EFAubergine: map[string]string{
 | |
| 					"foo": "bar",
 | |
| 				},
 | |
| 			},
 | |
| 			expected: &Carotte{
 | |
| 				Name:   "koko",
 | |
| 				EFName: "xxxx",
 | |
| 				EAubergine: map[string]string{
 | |
| 					"foo": "bar",
 | |
| 				},
 | |
| 				EFAubergine: map[string]string{},
 | |
| 			},
 | |
| 			redactByDefault: false,
 | |
| 		},
 | |
| 		{
 | |
| 			name: "export map string/pointer",
 | |
| 			base: &Carotte{
 | |
| 				Name: "koko",
 | |
| 				EPAubergine: map[string]*Tomate{
 | |
| 					"foo": {
 | |
| 						Ji: "fdskljf",
 | |
| 					},
 | |
| 				},
 | |
| 			},
 | |
| 			expected: &Carotte{
 | |
| 				Name: "xxxx",
 | |
| 				EPAubergine: map[string]*Tomate{
 | |
| 					"foo": {
 | |
| 						Ji: "xxxx",
 | |
| 					},
 | |
| 				},
 | |
| 			},
 | |
| 			redactByDefault: true,
 | |
| 		},
 | |
| 		{
 | |
| 			name: "export map string/pointer 2",
 | |
| 			base: &Carotte{
 | |
| 				Name: "koko",
 | |
| 				EPAubergine: map[string]*Tomate{
 | |
| 					"foo": {
 | |
| 						Ji: "fdskljf",
 | |
| 					},
 | |
| 				},
 | |
| 				EFPAubergine: map[string]*Tomate{
 | |
| 					"foo": {
 | |
| 						Ji: "fdskljf",
 | |
| 					},
 | |
| 				},
 | |
| 			},
 | |
| 			expected: &Carotte{
 | |
| 				Name: "koko",
 | |
| 				EPAubergine: map[string]*Tomate{
 | |
| 					"foo": {
 | |
| 						Ji: "fdskljf",
 | |
| 					},
 | |
| 				},
 | |
| 				EFPAubergine: map[string]*Tomate{},
 | |
| 			},
 | |
| 			redactByDefault: false,
 | |
| 		},
 | |
| 		{
 | |
| 			name: "export map string/struct",
 | |
| 			base: &Carotte{
 | |
| 				Name: "koko",
 | |
| 				ESAubergine: map[string]Tomate{
 | |
| 					"foo": {
 | |
| 						Ji: "JiJiJi",
 | |
| 					},
 | |
| 				},
 | |
| 			},
 | |
| 			expected: &Carotte{
 | |
| 				Name: "xxxx",
 | |
| 				ESAubergine: map[string]Tomate{
 | |
| 					"foo": {
 | |
| 						Ji: "xxxx",
 | |
| 					},
 | |
| 				},
 | |
| 			},
 | |
| 			redactByDefault: true,
 | |
| 		},
 | |
| 		{
 | |
| 			name: "export map string/struct 2",
 | |
| 			base: &Carotte{
 | |
| 				Name: "koko",
 | |
| 				ESAubergine: map[string]Tomate{
 | |
| 					"foo": {
 | |
| 						Ji: "JiJiJi",
 | |
| 					},
 | |
| 				},
 | |
| 				EFSAubergine: map[string]Tomate{
 | |
| 					"foo": {
 | |
| 						Ji: "JiJiJi",
 | |
| 					},
 | |
| 				},
 | |
| 			},
 | |
| 			expected: &Carotte{
 | |
| 				Name: "koko",
 | |
| 				ESAubergine: map[string]Tomate{
 | |
| 					"foo": {
 | |
| 						Ji: "JiJiJi",
 | |
| 					},
 | |
| 				},
 | |
| 				EFSAubergine: map[string]Tomate{},
 | |
| 			},
 | |
| 			redactByDefault: false,
 | |
| 		},
 | |
| 	}
 | |
| 
 | |
| 	for _, test := range testCase {
 | |
| 		t.Run(test.name, func(t *testing.T) {
 | |
| 			t.Parallel()
 | |
| 			val := reflect.ValueOf(test.base).Elem()
 | |
| 			err := doOnStruct(val, tagExport, test.redactByDefault)
 | |
| 			require.NoError(t, err)
 | |
| 
 | |
| 			assert.EqualValues(t, test.expected, test.base)
 | |
| 		})
 | |
| 	}
 | |
| }
 |