Skip to content

Commit f6efd44

Browse files
committed
add test for getvmfromuuid()
1 parent df11ce9 commit f6efd44

File tree

6 files changed

+99
-15
lines changed

6 files changed

+99
-15
lines changed

go.mod

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ require (
66
github.com/pkg/errors v0.9.1
77
github.com/sp-yduck/proxmox-go v0.0.0-alpha1
88
github.com/spf13/pflag v1.0.5
9+
github.com/stretchr/testify v1.8.4
910
gopkg.in/yaml.v3 v3.0.1
1011
k8s.io/api v0.27.3
1112
k8s.io/apimachinery v0.27.3
@@ -60,6 +61,7 @@ require (
6061
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
6162
github.com/onsi/ginkgo/v2 v2.9.5 // indirect
6263
github.com/onsi/gomega v1.27.7 // indirect
64+
github.com/pmezard/go-difflib v1.0.0 // indirect
6365
github.com/prometheus/client_golang v1.15.1 // indirect
6466
github.com/prometheus/client_model v0.4.0 // indirect
6567
github.com/prometheus/common v0.42.0 // indirect

go.sum

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,7 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
283283
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
284284
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
285285
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
286+
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
286287
github.com/tmc/grpc-websocket-proxy v0.0.0-20220101234140-673ab2c3ae75 h1:6fotK7otjonDflCTK0BCfls4SPy3NcCVb5dqqmbRknE=
287288
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 h1:eY9dn8+vbi4tKz5Qo6v2eYzo7kUS51QINcR5jNpbZS8=
288289
github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=

pkg/cloudprovider/cloud.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -41,13 +41,13 @@ type proxmoxConfig struct {
4141
func init() {
4242
klog.Info("registering cloud provider")
4343

44-
cloudprovider.RegisterCloudProvider(RegisteredProviderName, func(config io.Reader) (cloudprovider.Interface, error) {
45-
providerConfig, err := readCloudProviderConfig(config)
46-
if err != nil {
47-
return nil, err
48-
}
49-
return newCloud(providerConfig)
50-
})
44+
// cloudprovider.RegisterCloudProvider(RegisteredProviderName, func(config io.Reader) (cloudprovider.Interface, error) {
45+
// providerConfig, err := readCloudProviderConfig(config)
46+
// if err != nil {
47+
// return nil, err
48+
// }
49+
// return newCloud(providerConfig)
50+
// })
5151
}
5252

5353
func newCloud(config *cloudProviderConfig) (cloudprovider.Interface, error) {

pkg/cloudprovider/instances.go

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"regexp"
1010
"strings"
1111

12+
"github.com/sp-yduck/proxmox-go/api"
1213
"github.com/sp-yduck/proxmox-go/rest"
1314
v1 "k8s.io/api/core/v1"
1415
cloudprovider "k8s.io/cloud-provider"
@@ -41,31 +42,43 @@ func newInstances(config proxmoxConfig) (cloudprovider.InstancesV2, error) {
4142
func (i *instance) InstanceExists(ctc context.Context, node *v1.Node) (bool, error) {
4243
klog.Info("checking if instance exists (node=%s)", node.Name)
4344

44-
nodes, err := i.compute.GetNodes()
45+
_, err := i.getVMFromUUID(node.Status.NodeInfo.SystemUUID)
4546
if err != nil {
47+
if rest.IsNotFound(err) {
48+
return false, nil
49+
}
4650
return true, err
4751
}
52+
53+
return true, nil
54+
}
55+
56+
func (i *instance) getVMFromUUID(uuid string) (*api.VirtualMachine, error) {
57+
nodes, err := i.compute.GetNodes()
58+
if err != nil {
59+
return nil, err
60+
}
4861
for _, n := range nodes {
4962
vms, err := i.compute.GetVirtualMachines(n.Node)
5063
if err != nil {
51-
return true, err
64+
return nil, err
5265
}
5366
for _, vm := range vms {
5467
config, err := i.compute.GetVirtualMachineConfig(n.Node, vm.VMID)
5568
if err != nil {
56-
return true, err
69+
return nil, err
5770
}
5871
smbios := config.SMBios1
59-
uuid, err := convertSMBiosToUUID(smbios)
72+
vmuuid, err := convertSMBiosToUUID(smbios)
6073
if err != nil {
61-
return true, err
74+
return nil, err
6275
}
63-
if uuid == node.Status.NodeInfo.SystemUUID {
64-
return true, nil
76+
if vmuuid == uuid {
77+
return vm, nil
6578
}
6679
}
6780
}
68-
return false, nil
81+
return nil, rest.NotFoundErr
6982
}
7083

7184
func convertSMBiosToUUID(smbios string) (string, error) {
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package proxmox
2+
3+
import (
4+
"github.com/sp-yduck/proxmox-go/rest"
5+
)
6+
7+
func (s *TestSuite) TestGetVMFromUUID() {
8+
uuid := "cefbe890-bc88-4faa-82d1-a33915d71d1d"
9+
10+
vm, err := s.instance.getVMFromUUID(uuid)
11+
if err != nil {
12+
if rest.IsNotFound(err) {
13+
s.T().Logf("not found vm having uuid=%s", uuid)
14+
return
15+
}
16+
s.T().Fatalf("failed to get vm from uuid: %v", err)
17+
18+
}
19+
s.T().Logf("get vm having uuid=%s: %v", uuid, *vm)
20+
}

pkg/cloudprovider/suite_test.go

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package proxmox
2+
3+
import (
4+
"crypto/tls"
5+
"net/http"
6+
"os"
7+
"testing"
8+
9+
"github.com/stretchr/testify/suite"
10+
11+
"github.com/sp-yduck/proxmox-go/rest"
12+
)
13+
14+
type TestSuite struct {
15+
suite.Suite
16+
instance instance
17+
}
18+
19+
func (s *TestSuite) SetupSuite() {
20+
url := os.Getenv("PROXMOX_URL")
21+
user := os.Getenv("PROXMOX_USERNAME")
22+
password := os.Getenv("PROXMOX_PASSWORD")
23+
if url == "" || user == "" || password == "" {
24+
s.T().Fatalf("following env var must not be empty: PROXMOX_URL=%s, POXMOX_USERNAME=%s, PROXOMOX_PASSWORD=%s", url, user, password)
25+
}
26+
27+
base := http.Client{
28+
Transport: &http.Transport{
29+
TLSClientConfig: &tls.Config{
30+
InsecureSkipVerify: true,
31+
},
32+
},
33+
}
34+
35+
restclient, err := rest.NewRESTClient(url, rest.WithUserPassword(user, password), rest.WithClient(&base))
36+
if err != nil {
37+
s.T().Logf("url=%s", url)
38+
s.T().Logf("user=%s", user)
39+
s.T().Logf("password=%s", password)
40+
s.T().Fatalf("failed to create rest client: %v", err)
41+
}
42+
43+
s.instance.compute = restclient
44+
}
45+
46+
func TestSuiteIntegration(t *testing.T) {
47+
suite.Run(t, new(TestSuite))
48+
}

0 commit comments

Comments
 (0)