1
// Copyright Istio Authors
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
7
// http://www.apache.org/licenses/LICENSE-2.0
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.
22
"istio.io/istio/security/pkg/nodeagent/caclient/providers/google/mock"
25
const mockServerAddress = "localhost:0"
27
var fakeCert = []string{"foo", "bar"}
29
func TestGoogleCAClient(t *testing.T) {
30
t.Setenv("GKE_CLUSTER_URL", "https://container.googleapis.com/v1/projects/testproj/locations/us-central1-c/clusters/cluster1")
32
testCases := map[string]struct {
33
service mock.CAService
38
service: mock.CAService{Certs: fakeCert, Err: nil},
39
expectedCert: fakeCert,
42
"Error in response": {
43
service: mock.CAService{Certs: nil, Err: fmt.Errorf("test failure")},
45
expectedErr: "rpc error: code = Unknown desc = test failure",
48
service: mock.CAService{Certs: []string{}, Err: nil},
50
expectedErr: "invalid response cert chain",
54
for id, tc := range testCases {
55
// create a local grpc server
56
s, err := mock.CreateServer(mockServerAddress, &tc.service)
58
t.Fatalf("Test case [%s]: failed to create server: %v", id, err)
62
cli, err := NewGoogleCAClient(s.Address, false, nil)
64
t.Errorf("Test case [%s]: failed to create ca client: %v", id, err)
67
resp, err := cli.CSRSign([]byte{0o1}, 1)
69
if err.Error() != tc.expectedErr {
70
t.Errorf("Test case [%s]: error (%s) does not match expected error (%s)", id, err.Error(), tc.expectedErr)
73
if tc.expectedErr != "" {
74
t.Errorf("Test case [%s]: expect error: %s but got no error", id, tc.expectedErr)
75
} else if !reflect.DeepEqual(resp, tc.expectedCert) {
76
t.Errorf("Test case [%s]: resp: got %+v, expected %v", id, resp, tc.expectedCert)
82
func TestParseZone(t *testing.T) {
83
testCases := map[string]struct {
88
clusterURL: "https://container.googleapis.com/v1/projects/testproj1/locations/us-central1-c/clusters/c1",
89
expectedZone: "us-central1-c",
92
clusterURL: "https://gkehub.googleapis.com/projects/testproject1/locations/global/memberships/test01",
101
for id, tc := range testCases {
102
zone := parseZone(tc.clusterURL)
103
if zone != tc.expectedZone {
104
t.Errorf("Test case [%s]: proj: got %+v, expected %v", id, zone, tc.expectedZone)