// Copyright 2020 Google LLC. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package http import ( "testing" "crypto/tls" "github.com/google/go-cmp/cmp" "google.golang.org/api/internal" ) func TestGetEndpoint(t *testing.T) { testCases := []struct { UserEndpoint string DefaultEndpoint string Want string WantErr bool }{ { DefaultEndpoint: "https://foo.googleapis.com/bar/baz", Want: "https://foo.googleapis.com/bar/baz", }, { UserEndpoint: "myhost:3999", DefaultEndpoint: "https://foo.googleapis.com/bar/baz", Want: "https://myhost:3999/bar/baz", }, { UserEndpoint: "https://host/path/to/bar", DefaultEndpoint: "https://foo.googleapis.com/bar/baz", Want: "https://host/path/to/bar", }, { UserEndpoint: "host:port", DefaultEndpoint: "", WantErr: true, }, } for _, tc := range testCases { got, err := getEndpoint(&internal.DialSettings{ Endpoint: tc.UserEndpoint, DefaultEndpoint: tc.DefaultEndpoint, }, nil) if tc.WantErr && err == nil { t.Errorf("want err, got nil err") continue } if !tc.WantErr && err != nil { t.Errorf("want nil err, got %v", err) continue } if tc.Want != got { t.Errorf("getEndpoint(%q, %q): got %v; want %v", tc.UserEndpoint, tc.DefaultEndpoint, got, tc.Want) } } } func TestGetEndpointWithClientCertSource(t *testing.T) { dummyClientCertSource := func(info *tls.CertificateRequestInfo) (*tls.Certificate, error) { return nil, nil } testCases := []struct { UserEndpoint string DefaultEndpoint string Want string WantErr bool }{ { DefaultEndpoint: "https://foo.googleapis.com/bar/baz", Want: "https://foo.googleapis.com/bar/baz", }, { DefaultEndpoint: "https://staging-foo.sandbox.googleapis.com/bar/baz", Want: "https://staging-foo.sandbox.googleapis.com/bar/baz", }, { UserEndpoint: "myhost:3999", DefaultEndpoint: "https://foo.googleapis.com/bar/baz", Want: "https://myhost:3999/bar/baz", }, { UserEndpoint: "https://host/path/to/bar", DefaultEndpoint: "https://foo.googleapis.com/bar/baz", Want: "https://host/path/to/bar", }, { UserEndpoint: "host:port", DefaultEndpoint: "", WantErr: true, }, } for _, tc := range testCases { got, err := getEndpoint(&internal.DialSettings{ Endpoint: tc.UserEndpoint, DefaultEndpoint: tc.DefaultEndpoint, }, dummyClientCertSource) if tc.WantErr && err == nil { t.Errorf("want err, got nil err") continue } if !tc.WantErr && err != nil { t.Errorf("want nil err, got %v", err) continue } if tc.Want != got { t.Errorf("getEndpoint(%q, %q): got %v; want %v", tc.UserEndpoint, tc.DefaultEndpoint, got, tc.Want) } } } func TestGenerateDefaultMtlsEndpoint(t *testing.T) { mtlsEndpoint := generateDefaultMtlsEndpoint("pubsub.googleapis.com") wantMtlsEndpoint := "pubsub.mtls.googleapis.com" if !cmp.Equal(mtlsEndpoint, wantMtlsEndpoint) { t.Error(cmp.Diff(wantMtlsEndpoint, wantMtlsEndpoint)) } } func TestGenerateDefaultMtlsEndpointSandbox(t *testing.T) { mtlsEndpoint := generateDefaultMtlsEndpoint("staging-pubsub.sandbox.googleapis.com") wantMtlsEndpoint := "staging-pubsub.mtls.sandbox.googleapis.com" if !cmp.Equal(mtlsEndpoint, wantMtlsEndpoint) { t.Error(cmp.Diff(wantMtlsEndpoint, wantMtlsEndpoint)) } } func TestGenerateDefaultMtlsEndpointUnsupported(t *testing.T) { mtlsEndpoint := generateDefaultMtlsEndpoint("unsupported.google.com") wantMtlsEndpoint := "unsupported.google.com" if !cmp.Equal(mtlsEndpoint, wantMtlsEndpoint) { t.Error(cmp.Diff(wantMtlsEndpoint, wantMtlsEndpoint)) } }