github.com/anth0d/nomad@v0.0.0-20221214183521-ae3a0a2cad06/nomad/structs/service_registration_test.go (about)

     1  package structs
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/shoenig/test/must"
     7  	"github.com/stretchr/testify/require"
     8  )
     9  
    10  func TestServiceRegistration_Copy(t *testing.T) {
    11  	sr := &ServiceRegistration{
    12  		ID:          "_nomad-task-2873cf75-42e5-7c45-ca1c-415f3e18be3d-group-cache-example-cache-db",
    13  		ServiceName: "example-cache",
    14  		Namespace:   "default",
    15  		NodeID:      "17a6d1c0-811e-2ca9-ded0-3d5d6a54904c",
    16  		Datacenter:  "dc1",
    17  		JobID:       "example",
    18  		AllocID:     "2873cf75-42e5-7c45-ca1c-415f3e18be3d",
    19  		Tags:        []string{"foo"},
    20  		Address:     "192.168.13.13",
    21  		Port:        23813,
    22  	}
    23  	newSR := sr.Copy()
    24  	require.True(t, sr.Equal(newSR))
    25  }
    26  
    27  func TestServiceRegistration_Equal(t *testing.T) {
    28  	testCases := []struct {
    29  		serviceReg1    *ServiceRegistration
    30  		serviceReg2    *ServiceRegistration
    31  		expectedOutput bool
    32  		name           string
    33  	}{
    34  		{
    35  			serviceReg1: nil,
    36  			serviceReg2: &ServiceRegistration{
    37  				ID:          "_nomad-task-2873cf75-42e5-7c45-ca1c-415f3e18be3d-group-cache-example-cache-db",
    38  				ServiceName: "example-cache",
    39  				Namespace:   "default",
    40  				NodeID:      "17a6d1c0-811e-2ca9-ded0-3d5d6a54904c",
    41  				Datacenter:  "dc1",
    42  				JobID:       "example",
    43  				AllocID:     "2873cf75-42e5-7c45-ca1c-415f3e18be3d",
    44  				Tags:        []string{"foo"},
    45  				Address:     "192.168.13.13",
    46  				Port:        23813,
    47  			},
    48  			expectedOutput: false,
    49  			name:           "nil service registration composed",
    50  		},
    51  		{
    52  			serviceReg1: &ServiceRegistration{
    53  				ID:          "_nomad-task-2873cf75-42e5-7c45-ca1c-415f3e18be3d-group-cache-example-cache-db",
    54  				ServiceName: "example-cache",
    55  				Namespace:   "default",
    56  				NodeID:      "17a6d1c0-811e-2ca9-ded0-3d5d6a54904c",
    57  				Datacenter:  "dc1",
    58  				JobID:       "example",
    59  				AllocID:     "2873cf75-42e5-7c45-ca1c-415f3e18be3d",
    60  				Tags:        []string{"foo"},
    61  				Address:     "192.168.13.13",
    62  				Port:        23813,
    63  			},
    64  			serviceReg2:    nil,
    65  			expectedOutput: false,
    66  			name:           "nil service registration func input",
    67  		},
    68  		{
    69  			serviceReg1: &ServiceRegistration{
    70  				ID:          "_nomad-task-2873cf75-42e5-7c45-ca1c-415f3e18be3d-group-cache-example-cache-db",
    71  				ServiceName: "example-cache",
    72  				Namespace:   "default",
    73  				NodeID:      "17a6d1c0-811e-2ca9-ded0-3d5d6a54904c",
    74  				Datacenter:  "dc1",
    75  				JobID:       "example",
    76  				AllocID:     "2873cf75-42e5-7c45-ca1c-415f3e18be3d",
    77  				Tags:        []string{"foo"},
    78  				Address:     "192.168.13.13",
    79  				Port:        23813,
    80  			},
    81  			serviceReg2: &ServiceRegistration{
    82  				ID:          "_nomad-group-2873cf75-42e5-7c45-ca1c-415f3e18be3dcache-example-cache-db",
    83  				ServiceName: "example-cache",
    84  				Namespace:   "default",
    85  				NodeID:      "17a6d1c0-811e-2ca9-ded0-3d5d6a54904c",
    86  				Datacenter:  "dc1",
    87  				JobID:       "example",
    88  				AllocID:     "2873cf75-42e5-7c45-ca1c-415f3e18be3d",
    89  				Tags:        []string{"foo"},
    90  				Address:     "192.168.13.13",
    91  				Port:        23813,
    92  			},
    93  			expectedOutput: false,
    94  			name:           "ID not equal",
    95  		},
    96  		{
    97  			serviceReg1: &ServiceRegistration{
    98  				ID:          "_nomad-task-2873cf75-42e5-7c45-ca1c-415f3e18be3d-group-cache-example-cache-db",
    99  				ServiceName: "example-cache",
   100  				Namespace:   "default",
   101  				NodeID:      "17a6d1c0-811e-2ca9-ded0-3d5d6a54904c",
   102  				Datacenter:  "dc1",
   103  				JobID:       "example",
   104  				AllocID:     "2873cf75-42e5-7c45-ca1c-415f3e18be3d",
   105  				Tags:        []string{"foo"},
   106  				Address:     "192.168.13.13",
   107  				Port:        23813,
   108  			},
   109  			serviceReg2: &ServiceRegistration{
   110  				ID:          "_nomad-task-2873cf75-42e5-7c45-ca1c-415f3e18be3d-group-cache-example-cache-db",
   111  				ServiceName: "platform-example-cache",
   112  				Namespace:   "default",
   113  				NodeID:      "17a6d1c0-811e-2ca9-ded0-3d5d6a54904c",
   114  				Datacenter:  "dc1",
   115  				JobID:       "example",
   116  				AllocID:     "2873cf75-42e5-7c45-ca1c-415f3e18be3d",
   117  				Tags:        []string{"foo"},
   118  				Address:     "192.168.13.13",
   119  				Port:        23813,
   120  			},
   121  			expectedOutput: false,
   122  			name:           "service name not equal",
   123  		},
   124  		{
   125  			serviceReg1: &ServiceRegistration{
   126  				ID:          "_nomad-task-2873cf75-42e5-7c45-ca1c-415f3e18be3d-group-cache-example-cache-db",
   127  				ServiceName: "example-cache",
   128  				Namespace:   "default",
   129  				NodeID:      "17a6d1c0-811e-2ca9-ded0-3d5d6a54904c",
   130  				Datacenter:  "dc1",
   131  				JobID:       "example",
   132  				AllocID:     "2873cf75-42e5-7c45-ca1c-415f3e18be3d",
   133  				Tags:        []string{"foo"},
   134  				Address:     "192.168.13.13",
   135  				Port:        23813,
   136  			},
   137  			serviceReg2: &ServiceRegistration{
   138  				ID:          "_nomad-task-2873cf75-42e5-7c45-ca1c-415f3e18be3d-group-cache-example-cache-db",
   139  				ServiceName: "example-cache",
   140  				Namespace:   "default",
   141  				NodeID:      "ba991c17-7ce5-9c20-78b7-311e63578583",
   142  				Datacenter:  "dc1",
   143  				JobID:       "example",
   144  				AllocID:     "2873cf75-42e5-7c45-ca1c-415f3e18be3d",
   145  				Tags:        []string{"foo"},
   146  				Address:     "192.168.13.13",
   147  				Port:        23813,
   148  			},
   149  			expectedOutput: false,
   150  			name:           "node ID not equal",
   151  		},
   152  		{
   153  			serviceReg1: &ServiceRegistration{
   154  				ID:          "_nomad-task-2873cf75-42e5-7c45-ca1c-415f3e18be3d-group-cache-example-cache-db",
   155  				ServiceName: "example-cache",
   156  				Namespace:   "default",
   157  				NodeID:      "17a6d1c0-811e-2ca9-ded0-3d5d6a54904c",
   158  				Datacenter:  "dc1",
   159  				JobID:       "example",
   160  				AllocID:     "2873cf75-42e5-7c45-ca1c-415f3e18be3d",
   161  				Tags:        []string{"foo"},
   162  				Address:     "192.168.13.13",
   163  				Port:        23813,
   164  			},
   165  			serviceReg2: &ServiceRegistration{
   166  				ID:          "_nomad-task-2873cf75-42e5-7c45-ca1c-415f3e18be3d-group-cache-example-cache-db",
   167  				ServiceName: "example-cache",
   168  				Namespace:   "default",
   169  				NodeID:      "17a6d1c0-811e-2ca9-ded0-3d5d6a54904c",
   170  				Datacenter:  "dc2",
   171  				JobID:       "example",
   172  				AllocID:     "2873cf75-42e5-7c45-ca1c-415f3e18be3d",
   173  				Tags:        []string{"foo"},
   174  				Address:     "192.168.13.13",
   175  				Port:        23813,
   176  			},
   177  			expectedOutput: false,
   178  			name:           "datacenter not equal",
   179  		},
   180  		{
   181  			serviceReg1: &ServiceRegistration{
   182  				ID:          "_nomad-task-2873cf75-42e5-7c45-ca1c-415f3e18be3d-group-cache-example-cache-db",
   183  				ServiceName: "example-cache",
   184  				Namespace:   "default",
   185  				NodeID:      "17a6d1c0-811e-2ca9-ded0-3d5d6a54904c",
   186  				Datacenter:  "dc1",
   187  				JobID:       "example",
   188  				AllocID:     "2873cf75-42e5-7c45-ca1c-415f3e18be3d",
   189  				Tags:        []string{"foo"},
   190  				Address:     "192.168.13.13",
   191  				Port:        23813,
   192  			},
   193  			serviceReg2: &ServiceRegistration{
   194  				ID:          "_nomad-task-2873cf75-42e5-7c45-ca1c-415f3e18be3d-group-cache-example-cache-db",
   195  				ServiceName: "example-cache",
   196  				Namespace:   "default",
   197  				NodeID:      "17a6d1c0-811e-2ca9-ded0-3d5d6a54904c",
   198  				Datacenter:  "dc1",
   199  				JobID:       "platform-example",
   200  				AllocID:     "2873cf75-42e5-7c45-ca1c-415f3e18be3d",
   201  				Tags:        []string{"foo"},
   202  				Address:     "192.168.13.13",
   203  				Port:        23813,
   204  			},
   205  			expectedOutput: false,
   206  			name:           "job ID not equal",
   207  		},
   208  		{
   209  			serviceReg1: &ServiceRegistration{
   210  				ID:          "_nomad-task-2873cf75-42e5-7c45-ca1c-415f3e18be3d-group-cache-example-cache-db",
   211  				ServiceName: "example-cache",
   212  				Namespace:   "default",
   213  				NodeID:      "17a6d1c0-811e-2ca9-ded0-3d5d6a54904c",
   214  				Datacenter:  "dc1",
   215  				JobID:       "example",
   216  				AllocID:     "2873cf75-42e5-7c45-ca1c-415f3e18be3d",
   217  				Tags:        []string{"foo"},
   218  				Address:     "192.168.13.13",
   219  				Port:        23813,
   220  			},
   221  			serviceReg2: &ServiceRegistration{
   222  				ID:          "_nomad-task-2873cf75-42e5-7c45-ca1c-415f3e18be3d-group-cache-example-cache-db",
   223  				ServiceName: "example-cache",
   224  				Namespace:   "default",
   225  				NodeID:      "17a6d1c0-811e-2ca9-ded0-3d5d6a54904c",
   226  				Datacenter:  "dc1",
   227  				JobID:       "example",
   228  				AllocID:     "ba991c17-7ce5-9c20-78b7-311e63578583",
   229  				Tags:        []string{"foo"},
   230  				Address:     "192.168.13.13",
   231  				Port:        23813,
   232  			},
   233  			expectedOutput: false,
   234  			name:           "alloc ID not equal",
   235  		},
   236  		{
   237  			serviceReg1: &ServiceRegistration{
   238  				ID:          "_nomad-task-2873cf75-42e5-7c45-ca1c-415f3e18be3d-group-cache-example-cache-db",
   239  				ServiceName: "example-cache",
   240  				Namespace:   "default",
   241  				NodeID:      "17a6d1c0-811e-2ca9-ded0-3d5d6a54904c",
   242  				Datacenter:  "dc1",
   243  				JobID:       "example",
   244  				AllocID:     "2873cf75-42e5-7c45-ca1c-415f3e18be3d",
   245  				Tags:        []string{"foo"},
   246  				Address:     "192.168.13.13",
   247  				Port:        23813,
   248  			},
   249  			serviceReg2: &ServiceRegistration{
   250  				ID:          "_nomad-task-2873cf75-42e5-7c45-ca1c-415f3e18be3d-group-cache-example-cache-db",
   251  				ServiceName: "example-cache",
   252  				Namespace:   "platform",
   253  				NodeID:      "17a6d1c0-811e-2ca9-ded0-3d5d6a54904c",
   254  				Datacenter:  "dc1",
   255  				JobID:       "example",
   256  				AllocID:     "2873cf75-42e5-7c45-ca1c-415f3e18be3d",
   257  				Tags:        []string{"foo"},
   258  				Address:     "192.168.13.13",
   259  				Port:        23813,
   260  			},
   261  			expectedOutput: false,
   262  			name:           "namespace not equal",
   263  		},
   264  		{
   265  			serviceReg1: &ServiceRegistration{
   266  				ID:          "_nomad-task-2873cf75-42e5-7c45-ca1c-415f3e18be3d-group-cache-example-cache-db",
   267  				ServiceName: "example-cache",
   268  				Namespace:   "default",
   269  				NodeID:      "17a6d1c0-811e-2ca9-ded0-3d5d6a54904c",
   270  				Datacenter:  "dc1",
   271  				JobID:       "example",
   272  				AllocID:     "2873cf75-42e5-7c45-ca1c-415f3e18be3d",
   273  				Tags:        []string{"foo"},
   274  				Address:     "192.168.13.13",
   275  				Port:        23813,
   276  			},
   277  			serviceReg2: &ServiceRegistration{
   278  				ID:          "_nomad-task-2873cf75-42e5-7c45-ca1c-415f3e18be3d-group-cache-example-cache-db",
   279  				ServiceName: "example-cache",
   280  				Namespace:   "default",
   281  				NodeID:      "17a6d1c0-811e-2ca9-ded0-3d5d6a54904c",
   282  				Datacenter:  "dc1",
   283  				JobID:       "example",
   284  				AllocID:     "2873cf75-42e5-7c45-ca1c-415f3e18be3d",
   285  				Tags:        []string{"foo"},
   286  				Address:     "10.10.13.13",
   287  				Port:        23813,
   288  			},
   289  			expectedOutput: false,
   290  			name:           "address not equal",
   291  		},
   292  		{
   293  			serviceReg1: &ServiceRegistration{
   294  				ID:          "_nomad-task-2873cf75-42e5-7c45-ca1c-415f3e18be3d-group-cache-example-cache-db",
   295  				ServiceName: "example-cache",
   296  				Namespace:   "default",
   297  				NodeID:      "17a6d1c0-811e-2ca9-ded0-3d5d6a54904c",
   298  				Datacenter:  "dc1",
   299  				JobID:       "example",
   300  				AllocID:     "2873cf75-42e5-7c45-ca1c-415f3e18be3d",
   301  				Tags:        []string{"foo"},
   302  				Address:     "192.168.13.13",
   303  				Port:        23813,
   304  			},
   305  			serviceReg2: &ServiceRegistration{
   306  				ID:          "_nomad-task-2873cf75-42e5-7c45-ca1c-415f3e18be3d-group-cache-example-cache-db",
   307  				ServiceName: "example-cache",
   308  				Namespace:   "default",
   309  				NodeID:      "17a6d1c0-811e-2ca9-ded0-3d5d6a54904c",
   310  				Datacenter:  "dc1",
   311  				JobID:       "example",
   312  				AllocID:     "2873cf75-42e5-7c45-ca1c-415f3e18be3d",
   313  				Tags:        []string{"foo"},
   314  				Address:     "192.168.13.13",
   315  				Port:        33813,
   316  			},
   317  			expectedOutput: false,
   318  			name:           "port not equal",
   319  		},
   320  		{
   321  			serviceReg1: &ServiceRegistration{
   322  				ID:          "_nomad-task-2873cf75-42e5-7c45-ca1c-415f3e18be3d-group-cache-example-cache-db",
   323  				ServiceName: "example-cache",
   324  				Namespace:   "default",
   325  				NodeID:      "17a6d1c0-811e-2ca9-ded0-3d5d6a54904c",
   326  				Datacenter:  "dc1",
   327  				JobID:       "example",
   328  				AllocID:     "2873cf75-42e5-7c45-ca1c-415f3e18be3d",
   329  				Tags:        []string{"foo"},
   330  				Address:     "192.168.13.13",
   331  				Port:        23813,
   332  			},
   333  			serviceReg2: &ServiceRegistration{
   334  				ID:          "_nomad-task-2873cf75-42e5-7c45-ca1c-415f3e18be3d-group-cache-example-cache-db",
   335  				ServiceName: "example-cache",
   336  				Namespace:   "default",
   337  				NodeID:      "17a6d1c0-811e-2ca9-ded0-3d5d6a54904c",
   338  				Datacenter:  "dc1",
   339  				JobID:       "example",
   340  				AllocID:     "2873cf75-42e5-7c45-ca1c-415f3e18be3d",
   341  				Tags:        []string{"canary"},
   342  				Address:     "192.168.13.13",
   343  				Port:        23813,
   344  			},
   345  			expectedOutput: false,
   346  			name:           "tags not equal",
   347  		},
   348  		{
   349  			serviceReg1: &ServiceRegistration{
   350  				ID:          "_nomad-task-2873cf75-42e5-7c45-ca1c-415f3e18be3d-group-cache-example-cache-db",
   351  				ServiceName: "example-cache",
   352  				Namespace:   "default",
   353  				NodeID:      "17a6d1c0-811e-2ca9-ded0-3d5d6a54904c",
   354  				Datacenter:  "dc1",
   355  				JobID:       "example",
   356  				AllocID:     "2873cf75-42e5-7c45-ca1c-415f3e18be3d",
   357  				Tags:        []string{"foo"},
   358  				Address:     "192.168.13.13",
   359  				Port:        23813,
   360  			},
   361  			serviceReg2: &ServiceRegistration{
   362  				ID:          "_nomad-task-2873cf75-42e5-7c45-ca1c-415f3e18be3d-group-cache-example-cache-db",
   363  				ServiceName: "example-cache",
   364  				Namespace:   "default",
   365  				NodeID:      "17a6d1c0-811e-2ca9-ded0-3d5d6a54904c",
   366  				Datacenter:  "dc1",
   367  				JobID:       "example",
   368  				AllocID:     "2873cf75-42e5-7c45-ca1c-415f3e18be3d",
   369  				Tags:        []string{"foo"},
   370  				Address:     "192.168.13.13",
   371  				Port:        23813,
   372  			},
   373  			expectedOutput: true,
   374  			name:           "both equal",
   375  		},
   376  	}
   377  
   378  	for _, tc := range testCases {
   379  		t.Run(tc.name, func(t *testing.T) {
   380  			actualOutput := tc.serviceReg1.Equal(tc.serviceReg2)
   381  			require.Equal(t, tc.expectedOutput, actualOutput)
   382  		})
   383  	}
   384  }
   385  
   386  func TestServiceRegistration_GetID(t *testing.T) {
   387  	testCases := []struct {
   388  		inputServiceRegistration *ServiceRegistration
   389  		expectedOutput           string
   390  		name                     string
   391  	}{
   392  		{
   393  			inputServiceRegistration: nil,
   394  			expectedOutput:           "",
   395  			name:                     "nil input",
   396  		},
   397  		{
   398  			inputServiceRegistration: &ServiceRegistration{
   399  				ID: "_nomad-task-2873cf75-42e5-7c45-ca1c-415f3e18be3d-group-cache-example-cache-db",
   400  			},
   401  			expectedOutput: "_nomad-task-2873cf75-42e5-7c45-ca1c-415f3e18be3d-group-cache-example-cache-db",
   402  			name:           "generic input 1",
   403  		},
   404  	}
   405  
   406  	for _, tc := range testCases {
   407  		t.Run(tc.name, func(t *testing.T) {
   408  			actualOutput := tc.inputServiceRegistration.GetID()
   409  			require.Equal(t, tc.expectedOutput, actualOutput)
   410  		})
   411  	}
   412  }
   413  
   414  func TestServiceRegistration_GetNamespace(t *testing.T) {
   415  	testCases := []struct {
   416  		inputServiceRegistration *ServiceRegistration
   417  		expectedOutput           string
   418  		name                     string
   419  	}{
   420  		{
   421  			inputServiceRegistration: nil,
   422  			expectedOutput:           "",
   423  			name:                     "nil input",
   424  		},
   425  		{
   426  			inputServiceRegistration: &ServiceRegistration{
   427  				Namespace: "platform",
   428  			},
   429  			expectedOutput: "platform",
   430  			name:           "generic input 1",
   431  		},
   432  	}
   433  
   434  	for _, tc := range testCases {
   435  		t.Run(tc.name, func(t *testing.T) {
   436  			actualOutput := tc.inputServiceRegistration.GetNamespace()
   437  			require.Equal(t, tc.expectedOutput, actualOutput)
   438  		})
   439  	}
   440  }
   441  
   442  func TestServiceRegistrationListRequest_StaleReadSupport(t *testing.T) {
   443  	req := &ServiceRegistrationListRequest{}
   444  	require.True(t, req.IsRead())
   445  }
   446  
   447  func TestServiceRegistrationByNameRequest_StaleReadSupport(t *testing.T) {
   448  	req := &ServiceRegistrationByNameRequest{}
   449  	require.True(t, req.IsRead())
   450  }
   451  
   452  func TestServiceRegistration_HashWith(t *testing.T) {
   453  	a := ServiceRegistration{
   454  		Address: "10.0.0.1",
   455  		Port:    9999,
   456  	}
   457  
   458  	// same service, same key -> same hash
   459  	must.Eq(t, a.HashWith("aaa"), a.HashWith("aaa"))
   460  
   461  	// same service, different key -> different hash
   462  	must.NotEq(t, a.HashWith("aaa"), a.HashWith("bbb"))
   463  
   464  	b := ServiceRegistration{
   465  		Address: "10.0.0.2",
   466  		Port:    9998,
   467  	}
   468  
   469  	// different service, same key -> different hash
   470  	must.NotEq(t, a.HashWith("aaa"), b.HashWith("aaa"))
   471  
   472  	// different service, different key -> different hash
   473  	must.NotEq(t, a.HashWith("aaa"), b.HashWith("bbb"))
   474  }