92 lines
2.3 KiB
Go
92 lines
2.3 KiB
Go
|
package proxmox
|
||
|
|
||
|
import (
|
||
|
"encoding/json"
|
||
|
"io/ioutil"
|
||
|
"net/http"
|
||
|
"net/http/httptest"
|
||
|
"net/url"
|
||
|
"testing"
|
||
|
|
||
|
"github.com/Telmate/proxmox-api-go/proxmox"
|
||
|
"github.com/stretchr/testify/require"
|
||
|
)
|
||
|
|
||
|
func TestTokenAuth(t *testing.T) {
|
||
|
mockAPI := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) {
|
||
|
if req.Header.Get("Authorization") != "PVEAPIToken=dummy@vmhost!test-token=ac5293bf-15e2-477f-b04c-a6dfa7a46b80" {
|
||
|
rw.WriteHeader(http.StatusUnauthorized)
|
||
|
return
|
||
|
}
|
||
|
}))
|
||
|
defer mockAPI.Close()
|
||
|
|
||
|
pmURL, _ := url.Parse(mockAPI.URL)
|
||
|
config := Config{
|
||
|
proxmoxURL: pmURL,
|
||
|
SkipCertValidation: false,
|
||
|
Username: "dummy@vmhost!test-token",
|
||
|
Password: "not-used",
|
||
|
Token: "ac5293bf-15e2-477f-b04c-a6dfa7a46b80",
|
||
|
}
|
||
|
|
||
|
client, err := newProxmoxClient(config)
|
||
|
require.NoError(t, err)
|
||
|
|
||
|
ref := proxmox.NewVmRef(110)
|
||
|
ref.SetNode("node1")
|
||
|
ref.SetVmType("qemu")
|
||
|
err = client.Sendkey(ref, "ping")
|
||
|
require.NoError(t, err)
|
||
|
}
|
||
|
|
||
|
func TestLogin(t *testing.T) {
|
||
|
mockAPI := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) {
|
||
|
// mock ticketing api
|
||
|
if req.Method == http.MethodPost && req.URL.Path == "/access/ticket" {
|
||
|
body, _ := ioutil.ReadAll(req.Body)
|
||
|
values, _ := url.ParseQuery(string(body))
|
||
|
user := values.Get("username")
|
||
|
pass := values.Get("password")
|
||
|
if user != "dummy@vmhost" || pass != "correct-horse-battery-staple" {
|
||
|
rw.WriteHeader(http.StatusUnauthorized)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
_ = json.NewEncoder(rw).Encode(map[string]interface{}{
|
||
|
"data": map[string]string{
|
||
|
"username": user,
|
||
|
"ticket": "dummy-ticket",
|
||
|
"CSRFPreventionToken": "random-token",
|
||
|
},
|
||
|
})
|
||
|
return
|
||
|
}
|
||
|
|
||
|
// validate ticket
|
||
|
if val, err := req.Cookie("PVEAuthCookie"); err != nil || val.Value != "dummy-ticket" {
|
||
|
rw.WriteHeader(http.StatusUnauthorized)
|
||
|
return
|
||
|
}
|
||
|
}))
|
||
|
defer mockAPI.Close()
|
||
|
|
||
|
pmURL, _ := url.Parse(mockAPI.URL)
|
||
|
config := Config{
|
||
|
proxmoxURL: pmURL,
|
||
|
SkipCertValidation: false,
|
||
|
Username: "dummy@vmhost",
|
||
|
Password: "correct-horse-battery-staple",
|
||
|
Token: "",
|
||
|
}
|
||
|
|
||
|
client, err := newProxmoxClient(config)
|
||
|
require.NoError(t, err)
|
||
|
|
||
|
ref := proxmox.NewVmRef(110)
|
||
|
ref.SetNode("node1")
|
||
|
ref.SetVmType("qemu")
|
||
|
err = client.Sendkey(ref, "ping")
|
||
|
require.NoError(t, err)
|
||
|
}
|