github.com/go-chef/chef@v0.30.1/role_test.go (about) 1 package chef 2 3 import ( 4 "encoding/json" 5 "fmt" 6 "github.com/r3labs/diff" 7 "github.com/stretchr/testify/assert" 8 "io" 9 "log" 10 "net/http" 11 "os" 12 "reflect" 13 "testing" 14 ) 15 16 var ( 17 testRoleJSON = "test/role.json" 18 // FML 19 testRole = &Role{ 20 Name: "test", 21 ChefType: "role", 22 Description: "Test Role", 23 RunList: []string{"recipe[foo]", "recipe[baz]", "role[banana]"}, 24 JsonClass: "Chef::Role", 25 DefaultAttributes: struct{}{}, 26 OverrideAttributes: struct{}{}, 27 } 28 ) 29 30 func TestRoleName(t *testing.T) { 31 n1 := testRole 32 name := n1.Name 33 assert.Equal(t, "test", name, "Role name") 34 } 35 36 // BUG(fujin): re-do with goconvey 37 func TestRoleFromJSONDecoder(t *testing.T) { 38 if file, err := os.Open(testRoleJSON); err != nil { 39 t.Error("unexpected error", err, "during os.Open on", testRoleJSON) 40 } else { 41 dec := json.NewDecoder(file) 42 var n Role 43 if err := dec.Decode(&n); err == io.EOF { 44 log.Println(n) 45 } else if err != nil { 46 log.Fatal(err) 47 } 48 } 49 } 50 51 func TestRolesService_List(t *testing.T) { 52 setup() 53 defer teardown() 54 55 mux.HandleFunc("/roles", func(w http.ResponseWriter, r *http.Request) { 56 fmt.Fprintf(w, `{"foo":"http://localhost:4000/roles/foo", "webserver":"http://localhost:4000/roles/webserver"}`) 57 }) 58 59 roles, err := client.Roles.List() 60 if err != nil { 61 t.Errorf("Roles.List returned error: %v", err) 62 } 63 64 want := &RoleListResult{"foo": "http://localhost:4000/roles/foo", "webserver": "http://localhost:4000/roles/webserver"} 65 66 if !reflect.DeepEqual(roles, want) { 67 t.Errorf("Roles.List returned %+v, want %+v", roles, want) 68 } 69 } 70 71 func TestRolesService_Get(t *testing.T) { 72 setup() 73 defer teardown() 74 75 mux.HandleFunc("/roles/webserver", func(w http.ResponseWriter, r *http.Request) { 76 fmt.Fprintf(w, `{ 77 "name": "webserver", 78 "chef_type": "role", 79 "json_class": "Chef::Role", 80 "default_attributes": "", 81 "description": "A webserver", 82 "run_list": [ 83 "recipe[unicorn]", 84 "recipe[apache2]" 85 ], 86 "override_attributes": "" 87 } 88 `) 89 }) 90 91 role, err := client.Roles.Get("webserver") 92 if err != nil { 93 t.Errorf("Roles.Get returned error: %v", err) 94 } 95 96 want := &Role{ 97 Name: "webserver", 98 ChefType: "role", 99 JsonClass: "Chef::Role", 100 DefaultAttributes: "", 101 Description: "A webserver", 102 RunList: []string{"recipe[unicorn]", "recipe[apache2]"}, 103 OverrideAttributes: "", 104 } 105 106 if !reflect.DeepEqual(role, want) { 107 t.Errorf("Roles.Get returned %+v, want %+v", role, want) 108 } 109 } 110 111 func TestRolesService_Create(t *testing.T) { 112 setup() 113 defer teardown() 114 115 mux.HandleFunc("/roles", func(w http.ResponseWriter, r *http.Request) { 116 fmt.Fprintf(w, `{ "uri": "http://localhost:4000/roles/webserver" }`) 117 }) 118 119 role := &Role{ 120 Name: "webserver", 121 ChefType: "role", 122 JsonClass: "Chef::Role", 123 DefaultAttributes: "", 124 Description: "A webserver", 125 RunList: []string{"recipe[unicorn]", "recipe[apache2]"}, 126 OverrideAttributes: "", 127 } 128 129 uri, err := client.Roles.Create(role) 130 if err != nil { 131 t.Errorf("Roles.Create returned error: %v", err) 132 } 133 134 want := &RoleCreateResult{"uri": "http://localhost:4000/roles/webserver"} 135 136 if !reflect.DeepEqual(uri, want) { 137 t.Errorf("Roles.Create returned %+v, want %+v", uri, want) 138 } 139 } 140 141 func TestRolesService_Put(t *testing.T) { 142 setup() 143 defer teardown() 144 145 mux.HandleFunc("/roles/webserver", func(w http.ResponseWriter, r *http.Request) { 146 fmt.Fprintf(w, `{ 147 "name": "webserver", 148 "chef_type": "role", 149 "json_class": "Chef::Role", 150 "description": "A webserver", 151 "run_list": [ 152 "recipe[apache2]" 153 ] 154 }`) 155 }) 156 157 role := &Role{ 158 Name: "webserver", 159 ChefType: "role", 160 JsonClass: "Chef::Role", 161 Description: "A webserver", 162 RunList: []string{"recipe[apache2]"}, 163 } 164 165 updatedRole, err := client.Roles.Put(role) 166 if err != nil { 167 t.Errorf("Roles.Put returned error: %v", err) 168 } 169 170 if !reflect.DeepEqual(updatedRole, role) { 171 t.Errorf("Roles.Put returned %+v, want %+v", updatedRole, role) 172 } 173 } 174 175 func TestRolesService_GetEnvironments(t *testing.T) { 176 setup() 177 defer teardown() 178 179 mux.HandleFunc("/roles/webserver/environments", func(w http.ResponseWriter, r *http.Request) { 180 fmt.Fprintf(w, `[ "_default", "env1"]`) 181 }) 182 183 want := RoleEnvironmentsResult{ 184 "_default", 185 "env1", 186 } 187 188 updatedRole, err := client.Roles.GetEnvironments("webserver") 189 if err != nil { 190 t.Errorf("Roles.GetEnvironments returned error: %v", err) 191 } 192 193 if !reflect.DeepEqual(updatedRole, want) { 194 t.Errorf("Roles.GetEnvironments returned %+v, want %+v", updatedRole, want) 195 } 196 } 197 198 func TestRolesService_GetEnvironmentRunlist(t *testing.T) { 199 setup() 200 defer teardown() 201 202 mux.HandleFunc("/roles/webserver/environments/env1", func(w http.ResponseWriter, r *http.Request) { 203 fmt.Fprintf(w, `{"run_list": ["recipe[foo1]", "recipe[foo2]"]}`) 204 }) 205 206 list := []string{"recipe[foo1]", "recipe[foo2]"} 207 want := map[string][]string{"run_list": list} 208 209 updatedRole, err := client.Roles.GetEnvironmentRunlist("webserver", "env1") 210 if err != nil { 211 t.Errorf("Roles.GetEnvironmentRunlist returned error: %v", err) 212 } 213 214 diff, err := diff.Diff(updatedRole, want) 215 if err != nil { 216 t.Errorf("Roles.GetEnvironmentRunlist returned %+v, want %+v", updatedRole, want) 217 t.Errorf("Diff comparison %+v err %+v\n", diff, err) 218 } 219 } 220 221 func TestRolesService_RoleListResultString(t *testing.T) { 222 r := &RoleListResult{"foo": "http://localhost:4000/roles/foo"} 223 rstr := r.String() 224 want := "foo => http://localhost:4000/roles/foo\n" 225 if rstr != want { 226 t.Errorf("RoleListResult.String returned %+v, want %+v", rstr, want) 227 } 228 } 229 230 func TestRolesService_RoleCreateResultString(t *testing.T) { 231 r := &RoleCreateResult{"uri": "http://localhost:4000/roles/webserver"} 232 rstr := r.String() 233 want := "uri => http://localhost:4000/roles/webserver\n" 234 if rstr != want { 235 t.Errorf("RoleCreateResult.String returned %+v, want %+v", rstr, want) 236 } 237 } 238 239 func TestRolesService_Delete(t *testing.T) { 240 setup() 241 defer teardown() 242 243 mux.HandleFunc("/roles/webserver", func(w http.ResponseWriter, r *http.Request) { 244 fmt.Fprintf(w, `{ 245 "name": "webserver", 246 "chef_type": "role", 247 "json_class": "Chef::Role", 248 "description": "A webserver", 249 "run_list": [ 250 "recipe[apache2]" 251 ] 252 }`) 253 }) 254 err := client.Roles.Delete("webserver") 255 if err != nil { 256 t.Errorf("Roles.Delete returned error: %v", err) 257 } 258 }