Skip to content

Commit 72a55eb

Browse files
committed
adding tests for the new RPC endpoint
* removed some unnecessary compiler output * remove configurability of OverprovisioningFactor
1 parent 247756e commit 72a55eb

15 files changed

+174
-339
lines changed

agent/cache-types/discovery_chain_test.go

-2
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ func TestCompiledDiscoveryChain(t *testing.T) {
1616
typ := &CompiledDiscoveryChain{RPC: rpc}
1717

1818
// just do the default chain
19-
entries := structs.NewDiscoveryChainConfigEntries()
2019
chain := discoverychain.TestCompileConfigEntries(t, "web", "default", "dc1", nil)
2120

2221
// Expect the proper RPC call. This also sets the expected value
@@ -31,7 +30,6 @@ func TestCompiledDiscoveryChain(t *testing.T) {
3130

3231
reply := args.Get(2).(*structs.DiscoveryChainResponse)
3332
reply.Chain = chain
34-
reply.Entries = entries.Flatten()
3533
reply.QueryMeta.Index = 48
3634
resp = reply
3735
})

agent/consul/discovery_chain_endpoint.go

-1
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,6 @@ func (c *DiscoveryChain) Get(args *structs.DiscoveryChainRequest, reply *structs
7070
}
7171

7272
reply.Index = index
73-
reply.Entries = entries.Flatten()
7473
reply.Chain = chain
7574

7675
return nil
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
package consul
2+
3+
import (
4+
"os"
5+
"testing"
6+
"time"
7+
8+
"github.com/hashicorp/consul/agent/structs"
9+
msgpackrpc "github.com/hashicorp/net-rpc-msgpackrpc"
10+
"github.com/stretchr/testify/require"
11+
)
12+
13+
// TODO(rb): test ACLs
14+
15+
func TestDiscoveryChainEndpoint_Get(t *testing.T) {
16+
t.Parallel()
17+
dir1, s1 := testServerWithConfig(t, func(c *Config) {
18+
c.PrimaryDatacenter = "dc1"
19+
})
20+
defer os.RemoveAll(dir1)
21+
defer s1.Shutdown()
22+
codec := rpcClient(t, s1)
23+
defer codec.Close()
24+
25+
getChain := func(args *structs.DiscoveryChainRequest) (*structs.DiscoveryChainResponse, error) {
26+
resp := structs.DiscoveryChainResponse{}
27+
err := msgpackrpc.CallWithCodec(codec, "DiscoveryChain.Get", &args, &resp)
28+
if err != nil {
29+
return nil, err
30+
}
31+
// clear fields that we don't care about
32+
resp.QueryMeta = structs.QueryMeta{}
33+
return &resp, nil
34+
}
35+
36+
// First try compiling just the default chain (no config entries).
37+
args := &structs.DiscoveryChainRequest{
38+
Name: "web",
39+
EvaluateInDatacenter: "dc1",
40+
EvaluateInNamespace: "default",
41+
Datacenter: "dc1",
42+
}
43+
44+
resp, err := getChain(args)
45+
require.NoError(t, err)
46+
47+
expect := &structs.DiscoveryChainResponse{
48+
Chain: &structs.CompiledDiscoveryChain{
49+
ServiceName: "web",
50+
Namespace: "default",
51+
Datacenter: "dc1",
52+
Protocol: "tcp",
53+
StartNode: "resolver:web,,,dc1",
54+
Nodes: map[string]*structs.DiscoveryGraphNode{
55+
"resolver:web,,,dc1": &structs.DiscoveryGraphNode{
56+
Type: structs.DiscoveryGraphNodeTypeResolver,
57+
Name: "web,,,dc1",
58+
Resolver: &structs.DiscoveryResolver{
59+
Default: true,
60+
ConnectTimeout: 5 * time.Second,
61+
Target: structs.DiscoveryTarget{
62+
Service: "web",
63+
Namespace: "default",
64+
Datacenter: "dc1",
65+
},
66+
},
67+
},
68+
},
69+
Targets: map[structs.DiscoveryTarget]structs.DiscoveryTargetConfig{
70+
structs.DiscoveryTarget{
71+
Service: "web",
72+
Namespace: "default",
73+
Datacenter: "dc1",
74+
}: {},
75+
},
76+
},
77+
}
78+
require.Equal(t, expect, resp)
79+
80+
// Now create one config entry.
81+
out := false
82+
require.NoError(t, msgpackrpc.CallWithCodec(codec, "ConfigEntry.Apply",
83+
&structs.ConfigEntryRequest{
84+
Datacenter: "dc1",
85+
Entry: &structs.ServiceResolverConfigEntry{
86+
Kind: structs.ServiceResolver,
87+
Name: "web",
88+
ConnectTimeout: 33 * time.Second,
89+
},
90+
}, &out))
91+
require.True(t, out)
92+
93+
// And try compiling again.
94+
args = &structs.DiscoveryChainRequest{
95+
Name: "web",
96+
EvaluateInDatacenter: "dc1",
97+
EvaluateInNamespace: "default",
98+
Datacenter: "dc1",
99+
}
100+
101+
resp, err = getChain(args)
102+
require.NoError(t, err)
103+
104+
expect = &structs.DiscoveryChainResponse{
105+
Chain: &structs.CompiledDiscoveryChain{
106+
ServiceName: "web",
107+
Namespace: "default",
108+
Datacenter: "dc1",
109+
Protocol: "tcp",
110+
StartNode: "resolver:web,,,dc1",
111+
Nodes: map[string]*structs.DiscoveryGraphNode{
112+
"resolver:web,,,dc1": &structs.DiscoveryGraphNode{
113+
Type: structs.DiscoveryGraphNodeTypeResolver,
114+
Name: "web,,,dc1",
115+
Resolver: &structs.DiscoveryResolver{
116+
ConnectTimeout: 33 * time.Second,
117+
Target: structs.DiscoveryTarget{
118+
Service: "web",
119+
Namespace: "default",
120+
Datacenter: "dc1",
121+
},
122+
},
123+
},
124+
},
125+
Targets: map[structs.DiscoveryTarget]structs.DiscoveryTargetConfig{
126+
structs.DiscoveryTarget{
127+
Service: "web",
128+
Namespace: "default",
129+
Datacenter: "dc1",
130+
}: {},
131+
},
132+
},
133+
}
134+
require.Equal(t, expect, resp)
135+
}

agent/consul/discoverychain/compile.go

+1-4
Original file line numberDiff line numberDiff line change
@@ -688,7 +688,6 @@ RESOLVE_AGAIN:
688688
Type: structs.DiscoveryGraphNodeTypeResolver,
689689
Name: target.Identifier(),
690690
Resolver: &structs.DiscoveryResolver{
691-
Definition: resolver,
692691
Default: resolver.IsDefault(),
693692
Target: target,
694693
ConnectTimeout: connectTimeout,
@@ -770,9 +769,7 @@ RESOLVE_AGAIN:
770769

771770
// If we filtered everything out then no point in having a failover.
772771
if len(failoverTargets) > 0 {
773-
df := &structs.DiscoveryFailover{
774-
Definition: &failover,
775-
}
772+
df := &structs.DiscoveryFailover{}
776773
node.Resolver.Failover = df
777774

778775
// Convert the targets into targets by cheating a bit and

0 commit comments

Comments
 (0)