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  }