github.com/gophercloud/gophercloud@v1.11.0/internal/acceptance/openstack/client_test.go (about) 1 //go:build acceptance 2 // +build acceptance 3 4 package openstack 5 6 import ( 7 "os" 8 "testing" 9 "time" 10 11 "github.com/gophercloud/gophercloud" 12 "github.com/gophercloud/gophercloud/internal/acceptance/clients" 13 "github.com/gophercloud/gophercloud/internal/acceptance/tools" 14 "github.com/gophercloud/gophercloud/openstack" 15 "github.com/gophercloud/gophercloud/openstack/identity/v3/credentials" 16 "github.com/gophercloud/gophercloud/openstack/identity/v3/extensions/ec2tokens" 17 "github.com/gophercloud/gophercloud/openstack/identity/v3/tokens" 18 th "github.com/gophercloud/gophercloud/testhelper" 19 ) 20 21 func TestAuthenticatedClient(t *testing.T) { 22 // Obtain credentials from the environment. 23 ao, err := openstack.AuthOptionsFromEnv() 24 if err != nil { 25 t.Fatalf("Unable to acquire credentials: %v", err) 26 } 27 28 client, err := openstack.AuthenticatedClient(ao) 29 if err != nil { 30 t.Fatalf("Unable to authenticate: %v", err) 31 } 32 33 if client.TokenID == "" { 34 t.Errorf("No token ID assigned to the client") 35 } 36 37 t.Logf("Client successfully acquired a token: %v", client.TokenID) 38 39 // Find the storage service in the service catalog. 40 storage, err := openstack.NewObjectStorageV1(client, gophercloud.EndpointOpts{ 41 Region: os.Getenv("OS_REGION_NAME"), 42 }) 43 if err != nil { 44 t.Errorf("Unable to locate a storage service: %v", err) 45 } else { 46 t.Logf("Located a storage service at endpoint: [%s]", storage.Endpoint) 47 } 48 } 49 50 func TestEC2AuthMethod(t *testing.T) { 51 client, err := clients.NewIdentityV3Client() 52 th.AssertNoErr(t, err) 53 54 ao, err := openstack.AuthOptionsFromEnv() 55 th.AssertNoErr(t, err) 56 57 authOptions := tokens.AuthOptions{ 58 Username: ao.Username, 59 Password: ao.Password, 60 DomainName: ao.DomainName, 61 DomainID: ao.DomainID, 62 // We need a scope to get the token roles list 63 Scope: tokens.Scope{ 64 ProjectID: ao.TenantID, 65 ProjectName: ao.TenantName, 66 DomainID: ao.DomainID, 67 DomainName: ao.DomainName, 68 }, 69 } 70 token, err := tokens.Create(client, &authOptions).Extract() 71 th.AssertNoErr(t, err) 72 tools.PrintResource(t, token) 73 74 user, err := tokens.Get(client, token.ID).ExtractUser() 75 th.AssertNoErr(t, err) 76 tools.PrintResource(t, user) 77 78 project, err := tokens.Get(client, token.ID).ExtractProject() 79 th.AssertNoErr(t, err) 80 tools.PrintResource(t, project) 81 82 createOpts := credentials.CreateOpts{ 83 ProjectID: project.ID, 84 Type: "ec2", 85 UserID: user.ID, 86 Blob: "{\"access\":\"181920\",\"secret\":\"secretKey\"}", 87 } 88 89 // Create a credential 90 credential, err := credentials.Create(client, createOpts).Extract() 91 th.AssertNoErr(t, err) 92 93 // Delete a credential 94 defer credentials.Delete(client, credential.ID) 95 tools.PrintResource(t, credential) 96 97 newClient, err := clients.NewIdentityV3UnauthenticatedClient() 98 th.AssertNoErr(t, err) 99 100 var ec2AuthOptions tokens.AuthOptionsBuilder 101 ec2AuthOptions = &ec2tokens.AuthOptions{ 102 Access: "181920", 103 Secret: "secretKey", 104 } 105 106 err = openstack.AuthenticateV3(newClient.ProviderClient, ec2AuthOptions, gophercloud.EndpointOpts{}) 107 th.AssertNoErr(t, err) 108 109 tools.PrintResource(t, newClient.TokenID) 110 } 111 112 func TestReauth(t *testing.T) { 113 ao, err := openstack.AuthOptionsFromEnv() 114 if err != nil { 115 t.Fatalf("Unable to obtain environment auth options: %v", err) 116 } 117 118 // Allow reauth 119 ao.AllowReauth = true 120 121 provider, err := openstack.NewClient(ao.IdentityEndpoint) 122 if err != nil { 123 t.Fatalf("Unable to create provider: %v", err) 124 } 125 126 err = openstack.Authenticate(provider, ao) 127 if err != nil { 128 t.Fatalf("Unable to authenticate: %v", err) 129 } 130 131 t.Logf("Creating a compute client") 132 _, err = openstack.NewComputeV2(provider, gophercloud.EndpointOpts{ 133 Region: os.Getenv("OS_REGION_NAME"), 134 }) 135 if err != nil { 136 t.Fatalf("Unable to create compute client: %v", err) 137 } 138 139 t.Logf("Sleeping for 1 second") 140 time.Sleep(1 * time.Second) 141 t.Logf("Attempting to reauthenticate") 142 143 err = provider.ReauthFunc() 144 if err != nil { 145 t.Fatalf("Unable to reauthenticate: %v", err) 146 } 147 148 t.Logf("Creating a compute client") 149 _, err = openstack.NewComputeV2(provider, gophercloud.EndpointOpts{ 150 Region: os.Getenv("OS_REGION_NAME"), 151 }) 152 if err != nil { 153 t.Fatalf("Unable to create compute client: %v", err) 154 } 155 }