Skip to content

Commit

Permalink
toolbox: move process management to its own package
Browse files Browse the repository at this point in the history
This allows vcsim to use the process manager without depending on the backdoor RPC package.
  • Loading branch information
dougm committed Apr 20, 2021
1 parent bb0307e commit d7bfaf4
Show file tree
Hide file tree
Showing 5 changed files with 90 additions and 88 deletions.
17 changes: 9 additions & 8 deletions toolbox/command.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ import (
"time"

"github.com/vmware/govmomi/toolbox/hgfs"
"github.com/vmware/govmomi/toolbox/process"
"github.com/vmware/govmomi/toolbox/vix"
)

Expand All @@ -39,11 +40,11 @@ type CommandHandler func(vix.CommandRequestHeader, []byte) ([]byte, error)
type CommandServer struct {
Out *ChannelOut

ProcessManager *ProcessManager
ProcessManager *process.Manager

Authenticate func(vix.CommandRequestHeader, []byte) error

ProcessStartCommand func(*ProcessManager, *vix.StartProgramRequest) (int64, error)
ProcessStartCommand func(*process.Manager, *vix.StartProgramRequest) (int64, error)

handlers map[uint32]CommandHandler

Expand All @@ -53,7 +54,7 @@ type CommandServer struct {
func registerCommandServer(service *Service) *CommandServer {
server := &CommandServer{
Out: service.out,
ProcessManager: NewProcessManager(),
ProcessManager: process.NewManager(),
}

server.handlers = map[uint32]CommandHandler{
Expand Down Expand Up @@ -231,12 +232,12 @@ func (c *CommandServer) StartCommand(header vix.CommandRequestHeader, data []byt
return append([]byte(fmt.Sprintf("%d", pid)), 0), nil
}

func DefaultStartCommand(m *ProcessManager, r *vix.StartProgramRequest) (int64, error) {
p := NewProcess()
func DefaultStartCommand(m *process.Manager, r *vix.StartProgramRequest) (int64, error) {
p := process.New()

switch r.ProgramPath {
case "http.RoundTrip":
p = NewProcessRoundTrip()
p = process.NewRoundTrip()
default:
// Standard vmware-tools requires an absolute path,
// we'll enable IO redirection by default without an absolute path.
Expand Down Expand Up @@ -296,15 +297,15 @@ func (c *CommandServer) ReadEnvironmentVariables(header vix.CommandRequestHeader

if len(r.Names) == 0 {
for _, e := range os.Environ() {
_, _ = buf.WriteString(fmt.Sprintf("<ev>%s</ev>", xmlEscape.Replace(e)))
_, _ = buf.WriteString(fmt.Sprintf("<ev>%s</ev>", process.EscapeXML.Replace(e)))
}
} else {
for _, key := range r.Names {
val := os.Getenv(key)
if val == "" {
continue
}
_, _ = buf.WriteString(fmt.Sprintf("<ev>%s=%s</ev>", xmlEscape.Replace(key), xmlEscape.Replace(val)))
_, _ = buf.WriteString(fmt.Sprintf("<ev>%s=%s</ev>", process.EscapeXML.Replace(key), process.EscapeXML.Replace(val)))
}
}

Expand Down
12 changes: 6 additions & 6 deletions toolbox/command_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ import (
"time"

"github.com/vmware/govmomi/toolbox/hgfs"
"github.com/vmware/govmomi/toolbox/process"
"github.com/vmware/govmomi/toolbox/vix"
)

Expand Down Expand Up @@ -188,7 +189,7 @@ func TestVixRelayedCommandHandler(t *testing.T) {
t.Fatalf("%q", reply)
}

cmd.ProcessStartCommand = func(pm *ProcessManager, r *vix.StartProgramRequest) (int64, error) {
cmd.ProcessStartCommand = func(pm *process.Manager, r *vix.StartProgramRequest) (int64, error) {
return -1, nil
}

Expand Down Expand Up @@ -443,13 +444,12 @@ func TestVixProcessHgfsPacket(t *testing.T) {

func TestVixListProcessesEx(t *testing.T) {
c := NewCommandClient()
pm := c.Service.Command.ProcessManager

c.Service.Command.ProcessStartCommand = func(pm *ProcessManager, r *vix.StartProgramRequest) (int64, error) {
var p *Process
c.Service.Command.ProcessStartCommand = func(pm *process.Manager, r *vix.StartProgramRequest) (int64, error) {
var p *process.Process
switch r.ProgramPath {
case "foo":
p = NewProcessFunc(func(ctx context.Context, arg string) error {
p = process.NewFunc(func(ctx context.Context, arg string) error {
return nil
})
default:
Expand Down Expand Up @@ -483,7 +483,7 @@ func TestVixListProcessesEx(t *testing.T) {
t.Fatalf("rc: %d", rc)
}

pm.wg.Wait()
<-time.Tick(time.Millisecond * 100)

ps := new(vix.ListProcessesRequest)

Expand Down
Loading

0 comments on commit d7bfaf4

Please sign in to comment.