1
2
3
4
5
6
7 package topology
8
9 import (
10 "fmt"
11 "net/url"
12 "testing"
13 "time"
14
15 "go.mongodb.org/mongo-driver/internal/assert"
16 "go.mongodb.org/mongo-driver/mongo/options"
17 )
18
19 func TestDirectConnectionFromConnString(t *testing.T) {
20 type testCaseQuery [][2]string
21
22 testCases := []struct {
23 name string
24 mode MonitorMode
25 query *testCaseQuery
26 }{
27 {"connect=direct", SingleMode, &testCaseQuery{{"connect", "direct"}}},
28 {"connect=automatic", AutomaticMode, &testCaseQuery{{"connect", "automatic"}}},
29 {"directConnection=true", SingleMode, &testCaseQuery{{"directconnection", "true"}}},
30 {"directconnection=false", AutomaticMode, &testCaseQuery{{"directconnection", "false"}}},
31 {"default", AutomaticMode, nil},
32 }
33 for _, tc := range testCases {
34 t.Run(tc.name, func(t *testing.T) {
35 dns, err := url.Parse("mongodb://localhost/")
36 assert.Nil(t, err, "error parsing uri: %v", err)
37
38 if tc.query != nil {
39 query := dns.Query()
40 for _, q := range *tc.query {
41 query.Set(q[0], q[1])
42 }
43 dns.RawQuery = query.Encode()
44 }
45
46 cfg, err := NewConfig(options.Client().ApplyURI(dns.String()), nil)
47 assert.Nil(t, err, "error constructing topology config: %v", err)
48
49 topo, err := New(cfg)
50 assert.Nil(t, err, "error constructing topology: %v", err)
51 assert.Equal(t, tc.mode, topo.cfg.Mode, "expected mode %v, got %v", tc.mode, topo.cfg.Mode)
52 })
53 }
54 }
55
56 func TestLoadBalancedFromConnString(t *testing.T) {
57 testCases := []struct {
58 name string
59 uriOptions string
60 loadBalanced bool
61 }{
62 {"loadBalanced=true", "loadBalanced=true", true},
63 {"loadBalanced=false", "loadBalanced=false", false},
64 {"loadBalanced unset", "", false},
65 }
66 for _, tc := range testCases {
67 t.Run(tc.name, func(t *testing.T) {
68 uri := fmt.Sprintf("mongodb://localhost/?%s", tc.uriOptions)
69 cfg, err := NewConfig(options.Client().ApplyURI(uri), nil)
70 assert.Nil(t, err, "error constructing topology config: %v", err)
71
72 topo, err := New(cfg)
73 assert.Nil(t, err, "topology.New error: %v", err)
74 assert.Equal(t, tc.loadBalanced, topo.cfg.LoadBalanced, "expected loadBalanced %v, got %v", tc.loadBalanced, topo.cfg.LoadBalanced)
75
76 srvr := NewServer("", topo.id, topo.cfg.ServerOpts...)
77 assert.Equal(t, tc.loadBalanced, srvr.cfg.loadBalanced, "expected loadBalanced %v, got %v", tc.loadBalanced, srvr.cfg.loadBalanced)
78
79 conn := newConnection("", srvr.cfg.connectionOpts...)
80 assert.Equal(t, tc.loadBalanced, conn.config.loadBalanced, "expected loadBalanced %v, got %v", tc.loadBalanced, conn.config.loadBalanced)
81 })
82 }
83 }
84
85 func TestTopologyNewConfig(t *testing.T) {
86 t.Run("default ServerSelectionTimeout", func(t *testing.T) {
87 cfg, err := NewConfig(options.Client(), nil)
88 assert.Nil(t, err, "error constructing topology config: %v", err)
89 assert.Equal(t, defaultServerSelectionTimeout, cfg.ServerSelectionTimeout)
90 })
91 t.Run("non-default ServerSelectionTimeout", func(t *testing.T) {
92 cfg, err := NewConfig(options.Client().SetServerSelectionTimeout(1), nil)
93 assert.Nil(t, err, "error constructing topology config: %v", err)
94 assert.Equal(t, time.Duration(1), cfg.ServerSelectionTimeout)
95 })
96 t.Run("default SeedList", func(t *testing.T) {
97 cfg, err := NewConfig(options.Client(), nil)
98 assert.Nil(t, err, "error constructing topology config: %v", err)
99 assert.Equal(t, []string{"localhost:27017"}, cfg.SeedList)
100 })
101 t.Run("non-default SeedList", func(t *testing.T) {
102 cfg, err := NewConfig(options.Client().ApplyURI("mongodb://localhost:27018"), nil)
103 assert.Nil(t, err, "error constructing topology config: %v", err)
104 assert.Equal(t, []string{"localhost:27018"}, cfg.SeedList)
105 })
106 }
107
View as plain text