Redfish snapshot/export overhaul and portable release build
This commit is contained in:
@@ -154,6 +154,89 @@ func TestCollectStatusNotFoundSmoke(t *testing.T) {
|
||||
assertJSONError(t, resp, "Collect job not found")
|
||||
}
|
||||
|
||||
func TestUploadRedfishSnapshotJSON(t *testing.T) {
|
||||
_, ts := newFlowTestServer()
|
||||
defer ts.Close()
|
||||
|
||||
snapshot := `{
|
||||
"filename": "redfish://bmc01.local",
|
||||
"source_type": "api",
|
||||
"protocol": "redfish",
|
||||
"target_host": "bmc01.local",
|
||||
"hardware": {
|
||||
"storage": [
|
||||
{
|
||||
"slot": "Drive1",
|
||||
"type": "NVMe",
|
||||
"model": "KIOXIA CD8",
|
||||
"size_gb": 3840,
|
||||
"serial_number": "SN-NVME-1",
|
||||
"present": true
|
||||
}
|
||||
]
|
||||
},
|
||||
"raw_payloads": {
|
||||
"redfish_tree": {
|
||||
"/redfish/v1": {"Name": "ServiceRoot"}
|
||||
}
|
||||
}
|
||||
}`
|
||||
|
||||
reqBody := &bytes.Buffer{}
|
||||
writer := multipart.NewWriter(reqBody)
|
||||
part, err := writer.CreateFormFile("archive", "snapshot.json")
|
||||
if err != nil {
|
||||
t.Fatalf("create form file: %v", err)
|
||||
}
|
||||
if _, err := part.Write([]byte(snapshot)); err != nil {
|
||||
t.Fatalf("write snapshot body: %v", err)
|
||||
}
|
||||
if err := writer.Close(); err != nil {
|
||||
t.Fatalf("close multipart writer: %v", err)
|
||||
}
|
||||
|
||||
uploadReq, err := http.NewRequest(http.MethodPost, ts.URL+"/api/upload", reqBody)
|
||||
if err != nil {
|
||||
t.Fatalf("build upload request: %v", err)
|
||||
}
|
||||
uploadReq.Header.Set("Content-Type", writer.FormDataContentType())
|
||||
|
||||
uploadResp, err := http.DefaultClient.Do(uploadReq)
|
||||
if err != nil {
|
||||
t.Fatalf("upload request failed: %v", err)
|
||||
}
|
||||
defer uploadResp.Body.Close()
|
||||
|
||||
if uploadResp.StatusCode != http.StatusOK {
|
||||
t.Fatalf("expected 200 from /api/upload, got %d", uploadResp.StatusCode)
|
||||
}
|
||||
|
||||
var uploadPayload map[string]interface{}
|
||||
if err := json.NewDecoder(uploadResp.Body).Decode(&uploadPayload); err != nil {
|
||||
t.Fatalf("decode upload response: %v", err)
|
||||
}
|
||||
if uploadPayload["vendor"] != "redfish" {
|
||||
t.Fatalf("expected vendor redfish, got %v", uploadPayload["vendor"])
|
||||
}
|
||||
|
||||
statusResp, err := http.Get(ts.URL + "/api/status")
|
||||
if err != nil {
|
||||
t.Fatalf("status request failed: %v", err)
|
||||
}
|
||||
defer statusResp.Body.Close()
|
||||
|
||||
var statusPayload map[string]interface{}
|
||||
if err := json.NewDecoder(statusResp.Body).Decode(&statusPayload); err != nil {
|
||||
t.Fatalf("decode status response: %v", err)
|
||||
}
|
||||
if statusPayload["protocol"] != "redfish" {
|
||||
t.Fatalf("expected protocol redfish, got %v", statusPayload["protocol"])
|
||||
}
|
||||
if statusPayload["filename"] != "redfish://bmc01.local" {
|
||||
t.Fatalf("expected snapshot filename, got %v", statusPayload["filename"])
|
||||
}
|
||||
}
|
||||
|
||||
func buildTarArchive(t *testing.T, name, content string) []byte {
|
||||
t.Helper()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user