github.com/gophercloud/gophercloud@v1.11.0/internal/acceptance/openstack/identity/v3/federation_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"
    10  	"github.com/gophercloud/gophercloud/internal/acceptance/clients"
    11  	"github.com/gophercloud/gophercloud/internal/acceptance/tools"
    12  	"github.com/gophercloud/gophercloud/openstack/identity/v3/extensions/federation"
    13  	th "github.com/gophercloud/gophercloud/testhelper"
    14  )
    15  
    16  func TestListMappings(t *testing.T) {
    17  	client, err := clients.NewIdentityV3Client()
    18  	th.AssertNoErr(t, err)
    19  
    20  	allPages, err := federation.ListMappings(client).AllPages()
    21  	th.AssertNoErr(t, err)
    22  
    23  	mappings, err := federation.ExtractMappings(allPages)
    24  	th.AssertNoErr(t, err)
    25  
    26  	tools.PrintResource(t, mappings)
    27  }
    28  
    29  func TestMappingsCRUD(t *testing.T) {
    30  	mappingName := tools.RandomString("TESTMAPPING-", 8)
    31  
    32  	clients.RequireAdmin(t)
    33  
    34  	client, err := clients.NewIdentityV3Client()
    35  	th.AssertNoErr(t, err)
    36  
    37  	createOpts := federation.CreateMappingOpts{
    38  		Rules: []federation.MappingRule{
    39  			{
    40  				Local: []federation.RuleLocal{
    41  					{
    42  						User: &federation.RuleUser{
    43  							Name: "{0}",
    44  						},
    45  					},
    46  					{
    47  						Group: &federation.Group{
    48  							ID: "0cd5e9",
    49  						},
    50  					},
    51  				},
    52  				Remote: []federation.RuleRemote{
    53  					{
    54  						Type: "UserName",
    55  					},
    56  					{
    57  						Type: "orgPersonType",
    58  						NotAnyOf: []string{
    59  							"Contractor",
    60  							"Guest",
    61  						},
    62  					},
    63  				},
    64  			},
    65  		},
    66  	}
    67  
    68  	createdMapping, err := federation.CreateMapping(client, mappingName, createOpts).Extract()
    69  	th.AssertNoErr(t, err)
    70  	th.AssertEquals(t, len(createOpts.Rules), len(createdMapping.Rules))
    71  	th.CheckDeepEquals(t, createOpts.Rules[0], createdMapping.Rules[0])
    72  
    73  	mapping, err := federation.GetMapping(client, mappingName).Extract()
    74  	th.AssertNoErr(t, err)
    75  	th.AssertEquals(t, len(createOpts.Rules), len(mapping.Rules))
    76  	th.CheckDeepEquals(t, createOpts.Rules[0], mapping.Rules[0])
    77  
    78  	updateOpts := federation.UpdateMappingOpts{
    79  		Rules: []federation.MappingRule{
    80  			{
    81  				Local: []federation.RuleLocal{
    82  					{
    83  						User: &federation.RuleUser{
    84  							Name: "{0}",
    85  						},
    86  					},
    87  					{
    88  						Group: &federation.Group{
    89  							ID: "0cd5e9",
    90  						},
    91  					},
    92  				},
    93  				Remote: []federation.RuleRemote{
    94  					{
    95  						Type: "UserName",
    96  					},
    97  					{
    98  						Type: "orgPersonType",
    99  						AnyOneOf: []string{
   100  							"Contractor",
   101  							"SubContractor",
   102  						},
   103  					},
   104  				},
   105  			},
   106  		},
   107  	}
   108  
   109  	updatedMapping, err := federation.UpdateMapping(client, mappingName, updateOpts).Extract()
   110  	th.AssertNoErr(t, err)
   111  	th.AssertEquals(t, len(updateOpts.Rules), len(updatedMapping.Rules))
   112  	th.CheckDeepEquals(t, updateOpts.Rules[0], updatedMapping.Rules[0])
   113  
   114  	err = federation.DeleteMapping(client, mappingName).ExtractErr()
   115  	th.AssertNoErr(t, err)
   116  
   117  	resp := federation.GetMapping(client, mappingName)
   118  	th.AssertErr(t, resp.Err)
   119  	_, ok := resp.Err.(gophercloud.ErrDefault404)
   120  	th.AssertEquals(t, true, ok)
   121  }