...

Source file src/go.mongodb.org/mongo-driver/x/mongo/driver/topology/topology_options_test.go

Documentation: go.mongodb.org/mongo-driver/x/mongo/driver/topology

     1  // Copyright (C) MongoDB, Inc. 2017-present.
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License"); you may
     4  // not use this file except in compliance with the License. You may obtain
     5  // a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
     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