istio.io/istio@v0.0.0-20240520182934-d79c90f27776/pilot/pkg/model/credentials/resource_test.go (about) 1 // Copyright Istio Authors 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package credentials 16 17 import ( 18 "testing" 19 ) 20 21 func TestParseResourceName(t *testing.T) { 22 cases := []struct { 23 name string 24 resource string 25 defaultNamespace string 26 expected SecretResource 27 err bool 28 }{ 29 { 30 name: "simple", 31 resource: "kubernetes://cert", 32 defaultNamespace: "default", 33 expected: SecretResource{ 34 ResourceType: KubernetesSecretType, 35 Name: "cert", 36 Namespace: "default", 37 ResourceName: "kubernetes://cert", 38 Cluster: "cluster", 39 }, 40 }, 41 { 42 name: "with namespace", 43 resource: "kubernetes://namespace/cert", 44 defaultNamespace: "default", 45 expected: SecretResource{ 46 ResourceType: KubernetesSecretType, 47 Name: "cert", 48 Namespace: "namespace", 49 ResourceName: "kubernetes://namespace/cert", 50 Cluster: "cluster", 51 }, 52 }, 53 { 54 name: "kubernetes-gateway", 55 resource: "kubernetes-gateway://namespace/cert", 56 defaultNamespace: "default", 57 expected: SecretResource{ 58 ResourceType: KubernetesGatewaySecretType, 59 Name: "cert", 60 Namespace: "namespace", 61 ResourceName: "kubernetes-gateway://namespace/cert", 62 Cluster: "config", 63 }, 64 }, 65 { 66 name: "kubernetes-gateway without namespace", 67 resource: "kubernetes-gateway://cert", 68 defaultNamespace: "default", 69 err: true, 70 }, 71 { 72 name: "kubernetes-gateway with empty namespace", 73 resource: "kubernetes-gateway:///cert", 74 defaultNamespace: "default", 75 err: true, 76 }, 77 { 78 name: "kubernetes-gateway with empty name", 79 resource: "kubernetes-gateway://ns/", 80 defaultNamespace: "default", 81 err: true, 82 }, 83 { 84 name: "plain", 85 resource: "cert", 86 defaultNamespace: "default", 87 err: true, 88 }, 89 { 90 name: "non kubernetes", 91 resource: "vault://cert", 92 defaultNamespace: "default", 93 err: true, 94 }, 95 } 96 for _, tt := range cases { 97 t.Run(tt.name, func(t *testing.T) { 98 got, err := ParseResourceName(tt.resource, tt.defaultNamespace, "cluster", "config") 99 if tt.err != (err != nil) { 100 t.Fatalf("expected err=%v but got err=%v", tt.err, err) 101 } 102 if got != tt.expected { 103 t.Fatalf("want %+v, got %+v", tt.expected, got) 104 } 105 }) 106 } 107 } 108 109 func TestToResourceName(t *testing.T) { 110 tests := []struct { 111 name string 112 want string 113 }{ 114 {"foo", "kubernetes://foo"}, 115 {"kubernetes://bar", "kubernetes://bar"}, 116 {"kubernetes-gateway://bar", "kubernetes-gateway://bar"}, 117 {"builtin://", "default"}, 118 {"builtin://extra", "default"}, 119 } 120 for _, tt := range tests { 121 t.Run(tt.name, func(t *testing.T) { 122 if got := ToResourceName(tt.name); got != tt.want { 123 t.Fatalf("got %v, want %v", got, tt.want) 124 } 125 }) 126 } 127 } 128 129 func TestToKubernetesGatewayResource(t *testing.T) { 130 tests := []struct { 131 name string 132 namespace string 133 want string 134 }{ 135 {"foo", "ns", "kubernetes-gateway://ns/foo"}, 136 {"builtin://", "anything", "builtin://"}, 137 {"builtin://extra", "anything", "builtin://"}, 138 } 139 for _, tt := range tests { 140 t.Run(tt.name, func(t *testing.T) { 141 if got := ToKubernetesGatewayResource(tt.namespace, tt.name); got != tt.want { 142 t.Fatalf("got %v, want %v", got, tt.want) 143 } 144 }) 145 } 146 }