1
0
Fork 0
mirror of https://github.com/postmannen/ctrl.git synced 2025-01-18 21:59:30 +00:00

added testCh to errrorKernel

This commit is contained in:
postmannen 2022-05-22 06:36:02 +02:00
parent fbbeb1a4ab
commit f92e8a8e0a
5 changed files with 55 additions and 1 deletions

View file

@ -24,6 +24,8 @@ type errorKernel struct {
// errorCh is used to report errors from a process
errorCh chan errorEvent
// testCh is used within REQTest for receving data for tests.
testCh chan []byte
ctx context.Context
cancel context.CancelFunc
@ -36,6 +38,7 @@ func newErrorKernel(ctx context.Context, m *metrics) *errorKernel {
return &errorKernel{
errorCh: make(chan errorEvent, 2),
testCh: make(chan []byte),
ctx: ctxC,
cancel: cancel,
metrics: m,
@ -229,7 +232,7 @@ type errorAction int
const (
// errActionContinue is ment to be used when the a process
// can just continue without takig any special care.
// can just continue without taking any special care.
errActionContinue errorAction = iota
// TODO:
// errActionKill should log the error,

View file

@ -114,6 +114,13 @@ func (p *processes) Start(proc process) {
go proc.spawnWorker()
}
{
log.Printf("Starting REQTest subscriber: %#v\n", proc.node)
sub := newSubject(REQTest, string(proc.node))
proc := newProcess(proc.ctx, p.server, sub, processKindSubscriber, nil)
go proc.spawnWorker()
}
if proc.configuration.StartSubREQToFileAppend {
proc.startup.subREQToFileAppend(proc)
}

View file

@ -118,6 +118,10 @@ const (
REQRelayInitial Method = "REQRelayInitial"
// REQNone is used when there should be no reply.
REQNone Method = "REQNone"
// REQTest is used only for testing to be able to grab the output
// of messages.
REQTest Method = "REQTest"
// REQPublicKey will get the public ed25519 key from a node.
REQPublicKey Method = "REQPublicKey"
// REQPublicKeysGet will get all the public keys from central.
@ -126,6 +130,7 @@ const (
REQPublicKeysToNode Method = "REQPublicKeysToNode"
// REQAuthPublicKeysAllow
REQPublicKeysAllow Method = "REQPublicKeysAllow"
// REQAclAddCommand
REQAclAddCommand = "REQAclAddCommand"
// REQAclDeleteCommand
@ -276,6 +281,9 @@ func (m Method) GetMethodsAvailable() MethodsAvailable {
REQAclImport: methodREQAclImport{
event: EventACK,
},
REQTest: methodREQTest{
event: EventACK,
},
},
}

View file

@ -432,3 +432,32 @@ func (m methodREQTuiToConsole) handler(proc process, message Message, node strin
}
// ---
type methodREQTest struct {
event Event
}
func (m methodREQTest) getKind() Event {
return m.event
}
// handler to be used as a reply method when testing requests.
// We can then within the test listen on the testCh for received
// data and validate it.
// If not test is listening the data will be dropped.
func (m methodREQTest) handler(proc process, message Message, node string) ([]byte, error) {
go func() {
// Try to send the received message data on the test channel. If we
// have a test started the data will be read from the testCh.
// If no test is reading from the testCh the data will be dropped.
select {
case proc.errorKernel.testCh <- message.Data:
default:
// drop.
}
}()
ackMsg := []byte("confirmed from: " + node + ": " + fmt.Sprint(message.ID))
return ackMsg, nil
}

7
requests_test.go Normal file
View file

@ -0,0 +1,7 @@
package steward
func requestTest() {
type test struct {
want []byte
}
}