github.com/gophercloud/gophercloud@v1.14.1/internal/acceptance/openstack/baremetal/v1/nodes_test.go (about) 1 //go:build acceptance || baremetal || nodes 2 // +build acceptance baremetal nodes 3 4 package v1 5 6 import ( 7 "testing" 8 9 "github.com/gophercloud/gophercloud/internal/acceptance/clients" 10 "github.com/gophercloud/gophercloud/openstack/baremetal/v1/nodes" 11 "github.com/gophercloud/gophercloud/pagination" 12 13 th "github.com/gophercloud/gophercloud/testhelper" 14 ) 15 16 func TestNodesCreateDestroy(t *testing.T) { 17 clients.RequireLong(t) 18 19 client, err := clients.NewBareMetalV1Client() 20 th.AssertNoErr(t, err) 21 client.Microversion = "1.38" 22 23 node, err := CreateNode(t, client) 24 th.AssertNoErr(t, err) 25 defer DeleteNode(t, client, node) 26 27 found := false 28 err = nodes.List(client, nodes.ListOpts{}).EachPage(func(page pagination.Page) (bool, error) { 29 nodeList, err := nodes.ExtractNodes(page) 30 if err != nil { 31 return false, err 32 } 33 34 for _, n := range nodeList { 35 if n.UUID == node.UUID { 36 found = true 37 return true, nil 38 } 39 } 40 41 return false, nil 42 }) 43 th.AssertNoErr(t, err) 44 45 th.AssertEquals(t, found, true) 46 } 47 48 func TestNodesFields(t *testing.T) { 49 clients.RequireLong(t) 50 51 client, err := clients.NewBareMetalV1Client() 52 th.AssertNoErr(t, err) 53 client.Microversion = "1.38" 54 55 node, err := CreateNode(t, client) 56 th.AssertNoErr(t, err) 57 defer DeleteNode(t, client, node) 58 err = nodes.List(client, nodes.ListOpts{ 59 Fields: []string{"uuid", "deploy_interface"}, 60 }).EachPage(func(page pagination.Page) (bool, error) { 61 nodeList, err := nodes.ExtractNodes(page) 62 if err != nil { 63 return false, err 64 } 65 66 for _, n := range nodeList { 67 if n.UUID == "" || n.DeployInterface == "" { 68 t.Errorf("UUID or DeployInterface empty on %+v", n) 69 } 70 if n.BootInterface != "" { 71 t.Errorf("BootInterface was not fetched but is not empty on %+v", n) 72 } 73 } 74 75 return true, nil 76 }) 77 th.AssertNoErr(t, err) 78 } 79 80 func TestNodesUpdate(t *testing.T) { 81 clients.RequireLong(t) 82 83 client, err := clients.NewBareMetalV1Client() 84 th.AssertNoErr(t, err) 85 client.Microversion = "1.38" 86 87 node, err := CreateNode(t, client) 88 th.AssertNoErr(t, err) 89 defer DeleteNode(t, client, node) 90 91 updated, err := nodes.Update(client, node.UUID, nodes.UpdateOpts{ 92 nodes.UpdateOperation{ 93 Op: nodes.ReplaceOp, 94 Path: "/maintenance", 95 Value: "true", 96 }, 97 }).Extract() 98 th.AssertNoErr(t, err) 99 100 th.AssertEquals(t, updated.Maintenance, true) 101 } 102 103 func TestNodesMaintenance(t *testing.T) { 104 clients.RequireLong(t) 105 106 client, err := clients.NewBareMetalV1Client() 107 th.AssertNoErr(t, err) 108 client.Microversion = "1.38" 109 110 node, err := CreateNode(t, client) 111 th.AssertNoErr(t, err) 112 defer DeleteNode(t, client, node) 113 114 err = nodes.SetMaintenance(client, node.UUID, nodes.MaintenanceOpts{ 115 Reason: "I'm tired", 116 }).ExtractErr() 117 th.AssertNoErr(t, err) 118 119 updated, err := nodes.Get(client, node.UUID).Extract() 120 th.AssertNoErr(t, err) 121 122 th.AssertEquals(t, updated.Maintenance, true) 123 th.AssertEquals(t, updated.MaintenanceReason, "I'm tired") 124 125 err = nodes.UnsetMaintenance(client, node.UUID).ExtractErr() 126 th.AssertNoErr(t, err) 127 128 updated, err = nodes.Get(client, node.UUID).Extract() 129 th.AssertNoErr(t, err) 130 131 th.AssertEquals(t, updated.Maintenance, false) 132 th.AssertEquals(t, updated.MaintenanceReason, "") 133 } 134 135 func TestNodesRAIDConfig(t *testing.T) { 136 clients.SkipReleasesBelow(t, "stable/ussuri") 137 clients.RequireLong(t) 138 139 client, err := clients.NewBareMetalV1Client() 140 th.AssertNoErr(t, err) 141 client.Microversion = "1.50" 142 143 node, err := CreateNode(t, client) 144 th.AssertNoErr(t, err) 145 defer DeleteNode(t, client, node) 146 147 sizeGB := 100 148 isTrue := true 149 150 err = nodes.SetRAIDConfig(client, node.UUID, nodes.RAIDConfigOpts{ 151 LogicalDisks: []nodes.LogicalDisk{ 152 { 153 SizeGB: &sizeGB, 154 IsRootVolume: &isTrue, 155 RAIDLevel: nodes.RAID5, 156 Controller: "software", 157 PhysicalDisks: []interface{}{ 158 map[string]string{ 159 "size": "> 100", 160 }, 161 map[string]string{ 162 "size": "> 100", 163 }, 164 }, 165 }, 166 }, 167 }).ExtractErr() 168 th.AssertNoErr(t, err) 169 170 err = nodes.SetRAIDConfig(client, node.UUID, nodes.RAIDConfigOpts{ 171 LogicalDisks: []nodes.LogicalDisk{ 172 { 173 SizeGB: &sizeGB, 174 IsRootVolume: &isTrue, 175 RAIDLevel: nodes.RAID5, 176 DiskType: nodes.HDD, 177 NumberOfPhysicalDisks: 5, 178 }, 179 }, 180 }).ExtractErr() 181 th.AssertNoErr(t, err) 182 }