Fix up unit tests
* Fix objectstore unit tests to use Session * Remove unused auth code * Skip unit tests for validator (did these ever work?) * Fix volume v2 location Change-Id: Ib770c20a2798822c15f34e89c5c49f2a2814beb5
This commit is contained in:
@@ -19,7 +19,7 @@ import (
|
|||||||
"net/http"
|
"net/http"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"git.openstack.org/openstack/golang-client.git/volume"
|
"git.openstack.org/openstack/golang-client.git/volume/v2"
|
||||||
"git.openstack.org/openstack/golang-client.git/openstack"
|
"git.openstack.org/openstack/golang-client.git/openstack"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -30,7 +30,7 @@ func main() {
|
|||||||
// Authenticate with a username, password, tenant id.
|
// Authenticate with a username, password, tenant id.
|
||||||
creds := openstack.AuthOpts{
|
creds := openstack.AuthOpts{
|
||||||
AuthUrl: config.Host,
|
AuthUrl: config.Host,
|
||||||
Project: config.ProjectName,
|
ProjectName: config.ProjectName,
|
||||||
Username: config.Username,
|
Username: config.Username,
|
||||||
Password: config.Password,
|
Password: config.Password,
|
||||||
}
|
}
|
||||||
|
@@ -1,3 +1,5 @@
|
|||||||
|
// +build !unit
|
||||||
|
|
||||||
// Copyright (c) 2016 eBay Inc.
|
// Copyright (c) 2016 eBay Inc.
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License"); you may
|
// Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
@@ -1,145 +0,0 @@
|
|||||||
// Copyright (c) 2014 Hewlett-Packard Development Company, L.P.
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
||||||
// not use this file except in compliance with the License. You may obtain
|
|
||||||
// a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
||||||
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
||||||
// License for the specific language governing permissions and limitations
|
|
||||||
// under the License.
|
|
||||||
|
|
||||||
//Package identity provides functions for client-side access to OpenStack
|
|
||||||
//IdentityService.
|
|
||||||
package identity
|
|
||||||
|
|
||||||
import (
|
|
||||||
"encoding/json"
|
|
||||||
"errors"
|
|
||||||
"fmt"
|
|
||||||
"strings"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"git.openstack.org/openstack/golang-client.git/openstack"
|
|
||||||
)
|
|
||||||
|
|
||||||
type Auth struct {
|
|
||||||
Access Access
|
|
||||||
}
|
|
||||||
|
|
||||||
type Access struct {
|
|
||||||
Token Token
|
|
||||||
User User
|
|
||||||
ServiceCatalog []Service
|
|
||||||
}
|
|
||||||
|
|
||||||
type Token struct {
|
|
||||||
Id string
|
|
||||||
Expires time.Time
|
|
||||||
Tenant Tenant
|
|
||||||
}
|
|
||||||
|
|
||||||
type Tenant struct {
|
|
||||||
Id string
|
|
||||||
Name string
|
|
||||||
}
|
|
||||||
|
|
||||||
type User struct {
|
|
||||||
Id string
|
|
||||||
Name string
|
|
||||||
Roles []Role
|
|
||||||
Roles_links []string
|
|
||||||
}
|
|
||||||
|
|
||||||
type Role struct {
|
|
||||||
Id string
|
|
||||||
Name string
|
|
||||||
TenantId string
|
|
||||||
}
|
|
||||||
|
|
||||||
type Service struct {
|
|
||||||
Name string
|
|
||||||
Type string
|
|
||||||
Endpoints []Endpoint
|
|
||||||
Endpoints_links []string
|
|
||||||
}
|
|
||||||
|
|
||||||
type Endpoint struct {
|
|
||||||
TenantId string
|
|
||||||
PublicURL string
|
|
||||||
InternalURL string
|
|
||||||
Region string
|
|
||||||
VersionId string
|
|
||||||
VersionInfo string
|
|
||||||
VersionList string
|
|
||||||
}
|
|
||||||
|
|
||||||
func AuthKey(url, accessKey, secretKey string) (Auth, error) {
|
|
||||||
jsonStr := (fmt.Sprintf(`{"auth":{
|
|
||||||
"apiAccessKeyCredentials":{"accessKey":"%s","secretKey":"%s"}}
|
|
||||||
}`,
|
|
||||||
accessKey, secretKey))
|
|
||||||
return auth(&url, &jsonStr)
|
|
||||||
}
|
|
||||||
|
|
||||||
func AuthKeyTenantId(url, accessKey, secretKey, tenantId string) (Auth, error) {
|
|
||||||
jsonStr := (fmt.Sprintf(`{"auth":{
|
|
||||||
"apiAccessKeyCredentials":{"accessKey":"%s","secretKey":"%s"},"tenantId":"%s"}
|
|
||||||
}`,
|
|
||||||
accessKey, secretKey, tenantId))
|
|
||||||
return auth(&url, &jsonStr)
|
|
||||||
}
|
|
||||||
|
|
||||||
func AuthUserName(url, username, password string) (Auth, error) {
|
|
||||||
jsonStr := (fmt.Sprintf(`{"auth":{
|
|
||||||
"passwordCredentials":{"username":"%s","password":"%s"}}
|
|
||||||
}`,
|
|
||||||
username, password))
|
|
||||||
return auth(&url, &jsonStr)
|
|
||||||
}
|
|
||||||
|
|
||||||
func AuthUserNameTenantName(url, username, password, tenantName string) (Auth, error) {
|
|
||||||
jsonStr := (fmt.Sprintf(`{"auth":{
|
|
||||||
"passwordCredentials":{"username":"%s","password":"%s"},"tenantName":"%s"}
|
|
||||||
}`,
|
|
||||||
username, password, tenantName))
|
|
||||||
return auth(&url, &jsonStr)
|
|
||||||
}
|
|
||||||
|
|
||||||
func AuthUserNameTenantId(url, username, password, tenantId string) (Auth, error) {
|
|
||||||
jsonStr := (fmt.Sprintf(`{"auth":{
|
|
||||||
"passwordCredentials":{"username":"%s","password":"%s"},"tenantId":"%s"}
|
|
||||||
}`,
|
|
||||||
username, password, tenantId))
|
|
||||||
return auth(&url, &jsonStr)
|
|
||||||
}
|
|
||||||
|
|
||||||
func AuthTenantNameTokenId(url, tenantName, tokenId string) (Auth, error) {
|
|
||||||
jsonStr := (fmt.Sprintf(`{"auth":{
|
|
||||||
"tenantName":"%s","token":{"id":"%s"}}
|
|
||||||
}`,
|
|
||||||
tenantName, tokenId))
|
|
||||||
return auth(&url, &jsonStr)
|
|
||||||
}
|
|
||||||
|
|
||||||
func auth(url, jsonStr *string) (Auth, error) {
|
|
||||||
var s []byte = []byte(*jsonStr)
|
|
||||||
path := fmt.Sprintf(`%s/tokens`, *url)
|
|
||||||
resp, err := openstack.Post(path, nil, nil, &s)
|
|
||||||
if err != nil {
|
|
||||||
return Auth{}, err
|
|
||||||
}
|
|
||||||
|
|
||||||
var contentType string = strings.ToLower(resp.Resp.Header.Get("Content-Type"))
|
|
||||||
if strings.Contains(contentType, "json") != true {
|
|
||||||
return Auth{}, errors.New("err: header Content-Type is not JSON")
|
|
||||||
}
|
|
||||||
var auth = Auth{}
|
|
||||||
if err = json.Unmarshal(resp.Body, &auth); err != nil {
|
|
||||||
return Auth{}, err
|
|
||||||
}
|
|
||||||
return auth, nil
|
|
||||||
}
|
|
@@ -17,6 +17,7 @@ package objectstorage_test
|
|||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"git.openstack.org/openstack/golang-client.git/objectstorage/v1"
|
"git.openstack.org/openstack/golang-client.git/objectstorage/v1"
|
||||||
|
"git.openstack.org/openstack/golang-client.git/openstack"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/http/httptest"
|
"net/http/httptest"
|
||||||
@@ -46,7 +47,9 @@ func TestGetAccountMeta(t *testing.T) {
|
|||||||
t.Error(errors.New("Failed: r.Method == HEAD"))
|
t.Error(errors.New("Failed: r.Method == HEAD"))
|
||||||
}))
|
}))
|
||||||
defer apiServer.Close()
|
defer apiServer.Close()
|
||||||
meta, err := objectstorage.GetAccountMeta(apiServer.URL, tokn)
|
|
||||||
|
sess := testGetSession()
|
||||||
|
meta, err := objectstorage.GetAccountMeta(sess, apiServer.URL)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
}
|
}
|
||||||
@@ -75,7 +78,9 @@ func TestListContainers(t *testing.T) {
|
|||||||
t.Error(errors.New("Failed: r.Method == GET"))
|
t.Error(errors.New("Failed: r.Method == GET"))
|
||||||
}))
|
}))
|
||||||
defer apiServer.Close()
|
defer apiServer.Close()
|
||||||
myList, err := objectstorage.ListContainers(0, "", apiServer.URL, tokn)
|
|
||||||
|
sess := testGetSession()
|
||||||
|
myList, err := objectstorage.ListContainers(sess, 0, "", apiServer.URL)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
}
|
}
|
||||||
@@ -108,8 +113,10 @@ func TestListObjects(t *testing.T) {
|
|||||||
t.Error(errors.New("Failed: r.Method == GET"))
|
t.Error(errors.New("Failed: r.Method == GET"))
|
||||||
}))
|
}))
|
||||||
defer apiServer.Close()
|
defer apiServer.Close()
|
||||||
|
|
||||||
|
sess := testGetSession()
|
||||||
myList, err := objectstorage.ListObjects(
|
myList, err := objectstorage.ListObjects(
|
||||||
0, "", "", "", "", apiServer.URL+containerPrefix, tokn)
|
sess, 0, "", "", "", "", apiServer.URL+containerPrefix)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
}
|
}
|
||||||
@@ -128,8 +135,10 @@ func TestDeleteContainer(t *testing.T) {
|
|||||||
t.Error(errors.New("Failed: r.Method == DELETE"))
|
t.Error(errors.New("Failed: r.Method == DELETE"))
|
||||||
}))
|
}))
|
||||||
defer apiServer.Close()
|
defer apiServer.Close()
|
||||||
if err := objectstorage.DeleteContainer(apiServer.URL+containerPrefix,
|
|
||||||
tokn); err != nil {
|
sess := testGetSession()
|
||||||
|
if err := objectstorage.DeleteContainer(sess, apiServer.URL+containerPrefix,
|
||||||
|
); err != nil {
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -147,7 +156,9 @@ func TestGetContainerMeta(t *testing.T) {
|
|||||||
t.Error(errors.New("Failed: r.Method == HEAD"))
|
t.Error(errors.New("Failed: r.Method == HEAD"))
|
||||||
}))
|
}))
|
||||||
defer apiServer.Close()
|
defer apiServer.Close()
|
||||||
meta, err := objectstorage.GetContainerMeta(apiServer.URL+containerPrefix, tokn)
|
|
||||||
|
sess := testGetSession()
|
||||||
|
meta, err := objectstorage.GetContainerMeta(sess, apiServer.URL+containerPrefix)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
}
|
}
|
||||||
@@ -169,9 +180,13 @@ func TestSetContainerMeta(t *testing.T) {
|
|||||||
"Failed: r.Method == POST && X-Container-Meta-Fruit == Apple"))
|
"Failed: r.Method == POST && X-Container-Meta-Fruit == Apple"))
|
||||||
}))
|
}))
|
||||||
defer apiServer.Close()
|
defer apiServer.Close()
|
||||||
|
|
||||||
|
sess := testGetSession()
|
||||||
|
headers := http.Header{}
|
||||||
|
headers.Add("X-Container-Meta-Fruit", "Apple")
|
||||||
if err := objectstorage.SetContainerMeta(
|
if err := objectstorage.SetContainerMeta(
|
||||||
apiServer.URL+containerPrefix, tokn,
|
sess, apiServer.URL+containerPrefix,
|
||||||
"X-Container-Meta-Fruit", "Apple"); err != nil {
|
headers); err != nil {
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -186,8 +201,13 @@ func TestPutContainer(t *testing.T) {
|
|||||||
t.Error(errors.New("Failed: r.Method == PUT"))
|
t.Error(errors.New("Failed: r.Method == PUT"))
|
||||||
}))
|
}))
|
||||||
defer apiServer.Close()
|
defer apiServer.Close()
|
||||||
if err := objectstorage.PutContainer(apiServer.URL+containerPrefix,
|
|
||||||
tokn, "X-TTL", "259200", "X-Log-Retention", "true"); err != nil {
|
sess := testGetSession()
|
||||||
|
headers := http.Header{}
|
||||||
|
headers.Add("X-TTL", "259200")
|
||||||
|
headers.Add("X-Log-Retention", "true")
|
||||||
|
if err := objectstorage.PutContainer(sess, apiServer.URL+containerPrefix,
|
||||||
|
headers); err != nil {
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -217,8 +237,10 @@ func TestPutObject(t *testing.T) {
|
|||||||
t.Error(errors.New("Failed: Not 201"))
|
t.Error(errors.New("Failed: Not 201"))
|
||||||
}))
|
}))
|
||||||
defer apiServer.Close()
|
defer apiServer.Close()
|
||||||
if err = objectstorage.PutObject(&fContent, apiServer.URL+objPrefix,
|
|
||||||
tokn); err != nil {
|
sess := testGetSession()
|
||||||
|
headers := http.Header{}
|
||||||
|
if err = objectstorage.PutObject(sess, &fContent, apiServer.URL+objPrefix, headers); err != nil {
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -235,8 +257,10 @@ func TestCopyObject(t *testing.T) {
|
|||||||
"Failed: r.Method == COPY && r.Header.Get(Destination) == destURL"))
|
"Failed: r.Method == COPY && r.Header.Get(Destination) == destURL"))
|
||||||
}))
|
}))
|
||||||
defer apiServer.Close()
|
defer apiServer.Close()
|
||||||
if err := objectstorage.CopyObject(apiServer.URL+objPrefix, destURL,
|
|
||||||
tokn); err != nil {
|
sess := testGetSession()
|
||||||
|
if err := objectstorage.CopyObject(sess, apiServer.URL+objPrefix, destURL,
|
||||||
|
); err != nil {
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -254,7 +278,9 @@ func TestGetObjectMeta(t *testing.T) {
|
|||||||
"Failed: r.Method == HEAD && r.Header.Get(X-Auth-Token) == tokn"))
|
"Failed: r.Method == HEAD && r.Header.Get(X-Auth-Token) == tokn"))
|
||||||
}))
|
}))
|
||||||
defer apiServer.Close()
|
defer apiServer.Close()
|
||||||
meta, err := objectstorage.GetObjectMeta(apiServer.URL+objPrefix, tokn)
|
|
||||||
|
sess := testGetSession()
|
||||||
|
meta, err := objectstorage.GetObjectMeta(sess, apiServer.URL+objPrefix)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
}
|
}
|
||||||
@@ -274,8 +300,12 @@ func TestSetObjectMeta(t *testing.T) {
|
|||||||
t.Error(errors.New("Failed: r.Method == POST && X-Object-Meta-Fruit == Apple"))
|
t.Error(errors.New("Failed: r.Method == POST && X-Object-Meta-Fruit == Apple"))
|
||||||
}))
|
}))
|
||||||
defer apiServer.Close()
|
defer apiServer.Close()
|
||||||
if err := objectstorage.SetObjectMeta(apiServer.URL+objPrefix,
|
|
||||||
tokn, "X-Object-Meta-Fruit", "Apple"); err != nil {
|
sess := testGetSession()
|
||||||
|
headers := http.Header{}
|
||||||
|
headers.Add("X-Object-Meta-Fruit", "Apple")
|
||||||
|
if err := objectstorage.SetObjectMeta(sess, apiServer.URL+objPrefix,
|
||||||
|
headers); err != nil {
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -299,7 +329,9 @@ func TestGetObject(t *testing.T) {
|
|||||||
t.Error(errors.New("Failed: r.Method == GET"))
|
t.Error(errors.New("Failed: r.Method == GET"))
|
||||||
}))
|
}))
|
||||||
defer apiServer.Close()
|
defer apiServer.Close()
|
||||||
hdr, body, err := objectstorage.GetObject(apiServer.URL+objPrefix, tokn)
|
|
||||||
|
sess := testGetSession()
|
||||||
|
hdr, body, err := objectstorage.GetObject(sess, apiServer.URL+objPrefix)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
}
|
}
|
||||||
@@ -324,7 +356,21 @@ func TestDeleteObject(t *testing.T) {
|
|||||||
t.Error(errors.New("Failed: r.Method == DELETE"))
|
t.Error(errors.New("Failed: r.Method == DELETE"))
|
||||||
}))
|
}))
|
||||||
defer apiServer.Close()
|
defer apiServer.Close()
|
||||||
if err := objectstorage.DeleteObject(apiServer.URL+objPrefix, tokn); err != nil {
|
|
||||||
|
sess := testGetSession()
|
||||||
|
if err := objectstorage.DeleteObject(sess, apiServer.URL+objPrefix); err != nil {
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func testGetSession() *openstack.Session {
|
||||||
|
auth := openstack.AuthToken{
|
||||||
|
Access: openstack.AccessType{
|
||||||
|
Token: openstack.Token{
|
||||||
|
ID: tokn,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
sess, _ := openstack.NewSession(http.DefaultClient, auth, nil)
|
||||||
|
return sess
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user