2023-03-28 18:39:22 +00:00
|
|
|
// Copyright (c) HashiCorp, Inc.
|
2023-08-11 13:12:13 +00:00
|
|
|
// SPDX-License-Identifier: BUSL-1.1
|
2023-03-28 18:39:22 +00:00
|
|
|
|
2021-01-06 21:05:07 +00:00
|
|
|
package agent
|
|
|
|
|
|
|
|
import (
|
|
|
|
"net/http"
|
|
|
|
"net/http/httptest"
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
|
|
|
|
"github.com/hashicorp/consul/sdk/testutil"
|
|
|
|
"github.com/hashicorp/consul/testrpc"
|
|
|
|
)
|
|
|
|
|
|
|
|
func testGRPCStreamingWorking(t *testing.T, config string) {
|
|
|
|
if testing.Short() {
|
|
|
|
t.Skip("too slow for testing.Short")
|
|
|
|
}
|
|
|
|
|
|
|
|
a := NewTestAgent(t, config)
|
|
|
|
defer a.Shutdown()
|
|
|
|
|
|
|
|
testrpc.WaitForLeader(t, a.RPC, "dc1")
|
|
|
|
|
|
|
|
req, _ := http.NewRequest("GET", "/v1/health/service/consul?index=3", nil)
|
|
|
|
resp := httptest.NewRecorder()
|
|
|
|
_, err := a.srv.HealthServiceNodes(resp, req)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatalf("err: %v", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
assertIndex(t, resp)
|
|
|
|
require.NotEmpty(t, resp.Header().Get("X-Consul-Index"))
|
2021-06-28 20:48:10 +00:00
|
|
|
require.Equal(t, "streaming", resp.Header().Get("X-Consul-Query-Backend"))
|
2021-01-06 21:05:07 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func TestGRPCWithTLSConfigs(t *testing.T) {
|
2021-11-01 15:40:16 +00:00
|
|
|
// if this test is failing because of expired certificates
|
|
|
|
// use the procedure in test/CA-GENERATION.md
|
2021-01-06 21:05:07 +00:00
|
|
|
t.Parallel()
|
|
|
|
testCases := []struct {
|
|
|
|
name string
|
|
|
|
config string
|
|
|
|
}{
|
|
|
|
{
|
|
|
|
name: "no-tls",
|
|
|
|
config: "",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "tls-all-enabled",
|
|
|
|
config: `
|
|
|
|
# tls
|
|
|
|
ca_file = "../test/hostname/CertAuth.crt"
|
|
|
|
cert_file = "../test/hostname/Bob.crt"
|
|
|
|
key_file = "../test/hostname/Bob.key"
|
|
|
|
verify_incoming = true
|
|
|
|
verify_outgoing = true
|
|
|
|
verify_server_hostname = true
|
|
|
|
`,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "tls ready no verify incoming",
|
|
|
|
config: `
|
|
|
|
# tls
|
|
|
|
ca_file = "../test/hostname/CertAuth.crt"
|
|
|
|
cert_file = "../test/hostname/Bob.crt"
|
|
|
|
key_file = "../test/hostname/Bob.key"
|
|
|
|
verify_incoming = false
|
|
|
|
verify_outgoing = true
|
|
|
|
verify_server_hostname = false
|
|
|
|
`,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "tls ready no verify outgoing and incoming",
|
|
|
|
config: `
|
|
|
|
# tls
|
|
|
|
ca_file = "../test/hostname/CertAuth.crt"
|
|
|
|
cert_file = "../test/hostname/Bob.crt"
|
|
|
|
key_file = "../test/hostname/Bob.key"
|
|
|
|
verify_incoming = false
|
|
|
|
verify_outgoing = false
|
|
|
|
verify_server_hostname = false
|
|
|
|
`,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "tls ready, all defaults",
|
|
|
|
config: `
|
|
|
|
# tls
|
|
|
|
ca_file = "../test/hostname/CertAuth.crt"
|
|
|
|
cert_file = "../test/hostname/Bob.crt"
|
|
|
|
key_file = "../test/hostname/Bob.key"
|
|
|
|
`,
|
|
|
|
},
|
|
|
|
}
|
|
|
|
for _, tt := range testCases {
|
|
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
|
|
dataDir := testutil.TempDir(t, "agent") // we manage the data dir
|
|
|
|
cfg := `data_dir = "` + dataDir + `"
|
|
|
|
domain = "consul"
|
|
|
|
node_name = "my-fancy-server"
|
|
|
|
datacenter = "dc1"
|
|
|
|
primary_datacenter = "dc1"
|
|
|
|
rpc {
|
|
|
|
enable_streaming = true
|
|
|
|
}
|
|
|
|
use_streaming_backend = true
|
|
|
|
` + tt.config
|
|
|
|
testGRPCStreamingWorking(t, cfg)
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|