go.temporal.io/server@v1.23.0/common/searchattribute/test_provider.go (about) 1 // The MIT License 2 // 3 // Copyright (c) 2020 Temporal Technologies Inc. All rights reserved. 4 // 5 // Copyright (c) 2020 Uber Technologies, Inc. 6 // 7 // Permission is hereby granted, free of charge, to any person obtaining a copy 8 // of this software and associated documentation files (the "Software"), to deal 9 // in the Software without restriction, including without limitation the rights 10 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 // copies of the Software, and to permit persons to whom the Software is 12 // furnished to do so, subject to the following conditions: 13 // 14 // The above copyright notice and this permission notice shall be included in 15 // all copies or substantial portions of the Software. 16 // 17 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 23 // THE SOFTWARE. 24 25 package searchattribute 26 27 import ( 28 "strings" 29 30 enumspb "go.temporal.io/api/enums/v1" 31 "go.temporal.io/api/serviceerror" 32 ) 33 34 type ( 35 TestProvider struct{} 36 37 TestMapper struct { 38 Namespace string 39 } 40 ) 41 42 var _ Provider = (*TestProvider)(nil) 43 var _ Mapper = (*TestMapper)(nil) 44 45 var ( 46 TestNameTypeMap = NameTypeMap{ 47 customSearchAttributes: map[string]enumspb.IndexedValueType{ 48 "CustomIntField": enumspb.INDEXED_VALUE_TYPE_INT, 49 "CustomTextField": enumspb.INDEXED_VALUE_TYPE_TEXT, 50 "CustomKeywordField": enumspb.INDEXED_VALUE_TYPE_KEYWORD, 51 "CustomDatetimeField": enumspb.INDEXED_VALUE_TYPE_DATETIME, 52 "CustomDoubleField": enumspb.INDEXED_VALUE_TYPE_DOUBLE, 53 "CustomBoolField": enumspb.INDEXED_VALUE_TYPE_BOOL, 54 55 "Int01": enumspb.INDEXED_VALUE_TYPE_INT, 56 "Int02": enumspb.INDEXED_VALUE_TYPE_INT, 57 "Int03": enumspb.INDEXED_VALUE_TYPE_INT, 58 "Text01": enumspb.INDEXED_VALUE_TYPE_TEXT, 59 "Keyword01": enumspb.INDEXED_VALUE_TYPE_KEYWORD, 60 "Keyword02": enumspb.INDEXED_VALUE_TYPE_KEYWORD, 61 "Keyword03": enumspb.INDEXED_VALUE_TYPE_KEYWORD, 62 "Datetime01": enumspb.INDEXED_VALUE_TYPE_DATETIME, 63 "Double01": enumspb.INDEXED_VALUE_TYPE_DOUBLE, 64 "Bool01": enumspb.INDEXED_VALUE_TYPE_BOOL, 65 "KeywordList01": enumspb.INDEXED_VALUE_TYPE_KEYWORD_LIST, 66 }, 67 } 68 69 TestAliases = map[string]string{ 70 "Int01": "CustomIntField", 71 "Text01": "CustomTextField", 72 "Keyword01": "CustomKeywordField", 73 "Datetime01": "CustomDatetimeField", 74 "Double01": "CustomDoubleField", 75 "Bool01": "CustomBoolField", 76 "KeywordList01": "CustomKeywordListField", 77 } 78 ) 79 80 func NewTestProvider() *TestProvider { 81 return &TestProvider{} 82 } 83 84 func (s *TestProvider) GetSearchAttributes(_ string, _ bool) (NameTypeMap, error) { 85 return TestNameTypeMap, nil 86 } 87 88 func (t *TestMapper) GetAlias(fieldName string, namespace string) (string, error) { 89 if fieldName == "wrong_field" { 90 // This error must be always ignored. 91 return "", serviceerror.NewInvalidArgument("unmapped field") 92 } 93 if namespace == "error-namespace" { 94 return "", serviceerror.NewInternal("mapper error") 95 } else if namespace == "test-namespace" || namespace == t.Namespace { 96 if fieldName == "pass-through" { 97 return fieldName, nil 98 } 99 100 return "AliasFor" + fieldName, nil 101 } 102 103 // This error must be always ignored. 104 return "", serviceerror.NewInvalidArgument("unknown namespace") 105 } 106 107 func (t *TestMapper) GetFieldName(alias string, namespace string) (string, error) { 108 if alias == "wrong_alias" { 109 // This error must be always ignored. 110 return "", serviceerror.NewInvalidArgument("unmapped alias") 111 } 112 if namespace == "error-namespace" { 113 return "", serviceerror.NewInternal("mapper error") 114 } else if namespace == "test-namespace" || namespace == t.Namespace { 115 if alias == "pass-through" { 116 return alias, nil 117 } 118 if strings.HasPrefix(alias, "AliasFor") { 119 return strings.TrimPrefix(alias, "AliasFor"), nil 120 } 121 return "", serviceerror.NewInvalidArgument("mapper error") 122 } 123 return "", serviceerror.NewInvalidArgument("unknown namespace") 124 } 125 126 func NewTestMapperProvider(customMapper Mapper) MapperProvider { 127 return NewMapperProvider(customMapper, nil, NewTestProvider(), false) 128 }