mirror of
https://github.com/davidallendj/magellan.git
synced 2025-12-20 03:27:03 -07:00
Added initial tests for API and compatibiilty coverage
This commit is contained in:
parent
865ed85a05
commit
085a2cfd0b
2 changed files with 161 additions and 0 deletions
53
tests/api_test.go
Normal file
53
tests/api_test.go
Normal file
|
|
@ -0,0 +1,53 @@
|
||||||
|
// This file contains generic tests used to confirm expected behaviors of the
|
||||||
|
// builtin APIs. This is to guarantee that our functions work as expected
|
||||||
|
// regardless of the hardware being used such as testing the `scan`, and `collect`
|
||||||
|
// functionality and `gofish` library and asserting expected outputs.
|
||||||
|
//
|
||||||
|
// These tests are meant to be ran with the emulator included in the project.
|
||||||
|
// Make sure the emulator is running before running the tests.
|
||||||
|
package tests
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
magellan "github.com/OpenCHAMI/magellan/internal"
|
||||||
|
"github.com/OpenCHAMI/magellan/internal/log"
|
||||||
|
"github.com/sirupsen/logrus"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestScanAndCollect(t *testing.T) {
|
||||||
|
var (
|
||||||
|
hosts = []string{"http://127.0.0.1"}
|
||||||
|
ports = []int{5000}
|
||||||
|
l = log.NewLogger(logrus.New(), logrus.DebugLevel)
|
||||||
|
)
|
||||||
|
// do a scan on the emulator cluster with probing disabled and check results
|
||||||
|
results := magellan.ScanForAssets(hosts, ports, 1, 30, true, false)
|
||||||
|
if len(results) <= 0 {
|
||||||
|
t.Fatal("expected to find at least one BMC node, but found none")
|
||||||
|
}
|
||||||
|
// do a scan on the emulator cluster with probing enabled
|
||||||
|
results = magellan.ScanForAssets(hosts, ports, 1, 30, false, false)
|
||||||
|
if len(results) <= 0 {
|
||||||
|
t.Fatal("expected to find at least one BMC node, but found none")
|
||||||
|
}
|
||||||
|
|
||||||
|
// do a collect on the emulator cluster to collect Redfish info
|
||||||
|
magellan.CollectAll(results)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestCrawlCommand(t *testing.T) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestListCommand(t *testing.T) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestUpdateCommand(t *testing.T) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestGofishFunctions(t *testing.T) {
|
||||||
|
|
||||||
|
}
|
||||||
108
tests/compatibility_test.go
Normal file
108
tests/compatibility_test.go
Normal file
|
|
@ -0,0 +1,108 @@
|
||||||
|
// This file contains a series of tests that are meant to ensure correct
|
||||||
|
// Redfish behaviors and responses across different Refish implementations
|
||||||
|
// and are expected to be ran with various hardware and firmware to test
|
||||||
|
// compatibility with the tool. These tests are meant to be used as a way
|
||||||
|
// to pinpoint exactly where an issue is occurring in a more predictable
|
||||||
|
// and reproducible manner.
|
||||||
|
package tests
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"flag"
|
||||||
|
"fmt"
|
||||||
|
"net/http"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/OpenCHAMI/magellan/internal/util"
|
||||||
|
"github.com/OpenCHAMI/magellan/pkg/crawler"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
host = flag.String("host", "localhost", "set the BMC host")
|
||||||
|
username = flag.String("username", "", "set the BMC username used for the tests")
|
||||||
|
password = flag.String("password", "", "set the BMC password used for the tests")
|
||||||
|
)
|
||||||
|
|
||||||
|
// Simple test to fetch the base Redfish URL and assert a 200 OK response.
|
||||||
|
func TestRedfishV1Availability(t *testing.T) {
|
||||||
|
var (
|
||||||
|
url = fmt.Sprintf("%s/redfish/v1", host)
|
||||||
|
body = []byte{}
|
||||||
|
headers = map[string]string{}
|
||||||
|
)
|
||||||
|
res, b, err := util.MakeRequest(nil, url, http.MethodGet, body, headers)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("failed to make request to BMC: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// test for a 200 response code here
|
||||||
|
if res.StatusCode != http.StatusOK {
|
||||||
|
t.Fatalf("expected response code to return status code 200")
|
||||||
|
}
|
||||||
|
|
||||||
|
// make sure the response body is not empty
|
||||||
|
if len(b) <= 0 {
|
||||||
|
t.Fatalf("expected response body to not be empty")
|
||||||
|
}
|
||||||
|
|
||||||
|
// make sure the response body is in a JSON format
|
||||||
|
if json.Valid(b) {
|
||||||
|
t.Fatalf("expected response body to be valid JSON")
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Simple test to ensure an expected Redfish version minimum requirement.
|
||||||
|
func TestRedfishVersion(t *testing.T) {
|
||||||
|
var (
|
||||||
|
url = fmt.Sprintf("%s/redfish/v1", host)
|
||||||
|
body = []byte{}
|
||||||
|
headers = map[string]string{}
|
||||||
|
)
|
||||||
|
|
||||||
|
util.MakeRequest(nil, url, http.MethodGet, body, headers)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Crawls a BMC node and checks that we're able to query certain properties
|
||||||
|
// that we need for Magellan to run correctly. This test differs from the
|
||||||
|
// `TestCrawlCommand` testing function as it is not checking specifically
|
||||||
|
// for functionality.
|
||||||
|
func TestExpectedProperties(t *testing.T) {
|
||||||
|
// make sure what have a valid host
|
||||||
|
if host == nil {
|
||||||
|
t.Fatal("invalid host (host is nil)")
|
||||||
|
}
|
||||||
|
|
||||||
|
systems, err := crawler.CrawlBMC(
|
||||||
|
crawler.CrawlerConfig{
|
||||||
|
URI: *host,
|
||||||
|
Username: *username,
|
||||||
|
Password: *password,
|
||||||
|
Insecure: true,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("failed to crawl BMC: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// check that we got results in systems
|
||||||
|
if len(systems) <= 0 {
|
||||||
|
t.Fatal("no systems found")
|
||||||
|
}
|
||||||
|
|
||||||
|
// check that we're getting EthernetInterfaces and NetworkInterfaces
|
||||||
|
for _, system := range systems {
|
||||||
|
// check that we have at least one CPU for each system
|
||||||
|
if system.ProcessorCount <= 0 {
|
||||||
|
t.Errorf("no processors found")
|
||||||
|
}
|
||||||
|
// we expect each system to have at least one of each interface
|
||||||
|
if len(system.EthernetInterfaces) <= 0 {
|
||||||
|
t.Errorf("no ethernet interfaces found for system '%s'", system.Name)
|
||||||
|
}
|
||||||
|
if len(system.NetworkInterfaces) <= 0 {
|
||||||
|
t.Errorf("no network interfaces found for system '%s'", system.Name)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue