blob: 811eabb55f8fa8fb131a3fa10d78933a9d0bfaaf [file] [log] [blame]
// Copyright 2023 Google LLC.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package internal
import (
"encoding/json"
"fmt"
"testing"
"time"
)
const testS2AAddr = "testS2AAddress:port"
var validConfigResp = func() (string, error) {
validConfig := mtlsConfig{
S2A: &s2aAddresses{
PlaintextAddress: testS2AAddr,
MTLSAddress: "",
},
}
configStr, err := json.Marshal(validConfig)
if err != nil {
return "", err
}
return string(configStr), nil
}
var errorConfigResp = func() (string, error) {
return "", fmt.Errorf("error getting config")
}
var invalidConfigResp = func() (string, error) {
return "{}", nil
}
var invalidJSONResp = func() (string, error) {
return "test", nil
}
func TestGetS2AAddress(t *testing.T) {
testCases := []struct {
Desc string
RespFunc func() (string, error)
Want string
}{
{
Desc: "test valid config",
RespFunc: validConfigResp,
Want: testS2AAddr,
},
{
Desc: "test error when getting config",
RespFunc: errorConfigResp,
Want: "",
},
{
Desc: "test invalid config",
RespFunc: invalidConfigResp,
Want: "",
},
{
Desc: "test invalid JSON response",
RespFunc: invalidJSONResp,
Want: "",
},
}
oldHTTPGet := httpGetMetadataMTLSConfig
oldExpiry := configExpiry
configExpiry = time.Millisecond
defer func() {
httpGetMetadataMTLSConfig = oldHTTPGet
configExpiry = oldExpiry
}()
for _, tc := range testCases {
httpGetMetadataMTLSConfig = tc.RespFunc
if want, got := tc.Want, GetS2AAddress(); got != want {
t.Errorf("%s: want address [%s], got address [%s]", tc.Desc, want, got)
}
// Let the MTLS config expire at the end of each test case.
time.Sleep(2 * time.Millisecond)
}
}
func TestMTLSConfigExpiry(t *testing.T) {
oldHTTPGet := httpGetMetadataMTLSConfig
oldExpiry := configExpiry
configExpiry = 1 * time.Second
defer func() {
httpGetMetadataMTLSConfig = oldHTTPGet
configExpiry = oldExpiry
}()
httpGetMetadataMTLSConfig = validConfigResp
if got, want := GetS2AAddress(), testS2AAddr; got != want {
t.Errorf("expected address: [%s], got [%s]", want, got)
}
httpGetMetadataMTLSConfig = invalidConfigResp
if got, want := GetS2AAddress(), testS2AAddr; got != want {
t.Errorf("cached config should still be valid, expected address: [%s], got [%s]", want, got)
}
time.Sleep(1 * time.Second)
if got, want := GetS2AAddress(), ""; got != want {
t.Errorf("config should be refreshed, expected address: [%s], got [%s]", want, got)
}
// Let the MTLS config expire before running other tests.
time.Sleep(1 * time.Second)
}