1// +build acceptance compute services
2
3package v2
4
5import (
6	"testing"
7
8	"github.com/gophercloud/gophercloud/acceptance/clients"
9	"github.com/gophercloud/gophercloud/acceptance/tools"
10	"github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/services"
11	th "github.com/gophercloud/gophercloud/testhelper"
12)
13
14func TestServicesList(t *testing.T) {
15	clients.RequireAdmin(t)
16
17	client, err := clients.NewComputeV2Client()
18	th.AssertNoErr(t, err)
19
20	allPages, err := services.List(client, nil).AllPages()
21	th.AssertNoErr(t, err)
22
23	allServices, err := services.ExtractServices(allPages)
24	th.AssertNoErr(t, err)
25
26	var found bool
27	for _, service := range allServices {
28		tools.PrintResource(t, service)
29
30		if service.Binary == "nova-scheduler" {
31			found = true
32		}
33	}
34
35	th.AssertEquals(t, found, true)
36}
37
38func TestServicesListWithOpts(t *testing.T) {
39	clients.RequireAdmin(t)
40
41	client, err := clients.NewComputeV2Client()
42	th.AssertNoErr(t, err)
43
44	opts := services.ListOpts{
45		Binary: "nova-scheduler",
46	}
47
48	allPages, err := services.List(client, opts).AllPages()
49	th.AssertNoErr(t, err)
50
51	allServices, err := services.ExtractServices(allPages)
52	th.AssertNoErr(t, err)
53
54	var found bool
55	for _, service := range allServices {
56		tools.PrintResource(t, service)
57		th.AssertEquals(t, service.Binary, "nova-scheduler")
58
59		if service.Binary == "nova-scheduler" {
60			found = true
61		}
62	}
63
64	th.AssertEquals(t, found, true)
65}
66
67func TestServicesUpdate(t *testing.T) {
68	clients.RequireAdmin(t)
69
70	client, err := clients.NewComputeV2Client()
71	th.AssertNoErr(t, err)
72
73	listOpts := services.ListOpts{
74		Binary: "nova-compute",
75	}
76
77	client.Microversion = "2.53"
78	allPages, err := services.List(client, listOpts).AllPages()
79	th.AssertNoErr(t, err)
80
81	allServices, err := services.ExtractServices(allPages)
82	th.AssertNoErr(t, err)
83
84	// disable all services
85	for _, service := range allServices {
86		opts := services.UpdateOpts{
87			Status: services.ServiceDisabled,
88		}
89		updated, err := services.Update(client, service.ID, opts).Extract()
90		th.AssertNoErr(t, err)
91
92		th.AssertEquals(t, updated.ID, service.ID)
93	}
94
95	// verify all services are disabled
96	allPages, err = services.List(client, listOpts).AllPages()
97	th.AssertNoErr(t, err)
98
99	allServices, err = services.ExtractServices(allPages)
100	th.AssertNoErr(t, err)
101
102	for _, service := range allServices {
103		th.AssertEquals(t, service.Status, "disabled")
104	}
105
106	// reenable all services
107	allPages, err = services.List(client, listOpts).AllPages()
108	th.AssertNoErr(t, err)
109
110	allServices, err = services.ExtractServices(allPages)
111	th.AssertNoErr(t, err)
112
113	for _, service := range allServices {
114		opts := services.UpdateOpts{
115			Status: services.ServiceEnabled,
116		}
117		updated, err := services.Update(client, service.ID, opts).Extract()
118		th.AssertNoErr(t, err)
119
120		th.AssertEquals(t, updated.ID, service.ID)
121	}
122}
123