193 lines
4.6 KiB
Go
193 lines
4.6 KiB
Go
|
package chef
|
||
|
|
||
|
import (
|
||
|
"encoding/json"
|
||
|
"fmt"
|
||
|
"io"
|
||
|
"log"
|
||
|
"net/http"
|
||
|
"os"
|
||
|
"reflect"
|
||
|
"testing"
|
||
|
. "github.com/smartystreets/goconvey/convey"
|
||
|
)
|
||
|
|
||
|
var (
|
||
|
testRoleJSON = "test/role.json"
|
||
|
// FML
|
||
|
testRole = &Role{
|
||
|
Name: "test",
|
||
|
ChefType: "role",
|
||
|
Description: "Test Role",
|
||
|
RunList: []string{"recipe[foo]", "recipe[baz]", "role[banana]"},
|
||
|
JsonClass: "Chef::Role",
|
||
|
DefaultAttributes: struct{}{},
|
||
|
OverrideAttributes: struct{}{},
|
||
|
}
|
||
|
)
|
||
|
|
||
|
func TestRoleName(t *testing.T) {
|
||
|
// BUG(spheromak): Pull these constructors out into a Convey Decorator
|
||
|
n1 := testRole
|
||
|
name := n1.Name
|
||
|
|
||
|
Convey("Role name is 'test'", t, func() {
|
||
|
So(name, ShouldEqual, "test")
|
||
|
})
|
||
|
}
|
||
|
|
||
|
// BUG(fujin): re-do with goconvey
|
||
|
func TestRoleFromJSONDecoder(t *testing.T) {
|
||
|
if file, err := os.Open(testRoleJSON); err != nil {
|
||
|
t.Error("unexpected error", err, "during os.Open on", testRoleJSON)
|
||
|
} else {
|
||
|
dec := json.NewDecoder(file)
|
||
|
var n Role
|
||
|
if err := dec.Decode(&n); err == io.EOF {
|
||
|
log.Println(n)
|
||
|
} else if err != nil {
|
||
|
log.Fatal(err)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestRolesService_List(t *testing.T) {
|
||
|
setup()
|
||
|
defer teardown()
|
||
|
|
||
|
mux.HandleFunc("/roles", func(w http.ResponseWriter, r *http.Request) {
|
||
|
fmt.Fprintf(w, `{"foo":"http://localhost:4000/roles/foo", "webserver":"http://localhost:4000/roles/webserver"}`)
|
||
|
})
|
||
|
|
||
|
roles, err := client.Roles.List()
|
||
|
if err != nil {
|
||
|
t.Errorf("Roles.List returned error: %v", err)
|
||
|
}
|
||
|
|
||
|
want := &RoleListResult{"foo": "http://localhost:4000/roles/foo", "webserver": "http://localhost:4000/roles/webserver"}
|
||
|
|
||
|
if !reflect.DeepEqual(roles, want) {
|
||
|
t.Errorf("Roles.List returned %+v, want %+v", roles, want)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestRolesService_Get(t *testing.T) {
|
||
|
setup()
|
||
|
defer teardown()
|
||
|
|
||
|
mux.HandleFunc("/roles/webserver", func(w http.ResponseWriter, r *http.Request) {
|
||
|
fmt.Fprintf(w, `{
|
||
|
"name": "webserver",
|
||
|
"chef_type": "role",
|
||
|
"json_class": "Chef::Role",
|
||
|
"default_attributes": "",
|
||
|
"description": "A webserver",
|
||
|
"run_list": [
|
||
|
"recipe[unicorn]",
|
||
|
"recipe[apache2]"
|
||
|
],
|
||
|
"override_attributes": ""
|
||
|
}
|
||
|
`)
|
||
|
})
|
||
|
|
||
|
role, err := client.Roles.Get("webserver")
|
||
|
if err != nil {
|
||
|
t.Errorf("Roles.Get returned error: %v", err)
|
||
|
}
|
||
|
|
||
|
want := &Role{
|
||
|
Name: "webserver",
|
||
|
ChefType: "role",
|
||
|
JsonClass: "Chef::Role",
|
||
|
DefaultAttributes: "",
|
||
|
Description: "A webserver",
|
||
|
RunList: []string{"recipe[unicorn]", "recipe[apache2]"},
|
||
|
OverrideAttributes: "",
|
||
|
}
|
||
|
|
||
|
if !reflect.DeepEqual(role, want) {
|
||
|
t.Errorf("Roles.Get returned %+v, want %+v", role, want)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestRolesService_Create(t *testing.T) {
|
||
|
setup()
|
||
|
defer teardown()
|
||
|
|
||
|
mux.HandleFunc("/roles", func(w http.ResponseWriter, r *http.Request) {
|
||
|
fmt.Fprintf(w, `{ "uri": "http://localhost:4000/roles/webserver" }`)
|
||
|
})
|
||
|
|
||
|
role := &Role{
|
||
|
Name: "webserver",
|
||
|
ChefType: "role",
|
||
|
JsonClass: "Chef::Role",
|
||
|
DefaultAttributes: "",
|
||
|
Description: "A webserver",
|
||
|
RunList: []string{"recipe[unicorn]", "recipe[apache2]"},
|
||
|
OverrideAttributes: "",
|
||
|
}
|
||
|
|
||
|
uri, err := client.Roles.Create(role)
|
||
|
if err != nil {
|
||
|
t.Errorf("Roles.Create returned error: %v", err)
|
||
|
}
|
||
|
|
||
|
want := &RoleCreateResult{"uri": "http://localhost:4000/roles/webserver"}
|
||
|
|
||
|
if !reflect.DeepEqual(uri, want) {
|
||
|
t.Errorf("Roles.Create returned %+v, want %+v", uri, want)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestRolesService_Put(t *testing.T) {
|
||
|
setup()
|
||
|
defer teardown()
|
||
|
|
||
|
mux.HandleFunc("/roles/webserver", func(w http.ResponseWriter, r *http.Request) {
|
||
|
fmt.Fprintf(w, `{
|
||
|
"name": "webserver",
|
||
|
"chef_type": "role",
|
||
|
"json_class": "Chef::Role",
|
||
|
"description": "A webserver",
|
||
|
"run_list": [
|
||
|
"recipe[apache2]"
|
||
|
]
|
||
|
}`)
|
||
|
})
|
||
|
|
||
|
role := &Role{
|
||
|
Name: "webserver",
|
||
|
ChefType: "role",
|
||
|
JsonClass: "Chef::Role",
|
||
|
Description: "A webserver",
|
||
|
RunList: []string{"recipe[apache2]"},
|
||
|
}
|
||
|
|
||
|
updatedRole, err := client.Roles.Put(role)
|
||
|
if err != nil {
|
||
|
t.Errorf("Roles.Put returned error: %v", err)
|
||
|
}
|
||
|
|
||
|
if !reflect.DeepEqual(updatedRole, role) {
|
||
|
t.Errorf("Roles.Put returned %+v, want %+v", updatedRole, role)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestRolesService_RoleListResultString(t *testing.T) {
|
||
|
r := &RoleListResult{"foo": "http://localhost:4000/roles/foo"}
|
||
|
want := "foo => http://localhost:4000/roles/foo\n"
|
||
|
if r.String() != want {
|
||
|
t.Errorf("RoleListResult.String returned %+v, want %+v", r.String(), want)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestRolesService_RoleCreateResultString(t *testing.T) {
|
||
|
r := &RoleCreateResult{"uri": "http://localhost:4000/roles/webserver"}
|
||
|
want := "uri => http://localhost:4000/roles/webserver\n"
|
||
|
if r.String() != want {
|
||
|
t.Errorf("RoleCreateResult.String returned %+v, want %+v", r.String(), want)
|
||
|
}
|
||
|
}
|