peering: initial sync (#12842)
- Add endpoints related to peering: read, list, generate token, initiate peering
- Update node/service/check table indexing to account for peers
- Foundational changes for pushing service updates to a peer
- Plumb peer name through Health.ServiceNodes path
see: ENT-1765, ENT-1280, ENT-1283, ENT-1283, ENT-1756, ENT-1739, ENT-1750, ENT-1679,
ENT-1709, ENT-1704, ENT-1690, ENT-1689, ENT-1702, ENT-1701, ENT-1683, ENT-1663,
ENT-1650, ENT-1678, ENT-1628, ENT-1658, ENT-1640, ENT-1637, ENT-1597, ENT-1634,
ENT-1613, ENT-1616, ENT-1617, ENT-1591, ENT-1588, ENT-1596, ENT-1572, ENT-1555
Co-authored-by: R.B. Boyer <rb@hashicorp.com>
Co-authored-by: freddygv <freddy@hashicorp.com>
Co-authored-by: Chris S. Kim <ckim@hashicorp.com>
Co-authored-by: Evan Culver <eculver@hashicorp.com>
Co-authored-by: Nitya Dhanushkodi <nitya@hashicorp.com>
3 years ago
//go:build !consulent
// +build !consulent
package agent
import (
"bytes"
"encoding/json"
"io"
"net/http"
"net/http/httptest"
"testing"
"github.com/stretchr/testify/require"
"github.com/hashicorp/consul/proto/pbpeering"
"github.com/hashicorp/consul/testrpc"
)
func TestHTTP_Peering_GenerateToken_OSS_Failure ( t * testing . T ) {
if testing . Short ( ) {
t . Skip ( "too slow for testing.Short" )
}
t . Parallel ( )
a := NewTestAgent ( t , "" )
testrpc . WaitForTestAgent ( t , a . RPC , "dc1" )
t . Run ( "Doesn't allow partitions in OSS HTTP requests" , func ( t * testing . T ) {
reqBody := & pbpeering . GenerateTokenRequest {
PeerName : "peering-a" ,
}
reqBodyBytes , err := json . Marshal ( reqBody )
require . NoError ( t , err )
req , err := http . NewRequest ( "POST" , "/v1/peering/token?partition=foo" ,
bytes . NewReader ( reqBodyBytes ) )
require . NoError ( t , err )
resp := httptest . NewRecorder ( )
a . srv . h . ServeHTTP ( resp , req )
require . Equal ( t , http . StatusBadRequest , resp . Code )
body , _ := io . ReadAll ( resp . Body )
require . Contains ( t , string ( body ) , "Partitions are a Consul Enterprise feature" )
} )
}
func TestHTTP_PeeringEndpoint_OSS_Failure ( t * testing . T ) {
if testing . Short ( ) {
t . Skip ( "too slow for testing.Short" )
}
t . Parallel ( )
a := NewTestAgent ( t , "" )
testrpc . WaitForTestAgent ( t , a . RPC , "dc1" )
t . Run ( "Doesn't allow partitions on PeeringEndpoint in OSS HTTP requests" , func ( t * testing . T ) {
req , err := http . NewRequest ( "GET" , "/v1/peering/foo?partition=foo" , nil )
require . NoError ( t , err )
resp := httptest . NewRecorder ( )
a . srv . h . ServeHTTP ( resp , req )
require . Equal ( t , http . StatusBadRequest , resp . Code )
body , _ := io . ReadAll ( resp . Body )
require . Contains ( t , string ( body ) , "Partitions are a Consul Enterprise feature" )
req2 , err2 := http . NewRequest ( "DELETE" , "/v1/peering/foo?partition=foo" , nil )
require . NoError ( t , err2 )
resp2 := httptest . NewRecorder ( )
a . srv . h . ServeHTTP ( resp2 , req2 )
require . Equal ( t , http . StatusBadRequest , resp2 . Code )
body2 , _ := io . ReadAll ( resp2 . Body )
require . Contains ( t , string ( body2 ) , "Partitions are a Consul Enterprise feature" )
} )
}