github.com/gophercloud/gophercloud@v1.11.0/internal/acceptance/openstack/identity/v3/policies_test.go (about)

     1  //go:build acceptance
     2  // +build acceptance
     3  
     4  package v3
     5  
     6  import (
     7  	"testing"
     8  
     9  	"github.com/gophercloud/gophercloud/internal/acceptance/clients"
    10  	"github.com/gophercloud/gophercloud/internal/acceptance/tools"
    11  	"github.com/gophercloud/gophercloud/openstack/identity/v3/policies"
    12  	th "github.com/gophercloud/gophercloud/testhelper"
    13  )
    14  
    15  func TestPoliciesList(t *testing.T) {
    16  	clients.RequireAdmin(t)
    17  
    18  	client, err := clients.NewIdentityV3Client()
    19  	th.AssertNoErr(t, err)
    20  
    21  	allPages, err := policies.List(client, policies.ListOpts{}).AllPages()
    22  	th.AssertNoErr(t, err)
    23  
    24  	allPolicies, err := policies.ExtractPolicies(allPages)
    25  	th.AssertNoErr(t, err)
    26  
    27  	for _, policy := range allPolicies {
    28  		tools.PrintResource(t, policy)
    29  	}
    30  }
    31  
    32  func TestPoliciesCRUD(t *testing.T) {
    33  	clients.RequireAdmin(t)
    34  
    35  	client, err := clients.NewIdentityV3Client()
    36  	th.AssertNoErr(t, err)
    37  
    38  	createOpts := policies.CreateOpts{
    39  		Type: "application/json",
    40  		Blob: []byte("{'foobar_user': 'role:compute-user'}"),
    41  		Extra: map[string]interface{}{
    42  			"description": "policy for foobar_user",
    43  		},
    44  	}
    45  
    46  	policy, err := policies.Create(client, &createOpts).Extract()
    47  	th.AssertNoErr(t, err)
    48  
    49  	tools.PrintResource(t, policy)
    50  	tools.PrintResource(t, policy.Extra)
    51  
    52  	th.AssertEquals(t, policy.Type, createOpts.Type)
    53  	th.AssertEquals(t, policy.Blob, string(createOpts.Blob))
    54  	th.AssertEquals(t, policy.Extra["description"], createOpts.Extra["description"])
    55  
    56  	var listOpts policies.ListOpts
    57  
    58  	allPages, err := policies.List(client, listOpts).AllPages()
    59  	th.AssertNoErr(t, err)
    60  
    61  	allPolicies, err := policies.ExtractPolicies(allPages)
    62  	th.AssertNoErr(t, err)
    63  
    64  	var found bool
    65  	for _, p := range allPolicies {
    66  		tools.PrintResource(t, p)
    67  		tools.PrintResource(t, p.Extra)
    68  
    69  		if p.ID == policy.ID {
    70  			found = true
    71  		}
    72  	}
    73  
    74  	th.AssertEquals(t, true, found)
    75  
    76  	listOpts.Filters = map[string]string{
    77  		"type__contains": "json",
    78  	}
    79  
    80  	allPages, err = policies.List(client, listOpts).AllPages()
    81  	th.AssertNoErr(t, err)
    82  
    83  	allPolicies, err = policies.ExtractPolicies(allPages)
    84  	th.AssertNoErr(t, err)
    85  
    86  	found = false
    87  	for _, p := range allPolicies {
    88  		tools.PrintResource(t, p)
    89  		tools.PrintResource(t, p.Extra)
    90  
    91  		if p.ID == policy.ID {
    92  			found = true
    93  		}
    94  	}
    95  
    96  	th.AssertEquals(t, true, found)
    97  
    98  	listOpts.Filters = map[string]string{
    99  		"type__contains": "foobar",
   100  	}
   101  
   102  	allPages, err = policies.List(client, listOpts).AllPages()
   103  	th.AssertNoErr(t, err)
   104  
   105  	allPolicies, err = policies.ExtractPolicies(allPages)
   106  	th.AssertNoErr(t, err)
   107  
   108  	found = false
   109  	for _, p := range allPolicies {
   110  		tools.PrintResource(t, p)
   111  		tools.PrintResource(t, p.Extra)
   112  
   113  		if p.ID == policy.ID {
   114  			found = true
   115  		}
   116  	}
   117  
   118  	th.AssertEquals(t, false, found)
   119  
   120  	gotPolicy, err := policies.Get(client, policy.ID).Extract()
   121  	th.AssertNoErr(t, err)
   122  	th.AssertDeepEquals(t, policy, gotPolicy)
   123  
   124  	updateOpts := policies.UpdateOpts{
   125  		Type: "text/plain",
   126  		Blob: []byte("'foobar_user': 'role:compute-user'"),
   127  		Extra: map[string]interface{}{
   128  			"description": "updated policy for foobar_user",
   129  		},
   130  	}
   131  
   132  	updatedPolicy, err := policies.Update(client, policy.ID, updateOpts).Extract()
   133  	th.AssertNoErr(t, err)
   134  
   135  	tools.PrintResource(t, updatedPolicy)
   136  	tools.PrintResource(t, updatedPolicy.Extra)
   137  
   138  	th.AssertEquals(t, updatedPolicy.Type, updateOpts.Type)
   139  	th.AssertEquals(t, updatedPolicy.Blob, string(updateOpts.Blob))
   140  	th.AssertEquals(t, updatedPolicy.Extra["description"], updateOpts.Extra["description"])
   141  
   142  	err = policies.Delete(client, policy.ID).ExtractErr()
   143  	th.AssertNoErr(t, err)
   144  }