github.com/hernad/nomad@v1.6.112/nomad/structs/service_registration_test.go (about)

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