github.com/opentelekomcloud/gophertelekomcloud@v0.9.3/acceptance/openstack/elb/v3/rules_test.go (about) 1 package v3 2 3 import ( 4 "testing" 5 6 golangsdk "github.com/opentelekomcloud/gophertelekomcloud" 7 "github.com/opentelekomcloud/gophertelekomcloud/acceptance/clients" 8 "github.com/opentelekomcloud/gophertelekomcloud/acceptance/tools" 9 "github.com/opentelekomcloud/gophertelekomcloud/openstack/common/pointerto" 10 "github.com/opentelekomcloud/gophertelekomcloud/openstack/elb/v3/listeners" 11 "github.com/opentelekomcloud/gophertelekomcloud/openstack/elb/v3/policies" 12 "github.com/opentelekomcloud/gophertelekomcloud/openstack/elb/v3/rules" 13 th "github.com/opentelekomcloud/gophertelekomcloud/testhelper" 14 ) 15 16 func TestRuleWorkflow(t *testing.T) { 17 t.Parallel() 18 19 client, err := clients.NewElbV3Client() 20 th.AssertNoErr(t, err) 21 22 lbID := createLoadBalancer(t, client) 23 defer deleteLoadbalancer(t, client, lbID) 24 25 listenerID := createListener(t, client, lbID) 26 defer deleteListener(t, client, listenerID) 27 28 poolID := createPool(t, client, lbID) 29 defer deletePool(t, client, poolID) 30 31 policyID := createPolicy(t, client, listenerID, poolID) 32 defer deletePolicy(t, client, policyID) 33 34 opts := rules.CreateOpts{ 35 Type: rules.Path, 36 CompareType: rules.Regex, 37 Value: "^.+$", 38 } 39 created, err := rules.Create(client, policyID, opts).Extract() 40 th.AssertNoErr(t, err) 41 id := created.ID 42 t.Logf("Rule %s added to the policy %s", id, policyID) 43 th.CheckEquals(t, opts.Type, created.Type) 44 45 defer func() { 46 th.AssertNoErr(t, rules.Delete(client, policyID, id).ExtractErr()) 47 t.Log("Rule removed from policy") 48 }() 49 50 got, err := rules.Get(client, policyID, id).Extract() 51 th.AssertNoErr(t, err) 52 th.CheckDeepEquals(t, created, got) 53 54 pages, err := rules.List(client, policyID, nil).AllPages() 55 th.AssertNoErr(t, err) 56 57 rulesSlice, err := rules.ExtractRules(pages) 58 th.AssertNoErr(t, err) 59 60 th.AssertEquals(t, 1, len(rulesSlice)) 61 th.CheckDeepEquals(t, *got, rulesSlice[0]) 62 63 updateOpts := rules.UpdateOpts{ 64 Value: "^.*$", 65 } 66 updated, err := rules.Update(client, policyID, id, updateOpts).Extract() 67 th.AssertNoErr(t, err) 68 69 got2, err := rules.Get(client, policyID, id).Extract() 70 th.AssertNoErr(t, err) 71 th.AssertDeepEquals(t, updated, got2) 72 } 73 74 func TestRuleWorkflowConditions(t *testing.T) { 75 t.Parallel() 76 77 client, err := clients.NewElbV3Client() 78 th.AssertNoErr(t, err) 79 80 lbID := createLoadBalancer(t, client) 81 defer deleteLoadbalancer(t, client, lbID) 82 83 listener, err := listeners.Create(client, listeners.CreateOpts{ 84 LoadbalancerID: lbID, 85 Protocol: listeners.ProtocolHTTP, 86 ProtocolPort: 80, 87 EnhanceL7policy: pointerto.Bool(true), 88 }).Extract() 89 th.AssertNoErr(t, err) 90 defer deleteListener(t, client, listener.ID) 91 92 poolID := createPool(t, client, lbID) 93 defer deletePool(t, client, poolID) 94 95 policyID := createPolicy(t, client, listener.ID, poolID) 96 defer deletePolicy(t, client, policyID) 97 condition := rules.Condition{ 98 Key: "", 99 Value: "/", 100 } 101 opts := rules.CreateOpts{ 102 Type: rules.Path, 103 CompareType: rules.StartsWith, 104 Value: "/bbb.html", 105 Conditions: []rules.Condition{condition}, 106 } 107 created, err := rules.Create(client, policyID, opts).Extract() 108 th.AssertNoErr(t, err) 109 id := created.ID 110 t.Logf("Rule %s added to the policy %s", id, policyID) 111 th.CheckEquals(t, opts.Type, created.Type) 112 113 defer func() { 114 th.AssertNoErr(t, rules.Delete(client, policyID, id).ExtractErr()) 115 t.Log("Rule removed from policy") 116 }() 117 118 got, err := rules.Get(client, policyID, id).Extract() 119 th.AssertNoErr(t, err) 120 th.CheckDeepEquals(t, created, got) 121 122 pages, err := rules.List(client, policyID, nil).AllPages() 123 th.AssertNoErr(t, err) 124 125 rulesSlice, err := rules.ExtractRules(pages) 126 th.AssertNoErr(t, err) 127 128 th.AssertEquals(t, 1, len(rulesSlice)) 129 th.CheckDeepEquals(t, *got, rulesSlice[0]) 130 conditionUpdate := rules.Condition{ 131 Key: "", 132 Value: "/home", 133 } 134 updateOpts := rules.UpdateOpts{ 135 CompareType: rules.EqualTo, 136 Conditions: []rules.Condition{conditionUpdate}, 137 } 138 updated, err := rules.Update(client, policyID, id, updateOpts).Extract() 139 th.AssertNoErr(t, err) 140 141 got2, err := rules.Get(client, policyID, id).Extract() 142 th.AssertNoErr(t, err) 143 th.AssertDeepEquals(t, updated, got2) 144 } 145 146 func createPolicy(t *testing.T, client *golangsdk.ServiceClient, listenerID, poolID string) string { 147 createOpts := policies.CreateOpts{ 148 Action: policies.ActionRedirectToPool, 149 ListenerID: listenerID, 150 RedirectPoolID: poolID, 151 Description: "Go SDK test policy", 152 Name: tools.RandomString("sdk-pol-", 5), 153 Position: 37, 154 } 155 created, err := policies.Create(client, createOpts).Extract() 156 th.AssertNoErr(t, err) 157 id := created.ID 158 t.Logf("Policy created: %s", id) 159 return id 160 } 161 162 func deletePolicy(t *testing.T, client *golangsdk.ServiceClient, policyID string) { 163 th.AssertNoErr(t, policies.Delete(client, policyID).ExtractErr()) 164 t.Logf("Policy %s deleted", policyID) 165 }