github.com/gophercloud/gophercloud@v1.11.0/openstack/compute/v2/servers/testing/requests_test.go (about)

     1  package testing
     2  
     3  import (
     4  	"encoding/base64"
     5  	"encoding/json"
     6  	"net/http"
     7  	"testing"
     8  
     9  	"github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/availabilityzones"
    10  	"github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/diskconfig"
    11  	"github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/extendedstatus"
    12  	"github.com/gophercloud/gophercloud/openstack/compute/v2/servers"
    13  	"github.com/gophercloud/gophercloud/pagination"
    14  	th "github.com/gophercloud/gophercloud/testhelper"
    15  	"github.com/gophercloud/gophercloud/testhelper/client"
    16  )
    17  
    18  func TestListServers(t *testing.T) {
    19  	th.SetupHTTP()
    20  	defer th.TeardownHTTP()
    21  	HandleServerListSuccessfully(t)
    22  
    23  	pages := 0
    24  	err := servers.List(client.ServiceClient(), servers.ListOpts{}).EachPage(func(page pagination.Page) (bool, error) {
    25  		pages++
    26  
    27  		actual, err := servers.ExtractServers(page)
    28  		if err != nil {
    29  			return false, err
    30  		}
    31  
    32  		if len(actual) != 3 {
    33  			t.Fatalf("Expected 3 servers, got %d", len(actual))
    34  		}
    35  		th.CheckDeepEquals(t, ServerHerp, actual[0])
    36  		th.CheckDeepEquals(t, ServerDerp, actual[1])
    37  		th.CheckDeepEquals(t, ServerMerp, actual[2])
    38  
    39  		return true, nil
    40  	})
    41  
    42  	th.AssertNoErr(t, err)
    43  
    44  	if pages != 1 {
    45  		t.Errorf("Expected 1 page, saw %d", pages)
    46  	}
    47  }
    48  
    49  func TestListAllServers(t *testing.T) {
    50  	th.SetupHTTP()
    51  	defer th.TeardownHTTP()
    52  	HandleServerListSimpleSuccessfully(t)
    53  
    54  	allPages, err := servers.ListSimple(client.ServiceClient(), servers.ListOpts{}).AllPages()
    55  	th.AssertNoErr(t, err)
    56  	actual, err := servers.ExtractServers(allPages)
    57  	th.AssertNoErr(t, err)
    58  	th.CheckDeepEquals(t, ServerHerp, actual[0])
    59  	th.CheckDeepEquals(t, ServerDerp, actual[1])
    60  }
    61  
    62  func TestListAllServersWithExtensions(t *testing.T) {
    63  	th.SetupHTTP()
    64  	defer th.TeardownHTTP()
    65  	HandleServerListSuccessfully(t)
    66  
    67  	type ServerWithExt struct {
    68  		servers.Server
    69  		availabilityzones.ServerAvailabilityZoneExt
    70  		extendedstatus.ServerExtendedStatusExt
    71  		diskconfig.ServerDiskConfigExt
    72  	}
    73  
    74  	allPages, err := servers.List(client.ServiceClient(), servers.ListOpts{}).AllPages()
    75  	th.AssertNoErr(t, err)
    76  
    77  	var actual []ServerWithExt
    78  	err = servers.ExtractServersInto(allPages, &actual)
    79  	th.AssertNoErr(t, err)
    80  	th.AssertEquals(t, 3, len(actual))
    81  	th.AssertEquals(t, "nova", actual[0].AvailabilityZone)
    82  	th.AssertEquals(t, "RUNNING", actual[0].PowerState.String())
    83  	th.AssertEquals(t, "", actual[0].TaskState)
    84  	th.AssertEquals(t, "active", actual[0].VmState)
    85  	th.AssertEquals(t, diskconfig.Manual, actual[0].DiskConfig)
    86  }
    87  
    88  func TestCreateServer(t *testing.T) {
    89  	th.SetupHTTP()
    90  	defer th.TeardownHTTP()
    91  	HandleServerCreationSuccessfully(t, SingleServerBody)
    92  
    93  	actual, err := servers.Create(client.ServiceClient(), servers.CreateOpts{
    94  		Name:      "derp",
    95  		ImageRef:  "f90f6034-2570-4974-8351-6b49732ef2eb",
    96  		FlavorRef: "1",
    97  	}).Extract()
    98  	th.AssertNoErr(t, err)
    99  
   100  	th.CheckDeepEquals(t, ServerDerp, *actual)
   101  }
   102  
   103  func TestCreateServerNoNetwork(t *testing.T) {
   104  	th.SetupHTTP()
   105  	defer th.TeardownHTTP()
   106  	HandleServerNoNetworkCreationSuccessfully(t, SingleServerBody)
   107  
   108  	actual, err := servers.Create(client.ServiceClient(), servers.CreateOpts{
   109  		Name:      "derp",
   110  		ImageRef:  "f90f6034-2570-4974-8351-6b49732ef2eb",
   111  		FlavorRef: "1",
   112  		Networks:  "none",
   113  	}).Extract()
   114  	th.AssertNoErr(t, err)
   115  
   116  	th.CheckDeepEquals(t, ServerDerp, *actual)
   117  }
   118  
   119  func TestCreateServers(t *testing.T) {
   120  	th.SetupHTTP()
   121  	defer th.TeardownHTTP()
   122  	HandleServersCreationSuccessfully(t, SingleServerBody)
   123  
   124  	actual, err := servers.Create(client.ServiceClient(), servers.CreateOpts{
   125  		Name:      "derp",
   126  		ImageRef:  "f90f6034-2570-4974-8351-6b49732ef2eb",
   127  		FlavorRef: "1",
   128  		Min:       3,
   129  		Max:       3,
   130  	}).Extract()
   131  	th.AssertNoErr(t, err)
   132  
   133  	th.CheckDeepEquals(t, ServerDerp, *actual)
   134  }
   135  
   136  func TestCreateServerWithCustomField(t *testing.T) {
   137  	th.SetupHTTP()
   138  	defer th.TeardownHTTP()
   139  	HandleServerCreationWithCustomFieldSuccessfully(t, SingleServerBody)
   140  
   141  	actual, err := servers.Create(client.ServiceClient(), CreateOptsWithCustomField{
   142  		CreateOpts: servers.CreateOpts{
   143  			Name:      "derp",
   144  			ImageRef:  "f90f6034-2570-4974-8351-6b49732ef2eb",
   145  			FlavorRef: "1",
   146  		},
   147  		Foo: "bar",
   148  	}).Extract()
   149  	th.AssertNoErr(t, err)
   150  
   151  	th.CheckDeepEquals(t, ServerDerp, *actual)
   152  }
   153  
   154  func TestCreateServerWithMetadata(t *testing.T) {
   155  	th.SetupHTTP()
   156  	defer th.TeardownHTTP()
   157  	HandleServerCreationWithMetadata(t, SingleServerBody)
   158  
   159  	actual, err := servers.Create(client.ServiceClient(), servers.CreateOpts{
   160  		Name:      "derp",
   161  		ImageRef:  "f90f6034-2570-4974-8351-6b49732ef2eb",
   162  		FlavorRef: "1",
   163  		Metadata: map[string]string{
   164  			"abc": "def",
   165  		},
   166  	}).Extract()
   167  	th.AssertNoErr(t, err)
   168  
   169  	th.CheckDeepEquals(t, ServerDerp, *actual)
   170  }
   171  
   172  func TestCreateServerWithUserdataString(t *testing.T) {
   173  	th.SetupHTTP()
   174  	defer th.TeardownHTTP()
   175  	HandleServerCreationWithUserdata(t, SingleServerBody)
   176  
   177  	actual, err := servers.Create(client.ServiceClient(), servers.CreateOpts{
   178  		Name:      "derp",
   179  		ImageRef:  "f90f6034-2570-4974-8351-6b49732ef2eb",
   180  		FlavorRef: "1",
   181  		UserData:  []byte("userdata string"),
   182  	}).Extract()
   183  	th.AssertNoErr(t, err)
   184  
   185  	th.CheckDeepEquals(t, ServerDerp, *actual)
   186  }
   187  
   188  func TestCreateServerWithUserdataEncoded(t *testing.T) {
   189  	th.SetupHTTP()
   190  	defer th.TeardownHTTP()
   191  	HandleServerCreationWithUserdata(t, SingleServerBody)
   192  
   193  	encoded := base64.StdEncoding.EncodeToString([]byte("userdata string"))
   194  
   195  	actual, err := servers.Create(client.ServiceClient(), servers.CreateOpts{
   196  		Name:      "derp",
   197  		ImageRef:  "f90f6034-2570-4974-8351-6b49732ef2eb",
   198  		FlavorRef: "1",
   199  		UserData:  []byte(encoded),
   200  	}).Extract()
   201  	th.AssertNoErr(t, err)
   202  
   203  	th.CheckDeepEquals(t, ServerDerp, *actual)
   204  }
   205  
   206  func TestDeleteServer(t *testing.T) {
   207  	th.SetupHTTP()
   208  	defer th.TeardownHTTP()
   209  	HandleServerDeletionSuccessfully(t)
   210  
   211  	res := servers.Delete(client.ServiceClient(), "asdfasdfasdf")
   212  	th.AssertNoErr(t, res.Err)
   213  }
   214  
   215  func TestForceDeleteServer(t *testing.T) {
   216  	th.SetupHTTP()
   217  	defer th.TeardownHTTP()
   218  	HandleServerForceDeletionSuccessfully(t)
   219  
   220  	res := servers.ForceDelete(client.ServiceClient(), "asdfasdfasdf")
   221  	th.AssertNoErr(t, res.Err)
   222  }
   223  
   224  func TestGetServer(t *testing.T) {
   225  	th.SetupHTTP()
   226  	defer th.TeardownHTTP()
   227  	HandleServerGetSuccessfully(t)
   228  
   229  	client := client.ServiceClient()
   230  	actual, err := servers.Get(client, "1234asdf").Extract()
   231  	if err != nil {
   232  		t.Fatalf("Unexpected Get error: %v", err)
   233  	}
   234  
   235  	th.CheckDeepEquals(t, ServerDerp, *actual)
   236  }
   237  
   238  func TestGetFaultyServer(t *testing.T) {
   239  	th.SetupHTTP()
   240  	defer th.TeardownHTTP()
   241  	HandleServerGetFaultSuccessfully(t)
   242  
   243  	client := client.ServiceClient()
   244  	actual, err := servers.Get(client, "1234asdf").Extract()
   245  	if err != nil {
   246  		t.Fatalf("Unexpected Get error: %v", err)
   247  	}
   248  
   249  	FaultyServer := ServerDerp
   250  	FaultyServer.Fault = DerpFault
   251  	th.CheckDeepEquals(t, FaultyServer, *actual)
   252  }
   253  
   254  func TestGetServerWithExtensions(t *testing.T) {
   255  	th.SetupHTTP()
   256  	defer th.TeardownHTTP()
   257  	HandleServerGetSuccessfully(t)
   258  
   259  	var s struct {
   260  		servers.Server
   261  		availabilityzones.ServerAvailabilityZoneExt
   262  		extendedstatus.ServerExtendedStatusExt
   263  		diskconfig.ServerDiskConfigExt
   264  	}
   265  
   266  	err := servers.Get(client.ServiceClient(), "1234asdf").ExtractInto(&s)
   267  	th.AssertNoErr(t, err)
   268  	th.AssertEquals(t, "nova", s.AvailabilityZone)
   269  	th.AssertEquals(t, "RUNNING", s.PowerState.String())
   270  	th.AssertEquals(t, "", s.TaskState)
   271  	th.AssertEquals(t, "active", s.VmState)
   272  	th.AssertEquals(t, diskconfig.Manual, s.DiskConfig)
   273  
   274  	err = servers.Get(client.ServiceClient(), "1234asdf").ExtractInto(s)
   275  	if err == nil {
   276  		t.Errorf("Expected error when providing non-pointer struct")
   277  	}
   278  }
   279  
   280  func TestUpdateServer(t *testing.T) {
   281  	th.SetupHTTP()
   282  	defer th.TeardownHTTP()
   283  	HandleServerUpdateSuccessfully(t)
   284  
   285  	client := client.ServiceClient()
   286  	actual, err := servers.Update(client, "1234asdf", servers.UpdateOpts{Name: "new-name"}).Extract()
   287  	if err != nil {
   288  		t.Fatalf("Unexpected Update error: %v", err)
   289  	}
   290  
   291  	th.CheckDeepEquals(t, ServerDerp, *actual)
   292  }
   293  
   294  func TestChangeServerAdminPassword(t *testing.T) {
   295  	th.SetupHTTP()
   296  	defer th.TeardownHTTP()
   297  	HandleAdminPasswordChangeSuccessfully(t)
   298  
   299  	res := servers.ChangeAdminPassword(client.ServiceClient(), "1234asdf", "new-password")
   300  	th.AssertNoErr(t, res.Err)
   301  }
   302  
   303  func TestShowConsoleOutput(t *testing.T) {
   304  	th.SetupHTTP()
   305  	defer th.TeardownHTTP()
   306  	HandleShowConsoleOutputSuccessfully(t, ConsoleOutputBody)
   307  
   308  	outputOpts := &servers.ShowConsoleOutputOpts{
   309  		Length: 50,
   310  	}
   311  	actual, err := servers.ShowConsoleOutput(client.ServiceClient(), "1234asdf", outputOpts).Extract()
   312  
   313  	th.AssertNoErr(t, err)
   314  	th.AssertByteArrayEquals(t, []byte(ConsoleOutput), []byte(actual))
   315  }
   316  
   317  func TestGetPassword(t *testing.T) {
   318  	th.SetupHTTP()
   319  	defer th.TeardownHTTP()
   320  	HandlePasswordGetSuccessfully(t)
   321  
   322  	res := servers.GetPassword(client.ServiceClient(), "1234asdf")
   323  	th.AssertNoErr(t, res.Err)
   324  }
   325  
   326  func TestRebootServer(t *testing.T) {
   327  	th.SetupHTTP()
   328  	defer th.TeardownHTTP()
   329  	HandleRebootSuccessfully(t)
   330  
   331  	res := servers.Reboot(client.ServiceClient(), "1234asdf", servers.RebootOpts{
   332  		Type: servers.SoftReboot,
   333  	})
   334  	th.AssertNoErr(t, res.Err)
   335  }
   336  
   337  func TestRebuildServer(t *testing.T) {
   338  	th.SetupHTTP()
   339  	defer th.TeardownHTTP()
   340  	HandleRebuildSuccessfully(t, SingleServerBody)
   341  
   342  	opts := servers.RebuildOpts{
   343  		Name:       "new-name",
   344  		AdminPass:  "swordfish",
   345  		ImageRef:   "f90f6034-2570-4974-8351-6b49732ef2eb",
   346  		AccessIPv4: "1.2.3.4",
   347  	}
   348  
   349  	actual, err := servers.Rebuild(client.ServiceClient(), "1234asdf", opts).Extract()
   350  	th.AssertNoErr(t, err)
   351  
   352  	th.CheckDeepEquals(t, ServerDerp, *actual)
   353  }
   354  
   355  func TestResizeServer(t *testing.T) {
   356  	th.SetupHTTP()
   357  	defer th.TeardownHTTP()
   358  
   359  	th.Mux.HandleFunc("/servers/1234asdf/action", func(w http.ResponseWriter, r *http.Request) {
   360  		th.TestMethod(t, r, "POST")
   361  		th.TestHeader(t, r, "X-Auth-Token", client.TokenID)
   362  		th.TestJSONRequest(t, r, `{ "resize": { "flavorRef": "2" } }`)
   363  
   364  		w.WriteHeader(http.StatusAccepted)
   365  	})
   366  
   367  	res := servers.Resize(client.ServiceClient(), "1234asdf", servers.ResizeOpts{FlavorRef: "2"})
   368  	th.AssertNoErr(t, res.Err)
   369  }
   370  
   371  func TestConfirmResize(t *testing.T) {
   372  	th.SetupHTTP()
   373  	defer th.TeardownHTTP()
   374  
   375  	th.Mux.HandleFunc("/servers/1234asdf/action", func(w http.ResponseWriter, r *http.Request) {
   376  		th.TestMethod(t, r, "POST")
   377  		th.TestHeader(t, r, "X-Auth-Token", client.TokenID)
   378  		th.TestJSONRequest(t, r, `{ "confirmResize": null }`)
   379  
   380  		w.WriteHeader(http.StatusNoContent)
   381  	})
   382  
   383  	res := servers.ConfirmResize(client.ServiceClient(), "1234asdf")
   384  	th.AssertNoErr(t, res.Err)
   385  }
   386  
   387  func TestRevertResize(t *testing.T) {
   388  	th.SetupHTTP()
   389  	defer th.TeardownHTTP()
   390  
   391  	th.Mux.HandleFunc("/servers/1234asdf/action", func(w http.ResponseWriter, r *http.Request) {
   392  		th.TestMethod(t, r, "POST")
   393  		th.TestHeader(t, r, "X-Auth-Token", client.TokenID)
   394  		th.TestJSONRequest(t, r, `{ "revertResize": null }`)
   395  
   396  		w.WriteHeader(http.StatusAccepted)
   397  	})
   398  
   399  	res := servers.RevertResize(client.ServiceClient(), "1234asdf")
   400  	th.AssertNoErr(t, res.Err)
   401  }
   402  
   403  func TestGetMetadatum(t *testing.T) {
   404  	th.SetupHTTP()
   405  	defer th.TeardownHTTP()
   406  
   407  	HandleMetadatumGetSuccessfully(t)
   408  
   409  	expected := map[string]string{"foo": "bar"}
   410  	actual, err := servers.Metadatum(client.ServiceClient(), "1234asdf", "foo").Extract()
   411  	th.AssertNoErr(t, err)
   412  	th.AssertDeepEquals(t, expected, actual)
   413  }
   414  
   415  func TestCreateMetadatum(t *testing.T) {
   416  	th.SetupHTTP()
   417  	defer th.TeardownHTTP()
   418  
   419  	HandleMetadatumCreateSuccessfully(t)
   420  
   421  	expected := map[string]string{"foo": "bar"}
   422  	actual, err := servers.CreateMetadatum(client.ServiceClient(), "1234asdf", servers.MetadatumOpts{"foo": "bar"}).Extract()
   423  	th.AssertNoErr(t, err)
   424  	th.AssertDeepEquals(t, expected, actual)
   425  }
   426  
   427  func TestDeleteMetadatum(t *testing.T) {
   428  	th.SetupHTTP()
   429  	defer th.TeardownHTTP()
   430  
   431  	HandleMetadatumDeleteSuccessfully(t)
   432  
   433  	err := servers.DeleteMetadatum(client.ServiceClient(), "1234asdf", "foo").ExtractErr()
   434  	th.AssertNoErr(t, err)
   435  }
   436  
   437  func TestGetMetadata(t *testing.T) {
   438  	th.SetupHTTP()
   439  	defer th.TeardownHTTP()
   440  
   441  	HandleMetadataGetSuccessfully(t)
   442  
   443  	expected := map[string]string{"foo": "bar", "this": "that"}
   444  	actual, err := servers.Metadata(client.ServiceClient(), "1234asdf").Extract()
   445  	th.AssertNoErr(t, err)
   446  	th.AssertDeepEquals(t, expected, actual)
   447  }
   448  
   449  func TestResetMetadata(t *testing.T) {
   450  	th.SetupHTTP()
   451  	defer th.TeardownHTTP()
   452  
   453  	HandleMetadataResetSuccessfully(t)
   454  
   455  	expected := map[string]string{"foo": "bar", "this": "that"}
   456  	actual, err := servers.ResetMetadata(client.ServiceClient(), "1234asdf", servers.MetadataOpts{
   457  		"foo":  "bar",
   458  		"this": "that",
   459  	}).Extract()
   460  	th.AssertNoErr(t, err)
   461  	th.AssertDeepEquals(t, expected, actual)
   462  }
   463  
   464  func TestUpdateMetadata(t *testing.T) {
   465  	th.SetupHTTP()
   466  	defer th.TeardownHTTP()
   467  
   468  	HandleMetadataUpdateSuccessfully(t)
   469  
   470  	expected := map[string]string{"foo": "baz", "this": "those"}
   471  	actual, err := servers.UpdateMetadata(client.ServiceClient(), "1234asdf", servers.MetadataOpts{
   472  		"foo":  "baz",
   473  		"this": "those",
   474  	}).Extract()
   475  	th.AssertNoErr(t, err)
   476  	th.AssertDeepEquals(t, expected, actual)
   477  }
   478  
   479  func TestListAddresses(t *testing.T) {
   480  	th.SetupHTTP()
   481  	defer th.TeardownHTTP()
   482  	HandleAddressListSuccessfully(t)
   483  
   484  	expected := ListAddressesExpected
   485  	pages := 0
   486  	err := servers.ListAddresses(client.ServiceClient(), "asdfasdfasdf").EachPage(func(page pagination.Page) (bool, error) {
   487  		pages++
   488  
   489  		actual, err := servers.ExtractAddresses(page)
   490  		th.AssertNoErr(t, err)
   491  
   492  		if len(actual) != 2 {
   493  			t.Fatalf("Expected 2 networks, got %d", len(actual))
   494  		}
   495  		th.CheckDeepEquals(t, expected, actual)
   496  
   497  		return true, nil
   498  	})
   499  	th.AssertNoErr(t, err)
   500  	th.CheckEquals(t, 1, pages)
   501  }
   502  
   503  func TestListAddressesByNetwork(t *testing.T) {
   504  	th.SetupHTTP()
   505  	defer th.TeardownHTTP()
   506  	HandleNetworkAddressListSuccessfully(t)
   507  
   508  	expected := ListNetworkAddressesExpected
   509  	pages := 0
   510  	err := servers.ListAddressesByNetwork(client.ServiceClient(), "asdfasdfasdf", "public").EachPage(func(page pagination.Page) (bool, error) {
   511  		pages++
   512  
   513  		actual, err := servers.ExtractNetworkAddresses(page)
   514  		th.AssertNoErr(t, err)
   515  
   516  		if len(actual) != 2 {
   517  			t.Fatalf("Expected 2 addresses, got %d", len(actual))
   518  		}
   519  		th.CheckDeepEquals(t, expected, actual)
   520  
   521  		return true, nil
   522  	})
   523  	th.AssertNoErr(t, err)
   524  	th.CheckEquals(t, 1, pages)
   525  }
   526  
   527  func TestCreateServerImage(t *testing.T) {
   528  	th.SetupHTTP()
   529  	defer th.TeardownHTTP()
   530  	HandleCreateServerImageSuccessfully(t)
   531  
   532  	_, err := servers.CreateImage(client.ServiceClient(), "serverimage", servers.CreateImageOpts{Name: "test"}).ExtractImageID()
   533  	th.AssertNoErr(t, err)
   534  }
   535  
   536  func TestMarshalPersonality(t *testing.T) {
   537  	name := "/etc/test"
   538  	contents := []byte("asdfasdf")
   539  
   540  	personality := servers.Personality{
   541  		&servers.File{
   542  			Path:     name,
   543  			Contents: contents,
   544  		},
   545  	}
   546  
   547  	data, err := json.Marshal(personality)
   548  	if err != nil {
   549  		t.Fatal(err)
   550  	}
   551  
   552  	var actual []map[string]string
   553  	err = json.Unmarshal(data, &actual)
   554  	if err != nil {
   555  		t.Fatal(err)
   556  	}
   557  
   558  	if len(actual) != 1 {
   559  		t.Fatal("expected personality length 1")
   560  	}
   561  
   562  	if actual[0]["path"] != name {
   563  		t.Fatal("file path incorrect")
   564  	}
   565  
   566  	if actual[0]["contents"] != base64.StdEncoding.EncodeToString(contents) {
   567  		t.Fatal("file contents incorrect")
   568  	}
   569  }
   570  
   571  func TestCreateServerWithTags(t *testing.T) {
   572  	th.SetupHTTP()
   573  	defer th.TeardownHTTP()
   574  	HandleServerWithTagsCreationSuccessfully(t)
   575  
   576  	c := client.ServiceClient()
   577  	c.Microversion = "2.52"
   578  
   579  	tags := []string{"foo", "bar"}
   580  	ServerDerpTags := ServerDerp
   581  	ServerDerpTags.Tags = &tags
   582  
   583  	createOpts := servers.CreateOpts{
   584  		Name:      "derp",
   585  		ImageRef:  "f90f6034-2570-4974-8351-6b49732ef2eb",
   586  		FlavorRef: "1",
   587  		Tags:      tags,
   588  	}
   589  	res := servers.Create(c, createOpts)
   590  	th.AssertNoErr(t, res.Err)
   591  	actualServer, err := res.Extract()
   592  	th.AssertNoErr(t, err)
   593  	th.CheckDeepEquals(t, ServerDerpTags, *actualServer)
   594  }