in pkg/client/mock/stub_serverV1.go [99:161]
func (s *StubServer) Actions(server proto.ElasticAgent_ActionsServer) error {
var m sync.Mutex
done := make(chan bool)
go func() {
for {
select {
case <-done:
return
case act := <-s.ActionsChan:
id := uuid.Must(uuid.NewV4())
m.Lock()
s.SentActions[id.String()] = act
m.Unlock()
err := server.Send(&proto.ActionRequest{
Id: id.String(),
Name: act.Name,
Params: act.Params,
})
if err != nil {
panic(err)
}
}
}
}()
defer close(done)
for {
response, err := server.Recv()
if err != nil {
return err
}
err = s.ActionImpl(response)
if err != nil {
// close connection to client
return nil
}
m.Lock()
action, ok := s.SentActions[response.Id]
if !ok {
// nothing to do, unknown action
m.Unlock()
continue
}
delete(s.SentActions, response.Id)
m.Unlock()
var result map[string]interface{}
err = json.Unmarshal(response.Result, &result)
if err != nil {
return err
}
if response.Status == proto.ActionResponse_FAILED {
error, ok := result["error"]
if ok {
err = fmt.Errorf("%s", error)
} else {
err = fmt.Errorf("unknown error")
}
action.Callback(nil, err)
} else {
action.Callback(result, nil)
}
}
}