1package integration 2 3import ( 4 "context" 5 "testing" 6 7 "github.com/linode/linodego" 8) 9 10var testNodeBalancerConfigCreateOpts = linodego.NodeBalancerConfigCreateOptions{ 11 Port: 80, 12 Protocol: linodego.ProtocolHTTP, 13 Algorithm: linodego.AlgorithmRoundRobin, 14} 15 16func TestCreateNodeBalancerConfig(t *testing.T) { 17 _, _, config, teardown, err := setupNodeBalancerConfig(t, "fixtures/TestCreateNodeBalancerConfig") 18 defer teardown() 19 20 if err != nil { 21 t.Errorf("Error creating NodeBalancer Config, got error %v", err) 22 } 23 24 expected := testNodeBalancerConfigCreateOpts 25 26 // cant compare Target, fixture IPs are sanitized 27 if config.Port != expected.Port || config.Protocol != expected.Protocol { 28 t.Errorf("NodeBalancerConfig did not match CreateOptions") 29 } 30} 31 32func TestUpdateNodeBalancerConfig(t *testing.T) { 33 client, nodebalancer, config, teardown, err := setupNodeBalancerConfig(t, "fixtures/TestUpdateNodeBalancerConfig") 34 defer teardown() 35 if err != nil { 36 t.Error(err) 37 } 38 39 updateOpts := linodego.NodeBalancerConfigUpdateOptions{ 40 Port: 8080, 41 Protocol: linodego.ProtocolTCP, 42 ProxyProtocol: linodego.ProxyProtocolV2, 43 Algorithm: linodego.AlgorithmLeastConn, 44 } 45 configUpdated, err := client.UpdateNodeBalancerConfig(context.Background(), nodebalancer.ID, config.ID, updateOpts) 46 if err != nil { 47 t.Errorf("Error updating NodeBalancer Config, %s", err) 48 } 49 if configUpdated.Port != updateOpts.Port || 50 string(updateOpts.Algorithm) != string(configUpdated.Algorithm) || 51 string(updateOpts.Protocol) != string(configUpdated.Protocol) || 52 string(updateOpts.ProxyProtocol) != string(configUpdated.ProxyProtocol) { 53 t.Errorf("NodeBalancerConfig did not match UpdateOptions") 54 } 55} 56 57func TestListNodeBalancerConfigs(t *testing.T) { 58 client, nodebalancer, _, teardown, err := setupNodeBalancerConfig(t, "fixtures/TestListNodeBalancerConfigs") 59 defer teardown() 60 if err != nil { 61 t.Error(err) 62 } 63 64 listOpts := linodego.NewListOptions(0, "") 65 configs, err := client.ListNodeBalancerConfigs(context.Background(), nodebalancer.ID, listOpts) 66 if err != nil { 67 t.Errorf("Error listing nodebalancers configs, expected array, got error %v", err) 68 } 69 if len(configs) != listOpts.Results { 70 t.Errorf("Expected ListNodeBalancerConfigs to match API result count") 71 } 72} 73 74func TestListNodeBalancerConfigsMultiplePages(t *testing.T) { 75 // This fixture was hand-crafted to render an empty page 1 result, with a single result on page 2 76 // "results:1,data:[],page:1,pages:2" .. "results:1,data[{...}],page:2,pages:2" 77 client, nodebalancer, _, teardown, err := setupNodeBalancerConfig(t, "fixtures/TestListNodeBalancerConfigsMultiplePages") 78 defer teardown() 79 if err != nil { 80 t.Error(err) 81 } 82 83 listOpts := linodego.NewListOptions(0, "") 84 configs, err := client.ListNodeBalancerConfigs(context.Background(), nodebalancer.ID, listOpts) 85 if err != nil { 86 t.Errorf("Error listing nodebalancers configs, expected array, got error %v", err) 87 } 88 if len(configs) != listOpts.Results { 89 t.Errorf("Expected ListNodeBalancerConfigs count to match API results count") 90 } 91} 92 93func TestGetNodeBalancerConfig(t *testing.T) { 94 client, nodebalancer, config, teardown, err := setupNodeBalancerConfig(t, "fixtures/TestGetNodeBalancerConfig") 95 defer teardown() 96 if err != nil { 97 t.Error(err) 98 } 99 100 configGot, err := client.GetNodeBalancerConfig(context.Background(), nodebalancer.ID, config.ID) 101 if configGot.Port != config.Port { 102 t.Errorf("GetNodeBalancerConfig did not get the expected config") 103 } 104 if err != nil { 105 t.Errorf("Error getting nodebalancer %d, got error %v", nodebalancer.ID, err) 106 } 107} 108 109func setupNodeBalancerConfig(t *testing.T, fixturesYaml string) (*linodego.Client, *linodego.NodeBalancer, *linodego.NodeBalancerConfig, func(), error) { 110 t.Helper() 111 var fixtureTeardown func() 112 client, nodebalancer, fixtureTeardown, err := setupNodeBalancer(t, fixturesYaml) 113 if err != nil { 114 t.Errorf("Error creating nodebalancer, got error %v", err) 115 } 116 117 createOpts := testNodeBalancerConfigCreateOpts 118 config, err := client.CreateNodeBalancerConfig(context.Background(), nodebalancer.ID, createOpts) 119 if err != nil { 120 t.Errorf("Error creating NodeBalancer Config, got error %v", err) 121 } 122 123 teardown := func() { 124 // delete the NodeBalancerConfig to exercise the code 125 if err := client.DeleteNodeBalancerConfig(context.Background(), nodebalancer.ID, config.ID); err != nil { 126 t.Errorf("Expected to delete a NodeBalancer Config, but got %v", err) 127 } 128 fixtureTeardown() 129 } 130 return client, nodebalancer, config, teardown, err 131} 132