550
550
assertJSON(c, resp, &expected)
551
551
c.Assert(expected.Servers, HasLen, 0)
552
552
servers := []nova.ServerDetail{
553
nova.ServerDetail{Id: "sr1", Name: "server 1"},
554
nova.ServerDetail{Id: "sr2", Name: "server 2"},
553
{Id: "sr1", Name: "server 1"},
554
{Id: "sr2", Name: "server 2"},
556
556
for i, server := range servers {
557
557
s.service.buildServerLinks(&server)
558
558
servers[i] = server
559
559
err := s.service.addServer(server)
560
561
defer s.service.removeServer(server.Id)
563
entities = s.service.allServersAsEntities()
563
entities = s.service.allServersAsEntities(nil)
564
564
resp, err = s.authRequest("GET", "/servers", nil, nil)
565
565
c.Assert(err, IsNil)
566
566
c.Assert(resp.StatusCode, Equals, http.StatusOK)
567
567
assertJSON(c, resp, &expected)
568
c.Assert(expected.Servers, HasLen, 2)
568
569
if expected.Servers[0].Id != entities[0].Id {
569
570
expected.Servers[0], expected.Servers[1] = expected.Servers[1], expected.Servers[0]
579
580
c.Assert(expectedServer.Server, DeepEquals, servers[0])
583
func (s *NovaHTTPSuite) TestGetServersWithFilters(c *C) {
584
entities := s.service.allServersAsEntities(nil)
585
c.Assert(entities, HasLen, 0)
586
var expected struct {
587
Servers []nova.Entity
589
url := "/servers?status=RESCUE&status=BUILD&name=srv1&name=srv2"
590
resp, err := s.authRequest("GET", url, nil, nil)
592
c.Assert(resp.StatusCode, Equals, http.StatusOK)
593
assertJSON(c, resp, &expected)
594
c.Assert(expected.Servers, HasLen, 0)
595
servers := []nova.ServerDetail{
596
{Id: "sr1", Name: "srv1", Status: nova.StatusBuild},
597
{Id: "sr2", Name: "srv2", Status: nova.StatusRescue},
598
{Id: "sr3", Name: "srv3", Status: nova.StatusActive},
600
for i, server := range servers {
601
s.service.buildServerLinks(&server)
603
err := s.service.addServer(server)
605
defer s.service.removeServer(server.Id)
607
filter := nova.NewFilter()
608
filter.Add(nova.FilterStatus, nova.StatusRescue)
609
filter.Add(nova.FilterStatus, nova.StatusBuild)
610
filter.Add(nova.FilterServer, "srv1")
611
filter.Add(nova.FilterServer, "srv2")
612
entities = s.service.allServersAsEntities(filter)
613
resp, err = s.authRequest("GET", url, nil, nil)
615
c.Assert(resp.StatusCode, Equals, http.StatusOK)
616
assertJSON(c, resp, &expected)
617
if expected.Servers[0].Id != entities[0].Id {
618
expected.Servers[0], expected.Servers[1] = expected.Servers[1], expected.Servers[0]
620
c.Assert(expected.Servers, DeepEquals, entities[:2])
623
func (s *NovaHTTPSuite) TestNewUUID(c *C) {
624
uuid, err := newUUID()
626
var p1, p2, p3, p4, p5 string
627
num, err := fmt.Sscanf(uuid, "%8x-%4x-%4x-%4x-%12x", &p1, &p2, &p3, &p4, &p5)
629
c.Assert(num, Equals, 5)
630
uuid2, err := newUUID()
632
c.Assert(uuid2, Not(Equals), uuid)
635
func (s *NovaHTTPSuite) TestRunServer(c *C) {
636
entities := s.service.allServersAsEntities(nil)
637
c.Assert(entities, HasLen, 0)
640
FlavorRef string `json:"flavorRef"`
641
ImageRef string `json:"imageRef"`
642
Name string `json:"name"`
643
SecurityGroups []map[string]string `json:"security_groups"`
646
resp, err := s.jsonRequest("POST", "/servers", req, nil)
648
c.Assert(resp.StatusCode, Equals, http.StatusBadRequest)
649
assertBody(c, resp, errBadRequestSrvName)
650
req.Server.Name = "srv1"
651
resp, err = s.jsonRequest("POST", "/servers", req, nil)
653
c.Assert(resp.StatusCode, Equals, http.StatusBadRequest)
654
assertBody(c, resp, errBadRequestSrvImage)
655
req.Server.ImageRef = "image"
656
resp, err = s.jsonRequest("POST", "/servers", req, nil)
658
c.Assert(resp.StatusCode, Equals, http.StatusBadRequest)
659
assertBody(c, resp, errBadRequestSrvFlavor)
660
req.Server.FlavorRef = "flavor"
661
var expected struct {
663
SecurityGroups []map[string]string `json:"security_groups"`
669
resp, err = s.jsonRequest("POST", "/servers", req, nil)
671
c.Assert(resp.StatusCode, Equals, http.StatusAccepted)
672
assertJSON(c, resp, &expected)
673
c.Assert(expected.Server.SecurityGroups, HasLen, 1)
674
c.Assert(expected.Server.SecurityGroups[0]["name"], Equals, "default")
675
c.Assert(expected.Server.Id, Not(Equals), "")
676
c.Assert(expected.Server.Links, HasLen, 2)
677
c.Assert(expected.Server.AdminPass, Not(Equals), "")
678
srv, err := s.service.server(expected.Server.Id)
680
c.Assert(srv.Links, DeepEquals, expected.Server.Links)
681
s.service.removeServer(srv.Id)
682
req.Server.Name = "test2"
683
req.Server.SecurityGroups = []map[string]string{
687
err = s.service.addSecurityGroup(nova.SecurityGroup{Id: 1, Name: "group1"})
689
defer s.service.removeSecurityGroup(1)
690
err = s.service.addSecurityGroup(nova.SecurityGroup{Id: 2, Name: "group2"})
692
defer s.service.removeSecurityGroup(2)
693
resp, err = s.jsonRequest("POST", "/servers", req, nil)
695
c.Assert(resp.StatusCode, Equals, http.StatusAccepted)
696
assertJSON(c, resp, &expected)
697
c.Assert(expected.Server.SecurityGroups, DeepEquals, req.Server.SecurityGroups)
698
srv, err = s.service.server(expected.Server.Id)
700
ok := s.service.hasServerSecurityGroup(srv.Id, 1)
701
c.Assert(ok, Equals, true)
702
ok = s.service.hasServerSecurityGroup(srv.Id, 2)
703
c.Assert(ok, Equals, true)
704
s.service.removeServerSecurityGroup(srv.Id, 1)
705
s.service.removeServerSecurityGroup(srv.Id, 2)
706
s.service.removeServer(srv.Id)
582
709
func (s *NovaHTTPSuite) TestDeleteServer(c *C) {
583
710
server := nova.ServerDetail{Id: "sr1"}
584
711
_, err := s.service.server(server.Id)
585
712
c.Assert(err, NotNil)
586
713
err = s.service.addServer(server)
587
715
defer s.service.removeServer(server.Id)
589
716
resp, err := s.authRequest("DELETE", "/servers/sr1", nil, nil)
590
717
c.Assert(err, IsNil)
591
718
c.Assert(resp.StatusCode, Equals, http.StatusNoContent)
605
732
assertJSON(c, resp, &expected)
606
733
c.Assert(expected.Servers, HasLen, 0)
607
734
servers = []nova.ServerDetail{
608
nova.ServerDetail{Id: "sr1", Name: "server 1"},
609
nova.ServerDetail{Id: "sr2", Name: "server 2"},
735
{Id: "sr1", Name: "server 1"},
736
{Id: "sr2", Name: "server 2"},
611
738
for i, server := range servers {
612
739
s.service.buildServerLinks(&server)
613
740
servers[i] = server
614
741
err := s.service.addServer(server)
615
743
defer s.service.removeServer(server.Id)
618
745
resp, err = s.authRequest("GET", "/servers/detail", nil, nil)
619
746
c.Assert(err, IsNil)
620
747
c.Assert(resp.StatusCode, Equals, http.StatusOK)
621
748
assertJSON(c, resp, &expected)
749
c.Assert(expected.Servers, HasLen, 2)
622
750
if expected.Servers[0].Id != servers[0].Id {
623
751
expected.Servers[0], expected.Servers[1] = expected.Servers[1], expected.Servers[0]
628
756
assertBody(c, resp, errNotFound)
759
func (s *NovaHTTPSuite) TestGetServersDetailWithFilters(c *C) {
760
servers := s.service.allServers(nil)
761
c.Assert(servers, HasLen, 0)
762
var expected struct {
763
Servers []nova.ServerDetail `json:"servers"`
765
url := "/servers/detail?status=RESCUE&status=BUILD&name=srv1&name=srv2"
766
resp, err := s.authRequest("GET", url, nil, nil)
768
c.Assert(resp.StatusCode, Equals, http.StatusOK)
769
assertJSON(c, resp, &expected)
770
c.Assert(expected.Servers, HasLen, 0)
771
servers = []nova.ServerDetail{
772
{Id: "sr1", Name: "srv1", Status: nova.StatusBuild},
773
{Id: "sr2", Name: "srv2", Status: nova.StatusRescue},
774
{Id: "sr3", Name: "srv3", Status: nova.StatusActive},
776
for i, server := range servers {
777
s.service.buildServerLinks(&server)
779
err := s.service.addServer(server)
781
defer s.service.removeServer(server.Id)
783
resp, err = s.authRequest("GET", url, nil, nil)
785
c.Assert(resp.StatusCode, Equals, http.StatusOK)
786
assertJSON(c, resp, &expected)
787
c.Assert(expected.Servers, HasLen, 2)
788
if expected.Servers[0].Id != servers[0].Id {
789
expected.Servers[0], expected.Servers[1] = expected.Servers[1], expected.Servers[0]
791
c.Assert(expected.Servers, DeepEquals, servers[:2])
631
794
func (s *NovaHTTPSuite) TestGetSecurityGroups(c *C) {
632
795
groups := s.service.allSecurityGroups()
633
796
c.Assert(groups, HasLen, 0)