func (s *S) TestTemplateList(c *check.C) { iaas.RegisterIaasProvider("ec2", newTestIaaS) iaas.RegisterIaasProvider("other", newTestIaaS) tpl1 := iaas.Template{ Name: "tpl1", IaaSName: "ec2", Data: iaas.TemplateDataList([]iaas.TemplateData{ {Name: "key1", Value: "val1"}, {Name: "key2", Value: "val2"}, }), } err := tpl1.Save() c.Assert(err, check.IsNil) defer iaas.DestroyTemplate("tpl1") tpl2 := iaas.Template{ Name: "tpl2", IaaSName: "other", Data: iaas.TemplateDataList([]iaas.TemplateData{ {Name: "key4", Value: "valX"}, {Name: "key5", Value: "valY"}, }), } err = tpl2.Save() c.Assert(err, check.IsNil) defer iaas.DestroyTemplate("tpl2") recorder := httptest.NewRecorder() request, err := http.NewRequest("GET", "/iaas/templates", nil) c.Assert(err, check.IsNil) request.Header.Set("Authorization", "bearer "+s.token.GetValue()) m := RunServer(true) m.ServeHTTP(recorder, request) c.Assert(recorder.Code, check.Equals, http.StatusOK) c.Assert(recorder.Header().Get("Content-Type"), check.Equals, "application/json") var templates []iaas.Template err = json.Unmarshal(recorder.Body.Bytes(), &templates) c.Assert(err, check.IsNil) c.Assert(templates, check.HasLen, 2) c.Assert(templates[0].Name, check.Equals, "tpl1") c.Assert(templates[1].Name, check.Equals, "tpl2") c.Assert(templates[0].IaaSName, check.Equals, "ec2") c.Assert(templates[1].IaaSName, check.Equals, "other") c.Assert(templates[0].Data, check.DeepEquals, iaas.TemplateDataList([]iaas.TemplateData{ {Name: "key1", Value: "val1"}, {Name: "key2", Value: "val2"}, })) c.Assert(templates[1].Data, check.DeepEquals, iaas.TemplateDataList([]iaas.TemplateData{ {Name: "key4", Value: "valX"}, {Name: "key5", Value: "valY"}, })) }
func (s *S) TestTemplateCreate(c *check.C) { iaas.RegisterIaasProvider("my-iaas", newTestIaaS) data := iaas.Template{ Name: "my-tpl", IaaSName: "my-iaas", Data: iaas.TemplateDataList([]iaas.TemplateData{ {Name: "x", Value: "y"}, {Name: "a", Value: "b"}, }), } bodyData, err := json.Marshal(data) c.Assert(err, check.IsNil) body := bytes.NewBuffer(bodyData) recorder := httptest.NewRecorder() request, err := http.NewRequest("POST", "/iaas/templates", body) c.Assert(err, check.IsNil) request.Header.Set("Authorization", "bearer "+s.admintoken.GetValue()) m := RunServer(true) m.ServeHTTP(recorder, request) c.Assert(recorder.Code, check.Equals, http.StatusCreated) defer iaas.DestroyTemplate("my-tpl") templates, err := iaas.ListTemplates() c.Assert(err, check.IsNil) c.Assert(templates, check.HasLen, 1) c.Assert(templates[0].Name, check.Equals, "my-tpl") c.Assert(templates[0].IaaSName, check.Equals, "my-iaas") c.Assert(templates[0].Data, check.DeepEquals, iaas.TemplateDataList([]iaas.TemplateData{ {Name: "x", Value: "y"}, {Name: "a", Value: "b"}, })) }
func (s *S) TestTemplateDestroy(c *check.C) { iaas.RegisterIaasProvider("ec2", newTestIaaS) tpl1 := iaas.Template{ Name: "tpl1", IaaSName: "ec2", Data: iaas.TemplateDataList([]iaas.TemplateData{ {Name: "key1", Value: "val1"}, {Name: "key2", Value: "val2"}, }), } err := tpl1.Save() c.Assert(err, check.IsNil) defer iaas.DestroyTemplate("tpl1") recorder := httptest.NewRecorder() request, err := http.NewRequest("DELETE", "/iaas/templates/tpl1", nil) c.Assert(err, check.IsNil) request.Header.Set("Authorization", "bearer "+s.token.GetValue()) m := RunServer(true) m.ServeHTTP(recorder, request) c.Assert(recorder.Code, check.Equals, http.StatusOK) templates, err := iaas.ListTemplates() c.Assert(err, check.IsNil) c.Assert(templates, check.HasLen, 0) c.Assert(eventtest.EventDesc{ Target: event.Target{Type: event.TargetTypeIaas, Value: "ec2"}, Owner: s.token.GetUserName(), Kind: "machine.template.delete", StartCustomData: []map[string]interface{}{ {"name": ":template_name", "value": "tpl1"}, }, }, eventtest.HasEvent) }
// title: template destroy // path: /iaas/templates/{template_name} // method: DELETE // responses: // 200: OK // 401: Unauthorized // 404: Not found func templateDestroy(w http.ResponseWriter, r *http.Request, token auth.Token) (err error) { r.ParseForm() templateName := r.URL.Query().Get(":template_name") t, err := iaas.FindTemplate(templateName) if err != nil { if err == mgo.ErrNotFound { return &errors.HTTP{Code: http.StatusNotFound, Message: "template not found"} } return err } iaasCtx := permission.Context(permission.CtxIaaS, t.IaaSName) allowed := permission.Check(token, permission.PermMachineTemplateDelete, iaasCtx) if !allowed { return permission.ErrUnauthorized } evt, err := event.New(&event.Opts{ Target: event.Target{Type: event.TargetTypeIaas, Value: t.IaaSName}, Kind: permission.PermMachineTemplateDelete, Owner: token, CustomData: event.FormToCustomData(r.Form), Allowed: event.Allowed(permission.PermMachineReadEvents, iaasCtx), }) if err != nil { return err } defer func() { evt.Done(err) }() return iaas.DestroyTemplate(templateName) }
func templateDestroy(w http.ResponseWriter, r *http.Request, token auth.Token) error { templateName := r.URL.Query().Get(":template_name") err := iaas.DestroyTemplate(templateName) if err != nil { return err } return nil }
func (s *S) TestTemplateCreate(c *check.C) { iaas.RegisterIaasProvider("my-iaas", newTestIaaS) data := iaas.Template{ Name: "my-tpl", IaaSName: "my-iaas", Data: iaas.TemplateDataList([]iaas.TemplateData{ {Name: "x", Value: "y"}, {Name: "a", Value: "b"}, }), } v, err := form.EncodeToValues(&data) c.Assert(err, check.IsNil) recorder := httptest.NewRecorder() request, err := http.NewRequest("POST", "/iaas/templates", strings.NewReader(v.Encode())) c.Assert(err, check.IsNil) request.Header.Set("Content-Type", "application/x-www-form-urlencoded") request.Header.Set("Authorization", "bearer "+s.token.GetValue()) m := RunServer(true) m.ServeHTTP(recorder, request) c.Assert(recorder.Code, check.Equals, http.StatusCreated) defer iaas.DestroyTemplate("my-tpl") templates, err := iaas.ListTemplates() c.Assert(err, check.IsNil) c.Assert(templates, check.HasLen, 1) c.Assert(templates[0].Name, check.Equals, "my-tpl") c.Assert(templates[0].IaaSName, check.Equals, "my-iaas") c.Assert(templates[0].Data, check.DeepEquals, iaas.TemplateDataList([]iaas.TemplateData{ {Name: "x", Value: "y"}, {Name: "a", Value: "b"}, })) c.Assert(eventtest.EventDesc{ Target: event.Target{Type: event.TargetTypeIaas, Value: "my-iaas"}, Owner: s.token.GetUserName(), Kind: "machine.template.create", StartCustomData: []map[string]interface{}{ {"name": "Name", "value": "my-tpl"}, {"name": "IaaSName", "value": "my-iaas"}, {"name": "Data.0.Name", "value": "x"}, {"name": "Data.0.Value", "value": "y"}, {"name": "Data.1.Name", "value": "a"}, {"name": "Data.1.Value", "value": "b"}, }, }, eventtest.HasEvent) }
func templateDestroy(w http.ResponseWriter, r *http.Request, token auth.Token) error { templateName := r.URL.Query().Get(":template_name") t, err := iaas.FindTemplate(templateName) if err != nil { if err == mgo.ErrNotFound { return &errors.HTTP{Code: http.StatusNotFound, Message: "template not found"} } return err } allowed := permission.Check(token, permission.PermMachineTemplateDelete, permission.Context(permission.CtxIaaS, t.IaaSName), ) if !allowed { return permission.ErrUnauthorized } err = iaas.DestroyTemplate(templateName) if err != nil { return err } return nil }
func (s *S) TestTemplateDestroy(c *check.C) { iaas.RegisterIaasProvider("ec2", newTestIaaS) tpl1 := iaas.Template{ Name: "tpl1", IaaSName: "ec2", Data: iaas.TemplateDataList([]iaas.TemplateData{ {Name: "key1", Value: "val1"}, {Name: "key2", Value: "val2"}, }), } err := tpl1.Save() c.Assert(err, check.IsNil) defer iaas.DestroyTemplate("tpl1") recorder := httptest.NewRecorder() request, err := http.NewRequest("DELETE", "/iaas/templates/tpl1", nil) c.Assert(err, check.IsNil) request.Header.Set("Authorization", "bearer "+s.admintoken.GetValue()) m := RunServer(true) m.ServeHTTP(recorder, request) c.Assert(recorder.Code, check.Equals, http.StatusOK) templates, err := iaas.ListTemplates() c.Assert(err, check.IsNil) c.Assert(templates, check.HasLen, 0) }