fixed tests and added explcit error handling
Signed-off-by: Christian Goll <cgoll@suse.com>
This commit is contained in:
committed by
Jonathon Anderson
parent
e90616cafb
commit
242276bba9
@@ -19,6 +19,10 @@ import (
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
var (
|
||||
ErrDoesNotExist = errors.New("overlay does not exist")
|
||||
)
|
||||
|
||||
/*
|
||||
Build all overlays (runtime and generic) for a node
|
||||
*/
|
||||
@@ -187,11 +191,7 @@ func BuildOverlayIndir(nodeInfo node.NodeInfo, overlayNames []string, outputDir
|
||||
wwlog.Debug("Starting to build overlay %s\nChanging directory to OverlayDir: %s", overlayName, overlaySourceDir)
|
||||
err := os.Chdir(overlaySourceDir)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "could not change directory to overlay dir")
|
||||
}
|
||||
wwlog.Debug("Checking to see if overlay directory exists: %s", overlaySourceDir)
|
||||
if !util.IsDir(overlaySourceDir) {
|
||||
return errors.New("overlay does not exist: " + overlayName)
|
||||
return errors.Wrapf(ErrDoesNotExist, " name: %s", overlayName)
|
||||
}
|
||||
|
||||
wwlog.Verbose("Walking the overlay structure: %s", overlaySourceDir)
|
||||
|
||||
@@ -2,6 +2,7 @@ package warewulfd
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"errors"
|
||||
"net/http"
|
||||
"path"
|
||||
"strconv"
|
||||
@@ -11,6 +12,7 @@ import (
|
||||
warewulfconf "github.com/hpcng/warewulf/internal/pkg/config"
|
||||
"github.com/hpcng/warewulf/internal/pkg/container"
|
||||
"github.com/hpcng/warewulf/internal/pkg/kernel"
|
||||
"github.com/hpcng/warewulf/internal/pkg/overlay"
|
||||
"github.com/hpcng/warewulf/internal/pkg/util"
|
||||
"github.com/hpcng/warewulf/internal/pkg/wwlog"
|
||||
)
|
||||
@@ -135,13 +137,19 @@ func ProvisionSend(w http.ResponseWriter, req *http.Request) {
|
||||
} else {
|
||||
context = rinfo.stage
|
||||
}
|
||||
|
||||
stage_file, err = getOverlayFile(
|
||||
node.Id.Get(),
|
||||
node,
|
||||
context,
|
||||
request_overlays,
|
||||
conf.Warewulf.AutobuildOverlays)
|
||||
|
||||
if err != nil {
|
||||
if errors.Is(err, overlay.ErrDoesNotExist) {
|
||||
w.WriteHeader(http.StatusNotFound)
|
||||
wwlog.ErrorExc(err, "")
|
||||
return
|
||||
}
|
||||
w.WriteHeader(http.StatusInternalServerError)
|
||||
wwlog.ErrorExc(err, "")
|
||||
return
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package warewulfd
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
"os"
|
||||
|
||||
@@ -44,16 +43,15 @@ func sendFile(
|
||||
}
|
||||
|
||||
func getOverlayFile(
|
||||
nodeId string,
|
||||
n node.NodeInfo,
|
||||
context string,
|
||||
stage_overlays []string,
|
||||
autobuild bool) (stage_file string, err error) {
|
||||
|
||||
stage_file = overlay.OverlayImage(nodeId, context, stage_overlays)
|
||||
stage_file = overlay.OverlayImage(n.Id.Get(), context, stage_overlays)
|
||||
err = nil
|
||||
|
||||
build := !util.IsFile(stage_file)
|
||||
|
||||
wwlog.Verbose("stage file: %s", stage_file)
|
||||
if !build && autobuild {
|
||||
build = util.PathIsNewer(stage_file, nodepkg.ConfigFile)
|
||||
|
||||
@@ -63,22 +61,10 @@ func getOverlayFile(
|
||||
}
|
||||
|
||||
if build {
|
||||
nodeDB, errNested := node.New()
|
||||
if err != nil {
|
||||
return stage_file, errNested
|
||||
}
|
||||
myNode, errNested := nodeDB.FindAllNodes()
|
||||
if err != nil {
|
||||
return stage_file, errNested
|
||||
}
|
||||
myNode = node.FilterByName(myNode, []string{nodeId})
|
||||
if len(myNode) != 1 {
|
||||
return stage_file, fmt.Errorf("couldn't find node %s", nodeId)
|
||||
}
|
||||
err = overlay.BuildOverlay(myNode[0], context, stage_overlays)
|
||||
err = overlay.BuildOverlay(n, context, stage_overlays)
|
||||
if err != nil {
|
||||
wwlog.Error("Failed to build overlay: %s, %s, %s\n%s",
|
||||
nodeId, stage_overlays, stage_file, err)
|
||||
n.Id.Get(), stage_overlays, stage_file, err)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -2,6 +2,8 @@ package warewulfd
|
||||
|
||||
import (
|
||||
warewulfconf "github.com/hpcng/warewulf/internal/pkg/config"
|
||||
"github.com/hpcng/warewulf/internal/pkg/node"
|
||||
"github.com/hpcng/warewulf/internal/pkg/wwlog"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"testing"
|
||||
)
|
||||
@@ -12,24 +14,27 @@ var getOverlayFileTests = []struct {
|
||||
context string
|
||||
overlays []string
|
||||
result string
|
||||
succeed bool
|
||||
succeed bool // getOverlayFile will always fail if no overlay dir is defined!
|
||||
}{
|
||||
{"empty", "", "", nil, "", true},
|
||||
{"empty node", "node1", "", nil, "", true},
|
||||
{"specific overlays without node", "", "", []string{"o1", "o2"}, "p/overlays/o1-o2.img", true},
|
||||
{"system overlay", "node1", "system", nil, "p/overlays/node1/__SYSTEM__.img", true},
|
||||
{"runtime overlay", "node1", "runtime", nil, "p/overlays/node1/__RUNTIME__.img", true},
|
||||
{"specific overlay", "node1", "", []string{"o1"}, "p/overlays/node1/o1.img", true},
|
||||
{"multiple specific overlays", "node1", "", []string{"o1", "o2"}, "p/overlays/node1/o1-o2.img", true},
|
||||
{"multiple specific overlays with context", "node1", "system", []string{"o1", "o2"}, "p/overlays/node1/__SYSTEM__.img", true},
|
||||
{"empty", "", "", nil, "", false},
|
||||
{"empty node", "node1", "", nil, "", false},
|
||||
{"specific overlays without node", "", "", []string{"o1", "o2"}, "p/overlays/node1/o1-o2.img", false},
|
||||
{"system overlay", "node1", "system", nil, "p/overlays/node1/__SYSTEM__.img", false},
|
||||
{"runtime overlay", "node1", "runtime", nil, "p/overlays/node1/__RUNTIME__.img", false},
|
||||
{"specific overlay", "node1", "", []string{"o1"}, "p/overlays/node1/o1.img", false},
|
||||
{"multiple specific overlays", "node1", "", []string{"o1", "o2"}, "p/overlays/node1/o1-o2.img", false},
|
||||
{"multiple specific overlays with context", "node1", "system", []string{"o1", "o2"}, "p/overlays/node1/__SYSTEM__.img", false},
|
||||
}
|
||||
|
||||
func Test_getOverlayFile(t *testing.T) {
|
||||
wwlog.SetLogLevel(wwlog.VERBOSE)
|
||||
conf := warewulfconf.Get()
|
||||
conf.Paths.WWProvisiondir = "p"
|
||||
var n node.NodeInfo
|
||||
for _, tt := range getOverlayFileTests {
|
||||
n.Id.Set(tt.node)
|
||||
t.Run(tt.description, func(t *testing.T) {
|
||||
result, err := getOverlayFile(tt.node, tt.context, tt.overlays, false)
|
||||
result, err := getOverlayFile(n, tt.context, tt.overlays, false)
|
||||
if !tt.succeed {
|
||||
assert.Error(t, err)
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user