...

Source file src/edge-infra.dev/pkg/sds/lib/etcd/server/embed/cluster_test.go

Documentation: edge-infra.dev/pkg/sds/lib/etcd/server/embed

     1  package embed
     2  
     3  import (
     4  	"fmt"
     5  	"net/url"
     6  	"strings"
     7  	"testing"
     8  
     9  	"github.com/stretchr/testify/assert"
    10  	"github.com/stretchr/testify/require"
    11  	"go.etcd.io/etcd/server/v3/embed"
    12  )
    13  
    14  func TestNewCluster(t *testing.T) {
    15  	testCases := map[string]struct {
    16  		input       []*Member
    17  		expectError bool
    18  	}{
    19  		"Success": {
    20  			input: []*Member{
    21  				{
    22  					config: &Config{Name: "member-1"},
    23  				},
    24  				{
    25  					config: &Config{Name: "member-2"},
    26  				},
    27  			},
    28  			expectError: false,
    29  		},
    30  		"Failure_NoMembers": {
    31  			input:       []*Member{},
    32  			expectError: true,
    33  		},
    34  	}
    35  
    36  	for name, tc := range testCases {
    37  		t.Run(name, func(t *testing.T) {
    38  			c, err := NewCluster(tc.input...)
    39  			if tc.expectError {
    40  				assert.Error(t, err)
    41  				return
    42  			}
    43  			require.NoError(t, err)
    44  			for _, key := range tc.input {
    45  				assert.True(t, memberExists(c, key), fmt.Sprintf("%s should exist in cluster member list", key.config.Name))
    46  			}
    47  		})
    48  	}
    49  }
    50  
    51  func TestCurrentCluster(t *testing.T) {
    52  	c := createCluster()
    53  
    54  	actualCluster := c.CurrentCluster()
    55  	assert.Contains(t, actualCluster, fmt.Sprintf("member-1=https://%s:1", DefaultHost))
    56  	assert.Contains(t, actualCluster, fmt.Sprintf("member-2=https://%s:2", DefaultHost))
    57  	assert.Len(t, strings.Split(actualCluster, ","), 2)
    58  }
    59  
    60  func TestAddMember(t *testing.T) {
    61  	c := createCluster()
    62  
    63  	m := &Member{
    64  		state: &defaultState{},
    65  		config: &Config{
    66  			Name: "member-3",
    67  			embed: &embed.Config{
    68  				AdvertisePeerUrls: []url.URL{
    69  					{
    70  						Scheme: "https",
    71  						Host:   fmt.Sprintf("%s:3", DefaultHost),
    72  					},
    73  				},
    74  			},
    75  		},
    76  	}
    77  
    78  	_, err := c.AddMember(m)
    79  	require.NoError(t, err)
    80  
    81  	assert.True(t, memberExists(c, m), "new member should exist in the cluster struct")
    82  }
    83  
    84  func createCluster() *Cluster {
    85  	return &Cluster{
    86  		members: []*Member{
    87  			{
    88  				config: &Config{
    89  					Name: "member-1",
    90  					embed: &embed.Config{
    91  						AdvertisePeerUrls: []url.URL{
    92  							{
    93  								Scheme: "https",
    94  								Host:   fmt.Sprintf("%s:1", DefaultHost),
    95  							},
    96  						},
    97  					},
    98  				},
    99  			},
   100  			{
   101  				config: &Config{
   102  					Name: "member-2",
   103  					embed: &embed.Config{
   104  						AdvertisePeerUrls: []url.URL{
   105  							{
   106  								Scheme: "https",
   107  								Host:   fmt.Sprintf("%s:2", DefaultHost),
   108  							},
   109  						},
   110  					},
   111  				}},
   112  		},
   113  	}
   114  }
   115  
   116  func memberExists(cluster *Cluster, member *Member) bool {
   117  	for _, m := range cluster.members {
   118  		if member.config.Name == m.config.Name {
   119  			return true
   120  		}
   121  	}
   122  	return false
   123  }
   124  

View as plain text